ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: MeasureTheory.exp_llr
File: Mathlib/MeasureTheory/Measure/LogLikelihoodRatio.lean

Proof steps:
state_before: α : Type u_1
mα : MeasurableSpace α
μ✝ ν✝ : Measure α
f : α → ℝ
μ ν : Measure α
inst✝ : SigmaFinite μ
⊢ (fun x => rexp (llr μ ν x)) =ᶠ[ae ν] fun x => if μ.rnDeriv ν x = 0 then 1 else (μ.rnDeriv ν x).toReal
state_after: case h
α : Type u_1
mα : MeasurableSpace α
μ✝ ν✝ : Measure α
f : α → ℝ
μ ν : Measure α
inst✝ : SigmaFinite μ
x : α
hx : μ.rnDeriv ν x < ⊤
⊢ rexp (llr μ ν x) = if μ.rnDeriv ν x = 0 then 1 else (μ.rnDeriv ν x).toReal
tactic: filter_upwards [Measure.rnDeriv_lt_top μ ν] with x hx
state_before: case h
α : Type u_1
mα : MeasurableSpace α
μ✝ ν✝ : Measure α
f : α → ℝ
μ ν : Measure α
inst✝ : SigmaFinite μ
x : α
hx : μ.rnDeriv ν x < ⊤
⊢ rexp (llr μ ν x) = if μ.rnDeriv ν x = 0 then 1 else (μ.rnDeriv ν x).toReal
state_after: case pos
α : Type u_1
mα : MeasurableSpace α
μ✝ ν✝ : Measure α
f : α → ℝ
μ ν : Measure α
inst✝ : SigmaFinite μ
x : α
hx : μ.rnDeriv ν x < ⊤
h_zero : μ.rnDeriv ν x = 0
⊢ rexp (llr μ ν x) = if μ.rnDeriv ν x = 0 then 1 else (μ.rnDeriv ν x).toReal

case neg
α : Type u_1
mα : MeasurableSpace α
μ✝ ν✝ : Measure α
f : α → ℝ
μ ν : Measure α
inst✝ : SigmaFinite μ
x : α
hx : μ.rnDeriv ν x < ⊤
h_zero : ¬μ.rnDeriv ν x = 0
⊢ rexp (llr μ ν x) = if μ.rnDeriv ν x = 0 then 1 else (μ.rnDeriv ν x).toReal
tactic: by_cases h_zero : μ.rnDeriv ν x = 0
Theorem: sup_eq_right
File: Mathlib/Order/Lattice.lean

Proof steps:
state_before: α : Type u
β : Type v
inst✝ : SemilatticeSup α
a b c d : α
⊢ a ⊔ b ≤ b ∧ b ≤ a ⊔ b ↔ a ≤ b
state_after: no goals
tactic: simp [le_rfl]
Theorem: IsClosed.measure_eq_one_iff_eq_univ
File: Mathlib/MeasureTheory/Measure/OpenPos.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝⁵ : TopologicalSpace X
m : MeasurableSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : T2Space Y
μ ν : Measure X
inst✝² : μ.IsOpenPosMeasure
s U F : Set X
x : X
inst✝¹ : OpensMeasurableSpace X
inst✝ : IsProbabilityMeasure μ
hF : IsClosed F
⊢ μ F = 1 ↔ F = univ
state_after: no goals
tactic: rw [← measure_univ (μ := μ), hF.measure_eq_univ_iff_eq]
Theorem: CategoryTheory.Bicategory.associator_inv_naturality_middle
File: Mathlib/CategoryTheory/Bicategory/Basic.lean

