1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Nat.exists_mul_pow_lt_factorial
File: Mathlib/Data/Nat/Prime.lean

tactic: obtain ⟨n0, hn, h⟩ := Nat.exists_pow_lt_factorial (a * c)
state_before: n a c : ℕ
⊢ ∃ n0, ∀ n ≥ n0, a * c ^ n < (n - 1)!
state_after: case intro.intro
n a c n0 : ℕ
hn : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
⊢ ∃ n0, ∀ n ≥ n0, a * c ^ n < (n - 1)!

tactic: refine ⟨n0, fun n hn => lt_of_le_of_lt ?_ (h n hn)⟩
state_before: case intro.intro
n a c n0 : ℕ
hn : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
⊢ ∃ n0, ∀ n ≥ n0, a * c ^ n < (n - 1)!
state_after: case intro.intro
n✝ a c n0 : ℕ
hn✝ : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
n : ℕ
hn : n ≥ n0
⊢ a * c ^ n ≤ (a * c) ^ n

tactic: rw [mul_pow]
state_before: case intro.intro
n✝ a c n0 : ℕ
hn✝ : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
n : ℕ
hn : n ≥ n0
⊢ a * c ^ n ≤ (a * c) ^ n
state_after: case intro.intro
n✝ a c n0 : ℕ
hn✝ : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
n : ℕ
hn : n ≥ n0
⊢ a * c ^ n ≤ a ^ n * c ^ n

tactic: refine Nat.mul_le_mul_right _ (Nat.le_self_pow ?_ _)
state_before: case intro.intro
n✝ a c n0 : ℕ
hn✝ : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
n : ℕ
hn : n ≥ n0
⊢ a * c ^ n ≤ a ^ n * c ^ n
state_after: case intro.intro
n✝ a c n0 : ℕ
hn✝ : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
n : ℕ
hn : n ≥ n0
⊢ n ≠ 0

tactic: omega
state_before: case intro.intro
n✝ a c n0 : ℕ
hn✝ : n0 > 1
h : ∀ n ≥ n0, (a * c) ^ n < (n - 1)!
n : ℕ
hn : n ≥ n0
⊢ n ≠ 0
state_after: no goals
Theorem: CategoryTheory.ShortComplex.LeftHomologyData.liftK_π_eq_zero_of_boundary
File: Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean

