1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: SetTheory.PGame.toPGame_birthday
File: Mathlib/SetTheory/Game/Birthday.lean

tactic: induction' o using Ordinal.induction with o IH
state_before: o : Ordinal.{u_1}
⊢ o.toPGame.birthday = o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ o.toPGame.birthday = o

tactic: rw [toPGame_def, PGame.birthday]
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ o.toPGame.birthday = o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ max (lsub fun i => (typein (fun x x_1 => x < x_1) i).toPGame.birthday) (lsub fun i => i.elim.birthday) = o

tactic: simp only [lsub_empty, max_zero_right]
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ max (lsub fun i => (typein (fun x x_1 => x < x_1) i).toPGame.birthday) (lsub fun i => i.elim.birthday) = o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ (lsub fun i => (typein (fun x x_1 => x < x_1) i).toPGame.birthday) = o

tactic: conv_rhs => rw [← lsub_typein o]
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ (lsub fun i => (typein (fun x x_1 => x < x_1) i).toPGame.birthday) = o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ (lsub fun i => (typein (fun x x_1 => x < x_1) i).toPGame.birthday) = lsub (typein fun x x_1 => x < x_1)

tactic: congr with x
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
⊢ (lsub fun i => (typein (fun x x_1 => x < x_1) i).toPGame.birthday) = lsub (typein fun x x_1 => x < x_1)
state_after: case h.e_f.h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
x : (Quotient.out o).α
⊢ (typein (fun x x_1 => x < x_1) x).toPGame.birthday = typein (fun x x_1 => x < x_1) x

tactic: exact IH _ (typein_lt_self x)
state_before: case h.e_f.h
o : Ordinal.{u_1}
IH : ∀ k < o, k.toPGame.birthday = k
x : (Quotient.out o).α
⊢ (typein (fun x x_1 => x < x_1) x).toPGame.birthday = typein (fun x x_1 => x < x_1) x
state_after: no goals
Theorem: MeasureTheory.setAverage_eq'
File: Mathlib/MeasureTheory/Integral/Average.lean