Proof steps:
state_before: B : Type u
inst✝ : Bicategory B
a b c d e : B
f : a ⟶ b
g g' : b ⟶ c
η : g ⟶ g'
h : c ⟶ d
⊢ f ◁ η ▷ h ≫ (α_ f g' h).inv = (α_ f g h).inv ≫ (f ◁ η) ▷ h
state_after: no goals
tactic: simp
Theorem: Relation.map_id_id
File: Mathlib/Logic/Relation.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r✝ : α → β → Prop
f : α → γ
g : β → δ
c : γ
d : δ
r : α → β → Prop
⊢ Relation.Map r id id = r
state_after: case h.h.a
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r✝ : α → β → Prop
f : α → γ
g : β → δ
c : γ
d : δ
r : α → β → Prop
x✝¹ : α
x✝ : β
⊢ Relation.Map r id id x✝¹ x✝ ↔ r x✝¹ x✝
tactic: ext
state_before: case h.h.a
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r✝ : α → β → Prop
f : α → γ
g : β → δ
c : γ
d : δ
r : α → β → Prop
x✝¹ : α
x✝ : β
⊢ Relation.Map r id id x✝¹ x✝ ↔ r x✝¹ x✝
state_after: no goals
tactic: simp [Relation.Map]
Theorem: Int.natAbs_le_iff_sq_le
File: Mathlib/Data/Int/Lemmas.lean

Proof steps:
state_before: a✝ b✝ : ℤ
n : ℕ
a b : ℤ
⊢ a.natAbs ≤ b.natAbs ↔ a ^ 2 ≤ b ^ 2
state_after: a✝ b✝ : ℤ
n : ℕ
a b : ℤ
⊢ a.natAbs ≤ b.natAbs ↔ a * a ≤ b * b
tactic: rw [sq, sq]
state_before: a✝ b✝ : ℤ
n : ℕ
a b : ℤ
⊢ a.natAbs ≤ b.natAbs ↔ a * a ≤ b * b
state_after: no goals
tactic: exact natAbs_le_iff_mul_self_le
Theorem: LucasLehmer.X.card_eq
File: Mathlib/NumberTheory/LucasLehmer.lean

Proof steps:
state_before: q : ℕ+
⊢ Fintype.card (X q) = ↑q ^ 2
state_after: q : ℕ+
⊢ Fintype.card (ZMod ↑q × ZMod ↑q) = ↑q ^ 2
tactic: dsimp [X]
state_before: q : ℕ+
⊢ Fintype.card (ZMod ↑q × ZMod ↑q) = ↑q ^ 2
state_after: no goals
tactic: rw [Fintype.card_prod, ZMod.card q, sq]
Theorem: IsLocalization.isPrime_of_isPrime_disjoint
File: Mathlib/RingTheory/Localization/Ideal.lean

Proof steps:
state_before: R : Type u_1
inst✝³ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝² : CommSemiring S
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
I : Ideal R
hp : I.IsPrime
hd : Disjoint ↑M ↑I
⊢ (Ideal.map (algebraMap R S) I).IsPrime
state_after: R : Type u_1
inst✝³ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝² : CommSemiring S
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
I : Ideal R
hp : I.IsPrime
hd : Disjoint ↑M ↑I
⊢ I.IsPrime ∧ Disjoint ↑M ↑I
tactic: rw [isPrime_iff_isPrime_disjoint M S, comap_map_of_isPrime_disjoint M S I hp hd]
state_before: R : Type u_1
inst✝³ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝² : CommSemiring S
inst✝¹ : Algebra R S
inst✝ : IsLocalization M S
I : Ideal R
hp : I.IsPrime
hd : Disjoint ↑M ↑I
⊢ I.IsPrime ∧ Disjoint ↑M ↑I
state_after: no goals
tactic: exact ⟨hp, hd⟩
Theorem: Turing.PartrecToTM2.contSupp_cons₁
File: Mathlib/Computability/TMToPartrec.lean

Proof steps:
state_before: fs : Code
k : Cont'
⊢ contSupp (Cont'.cons₁ fs k) =
    trStmts₁
        (move₂ (fun x => false) main aux
          (move₂ (fun s => decide (s = Γ'.consₗ)) stack main
            (move₂ (fun x => false) aux stack (trNormal fs k.cons₂)))) ∪
      codeSupp fs k.cons₂
state_after: no goals
tactic: simp [codeSupp, codeSupp', contSupp, Finset.union_assoc]
Theorem: ZMod.coe_valMinAbs
File: Mathlib/Data/ZMod/Basic.lean

Proof steps:
state_before: m n✝ k n : ℕ
h✝ : k = n + 1
x : ZMod (namedPattern k (n + 1) h✝)
⊢ ↑x.valMinAbs = x
state_after: m n✝ k n : ℕ
h✝ : k = n + 1
x : ZMod (namedPattern k (n + 1) h✝)
⊢ ↑(if x.val ≤ namedPattern k (n + 1) h✝ / 2 then ↑x.val else ↑x.val - ↑(namedPattern k (n + 1) h✝)) = x
tactic: rw [valMinAbs_def_pos]
state_before: m n✝ k n : ℕ
h✝ : k = n + 1
x : ZMod (namedPattern k (n + 1) h✝)
⊢ ↑(if x.val ≤ namedPattern k (n + 1) h✝ / 2 then ↑x.val else ↑x.val - ↑(namedPattern k (n + 1) h✝)) = x
state_after: case pos
m n✝ k n : ℕ
h✝¹ : k = n + 1
x : ZMod (namedPattern k (n + 1) h✝¹)
h✝ : x.val ≤ namedPattern k (n + 1) h✝¹ / 2
⊢ ↑↑x.val = x

case neg
m n✝ k n : ℕ
h✝¹ : k = n + 1
x : ZMod (namedPattern k (n + 1) h✝¹)
h✝ : ¬x.val ≤ namedPattern k (n + 1) h✝¹ / 2
⊢ ↑(↑x.val - ↑(namedPattern k (n + 1) h✝¹)) = x
tactic: split_ifs
Theorem: CompHausLike.epi_of_surjective
File: Mathlib/Topology/Category/CompHausLike/Basic.lean

Proof steps:
state_before: P : TopCat → Prop
X✝ : Type u
inst✝³ : TopologicalSpace X✝
inst✝² : CompactSpace X✝
inst✝¹ : T2Space X✝
inst✝ : HasProp P X✝
X Y : CompHausLike P
f : X ⟶ Y
hf : Function.Surjective ⇑f
⊢ Epi f
state_after: P : TopCat → Prop
X✝ : Type u
inst✝³ : TopologicalSpace X✝
inst✝² : CompactSpace X✝
inst✝¹ : T2Space X✝
inst✝ : HasProp P X✝
X Y : CompHausLike P
f : X ⟶ Y
hf : Epi ⇑f
⊢ Epi f
tactic: rw [← CategoryTheory.epi_iff_surjective] at hf
state_before: P : TopCat → Prop
X✝ : Type u
inst✝³ : TopologicalSpace X✝
inst✝² : CompactSpace X✝
inst✝¹ : T2Space X✝
inst✝ : HasProp P X✝
X Y : CompHausLike P
f : X ⟶ Y
hf : Epi ⇑f
⊢ Epi f
state_after: no goals
tactic: exact (forget (CompHausLike P)).epi_of_epi_map hf
Theorem: Nat.fib_coprime_fib_succ
File: Mathlib/Data/Nat/Fib/Basic.lean

Proof steps:
state_before: n : ℕ
⊢ (fib n).Coprime (fib (n + 1))
state_after: case zero

⊢ (fib 0).Coprime (fib (0 + 1))

case succ
n : ℕ
ih : (fib n).Coprime (fib (n + 1))
⊢ (fib (n + 1)).Coprime (fib (n + 1 + 1))
tactic: induction' n with n ih
Theorem: Polynomial.derivative_X_pow
File: Mathlib/Algebra/Polynomial/Derivative.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : Semiring R
n : ℕ
⊢ derivative (X ^ n) = C ↑n * X ^ (n - 1)
state_after: no goals
tactic: convert derivative_C_mul_X_pow (1 : R) n <;> simp
Theorem: rank_eq_zero_iff
File: Mathlib/LinearAlgebra/Dimension/Finite.lean

Proof steps:
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M₁
⊢ Module.rank R M = 0 ↔ ∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0
state_after: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M₁
a✝ : Nontrivial R
⊢ Module.rank R M = 0 ↔ ∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0
tactic: nontriviality R
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M₁
a✝ : Nontrivial R
⊢ Module.rank R M = 0 ↔ ∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0
state_after: case mp
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M₁
a✝ : Nontrivial R
⊢ Module.rank R M = 0 → ∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0

case mpr
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M₁
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M₁
a✝ : Nontrivial R
⊢ (∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0) → Module.rank R M = 0
tactic: constructor
Theorem: FP.Float.Zero.valid
File: Mathlib/Data/FP/Basic.lean

Proof steps:
state_before: C : FloatCfg
⊢ emin ≤ emin + ↑prec - 1
state_after: C : FloatCfg
⊢ emin ≤ emin + (↑prec - 1)
tactic: rw [add_sub_assoc]
state_before: C : FloatCfg
⊢ emin ≤ emin + (↑prec - 1)
state_after: case h
C : FloatCfg
⊢ 0 ≤ ↑prec - 1
tactic: apply le_add_of_nonneg_right
state_before: case h
C : FloatCfg
⊢ 0 ≤ ↑prec - 1
state_after: case h.a
C : FloatCfg
⊢ 1 ≤ ↑prec
tactic: apply sub_nonneg_of_le
state_before: case h.a
C : FloatCfg
⊢ 1 ≤ ↑prec
state_after: case h.a.a
C : FloatCfg
⊢ 1 ≤ prec
tactic: apply Int.ofNat_le_ofNat_of_le
state_before: case h.a.a
C : FloatCfg
⊢ 1 ≤ prec
state_after: no goals
tactic: exact C.precPos
state_before: C : FloatCfg
this : prec ≤ 2 * emax
⊢ emin + ↑prec - 1 ≤ ↑emax
state_after: C : FloatCfg
this : ↑prec ≤ ↑(2 * emax)
⊢ emin + ↑prec - 1 ≤ ↑emax
tactic: rw [← Int.ofNat_le] at this
state_before: C : FloatCfg
this : ↑prec ≤ ↑(2 * emax)
⊢ emin + ↑prec - 1 ≤ ↑emax
state_after: C : FloatCfg
this : 0 ≤ ↑(2 * emax) - ↑prec
⊢ 0 ≤ ↑emax - (emin + ↑prec - 1)
tactic: rw [← sub_nonneg] at *
state_before: C : FloatCfg
this : 0 ≤ ↑(2 * emax) - ↑prec
⊢ 0 ≤ ↑emax - (emin + ↑prec - 1)
state_after: C : FloatCfg
this : 0 ≤ ↑(2 * FloatCfg.emax) - ↑prec
⊢ 0 ≤ ↑FloatCfg.emax - (1 - ↑FloatCfg.emax + ↑prec - 1)
tactic: simp only [emin, emax] at *
state_before: C : FloatCfg
this : 0 ≤ ↑(2 * FloatCfg.emax) - ↑prec
⊢ 0 ≤ ↑FloatCfg.emax - (1 - ↑FloatCfg.emax + ↑prec - 1)
state_after: C : FloatCfg
this : 0 ≤ ↑(2 * FloatCfg.emax) - ↑prec
⊢ 0 ≤ ↑FloatCfg.emax * 2 - ↑prec
tactic: ring_nf
state_before: C : FloatCfg
this : 0 ≤ ↑(2 * FloatCfg.emax) - ↑prec
⊢ 0 ≤ ↑FloatCfg.emax * 2 - ↑prec
state_after: C : FloatCfg
this : 0 ≤ ↑(2 * FloatCfg.emax) - ↑prec
⊢ 0 ≤ 2 * ↑FloatCfg.emax - ↑prec
tactic: rw [mul_comm]
state_before: C : FloatCfg
this : 0 ≤ ↑(2 * FloatCfg.emax) - ↑prec
⊢ 0 ≤ 2 * ↑FloatCfg.emax - ↑prec
state_after: no goals
tactic: assumption
state_before: C : FloatCfg
⊢ emin = max (emin + ↑(Nat.size 0) - ↑prec) emin
state_after: no goals
tactic: (rw [max_eq_right]; simp [sub_eq_add_neg])
Theorem: Nat.mul_lt_mul''
File: Mathlib/Data/Nat/Defs.lean

Proof steps:
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
hac : a < c
hbd : b < d
⊢ 0 < d
state_after: no goals
tactic: omega
Theorem: irrational_div_int_iff
File: Mathlib/Data/Real/Irrational.lean

Proof steps:
state_before: q : ℚ
m : ℤ
n : ℕ
x : ℝ
⊢ Irrational (x / ↑m) ↔ m ≠ 0 ∧ Irrational x
state_after: no goals
tactic: rw [← cast_intCast, irrational_div_rat_iff, Int.cast_ne_zero]
Theorem: Cardinal.mk_vector
File: Mathlib/SetTheory/Cardinal/Basic.lean

Proof steps:
state_before: α✝ β : Type u
c : Cardinal.{?u.175283}
α : Type u
n : ℕ
⊢ #(Fin n → α) = #α ^ n
state_after: no goals
tactic: simp
Theorem: CharZero.of_module
File: Mathlib/Algebra/Module/Defs.lean

Proof steps:
state_before: α : Type u_1
R : Type u_2
k : Type u_3
S : Type u_4
M✝ : Type u_5
M₂ : Type u_6
M₃ : Type u_7
ι : Type u_8
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R M✝
M : Type u_9
inst✝² : AddCommMonoidWithOne M
inst✝¹ : CharZero M
inst✝ : Module R M
⊢ CharZero R
state_after: α : Type u_1
R : Type u_2
k : Type u_3
S : Type u_4
M✝ : Type u_5
M₂ : Type u_6
M₃ : Type u_7
ι : Type u_8
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R M✝
M : Type u_9
inst✝² : AddCommMonoidWithOne M
inst✝¹ : CharZero M
inst✝ : Module R M
m n : ℕ
h : ↑m = ↑n
⊢ ↑m = ↑n
tactic: refine ⟨fun m n h => @Nat.cast_injective M _ _ _ _ ?_⟩
state_before: α : Type u_1
R : Type u_2
k : Type u_3
S : Type u_4
M✝ : Type u_5
M₂ : Type u_6
M₃ : Type u_7
ι : Type u_8
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M✝
inst✝³ : Module R M✝
M : Type u_9
inst✝² : AddCommMonoidWithOne M
inst✝¹ : CharZero M
inst✝ : Module R M
m n : ℕ
h : ↑m = ↑n
⊢ ↑m = ↑n
state_after: no goals
tactic: rw [← nsmul_one, ← nsmul_one, ← Nat.cast_smul_eq_nsmul R, ← Nat.cast_smul_eq_nsmul R, h]
Theorem: Monotone.iSup
File: Mathlib/Order/CompleteLattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι✝ : Sort u_5
ι' : Sort u_6
κ : ι✝ → Sort u_7
κ' : ι' → Sort u_8
ι : Sort u_9
inst✝¹ : Preorder α
inst✝ : CompleteLattice β
s : Set (α → β)
f : ι → α → β
hf : ∀ (i : ι), Monotone (f i)
⊢ ∀ f_1 ∈ range fun i => f i, Monotone f_1
state_after: no goals
tactic: simpa
Theorem: Sigma.isConnected_iff
File: Mathlib/Topology/Connected/Clopen.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : Set ((i : ι) × π i)
⊢ IsConnected s ↔ ∃ i t, IsConnected t ∧ s = mk i '' t
state_after: case refine_1
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : Set ((i : ι) × π i)
hs : IsConnected s
⊢ ∃ i t, IsConnected t ∧ s = mk i '' t

case refine_2
α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝¹ : TopologicalSpace α
s✝ t u v : Set α
inst✝ : (i : ι) → TopologicalSpace (π i)
s : Set ((i : ι) × π i)
⊢ (∃ i t, IsConnected t ∧ s = mk i '' t) → IsConnected s
tactic: refine ⟨fun hs => ?_, ?_⟩
Theorem: TensorProduct.map₂_eq_range_lift_comp_mapIncl
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : P →ₗ[R] Q →ₗ[R] M
p : Submodule R P
q : Submodule R Q
⊢ Submodule.map₂ f p q = range (lift f ∘ₗ mapIncl p q)
state_after: no goals
tactic: simp_rw [LinearMap.range_comp, range_mapIncl, Submodule.map_span,
    Set.image_image2, Submodule.map₂_eq_span_image2, lift.tmul]
Theorem: WeierstrassCurve.map_injective
File: Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝ : CommRing A
φ✝ φ : R →+* A
hφ : Function.Injective ⇑φ
x✝¹ x✝ : WeierstrassCurve R
h : (fun W => W.map φ) x✝¹ = (fun W => W.map φ) x✝
⊢ x✝¹ = x✝
state_after: case intro.intro.intro.intro
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝ : CommRing A
φ✝ φ : R →+* A
hφ : Function.Injective ⇑φ
x✝¹ x✝ : WeierstrassCurve R
h : (fun W => W.map φ) x✝¹ = (fun W => W.map φ) x✝
left✝³ : φ x✝¹.a₁ = φ x✝.a₁
left✝² : φ x✝¹.a₂ = φ x✝.a₂
left✝¹ : φ x✝¹.a₃ = φ x✝.a₃
left✝ : φ x✝¹.a₄ = φ x✝.a₄
right✝ : φ x✝¹.a₆ = φ x✝.a₆
⊢ x✝¹ = x✝
tactic: rcases mk.inj h with ⟨_, _, _, _, _⟩
state_before: case intro.intro.intro.intro
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝ : CommRing A
φ✝ φ : R →+* A
hφ : Function.Injective ⇑φ
x✝¹ x✝ : WeierstrassCurve R
h : (fun W => W.map φ) x✝¹ = (fun W => W.map φ) x✝
left✝³ : φ x✝¹.a₁ = φ x✝.a₁
left✝² : φ x✝¹.a₂ = φ x✝.a₂
left✝¹ : φ x✝¹.a₃ = φ x✝.a₃
left✝ : φ x✝¹.a₄ = φ x✝.a₄
right✝ : φ x✝¹.a₆ = φ x✝.a₆
⊢ x✝¹ = x✝
state_after: no goals
tactic: ext <;> apply_fun _ using hφ <;> assumption
Theorem: AddSubmonoid.sup_eq_closure
File: Mathlib/Algebra/Group/Submonoid/Basic.lean

Proof steps:
state_before: M : Type u_1
N✝ : Type u_2
A : Type u_3
inst✝¹ : MulOneClass M
s : Set M
inst✝ : AddZeroClass A
t : Set A
S N N' : Submonoid M
⊢ N ⊔ N' = closure (↑N ∪ ↑N')
state_after: no goals
tactic: simp_rw [closure_union, closure_eq]
Theorem: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided_obj_ε
File: Mathlib/CategoryTheory/Monoidal/CommMon_.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X✝ Y✝ : CommMon_ C
f : X✝ ⟶ Y✝
x✝² x✝¹ : Discrete PUnit.{u + 1}
x✝ : x✝² ⟶ x✝¹
⊢ ((fun A =>
              { obj := fun x => A.X, map := fun {X Y} x => 𝟙 ((fun x => A.X) X), map_id := ⋯, map_comp := ⋯, ε := A.one,
                μ := fun x x => A.mul, μ_natural_left := ⋯, μ_natural_right := ⋯, associativity := ⋯,
                left_unitality := ⋯, right_unitality := ⋯, braided := ⋯ })
            X✝).map
        x✝ ≫
      (fun x => f.hom) x✝¹ =
    (fun x => f.hom) x✝² ≫
      ((fun A =>
              { obj := fun x => A.X, map := fun {X Y} x => 𝟙 ((fun x => A.X) X), map_id := ⋯, map_comp := ⋯, ε := A.one,
                μ := fun x x => A.mul, μ_natural_left := ⋯, μ_natural_right := ⋯, associativity := ⋯,
                left_unitality := ⋯, right_unitality := ⋯, braided := ⋯ })
            Y✝).map
        x✝
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X✝ Y✝ : CommMon_ C
f : X✝ ⟶ Y✝
x✝² x✝¹ : Discrete PUnit.{u + 1}
x✝ : x✝² ⟶ x✝¹
⊢ 𝟙 X✝.X ≫ f.hom = f.hom ≫ 𝟙 Y✝.X
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X✝ Y✝ : CommMon_ C
f : X✝ ⟶ Y✝
x✝² x✝¹ : Discrete PUnit.{u + 1}
x✝ : x✝² ⟶ x✝¹
⊢ 𝟙 X✝.X ≫ f.hom = f.hom ≫ 𝟙 Y✝.X
state_after: no goals
tactic: rw [Category.id_comp, Category.comp_id]
Theorem: Monoid.CoprodI.lift_word_ping_pong
File: Mathlib/GroupTheory/CoprodI.lean

Proof steps:
state_before: ι : Type u_1
M : ι → Type u_2
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_5
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i)
α : Type u_6
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), (X i).Nonempty
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → (f i) h • X j ⊆ X i
i j k : ι
w : NeWord H i j
hk : j ≠ k
⊢ (lift f) w.prod • X k ⊆ X i
state_after: case singleton
ι : Type u_1
M : ι → Type u_2
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_5
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i)
α : Type u_6
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), (X i).Nonempty
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → (f i) h • X j ⊆ X i
i✝ j i : ι
x : H i
hne_one : x ≠ 1
k : ι
hk : i ≠ k
⊢ (lift f) (NeWord.singleton x hne_one).prod • X k ⊆ X i