tactic: rw [hx, assoc, S.zero, comp_zero]
state_before: C : Type u_1
inst✝¹ : Category.{?u.11814, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
A : C
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ k ≫ S.g = 0
state_after: no goals

tactic: rw [show 0 = (x ≫ h.f') ≫ h.π by simp]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
A : C
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ h.liftK k ⋯ ≫ h.π = 0
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
A : C
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ h.liftK k ⋯ ≫ h.π = (x ≫ h.f') ≫ h.π

tactic: congr 1
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
A : C
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ h.liftK k ⋯ ≫ h.π = (x ≫ h.f') ≫ h.π
state_after: case e_a
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
A : C
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ h.liftK k ⋯ = x ≫ h.f'

tactic: simp only [← cancel_mono h.i, hx, liftK_i, assoc, f'_i]
state_before: case e_a
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
A : C
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ h.liftK k ⋯ = x ≫ h.f'
state_after: no goals

tactic: simp
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
A : C
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ 0 = (x ≫ h.f') ≫ h.π
state_after: no goals
Theorem: Fin.one_succAbove_succ
File: Mathlib/Data/Fin/Basic.lean

tactic: have := succ_succAbove_succ 0 j
state_before: n✝ m : ℕ
p : Fin (n✝ + 1)
i j✝ : Fin n✝
n : ℕ
j : Fin n
⊢ succAbove 1 j.succ = j.succ.succ
state_after: n✝ m : ℕ
p : Fin (n✝ + 1)
i j✝ : Fin n✝
n : ℕ
j : Fin n
this : (succ 0).succAbove j.succ = (succAbove 0 j).succ
⊢ succAbove 1 j.succ = j.succ.succ

tactic: rwa [succ_zero_eq_one, zero_succAbove] at this
state_before: n✝ m : ℕ
p : Fin (n✝ + 1)
i j✝ : Fin n✝
n : ℕ
j : Fin n
this : (succ 0).succAbove j.succ = (succAbove 0 j).succ
⊢ succAbove 1 j.succ = j.succ.succ
state_after: no goals
Theorem: Nat.gcd_sub_self_left
File: Mathlib/Data/Nat/GCD/Basic.lean

tactic: calc
  gcd (n - m) m = gcd (n - m + m) m := by rw [← gcd_add_self_left (n - m) m]
              _ = gcd n m := by rw [Nat.sub_add_cancel h]
state_before: m n : ℕ
h : m ≤ n
⊢ (n - m).gcd m = n.gcd m
state_after: no goals

tactic: rw [← gcd_add_self_left (n - m) m]
state_before: m n : ℕ
h : m ≤ n
⊢ (n - m).gcd m = (n - m + m).gcd m
state_after: no goals

tactic: rw [Nat.sub_add_cancel h]
state_before: m n : ℕ
h : m ≤ n
⊢ (n - m + m).gcd m = n.gcd m
state_after: no goals
Theorem: Nat.factorial_mul_pow_le_factorial
File: Mathlib/Data/Nat/Factorial/Basic.lean

tactic: simp
state_before: m✝ n m : ℕ
⊢ m ! * (m + 1) ^ 0 ≤ (m + 0)!
state_after: no goals

tactic: rw [← Nat.add_assoc, factorial_succ, Nat.mul_comm (_ + 1), Nat.pow_succ, ← Nat.mul_assoc]
state_before: m✝ n✝ m n : ℕ
⊢ m ! * (m + 1) ^ (n + 1) ≤ (m + (n + 1))!
state_after: m✝ n✝ m n : ℕ
⊢ m ! * (m + 1) ^ n * (m + 1) ≤ (m + n)! * (m + n + 1)

tactic: exact Nat.mul_le_mul factorial_mul_pow_le_factorial (succ_le_succ (le_add_right _ _))
state_before: m✝ n✝ m n : ℕ
⊢ m ! * (m + 1) ^ n * (m + 1) ≤ (m + n)! * (m + n + 1)
state_after: no goals
Theorem: String.offsetOfPos_of_valid
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

tactic: simpa using offsetOfPosAux_of_valid [] l r 0
state_before: l r : List Char
⊢ { data := l ++ r }.offsetOfPos { byteIdx := utf8Len l } = l.length
state_after: no goals
Theorem: Metric.continuousWithinAt_iff
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

tactic: rw [ContinuousWithinAt, tendsto_nhdsWithin_nhds]
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
δ ε ε₁ ε₂ : ℝ
s✝ : Set α
inst✝ : PseudoMetricSpace β
f : α → β
a : α
s : Set α
⊢ ContinuousWithinAt f s a ↔ ∀ ε > 0, ∃ δ > 0, ∀ {x : α}, x ∈ s → dist x a < δ → dist (f x) (f a) < ε
state_after: no goals
Theorem: Set.offDiag_inter
File: Mathlib/Data/Set/Prod.lean

tactic: simp only [mem_offDiag, mem_inter_iff]
state_before: α : Type u_1
s t : Set α
x✝ : α × α
a : α
x : α × α
⊢ x ∈ (s ∩ t).offDiag ↔ x ∈ s.offDiag ∩ t.offDiag
state_after: α : Type u_1
s t : Set α
x✝ : α × α
a : α
x : α × α
⊢ (x.1 ∈ s ∧ x.1 ∈ t) ∧ (x.2 ∈ s ∧ x.2 ∈ t) ∧ x.1 ≠ x.2 ↔
    (x.1 ∈ s ∧ x.2 ∈ s ∧ x.1 ≠ x.2) ∧ x.1 ∈ t ∧ x.2 ∈ t ∧ x.1 ≠ x.2

tactic: tauto
state_before: α : Type u_1
s t : Set α
x✝ : α × α
a : α
x : α × α
⊢ (x.1 ∈ s ∧ x.1 ∈ t) ∧ (x.2 ∈ s ∧ x.2 ∈ t) ∧ x.1 ≠ x.2 ↔
    (x.1 ∈ s ∧ x.2 ∈ s ∧ x.1 ≠ x.2) ∧ x.1 ∈ t ∧ x.2 ∈ t ∧ x.1 ≠ x.2
state_after: no goals
Theorem: Pi.basisFun_apply
File: Mathlib/LinearAlgebra/StdBasis.lean

tactic: simp only [basisFun, Basis.coe_ofEquivFun, LinearEquiv.refl_symm, LinearEquiv.refl_apply,
  stdBasis_apply]
state_before: R : Type u_1
η : Type u_2
ιs : η → Type u_3
Ms : η → Type u_4
inst✝⁴ : Semiring R
inst✝³ : (i : η) → AddCommMonoid (Ms i)
inst✝² : (i : η) → Module R (Ms i)
inst✝¹ : Finite η
inst✝ : DecidableEq η
i : η
⊢ (basisFun R η) i = (stdBasis R (fun x => R) i) 1
state_after: no goals
Theorem: Nat.cons_self_properDivisors
File: Mathlib/NumberTheory/Divisors.lean

tactic: rw [cons_eq_insert, insert_self_properDivisors h]
state_before: n : ℕ
h : n ≠ 0
⊢ cons n n.properDivisors ⋯ = n.divisors
state_after: no goals
Theorem: ContinuousLinearMap.map_smul
File: Mathlib/Topology/Algebra/Module/Basic.lean

tactic: simp only [RingHom.id_apply, ContinuousLinearMap.map_smulₛₗ]
state_before: R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝¹⁷ : Semiring R₁
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
M₁ : Type u_4
inst✝¹⁴ : TopologicalSpace M₁
inst✝¹³ : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹² : TopologicalSpace M'₁
inst✝¹¹ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝¹⁰ : TopologicalSpace M₂
inst✝⁹ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁸ : TopologicalSpace M₃
inst✝⁷ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁶ : TopologicalSpace M₄
inst✝⁵ : AddCommMonoid M₄
inst✝⁴ : Module R₁ M₁
inst✝³ : Module R₁ M'₁
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
inst✝ : Module R₁ M₂
f : M₁ →L[R₁] M₂
c : R₁
x : M₁
⊢ f (c • x) = c • f x
state_after: no goals
Theorem: Polynomial.coe_injective
File: Mathlib/RingTheory/PowerSeries/Basic.lean

tactic: ext
state_before: σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
⊢ x = y
state_after: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
n✝ : ℕ
⊢ x.coeff n✝ = y.coeff n✝

tactic: simp_rw [← coeff_coe]
state_before: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
n✝ : ℕ
⊢ x.coeff n✝ = y.coeff n✝
state_after: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
n✝ : ℕ
⊢ (PowerSeries.coeff R n✝) ↑x = (PowerSeries.coeff R n✝) ↑y

tactic: congr
state_before: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
n✝ : ℕ
⊢ (PowerSeries.coeff R n✝) ↑x = (PowerSeries.coeff R n✝) ↑y
state_after: no goals
Theorem: ContextFreeGrammar.Derives.append_left
File: Mathlib/Computability/ContextFreeGrammar.lean

tactic: induction hvw with
| refl => rfl
| tail _ last ih => exact ih.trans_produces <| last.append_left p
state_before: T : Type uT
g : ContextFreeGrammar T
v w : List (Symbol T g.NT)
hvw : g.Derives v w
p : List (Symbol T g.NT)
⊢ g.Derives (p ++ v) (p ++ w)
state_after: no goals

tactic: rfl
state_before: case refl
T : Type uT
g : ContextFreeGrammar T
v w p : List (Symbol T g.NT)
⊢ g.Derives (p ++ v) (p ++ v)
state_after: no goals

tactic: exact ih.trans_produces <| last.append_left p
state_before: case tail
T : Type uT
g : ContextFreeGrammar T
v w p b✝ c✝ : List (Symbol T g.NT)
a✝ : Relation.ReflTransGen g.Produces v b✝
last : g.Produces b✝ c✝
ih : g.Derives (p ++ v) (p ++ b✝)
⊢ g.Derives (p ++ v) (p ++ c✝)
state_after: no goals
Theorem: RingHom.lift_injective_of_ker_le_ideal
File: Mathlib/RingTheory/Ideal/QuotientOperations.lean

tactic: rw [RingHom.injective_iff_ker_eq_bot, RingHom.ker_eq_bot_iff_eq_zero]
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
⊢ Function.Injective ⇑(Ideal.Quotient.lift I f H)
state_after: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
⊢ ∀ (x : R ⧸ I), (Ideal.Quotient.lift I f H) x = 0 → x = 0

tactic: intro u hu
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
⊢ ∀ (x : R ⧸ I), (Ideal.Quotient.lift I f H) x = 0 → x = 0
state_after: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
u : R ⧸ I
hu : (Ideal.Quotient.lift I f H) u = 0
⊢ u = 0

tactic: obtain ⟨v, rfl⟩ := Ideal.Quotient.mk_surjective u
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
u : R ⧸ I
hu : (Ideal.Quotient.lift I f H) u = 0
⊢ u = 0
state_after: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
v : R
hu : (Ideal.Quotient.lift I f H) ((Ideal.Quotient.mk I) v) = 0
⊢ (Ideal.Quotient.mk I) v = 0

tactic: rw [Ideal.Quotient.lift_mk] at hu
state_before: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
v : R
hu : (Ideal.Quotient.lift I f H) ((Ideal.Quotient.mk I) v) = 0
⊢ (Ideal.Quotient.mk I) v = 0
state_after: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
v : R
hu : f v = 0
⊢ (Ideal.Quotient.mk I) v = 0

tactic: rw [Ideal.Quotient.eq_zero_iff_mem]
state_before: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
v : R
hu : f v = 0
⊢ (Ideal.Quotient.mk I) v = 0
state_after: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
v : R
hu : f v = 0
⊢ v ∈ I

tactic: exact hI ((RingHom.mem_ker f).mpr hu)
state_before: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : Semiring S
f✝ : R →+* S
I : Ideal R
f : R →+* S
H : ∀ a ∈ I, f a = 0
hI : ker f ≤ I
v : R
hu : f v = 0
⊢ v ∈ I
state_after: no goals
Theorem: Rat.inv_intCast_num_of_pos
File: Mathlib/Data/Rat/Lemmas.lean

tactic: rw [← ofInt_eq_cast, ofInt, mk_eq_divInt, Rat.inv_divInt', divInt_eq_div, Nat.cast_one]
state_before: a : ℤ
ha0 : 0 < a
⊢ (↑a)⁻¹.num = 1
state_after: a : ℤ
ha0 : 0 < a
⊢ (↑1 / ↑a).num = 1

tactic: apply num_div_eq_of_coprime ha0
state_before: a : ℤ
ha0 : 0 < a
⊢ (↑1 / ↑a).num = 1
state_after: a : ℤ
ha0 : 0 < a
⊢ (Int.natAbs 1).Coprime a.natAbs

tactic: rw [Int.natAbs_one]
state_before: a : ℤ
ha0 : 0 < a
⊢ (Int.natAbs 1).Coprime a.natAbs
state_after: a : ℤ
ha0 : 0 < a
⊢ Nat.Coprime 1 a.natAbs

tactic: exact Nat.coprime_one_left _
state_before: a : ℤ
ha0 : 0 < a
⊢ Nat.Coprime 1 a.natAbs
state_after: no goals
Theorem: Option.mem_map
File: Mathlib/Data/Option/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
f : α → β
y : β
o : Option α
⊢ y ∈ Option.map f o ↔ ∃ x, x ∈ o ∧ f x = y
state_after: no goals
Theorem: tendsto_one_plus_div_pow_exp
File: Mathlib/Analysis/SpecialFunctions/Pow/Deriv.lean

tactic: simp
state_before: t : ℝ
⊢ ∀ (x : ℕ), ((fun x => (1 + t / x) ^ x) ∘ Nat.cast) x = (1 + t / ↑x) ^ x
state_after: no goals
Theorem: Cardinal.lift_le
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: rw [← lift_umax]
state_before: α✝ β✝ : Type u
a b : Cardinal.{v}
α β : Type v
⊢ lift.{u, v} #α ≤ lift.{u, v} #β ↔ #α ≤ #β
state_after: α✝ β✝ : Type u
a b : Cardinal.{v}
α β : Type v
⊢ lift.{max v u, v} #α ≤ lift.{max v u, v} #β ↔ #α ≤ #β

tactic: exact lift_mk_le.{u}
state_before: α✝ β✝ : Type u
a b : Cardinal.{v}
α β : Type v
⊢ lift.{max v u, v} #α ≤ lift.{max v u, v} #β ↔ #α ≤ #β
state_after: no goals
Theorem: SetTheory.PGame.Subsequent.moveLeft_mk_right
File: Mathlib/SetTheory/Game/PGame.lean

tactic: pgame_wf_tac
state_before: xl xr : Type u
xL : xl → PGame
i : xr
xR : xr → PGame
j : (xR i).LeftMoves
⊢ ((xR i).moveLeft j).Subsequent (mk xl xr xL xR)
state_after: no goals
Theorem: WeierstrassCurve.coeff_Ψ₃
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

tactic: rw [Ψ₃]
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
⊢ W.Ψ₃.coeff 4 = 3
state_after: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
⊢ (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈).coeff 4 = 3

tactic: compute_degree!
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
⊢ (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈).coeff 4 = 3
state_after: no goals
Theorem: Matrix.IsHermitian.zpow
File: Mathlib/LinearAlgebra/Matrix/Hermitian.lean

tactic: rw [IsHermitian, conjTranspose_zpow, h]
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
A✝ : Matrix n n α
inst✝³ : CommRing α
inst✝² : StarRing α
inst✝¹ : Fintype m
inst✝ : DecidableEq m
A : Matrix m m α
h : A.IsHermitian
k : ℤ
⊢ (A ^ k).IsHermitian
state_after: no goals
Theorem: List.getLast?_append
File: Mathlib/Data/List/Basic.lean

tactic: cases l₂
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂✝ l₁ l₂ : List α
x : α
h : x ∈ l₂.getLast?
⊢ x ∈ (l₁ ++ l₂).getLast?
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂ l₁ : List α
x : α
h : x ∈ [].getLast?
⊢ x ∈ (l₁ ++ []).getLast?

case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂ l₁ : List α
x head✝ : α
tail✝ : List α
h : x ∈ (head✝ :: tail✝).getLast?
⊢ x ∈ (l₁ ++ head✝ :: tail✝).getLast?

tactic: contradiction
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂ l₁ : List α
x : α
h : x ∈ [].getLast?
⊢ x ∈ (l₁ ++ []).getLast?
state_after: no goals

tactic: rw [List.getLast?_append_cons]
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂ l₁ : List α
x head✝ : α
tail✝ : List α
h : x ∈ (head✝ :: tail✝).getLast?
⊢ x ∈ (l₁ ++ head✝ :: tail✝).getLast?
state_after: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂ l₁ : List α
x head✝ : α
tail✝ : List α
h : x ∈ (head✝ :: tail✝).getLast?
⊢ x ∈ (head✝ :: tail✝).getLast?

tactic: exact h
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂ l₁ : List α
x head✝ : α
tail✝ : List α
h : x ∈ (head✝ :: tail✝).getLast?
⊢ x ∈ (head✝ :: tail✝).getLast?
state_after: no goals
Theorem: LieAlgebra.IsKilling.apply_coroot_eq_cast
File: Mathlib/Algebra/Lie/Weights/RootSystem.lean

tactic: rw [apply_coroot_eq_cast', ← chainTopCoeff_add_chainBotCoeff]
state_before: K : Type u_1
L : Type u_2
inst✝⁷ : Field K
inst✝⁶ : CharZero K
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra K L
inst✝³ : IsKilling K L
inst✝² : FiniteDimensional K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α β : Weight K (↥H) L
hα : α.IsNonZero
⊢ β (coroot α) = ↑(↑(chainBotCoeff (⇑α) β) - ↑(chainTopCoeff (⇑α) β))
state_after: K : Type u_1
L : Type u_2
inst✝⁷ : Field K
inst✝⁶ : CharZero K
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra K L
inst✝³ : IsKilling K L
inst✝² : FiniteDimensional K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α β : Weight K (↥H) L
hα : α.IsNonZero
⊢ ↑(↑(chainTopCoeff (⇑α) β + chainBotCoeff (⇑α) β) - 2 * ↑(chainTopCoeff (⇑α) β)) =
    ↑(↑(chainBotCoeff (⇑α) β) - ↑(chainTopCoeff (⇑α) β))

tactic: congr 1
state_before: K : Type u_1
L : Type u_2
inst✝⁷ : Field K
inst✝⁶ : CharZero K
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra K L
inst✝³ : IsKilling K L
inst✝² : FiniteDimensional K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α β : Weight K (↥H) L
hα : α.IsNonZero
⊢ ↑(↑(chainTopCoeff (⇑α) β + chainBotCoeff (⇑α) β) - 2 * ↑(chainTopCoeff (⇑α) β)) =
    ↑(↑(chainBotCoeff (⇑α) β) - ↑(chainTopCoeff (⇑α) β))
state_after: case e_a
K : Type u_1
L : Type u_2
inst✝⁷ : Field K
inst✝⁶ : CharZero K
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra K L
inst✝³ : IsKilling K L
inst✝² : FiniteDimensional K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α β : Weight K (↥H) L
hα : α.IsNonZero
⊢ ↑(chainTopCoeff (⇑α) β + chainBotCoeff (⇑α) β) - 2 * ↑(chainTopCoeff (⇑α) β) =
    ↑(chainBotCoeff (⇑α) β) - ↑(chainTopCoeff (⇑α) β)

tactic: omega
state_before: case e_a
K : Type u_1
L : Type u_2
inst✝⁷ : Field K
inst✝⁶ : CharZero K
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra K L
inst✝³ : IsKilling K L
inst✝² : FiniteDimensional K L
H : LieSubalgebra K L
inst✝¹ : H.IsCartanSubalgebra
inst✝ : IsTriangularizable K (↥H) L
α β : Weight K (↥H) L
hα : α.IsNonZero
⊢ ↑(chainTopCoeff (⇑α) β + chainBotCoeff (⇑α) β) - 2 * ↑(chainTopCoeff (⇑α) β) =
    ↑(chainBotCoeff (⇑α) β) - ↑(chainTopCoeff (⇑α) β)
state_after: no goals
Theorem: Set.mapsTo_empty_iff
File: Mathlib/Data/Set/Function.lean

tactic: simp [mapsTo', subset_empty_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
⊢ MapsTo f s ∅ ↔ s = ∅
state_after: no goals
Theorem: MeasureTheory.memℒp_top_of_bound
File: Mathlib/MeasureTheory/Function/LpSeminorm/Basic.lean

tactic: rw [snorm_exponent_top]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → E
hf : AEStronglyMeasurable f μ
C : ℝ
hfC : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ C
⊢ snorm f ⊤ μ < ⊤
state_after: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → E
hf : AEStronglyMeasurable f μ
C : ℝ
hfC : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ C
⊢ snormEssSup f μ < ⊤

tactic: exact snormEssSup_lt_top_of_ae_bound hfC
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → E
hf : AEStronglyMeasurable f μ
C : ℝ
hfC : ∀ᵐ (x : α) ∂μ, ‖f x‖ ≤ C
⊢ snormEssSup f μ < ⊤
state_after: no goals
Theorem: IsSl2Triple.HasPrimitiveVectorWith.mk'
File: Mathlib/Algebra/Lie/Sl2.lean

tactic: suffices 2 • ⁅e, m⁆ = 0 by simpa using this
state_before: R : Type u_1
L : Type u_2
M : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : LieRing L
inst✝⁵ : LieAlgebra R L
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : LieRingModule L M
inst✝¹ : LieModule R L M
h e f : L
inst✝ : NoZeroSMulDivisors ℤ M
t : IsSl2Triple h e f
m : M
μ ρ : R
hm : m ≠ 0
hm' : ⁅h, m⁆ = μ • m
he : ⁅e, m⁆ = ρ • m
⊢ ⁅e, m⁆ = 0
state_after: R : Type u_1
L : Type u_2
M : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : LieRing L
inst✝⁵ : LieAlgebra R L
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : LieRingModule L M
inst✝¹ : LieModule R L M
h e f : L
inst✝ : NoZeroSMulDivisors ℤ M
t : IsSl2Triple h e f
m : M
μ ρ : R
hm : m ≠ 0
hm' : ⁅h, m⁆ = μ • m
he : ⁅e, m⁆ = ρ • m
⊢ 2 • ⁅e, m⁆ = 0

tactic: rw [← nsmul_lie, ← t.lie_h_e_nsmul, lie_lie, hm', lie_smul, he, lie_smul, hm',
  smul_smul, smul_smul, mul_comm ρ μ, sub_self]
state_before: R : Type u_1
L : Type u_2
M : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : LieRing L
inst✝⁵ : LieAlgebra R L
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : LieRingModule L M
inst✝¹ : LieModule R L M
h e f : L
inst✝ : NoZeroSMulDivisors ℤ M
t : IsSl2Triple h e f
m : M
μ ρ : R
hm : m ≠ 0
hm' : ⁅h, m⁆ = μ • m
he : ⁅e, m⁆ = ρ • m
⊢ 2 • ⁅e, m⁆ = 0
state_after: no goals

tactic: simpa using this
state_before: R : Type u_1
L : Type u_2
M : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : LieRing L
inst✝⁵ : LieAlgebra R L
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : LieRingModule L M
inst✝¹ : LieModule R L M
h e f : L
inst✝ : NoZeroSMulDivisors ℤ M
t : IsSl2Triple h e f
m : M
μ ρ : R
hm : m ≠ 0
hm' : ⁅h, m⁆ = μ • m
he : ⁅e, m⁆ = ρ • m
this : 2 • ⁅e, m⁆ = 0
⊢ ⁅e, m⁆ = 0
state_after: no goals
Theorem: mul_div_left_comm
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionCommMonoid α
a b c d : α
⊢ a * (b / c) = b * (a / c)
state_after: no goals
Theorem: Finset.iSup_finset_image
File: Mathlib/Data/Finset/Lattice.lean

tactic: rw [← iSup_coe, coe_image, iSup_image, iSup_coe]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝¹ : CompleteLattice β
inst✝ : DecidableEq α
f : γ → α
g : α → β
s : Finset γ
⊢ ⨆ x ∈ image f s, g x = ⨆ y ∈ s, g (f y)
state_after: no goals
Theorem: PSet.toSet_sUnion
File: Mathlib/SetTheory/ZFC/Basic.lean

tactic: ext
state_before: x : PSet
⊢ (⋃₀ x).toSet = ⋃₀ (toSet '' x.toSet)
state_after: case h
x x✝ : PSet
⊢ x✝ ∈ (⋃₀ x).toSet ↔ x✝ ∈ ⋃₀ (toSet '' x.toSet)

tactic: simp
state_before: case h
x x✝ : PSet
⊢ x✝ ∈ (⋃₀ x).toSet ↔ x✝ ∈ ⋃₀ (toSet '' x.toSet)
state_after: no goals
Theorem: TopCat.Presheaf.isSheaf_unit
File: Mathlib/Topology/Sheaves/Sheaf.lean

tactic: aesop_cat
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F✝ : Presheaf C X
ι : Type v
U✝ : ι → Opens ↑X
F : Presheaf (Discrete Unit) X
x✝² : Discrete Unit
U : Opens ↑X
S : Sieve U
x✝¹ : S ∈ (Opens.grothendieckTopology ↑X).sieves U
x : Presieve.FamilyOfElements (F ⋙ coyoneda.obj { unop := x✝² }) S.arrows
x✝ : x.Compatible
⊢ (fun t => x.IsAmalgamation t) (eqToHom ⋯)
state_after: no goals

tactic: aesop_cat
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F✝ : Presheaf C X
ι : Type v
U✝ : ι → Opens ↑X
F : Presheaf (Discrete Unit) X
x✝³ : Discrete Unit
U : Opens ↑X
S : Sieve U
x✝² : S ∈ (Opens.grothendieckTopology ↑X).sieves U
x : Presieve.FamilyOfElements (F ⋙ coyoneda.obj { unop := x✝³ }) S.arrows
x✝¹ : x.Compatible
x✝ : (F ⋙ coyoneda.obj { unop := x✝³ }).obj { unop := U }
⊢ (fun t => x.IsAmalgamation t) x✝ → x✝ = eqToHom ⋯
state_after: no goals