tactic: simp only [average_eq', restrict_apply_univ]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
m0 : MeasurableSpace α
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : CompleteSpace E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
μ ν : Measure α
s✝ t : Set α
f✝ g f : α → E
s : Set α
⊢ ⨍ (x : α) in s, f x ∂μ = ∫ (x : α), f x ∂(μ s)⁻¹ • μ.restrict s
state_after: no goals
Theorem: NormedAddGroupHom.comp_assoc
File: Mathlib/Analysis/Normed/Group/Hom.lean

tactic: ext
state_before: V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝⁴ : SeminormedAddCommGroup V
inst✝³ : SeminormedAddCommGroup V₁
inst✝² : SeminormedAddCommGroup V₂
inst✝¹ : SeminormedAddCommGroup V₃
f✝ g✝ : NormedAddGroupHom V₁ V₂
V₄ : Type u_5
inst✝ : SeminormedAddCommGroup V₄
h : NormedAddGroupHom V₃ V₄
g : NormedAddGroupHom V₂ V₃
f : NormedAddGroupHom V₁ V₂
⊢ (h.comp g).comp f = h.comp (g.comp f)
state_after: case H
V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝⁴ : SeminormedAddCommGroup V
inst✝³ : SeminormedAddCommGroup V₁
inst✝² : SeminormedAddCommGroup V₂
inst✝¹ : SeminormedAddCommGroup V₃
f✝ g✝ : NormedAddGroupHom V₁ V₂
V₄ : Type u_5
inst✝ : SeminormedAddCommGroup V₄
h : NormedAddGroupHom V₃ V₄
g : NormedAddGroupHom V₂ V₃
f : NormedAddGroupHom V₁ V₂
x✝ : V₁
⊢ ((h.comp g).comp f) x✝ = (h.comp (g.comp f)) x✝

tactic: rfl
state_before: case H
V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝⁴ : SeminormedAddCommGroup V
inst✝³ : SeminormedAddCommGroup V₁
inst✝² : SeminormedAddCommGroup V₂
inst✝¹ : SeminormedAddCommGroup V₃
f✝ g✝ : NormedAddGroupHom V₁ V₂
V₄ : Type u_5
inst✝ : SeminormedAddCommGroup V₄
h : NormedAddGroupHom V₃ V₄
g : NormedAddGroupHom V₂ V₃
f : NormedAddGroupHom V₁ V₂
x✝ : V₁
⊢ ((h.comp g).comp f) x✝ = (h.comp (g.comp f)) x✝
state_after: no goals
Theorem: uniqueDiffOn_Iic
File: Mathlib/Analysis/Calculus/TangentCone.lean

tactic: simp only [interior_Iic, nonempty_Iio]
state_before: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y : E
s t : Set E
a : ℝ
⊢ (interior (Iic a)).Nonempty
state_after: no goals
Theorem: Set.eq_singleton_or_nontrivial
File: Mathlib/Data/Set/Subsingleton.lean

tactic: rw [← subsingleton_iff_singleton ha]
state_before: α : Type u
a : α
s t : Set α
ha : a ∈ s
⊢ s = {a} ∨ s.Nontrivial
state_after: α : Type u
a : α
s t : Set α
ha : a ∈ s
⊢ s.Subsingleton ∨ s.Nontrivial

tactic: exact s.subsingleton_or_nontrivial
state_before: α : Type u
a : α
s t : Set α
ha : a ∈ s
⊢ s.Subsingleton ∨ s.Nontrivial
state_after: no goals
Theorem: pow_eq_zero_of_le
File: Mathlib/Algebra/GroupWithZero/Basic.lean

tactic: rw [pow_succ, pow_eq_zero_of_le hmn ha, zero_mul]
state_before: α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝ : MonoidWithZero M₀
a : M₀
m n n✝ m✝ : ℕ
hmn : n✝.le m✝
ha : a ^ n✝ = 0
⊢ a ^ m✝.succ = 0
state_after: no goals
Theorem: Complex.image_exp_Ioc_eq_sphere
File: Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean

tactic: ext
state_before: a x z : ℂ
⊢ (fun θ => cexp (↑θ * I)) '' Ioc (-π) π = sphere 0 1
state_after: case h
a x z x✝ : ℂ
⊢ x✝ ∈ (fun θ => cexp (↑θ * I)) '' Ioc (-π) π ↔ x✝ ∈ sphere 0 1

tactic: simpa using abs_eq_one_iff'.symm
state_before: case h
a x z x✝ : ℂ
⊢ x✝ ∈ (fun θ => cexp (↑θ * I)) '' Ioc (-π) π ↔ x✝ ∈ sphere 0 1
state_after: no goals
Theorem: Set.infinite_union
File: Mathlib/Data/Set/Finite.lean

tactic: simp only [Set.Infinite, finite_union, not_and_or]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s✝ t✝ s t : Set α
⊢ (s ∪ t).Infinite ↔ s.Infinite ∨ t.Infinite
state_after: no goals
Theorem: MeasureTheory.absolutelyContinuous_toFinite
File: Mathlib/MeasureTheory/Measure/WithDensityFinite.lean

tactic: conv_lhs => rw [← sum_sFiniteSeq μ]
state_before: α : Type u_1
mα : MeasurableSpace α
μ✝ μ : Measure α
inst✝ : SFinite μ
⊢ μ ≪ μ.toFinite
state_after: α : Type u_1
mα : MeasurableSpace α
μ✝ μ : Measure α
inst✝ : SFinite μ
⊢ Measure.sum (sFiniteSeq μ) ≪ μ.toFinite

tactic: exact Measure.absolutelyContinuous_sum_left (sFiniteSeq_absolutelyContinuous_toFinite μ)
state_before: α : Type u_1
mα : MeasurableSpace α
μ✝ μ : Measure α
inst✝ : SFinite μ
⊢ Measure.sum (sFiniteSeq μ) ≪ μ.toFinite
state_after: no goals
Theorem: Nat.le_add_one_iff
File: Mathlib/Data/Nat/Defs.lean

tactic: rw [Nat.le_iff_lt_or_eq, Nat.lt_add_one_iff]
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
⊢ m ≤ n + 1 ↔ m ≤ n ∨ m = n + 1
state_after: no goals
Theorem: Cubic.b_of_eq
File: Mathlib/Algebra/CubicDiscriminant.lean

tactic: rw [← coeff_eq_b, h, coeff_eq_b]
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
h : P.toPoly = Q.toPoly
⊢ P.b = Q.b
state_after: no goals
Theorem: FirstOrder.Language.Theory.Model.union
File: Mathlib/ModelTheory/Semantics.lean

tactic: simp only [model_iff, Set.mem_union] at *
state_before: L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
n : ℕ
T T' : L.Theory
h : M ⊨ T
h' : M ⊨ T'
⊢ M ⊨ T ∪ T'
state_after: L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
n : ℕ
T T' : L.Theory
h : ∀ φ ∈ T, M ⊨ φ
h' : ∀ φ ∈ T', M ⊨ φ
⊢ ∀ (φ : L.Sentence), φ ∈ T ∨ φ ∈ T' → M ⊨ φ

tactic: exact fun φ hφ => hφ.elim (h _) (h' _)
state_before: L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
n : ℕ
T T' : L.Theory
h : ∀ φ ∈ T, M ⊨ φ
h' : ∀ φ ∈ T', M ⊨ φ
⊢ ∀ (φ : L.Sentence), φ ∈ T ∨ φ ∈ T' → M ⊨ φ
state_after: no goals
Theorem: SimpleGraph.Walk.reverse_concat
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: simp [concat_eq_append]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w : V
p : G.Walk u v
h : G.Adj v w
⊢ (p.concat h).reverse = cons ⋯ p.reverse
state_after: no goals
Theorem: dist_le_tsum_of_dist_le_of_tendsto₀
File: Mathlib/Topology/Algebra/InfiniteSum/Real.lean

tactic: simpa only [zero_add] using dist_le_tsum_of_dist_le_of_tendsto d hf hd ha 0
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
f : ℕ → α
a : α
d : ℕ → ℝ
hf : ∀ (n : ℕ), dist (f n) (f n.succ) ≤ d n
hd : Summable d
ha : Tendsto f atTop (𝓝 a)
⊢ dist (f 0) a ≤ tsum d
state_after: no goals
Theorem: Real.Angle.sub_coe_pi_eq_add_coe_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [sub_eq_add_neg, neg_coe_pi]
state_before: θ : Angle
⊢ θ - ↑π = θ + ↑π
state_after: no goals
Theorem: EReal.div_zero
File: Mathlib/Data/Real/EReal.lean

tactic: change a * 0⁻¹ = 0
state_before: a : EReal
⊢ a / 0 = 0
state_after: a : EReal
⊢ a * 0⁻¹ = 0

tactic: rw [inv_zero, mul_zero a]
state_before: a : EReal
⊢ a * 0⁻¹ = 0
state_after: no goals
Theorem: MvPolynomial.comap_id_apply
File: Mathlib/Algebra/MvPolynomial/Comap.lean

tactic: funext i
state_before: σ : Type u_1
τ : Type u_2
υ : Type u_3
R : Type u_4
inst✝ : CommSemiring R
x : σ → R
⊢ comap (AlgHom.id R (MvPolynomial σ R)) x = x
state_after: case h
σ : Type u_1
τ : Type u_2
υ : Type u_3
R : Type u_4
inst✝ : CommSemiring R
x : σ → R
i : σ
⊢ comap (AlgHom.id R (MvPolynomial σ R)) x i = x i

tactic: simp only [comap, AlgHom.id_apply, id, aeval_X]
state_before: case h
σ : Type u_1
τ : Type u_2
υ : Type u_3
R : Type u_4
inst✝ : CommSemiring R
x : σ → R
i : σ
⊢ comap (AlgHom.id R (MvPolynomial σ R)) x i = x i
state_after: no goals
Theorem: Computation.LiftRelAux.swap
File: Mathlib/Data/Seq/Computation.lean

tactic: cases' a with a ca <;> cases' b with b cb <;> simp only [LiftRelAux]
state_before: α : Type u
β : Type v
γ : Type w
R✝ : α → β → Prop
C✝ : Computation α → Computation β → Prop
R : α → β → Prop
C : Computation α → Computation β → Prop
a : α ⊕ Computation α
b : β ⊕ Computation β
⊢ LiftRelAux (Function.swap R) (Function.swap C) b a = LiftRelAux R C a b
state_after: no goals
Theorem: ContinuousOn.preimage_interior_subset_interior_preimage
File: Mathlib/Topology/ContinuousOn.lean

tactic: rw [interior_inter, hs.interior_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁴ : TopologicalSpace α
ι : Type u_5
π : ι → Type u_6
inst✝³ : (i : ι) → TopologicalSpace (π i)
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α → β
s : Set α
t : Set β
hf : ContinuousOn f s
hs : IsOpen s
⊢ interior (s ∩ f ⁻¹' t) = s ∩ interior (f ⁻¹' t)
state_after: no goals
Theorem: Cubic.monic_of_c_eq_one
File: Mathlib/Algebra/CubicDiscriminant.lean

tactic: nontriviality R
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 1
⊢ P.toPoly.Monic
state_after: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 1
a✝ : Nontrivial R
⊢ P.toPoly.Monic

tactic: rw [Monic, leadingCoeff_of_c_ne_zero ha hb (hc ▸ one_ne_zero), hc]
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
ha : P.a = 0
hb : P.b = 0
hc : P.c = 1
a✝ : Nontrivial R
⊢ P.toPoly.Monic
state_after: no goals
Theorem: Subgroup.mem_rightTransversals_iff_existsUnique_mul_inv_mem
File: Mathlib/GroupTheory/Complement.lean

tactic: rw [rightTransversals, Set.mem_setOf_eq, isComplement_iff_existsUnique]
state_before: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
⊢ S ∈ rightTransversals T ↔ ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
state_after: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
⊢ (∀ (g : G), ∃! x, ↑x.1 * ↑x.2 = g) ↔ ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T

tactic: refine ⟨fun h g => ?_, fun h g => ?_⟩
state_before: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
⊢ (∀ (g : G), ∃! x, ↑x.1 * ↑x.2 = g) ↔ ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
state_after: case refine_1
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! x, ↑x.1 * ↑x.2 = g
g : G
⊢ ∃! s, g * (↑s)⁻¹ ∈ T

case refine_2
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
g : G
⊢ ∃! x, ↑x.1 * ↑x.2 = g

tactic: obtain ⟨x, h1, h2⟩ := h g
state_before: case refine_1
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! x, ↑x.1 * ↑x.2 = g
g : G
⊢ ∃! s, g * (↑s)⁻¹ ∈ T
state_after: case refine_1.intro.intro
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! x, ↑x.1 * ↑x.2 = g
g : G
x : ↑T × ↑S
h1 : ↑x.1 * ↑x.2 = g
h2 : ∀ (y : ↑T × ↑S), (fun x => ↑x.1 * ↑x.2 = g) y → y = x
⊢ ∃! s, g * (↑s)⁻¹ ∈ T

tactic: obtain ⟨x, h1, h2⟩ := h g
state_before: case refine_2
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
g : G
⊢ ∃! x, ↑x.1 * ↑x.2 = g
state_after: case refine_2.intro.intro
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
g : G
x : ↑S
h1 : g * (↑x)⁻¹ ∈ T
h2 : ∀ (y : ↑S), (fun s => g * (↑s)⁻¹ ∈ T) y → y = x
⊢ ∃! x, ↑x.1 * ↑x.2 = g

tactic: refine ⟨⟨⟨g * (↑x)⁻¹, h1⟩, x⟩, inv_mul_cancel_right g x, fun y hy => ?_⟩
state_before: case refine_2.intro.intro
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
g : G
x : ↑S
h1 : g * (↑x)⁻¹ ∈ T
h2 : ∀ (y : ↑S), (fun s => g * (↑s)⁻¹ ∈ T) y → y = x
⊢ ∃! x, ↑x.1 * ↑x.2 = g
state_after: case refine_2.intro.intro
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
g : G
x : ↑S
h1 : g * (↑x)⁻¹ ∈ T
h2 : ∀ (y : ↑S), (fun s => g * (↑s)⁻¹ ∈ T) y → y = x
y : ↑T × ↑S
hy : (fun x => ↑x.1 * ↑x.2 = g) y
⊢ y = (⟨g * (↑x)⁻¹, h1⟩, x)

tactic: exact Prod.ext (Subtype.ext (eq_mul_inv_of_mul_eq (hf ▸ hy))) hf
state_before: case refine_2.intro.intro
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
h : ∀ (g : G), ∃! s, g * (↑s)⁻¹ ∈ T
g : G
x : ↑S
h1 : g * (↑x)⁻¹ ∈ T
h2 : ∀ (y : ↑S), (fun s => g * (↑s)⁻¹ ∈ T) y → y = x
y : ↑T × ↑S
hy : (fun x => ↑x.1 * ↑x.2 = g) y
hf : y.2 = x
⊢ y = (⟨g * (↑x)⁻¹, h1⟩, x)
state_after: no goals
Theorem: Set.Ioo.one_sub_mem
File: Mathlib/Algebra/Order/Interval/Set/Instances.lean

tactic: rw [mem_Ioo] at *
state_before: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : t ∈ Ioo 0 1
⊢ 1 - t ∈ Ioo 0 1
state_after: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 0 < 1 - t ∧ 1 - t < 1

tactic: refine ⟨sub_pos.2 ht.2, ?_⟩
state_before: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 0 < 1 - t ∧ 1 - t < 1
state_after: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 1 - t < 1

tactic: exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne')
state_before: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 1 - t < 1
state_after: no goals
Theorem: CategoryTheory.Limits.cokernelZeroIsoTarget_hom
File: Mathlib/CategoryTheory/Limits/Shapes/Kernels.lean

tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
X Y : C
f : X ⟶ Y
inst✝ : HasCokernel f
⊢ 0 ≫ 𝟙 Y = 0
state_after: no goals

tactic: ext
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
X Y : C
f : X ⟶ Y
inst✝ : HasCokernel f
⊢ cokernelZeroIsoTarget.hom = cokernel.desc 0 (𝟙 Y) ⋯
state_after: case h
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
X Y : C
f : X ⟶ Y
inst✝ : HasCokernel f
⊢ coequalizer.π 0 0 ≫ cokernelZeroIsoTarget.hom = coequalizer.π 0 0 ≫ cokernel.desc 0 (𝟙 Y) ⋯

tactic: simp [cokernelZeroIsoTarget]
state_before: case h
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
X Y : C
f : X ⟶ Y
inst✝ : HasCokernel f
⊢ coequalizer.π 0 0 ≫ cokernelZeroIsoTarget.hom = coequalizer.π 0 0 ≫ cokernel.desc 0 (𝟙 Y) ⋯
state_after: no goals
Theorem: ZMod.nonsquare_of_jacobiSym_eq_neg_one
File: Mathlib/NumberTheory/LegendreSymbol/JacobiSymbol.lean

tactic: rw [← r.coe_valMinAbs, ← Int.cast_mul, intCast_eq_intCast_iff', ← sq] at ha
state_before: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : ↑a = r * r
⊢ False
state_after: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : a % ↑b = r.valMinAbs ^ 2 % ↑b
⊢ False

tactic: apply (by norm_num : ¬(0 : ℤ) ≤ -1)
state_before: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : a % ↑b = r.valMinAbs ^ 2 % ↑b
⊢ False
state_after: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : a % ↑b = r.valMinAbs ^ 2 % ↑b
⊢ 0 ≤ -1

tactic: rw [← h, mod_left, ha, ← mod_left, pow_left]
state_before: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : a % ↑b = r.valMinAbs ^ 2 % ↑b
⊢ 0 ≤ -1
state_after: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : a % ↑b = r.valMinAbs ^ 2 % ↑b
⊢ 0 ≤ J(r.valMinAbs | b) ^ 2

tactic: apply sq_nonneg
state_before: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : a % ↑b = r.valMinAbs ^ 2 % ↑b
⊢ 0 ≤ J(r.valMinAbs | b) ^ 2
state_after: no goals

tactic: norm_num
state_before: a : ℤ
b : ℕ
h : J(a | b) = -1
x✝ : IsSquare ↑a
r : ZMod b
ha : a % ↑b = r.valMinAbs ^ 2 % ↑b
⊢ ¬0 ≤ -1
state_after: no goals
Theorem: Submonoid.induction_of_closure_eq_top_left
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

tactic: have : x ∈ closure s := by simp [hs]
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
⊢ p x
state_after: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
this : x ∈ closure s
⊢ p x

tactic: induction this using closure_induction_left with
| one => exact one
| mul_left x hx y _ ih => exact mul x hx y ih
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
this : x ∈ closure s
⊢ p x
state_after: no goals

tactic: simp [hs]
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
⊢ x ∈ closure s
state_after: no goals

tactic: exact one
state_before: case one
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
⊢ p 1
state_after: no goals

tactic: exact mul x hx y ih
state_before: case mul_left
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x✝ : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
x : M
hx : x ∈ s
y : M
hy✝ : y ∈ closure s
ih : p y
⊢ p (x * y)
state_after: no goals
Theorem: Submodule.prod_eq_top_iff
File: Mathlib/LinearAlgebra/Prod.lean

tactic: simp only [eq_top_iff, le_prod_iff, ← (gc_map_comap _).le_iff_le, map_top, range_fst, range_snd]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
p₁ : Submodule R M
p₂ : Submodule R M₂
⊢ p₁.prod p₂ = ⊤ ↔ p₁ = ⊤ ∧ p₂ = ⊤
state_after: no goals
Theorem: Polynomial.rootSet_C
File: Mathlib/Algebra/Polynomial/Roots.lean

tactic: classical
rw [rootSet_def, aroots_C, Multiset.toFinset_zero, Finset.coe_empty]
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n : ℕ
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
p q : R[X]
inst✝³ : CommRing T
inst✝² : CommRing S
inst✝¹ : IsDomain S
inst✝ : Algebra T S
a : T
⊢ (C a).rootSet S = ∅
state_after: no goals

tactic: rw [rootSet_def, aroots_C, Multiset.toFinset_zero, Finset.coe_empty]
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n : ℕ
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
p q : R[X]
inst✝³ : CommRing T
inst✝² : CommRing S
inst✝¹ : IsDomain S
inst✝ : Algebra T S
a : T
⊢ (C a).rootSet S = ∅
state_after: no goals
Theorem: PartialHomeomorph.continuous_univBall
File: Mathlib/Analysis/NormedSpace/HomeomorphBall.lean

tactic: simpa [continuous_iff_continuousOn_univ] using (univBall c r).continuousOn
state_before: E : Type u_1
inst✝³ : SeminormedAddCommGroup E
inst✝² : NormedSpace ℝ E
P : Type u_2
inst✝¹ : PseudoMetricSpace P
inst✝ : NormedAddTorsor E P
c : P
r : ℝ
⊢ Continuous ↑(univBall c r)
state_after: no goals
Theorem: Stream'.Seq.map_id
File: Mathlib/Data/Seq/Seq.lean

tactic: apply Subtype.eq
state_before: α : Type u
β : Type v
γ : Type w
s : Stream' (Option α)
al : s.IsSeq
⊢ map id ⟨s, al⟩ = ⟨s, al⟩
state_after: case a
α : Type u
β : Type v
γ : Type w
s : Stream' (Option α)
al : s.IsSeq
⊢ ↑(map id ⟨s, al⟩) = ↑⟨s, al⟩

tactic: dsimp [map]
state_before: case a
α : Type u
β : Type v
γ : Type w
s : Stream' (Option α)
al : s.IsSeq
⊢ ↑(map id ⟨s, al⟩) = ↑⟨s, al⟩
state_after: case a
α : Type u
β : Type v
γ : Type w
s : Stream' (Option α)
al : s.IsSeq
⊢ Stream'.map (Option.map id) s = s

tactic: rw [Option.map_id, Stream'.map_id]
state_before: case a
α : Type u
β : Type v
γ : Type w
s : Stream' (Option α)
al : s.IsSeq
⊢ Stream'.map (Option.map id) s = s
state_after: no goals
Theorem: WeierstrassCurve.Jacobian.eval_polynomialX
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

tactic: rw [polynomialX_eq]
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
⊢ (eval P) W'.polynomialX = W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z ^ 2 + W'.a₄ * P z ^ 4)
state_after: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
⊢ (eval P) (C W'.a₁ * X y * X z - (C 3 * X x ^ 2 + C (2 * W'.a₂) * X x * X z ^ 2 + C W'.a₄ * X z ^ 4)) =
    W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z ^ 2 + W'.a₄ * P z ^ 4)

tactic: eval_simp
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
⊢ (eval P) (C W'.a₁ * X y * X z - (C 3 * X x ^ 2 + C (2 * W'.a₂) * X x * X z ^ 2 + C W'.a₄ * X z ^ 4)) =
    W'.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W'.a₂ * P x * P z ^ 2 + W'.a₄ * P z ^ 4)
state_after: no goals
Theorem: CompleteLatticeHom.cancel_left
File: Mathlib/Order/Hom/CompleteLattice.lean

tactic: rw [← comp_apply, h, comp_apply]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
ι : Sort u_6
κ : ι → Sort u_7
inst✝⁴ : FunLike F α β
inst✝³ : CompleteLattice α
inst✝² : CompleteLattice β
inst✝¹ : CompleteLattice γ
inst✝ : CompleteLattice δ
g : CompleteLatticeHom β γ
f₁ f₂ : CompleteLatticeHom α β
hg : Injective ⇑g
h : g.comp f₁ = g.comp f₂
a : α
⊢ g (f₁ a) = g (f₂ a)
state_after: no goals