case append
ι : Type u_1
M : ι → Type u_2
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_5
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i)
α : Type u_6
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), (X i).Nonempty
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → (f i) h • X j ⊆ X i
i✝ j✝ i j k✝ l : ι
w₁ : NeWord H i j
hne : j ≠ k✝
w₂ : NeWord H k✝ l
hIw₁ : ∀ {k : ι}, j ≠ k → (lift f) w₁.prod • X k ⊆ X i
hIw₂ : ∀ {k : ι}, l ≠ k → (lift f) w₂.prod • X k ⊆ X k✝
k : ι
hk : l ≠ k
⊢ (lift f) (w₁.append hne w₂).prod • X k ⊆ X i
tactic: induction' w with i x hne_one i j k l w₁ hne w₂ hIw₁ hIw₂ generalizing k
Theorem: HomologicalComplex₂.homMk_f_f
File: Mathlib/Algebra/Homology/HomologicalBicomplex.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.6549, u_1} C
inst✝ : HasZeroMorphisms C
I₁ : Type u_2
I₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L : HomologicalComplex₂ C c₁ c₂
f : K.toGradedObject ⟶ L.toGradedObject
comm₁ : ∀ (i₁ i₁' : I₁) (i₂ : I₂), c₁.Rel i₁ i₁' → f (i₁, i₂) ≫ (L.d i₁ i₁').f i₂ = (K.d i₁ i₁').f i₂ ≫ f (i₁', i₂)
comm₂ : ∀ (i₁ : I₁) (i₂ i₂' : I₂), c₂.Rel i₂ i₂' → f (i₁, i₂) ≫ (L.X i₁).d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ f (i₁, i₂')
i₁ i₁' : I₁
h₁ : c₁.Rel i₁ i₁'
⊢ (fun i₁ => { f := fun i₂ => f (i₁, i₂), comm' := ⋯ }) i₁ ≫ L.d i₁ i₁' =
    K.d i₁ i₁' ≫ (fun i₁ => { f := fun i₂ => f (i₁, i₂), comm' := ⋯ }) i₁'
state_after: case h
C : Type u_1
inst✝¹ : Category.{?u.6549, u_1} C
inst✝ : HasZeroMorphisms C
I₁ : Type u_2
I₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L : HomologicalComplex₂ C c₁ c₂
f : K.toGradedObject ⟶ L.toGradedObject
comm₁ : ∀ (i₁ i₁' : I₁) (i₂ : I₂), c₁.Rel i₁ i₁' → f (i₁, i₂) ≫ (L.d i₁ i₁').f i₂ = (K.d i₁ i₁').f i₂ ≫ f (i₁', i₂)
comm₂ : ∀ (i₁ : I₁) (i₂ i₂' : I₂), c₂.Rel i₂ i₂' → f (i₁, i₂) ≫ (L.X i₁).d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ f (i₁, i₂')
i₁ i₁' : I₁
h₁ : c₁.Rel i₁ i₁'
i₂ : I₂
⊢ ((fun i₁ => { f := fun i₂ => f (i₁, i₂), comm' := ⋯ }) i₁ ≫ L.d i₁ i₁').f i₂ =
    (K.d i₁ i₁' ≫ (fun i₁ => { f := fun i₂ => f (i₁, i₂), comm' := ⋯ }) i₁').f i₂
tactic: ext i₂
state_before: case h
C : Type u_1
inst✝¹ : Category.{?u.6549, u_1} C
inst✝ : HasZeroMorphisms C
I₁ : Type u_2
I₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L : HomologicalComplex₂ C c₁ c₂
f : K.toGradedObject ⟶ L.toGradedObject
comm₁ : ∀ (i₁ i₁' : I₁) (i₂ : I₂), c₁.Rel i₁ i₁' → f (i₁, i₂) ≫ (L.d i₁ i₁').f i₂ = (K.d i₁ i₁').f i₂ ≫ f (i₁', i₂)
comm₂ : ∀ (i₁ : I₁) (i₂ i₂' : I₂), c₂.Rel i₂ i₂' → f (i₁, i₂) ≫ (L.X i₁).d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ f (i₁, i₂')
i₁ i₁' : I₁
h₁ : c₁.Rel i₁ i₁'
i₂ : I₂
⊢ ((fun i₁ => { f := fun i₂ => f (i₁, i₂), comm' := ⋯ }) i₁ ≫ L.d i₁ i₁').f i₂ =
    (K.d i₁ i₁' ≫ (fun i₁ => { f := fun i₂ => f (i₁, i₂), comm' := ⋯ }) i₁').f i₂
state_after: no goals
tactic: exact comm₁ i₁ i₁' i₂ h₁
Theorem: LieEquiv.ofBijective_invFun
File: Mathlib/Algebra/Lie/Basic.lean

Proof steps:
state_before: R : Type u
L₁ : Type v
L₂ : Type w
L₃ : Type w₁
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L₁
inst✝⁴ : LieRing L₂
inst✝³ : LieRing L₃
inst✝² : LieAlgebra R L₁
inst✝¹ : LieAlgebra R L₂
inst✝ : LieAlgebra R L₃
f : L₁ →ₗ⁅R⁆ L₂
h : Bijective ⇑f
⊢ ∀ {x y : L₁},
    { toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun ⁅x, y⁆ =
      ⁅{ toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun x, { toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun y⁆
state_after: R : Type u
L₁ : Type v
L₂ : Type w
L₃ : Type w₁
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L₁
inst✝⁴ : LieRing L₂
inst✝³ : LieRing L₃
inst✝² : LieAlgebra R L₁
inst✝¹ : LieAlgebra R L₂
inst✝ : LieAlgebra R L₃
f : L₁ →ₗ⁅R⁆ L₂
h : Bijective ⇑f
x y : L₁
⊢ { toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun ⁅x, y⁆ =
    ⁅{ toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun x, { toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun y⁆
tactic: intros x y
state_before: R : Type u
L₁ : Type v
L₂ : Type w
L₃ : Type w₁
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L₁
inst✝⁴ : LieRing L₂
inst✝³ : LieRing L₃
inst✝² : LieAlgebra R L₁
inst✝¹ : LieAlgebra R L₂
inst✝ : LieAlgebra R L₃
f : L₁ →ₗ⁅R⁆ L₂
h : Bijective ⇑f
x y : L₁
⊢ { toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun ⁅x, y⁆ =
    ⁅{ toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun x, { toFun := ⇑f, map_add' := ⋯, map_smul' := ⋯ }.toFun y⁆
state_after: no goals
tactic: exact f.map_lie x y