1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Nat.superFactorial_two_mul
File: Mathlib/Data/Nat/Factorial/SuperFactorial.lean

tactic: simp only [prod_range_succ, mul_pow, mul_add, mul_one, superFactorial_succ,
  superFactorial_two_mul n, factorial_succ]
state_before: n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
⊢ sf 2 * (n + 1) = (∏ i ∈ range (n + 1), (2 * i + 1)!) ^ 2 * 2 ^ (n + 1) * (n + 1)!
state_after: n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
⊢ (2 * n + 1 + 1) * ((2 * n + 1) * (2 * n)!) *
      ((2 * n + 1) * (2 * n)! * ((∏ x ∈ range n, (2 * x + 1) * (2 * x)!) ^ 2 * 2 ^ n * n !)) =
    (∏ x ∈ range n, (2 * x + 1) * (2 * x)!) ^ 2 * ((2 * n + 1) ^ 2 * (2 * n)! ^ 2) * 2 ^ (n + 1) * ((n + 1) * n !)

tactic: ring
state_before: n✝ : ℕ
R : Type u_1
inst✝ : CommRing R
n : ℕ
⊢ (2 * n + 1 + 1) * ((2 * n + 1) * (2 * n)!) *
      ((2 * n + 1) * (2 * n)! * ((∏ x ∈ range n, (2 * x + 1) * (2 * x)!) ^ 2 * 2 ^ n * n !)) =
    (∏ x ∈ range n, (2 * x + 1) * (2 * x)!) ^ 2 * ((2 * n + 1) ^ 2 * (2 * n)! ^ 2) * 2 ^ (n + 1) * ((n + 1) * n !)
state_after: no goals
Theorem: CategoryTheory.NonPreadditiveAbelian.sub_add
File: Mathlib/CategoryTheory/Abelian/NonPreadditive.lean

tactic: rw [add_def, neg_def, sub_sub_sub, sub_zero]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : NonPreadditiveAbelian C
X Y : C
a b c : X ⟶ Y
⊢ a - b + c = a - (b - c)
state_after: no goals
Theorem: UpperSet.sdiff_eq_left
File: Mathlib/Order/UpperLower/Basic.lean

tactic: simp [← SetLike.coe_set_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : Preorder α
s : UpperSet α
t : Set α
a : α
⊢ s.sdiff t = s ↔ Disjoint (↑s) t
state_after: no goals
Theorem: RingQuot.smul_quot
File: Mathlib/Algebra/RingQuot.lean

tactic: show smul r _ _ = _
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Algebra S R
n : S
a : R
⊢ n • { toQuot := Quot.mk (Rel r) a } = { toQuot := Quot.mk (Rel r) (n • a) }
state_after: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Algebra S R
n : S
a : R
⊢ RingQuot.smul r n { toQuot := Quot.mk (Rel r) a } = { toQuot := Quot.mk (Rel r) (n • a) }

tactic: rw [smul]
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Algebra S R
n : S
a : R
⊢ RingQuot.smul r n { toQuot := Quot.mk (Rel r) a } = { toQuot := Quot.mk (Rel r) (n • a) }
state_after: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Algebra S R
n : S
a : R
⊢ (match { toQuot := Quot.mk (Rel r) a } with
    | { toQuot := a } => { toQuot := Quot.map (fun a => n • a) ⋯ a }) =
    { toQuot := Quot.mk (Rel r) (n • a) }

tactic: rfl
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Algebra S R
n : S
a : R
⊢ (match { toQuot := Quot.mk (Rel r) a } with
    | { toQuot := a } => { toQuot := Quot.map (fun a => n • a) ⋯ a }) =
    { toQuot := Quot.mk (Rel r) (n • a) }
state_after: no goals
Theorem: Ordinal.mem_closure_iff_bsup
File: Mathlib/SetTheory/Ordinal/Topology.lean

tactic: simp only [exists_prop]
state_before: s : Set Ordinal.{u}
a : Ordinal.{u}
⊢ (∃ o, o ≠ 0 ∧ ∃ f, (∀ (x : Ordinal.{u}) (hx : x < o), f x hx ∈ s) ∧ o.bsup f = a) ↔
    ∃ o, ∃ (_ : o ≠ 0), ∃ f, (∀ (i : Ordinal.{u}) (hi : i < o), f i hi ∈ s) ∧ o.bsup f = a
state_after: no goals
Theorem: Partrec.map
File: Mathlib/Computability/Partrec.lean

tactic: simpa [bind_some_eq_map] using @Partrec.bind _ _ _ _ _ _ _ (fun a => Part.some ∘ (g a)) hf hg
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
σ : Type u_4
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : α →. β
g : α → β → σ
hf : Partrec f
hg : Computable₂ g
⊢ Partrec fun a => Part.map (g a) (f a)
state_after: no goals
Theorem: sum_four_sq_mul_sum_four_sq
File: Mathlib/Algebra/Ring/Identities.lean

tactic: ring
state_before: R : Type u_1
inst✝ : CommRing R
a b x₁ x₂ x₃ x₄ x₅ x₆ x₇ x₈ y₁ y₂ y₃ y₄ y₅ y₆ y₇ y₈ n : R
⊢ (x₁ ^ 2 + x₂ ^ 2 + x₃ ^ 2 + x₄ ^ 2) * (y₁ ^ 2 + y₂ ^ 2 + y₃ ^ 2 + y₄ ^ 2) =
    (x₁ * y₁ - x₂ * y₂ - x₃ * y₃ - x₄ * y₄) ^ 2 + (x₁ * y₂ + x₂ * y₁ + x₃ * y₄ - x₄ * y₃) ^ 2 +
        (x₁ * y₃ - x₂ * y₄ + x₃ * y₁ + x₄ * y₂) ^ 2 +
      (x₁ * y₄ + x₂ * y₃ - x₃ * y₂ + x₄ * y₁) ^ 2
state_after: no goals
Theorem: ContinuousLinearMap.toSpanSingleton_smul'
File: Mathlib/Topology/Algebra/Module/Basic.lean

tactic: ext1
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✝⁸ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝⁷ : Module R₁ M₂
inst✝⁶ : TopologicalSpace R₁
inst✝⁵ : ContinuousSMul R₁ M₂
inst✝⁴ : ContinuousSMul R₁ M₁
α : Type u_10
inst✝³ : Monoid α
inst✝² : DistribMulAction α M₁
inst✝¹ : ContinuousConstSMul α M₁
inst✝ : SMulCommClass R₁ α M₁
c : α
x : M₁
⊢ toSpanSingleton R₁ (c • x) = c • toSpanSingleton R₁ x
state_after: case h
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✝⁸ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝⁷ : Module R₁ M₂
inst✝⁶ : TopologicalSpace R₁
inst✝⁵ : ContinuousSMul R₁ M₂
inst✝⁴ : ContinuousSMul R₁ M₁
α : Type u_10
inst✝³ : Monoid α
inst✝² : DistribMulAction α M₁
inst✝¹ : ContinuousConstSMul α M₁
inst✝ : SMulCommClass R₁ α M₁
c : α
x : M₁
⊢ (toSpanSingleton R₁ (c • x)) 1 = (c • toSpanSingleton R₁ x) 1

tactic: rw [toSpanSingleton_apply, smul_apply, toSpanSingleton_apply, smul_comm]
state_before: case h
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✝⁸ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝⁷ : Module R₁ M₂
inst✝⁶ : TopologicalSpace R₁
inst✝⁵ : ContinuousSMul R₁ M₂
inst✝⁴ : ContinuousSMul R₁ M₁
α : Type u_10
inst✝³ : Monoid α
inst✝² : DistribMulAction α M₁
inst✝¹ : ContinuousConstSMul α M₁
inst✝ : SMulCommClass R₁ α M₁
c : α
x : M₁
⊢ (toSpanSingleton R₁ (c • x)) 1 = (c • toSpanSingleton R₁ x) 1
state_after: no goals
Theorem: MulChar.IsNontrivial.comp
File: Mathlib/NumberTheory/MulChar/Basic.lean

tactic: obtain ⟨a, ha⟩ := hχ
state_before: R : Type u_1
inst✝² : CommMonoid R
R' : Type u_2
inst✝¹ : CommRing R'
R'' : Type u_3
inst✝ : CommRing R''
χ : MulChar R R'
hχ : χ.IsNontrivial
f : R' →+* R''
hf : Function.Injective ⇑f
⊢ (χ.ringHomComp f).IsNontrivial
state_after: case intro
R : Type u_1
inst✝² : CommMonoid R
R' : Type u_2
inst✝¹ : CommRing R'
R'' : Type u_3
inst✝ : CommRing R''
χ : MulChar R R'
f : R' →+* R''
hf : Function.Injective ⇑f
a : Rˣ
ha : χ ↑a ≠ 1
⊢ (χ.ringHomComp f).IsNontrivial

tactic: use a
state_before: case intro
R : Type u_1
inst✝² : CommMonoid R
R' : Type u_2
inst✝¹ : CommRing R'
R'' : Type u_3
inst✝ : CommRing R''
χ : MulChar R R'
f : R' →+* R''
hf : Function.Injective ⇑f
a : Rˣ
ha : χ ↑a ≠ 1
⊢ (χ.ringHomComp f).IsNontrivial
state_after: case h
R : Type u_1
inst✝² : CommMonoid R
R' : Type u_2
inst✝¹ : CommRing R'
R'' : Type u_3
inst✝ : CommRing R''
χ : MulChar R R'
f : R' →+* R''
hf : Function.Injective ⇑f
a : Rˣ
ha : χ ↑a ≠ 1
⊢ (χ.ringHomComp f) ↑a ≠ 1

tactic: simp_rw [ringHomComp_apply, ← RingHom.map_one f]
state_before: case h
R : Type u_1
inst✝² : CommMonoid R
R' : Type u_2
inst✝¹ : CommRing R'
R'' : Type u_3
inst✝ : CommRing R''
χ : MulChar R R'
f : R' →+* R''
hf : Function.Injective ⇑f
a : Rˣ
ha : χ ↑a ≠ 1
⊢ (χ.ringHomComp f) ↑a ≠ 1
state_after: case h
R : Type u_1
inst✝² : CommMonoid R
R' : Type u_2
inst✝¹ : CommRing R'
R'' : Type u_3
inst✝ : CommRing R''
χ : MulChar R R'
f : R' →+* R''
hf : Function.Injective ⇑f
a : Rˣ
ha : χ ↑a ≠ 1
⊢ f (χ ↑a) ≠ f 1

tactic: exact fun h => ha (hf h)
state_before: case h
R : Type u_1
inst✝² : CommMonoid R
R' : Type u_2
inst✝¹ : CommRing R'
R'' : Type u_3
inst✝ : CommRing R''
χ : MulChar R R'
f : R' →+* R''
hf : Function.Injective ⇑f
a : Rˣ
ha : χ ↑a ≠ 1
⊢ f (χ ↑a) ≠ f 1
state_after: no goals
Theorem: Matroid.finite_setOf_restriction
File: Mathlib/Data/Matroid/Restrict.lean

tactic: rintro _ ⟨R, hR, rfl⟩
state_before: α : Type u_1
M✝ : Matroid α
R I J X Y : Set α
N M : Matroid α
inst✝ : M.Finite
⊢ {N | N ≤r M} ⊆ (fun R => M ↾ R) '' {b | b ⊆ M.E}
state_after: case intro.intro
α : Type u_1
M✝ : Matroid α
R✝ I J X Y : Set α
N M : Matroid α
inst✝ : M.Finite
R : Set α
hR : R ⊆ M.E
⊢ M ↾ R ∈ (fun R => M ↾ R) '' {b | b ⊆ M.E}

tactic: exact ⟨_, hR, rfl⟩
state_before: case intro.intro
α : Type u_1
M✝ : Matroid α
R✝ I J X Y : Set α
N M : Matroid α
inst✝ : M.Finite
R : Set α
hR : R ⊆ M.E
⊢ M ↾ R ∈ (fun R => M ↾ R) '' {b | b ⊆ M.E}
state_after: no goals
Theorem: norm_one'
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: rw [← dist_one_right, dist_self]
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
⊢ ‖1‖ = 0
state_after: no goals
Theorem: RingHom.codomain_trivial_iff_range_trivial
File: Mathlib/Algebra/Ring/Hom/Defs.lean

tactic: rw [← mul_one x, map_mul, h, mul_zero]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
x✝² : NonAssocSemiring α
x✝¹ : NonAssocSemiring β
f : α →+* β
x✝ y : α
h : f 1 = 0
x : α
⊢ f x = 0
state_after: no goals
Theorem: Finset.card_singleton_inter
File: Mathlib/Data/Finset/Card.lean

tactic: cases' Finset.decidableMem a s with h h
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t : Finset α
a b : α
inst✝ : DecidableEq α
⊢ ({a} ∩ s).card ≤ 1
state_after: case isFalse
α : Type u_1
β : Type u_2
R : Type u_3
s t : Finset α
a b : α
inst✝ : DecidableEq α
h : a ∉ s
⊢ ({a} ∩ s).card ≤ 1

case isTrue
α : Type u_1
β : Type u_2
R : Type u_3
s t : Finset α
a b : α
inst✝ : DecidableEq α
h : a ∈ s
⊢ ({a} ∩ s).card ≤ 1

tactic: simp [Finset.singleton_inter_of_not_mem h]
state_before: case isFalse
α : Type u_1
β : Type u_2
R : Type u_3
s t : Finset α
a b : α
inst✝ : DecidableEq α
h : a ∉ s
⊢ ({a} ∩ s).card ≤ 1
state_after: no goals

tactic: simp [Finset.singleton_inter_of_mem h]
state_before: case isTrue
α : Type u_1
β : Type u_2
R : Type u_3
s t : Finset α
a b : α
inst✝ : DecidableEq α
h : a ∈ s
⊢ ({a} ∩ s).card ≤ 1
state_after: no goals
Theorem: MulActionHom.id_comp
File: Mathlib/GroupTheory/GroupAction/Hom.lean

tactic: rw [comp_apply, id_apply]
state_before: M' : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
φ : M → N
ψ : N → P
χ : M → P
X : Type u_5
inst✝⁴ : SMul M X
inst✝³ : SMul M' X
Y : Type u_6
inst✝² : SMul N Y
inst✝¹ : SMul M' Y
Z : Type u_7
inst✝ : SMul P Z
f : X →ₑ[φ] Y
x : X
⊢ ((MulActionHom.id N).comp f) x = f x
state_after: no goals
Theorem: List.prod_set'
File: Mathlib/Algebra/BigOperators/Group/List.lean

tactic: refine (prod_set L n a).trans ?_
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
L : List G
n : ℕ
a : G
⊢ (L.set n a).prod = L.prod * if hn : n < L.length then (L.get ⟨n, hn⟩)⁻¹ * a else 1
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
L : List G
n : ℕ
a : G
⊢ ((take n L).prod * if n < L.length then a else 1) * (drop (n + 1) L).prod =
    L.prod * if hn : n < L.length then (L.get ⟨n, hn⟩)⁻¹ * a else 1

tactic: split_ifs with hn
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
L : List G
n : ℕ
a : G
⊢ ((take n L).prod * if n < L.length then a else 1) * (drop (n + 1) L).prod =
    L.prod * if hn : n < L.length then (L.get ⟨n, hn⟩)⁻¹ * a else 1
state_after: case pos
ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
L : List G
n : ℕ
a : G
hn : n < L.length
⊢ (take n L).prod * a * (drop (n + 1) L).prod = L.prod * ((L.get ⟨n, hn⟩)⁻¹ * a)

case neg
ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
L : List G
n : ℕ
a : G
hn : ¬n < L.length
⊢ (take n L).prod * 1 * (drop (n + 1) L).prod = L.prod * 1

tactic: rw [mul_comm _ a, mul_assoc a, prod_drop_succ L n hn, mul_comm _ (drop n L).prod, ←
  mul_assoc (take n L).prod, prod_take_mul_prod_drop, mul_comm a, mul_assoc]
state_before: case pos
ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
L : List G
n : ℕ
a : G
hn : n < L.length
⊢ (take n L).prod * a * (drop (n + 1) L).prod = L.prod * ((L.get ⟨n, hn⟩)⁻¹ * a)
state_after: no goals

tactic: simp only [take_all_of_le (le_of_not_lt hn), prod_nil, mul_one,
  drop_eq_nil_of_le ((le_of_not_lt hn).trans n.le_succ)]
state_before: case neg
ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
L : List G
n : ℕ
a : G
hn : ¬n < L.length
⊢ (take n L).prod * 1 * (drop (n + 1) L).prod = L.prod * 1
state_after: no goals
Theorem: Set.inv_Ioi
File: Mathlib/Data/Set/Pointwise/Interval.lean

tactic: rw [inv_eq_iff_eq_inv, inv_Ioo_0_left (inv_pos.2 ha), inv_inv]
state_before: α : Type u_1
inst✝ : LinearOrderedField α
a✝ a : α
ha : 0 < a
⊢ (Ioi a)⁻¹ = Ioo 0 a⁻¹
state_after: no goals
Theorem: Int.dvd_of_mul_dvd_mul_right
File: Mathlib/Data/Int/Defs.lean

tactic: simpa [Int.mul_comm] using h
state_before: a b c d m n : ℤ
ha : a ≠ 0
h : m * a ∣ n * a
⊢ a * m ∣ a * n
state_after: no goals
Theorem: Set.smul_mem_centralizer
File: Mathlib/Algebra/Algebra/NonUnitalSubalgebra.lean

tactic: rw [mul_smul_comm, smul_mul_assoc, ha x hx]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
s : Set A
r : R
a : A
ha : a ∈ s.centralizer
x : A
hx : x ∈ s
⊢ x * r • a = r • a * x
state_after: no goals
Theorem: DirectSum.decompose_lhom_ext
File: Mathlib/Algebra/DirectSum/Decomposition.lean

tactic: simp_rw [LinearMap.comp_assoc, decomposeLinearEquiv_symm_comp_lof ℳ i, h]
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
σ : Type u_4
inst✝⁶ : DecidableEq ι
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
ℳ : ι → Submodule R M
inst✝² : Decomposition ℳ
N : Type u_5
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
f g : M →ₗ[R] N
h : ∀ (i : ι), f ∘ₗ (ℳ i).subtype = g ∘ₗ (ℳ i).subtype
i : ι
⊢ (f ∘ₗ ↑(decomposeLinearEquiv ℳ).symm) ∘ₗ lof R ι (fun i => ↥(ℳ i)) i =
    (g ∘ₗ ↑(decomposeLinearEquiv ℳ).symm) ∘ₗ lof R ι (fun i => ↥(ℳ i)) i
state_after: no goals
Theorem: ContinuousAt.finset_inf
File: Mathlib/Topology/Order/Lattice.lean

tactic: simpa only [← Finset.inf_apply] using finset_inf_apply hs
state_before: L : Type u_1
X : Type u_2
inst✝⁴ : TopologicalSpace L
inst✝³ : TopologicalSpace X
ι : Type u_3
inst✝² : SemilatticeInf L
inst✝¹ : OrderTop L
inst✝ : ContinuousInf L
s : Finset ι
f : ι → X → L
t : Set X
x : X
hs : ∀ i ∈ s, ContinuousAt (f i) x
⊢ ContinuousAt (s.inf f) x
state_after: no goals
Theorem: Real.cos_lt_cos_of_nonneg_of_le_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: rw [← sin_pi_div_two_sub, ← sin_pi_div_two_sub]
state_before: x y : ℝ
hx₁ : 0 ≤ x
hy₂ : y ≤ π
hxy : x < y
⊢ cos y < cos x
state_after: x y : ℝ
hx₁ : 0 ≤ x
hy₂ : y ≤ π
hxy : x < y
⊢ sin (π / 2 - y) < sin (π / 2 - x)

tactic: apply sin_lt_sin_of_lt_of_le_pi_div_two <;> linarith
state_before: x y : ℝ
hx₁ : 0 ≤ x
hy₂ : y ≤ π
hxy : x < y
⊢ sin (π / 2 - y) < sin (π / 2 - x)
state_after: no goals
Theorem: sign_nonneg_iff
File: Mathlib/Data/Sign.lean

tactic: rcases lt_trichotomy 0 a with (h | h | h)
state_before: α : Type u_1
inst✝¹ : Zero α
inst✝ : LinearOrder α
a : α
⊢ 0 ≤ sign a ↔ 0 ≤ a
state_after: case inl
α : Type u_1
inst✝¹ : Zero α
inst✝ : LinearOrder α
a : α
h : 0 < a
⊢ 0 ≤ sign a ↔ 0 ≤ a

case inr.inl
α : Type u_1
inst✝¹ : Zero α
inst✝ : LinearOrder α
a : α
h : 0 = a
⊢ 0 ≤ sign a ↔ 0 ≤ a

case inr.inr
α : Type u_1
inst✝¹ : Zero α
inst✝ : LinearOrder α
a : α
h : a < 0
⊢ 0 ≤ sign a ↔ 0 ≤ a

tactic: simp [h, h.le]
state_before: case inl
α : Type u_1
inst✝¹ : Zero α
inst✝ : LinearOrder α
a : α
h : 0 < a
⊢ 0 ≤ sign a ↔ 0 ≤ a
state_after: no goals

tactic: simp [← h]
state_before: case inr.inl
α : Type u_1
inst✝¹ : Zero α
inst✝ : LinearOrder α
a : α
h : 0 = a
⊢ 0 ≤ sign a ↔ 0 ≤ a
state_after: no goals

tactic: simp [h, h.not_le]
state_before: case inr.inr
α : Type u_1
inst✝¹ : Zero α
inst✝ : LinearOrder α
a : α
h : a < 0
⊢ 0 ≤ sign a ↔ 0 ≤ a
state_after: no goals
Theorem: List.Pairwise.imp_of_mem
File: .lake/packages/batteries/Batteries/Data/List/Pairwise.lean

tactic: constructor
state_before: case nil
α : Type u_1
l : List α
R S : α → α → Prop
H : ∀ {a b : α}, a ∈ [] → b ∈ [] → R a b → S a b
⊢ Pairwise S []
state_after: no goals

tactic: constructor
state_before: case cons
α : Type u_1
l✝ : List α
R S : α → α → Prop
a : α
l : List α
r : ∀ (a' : α), a' ∈ l → R a a'
a✝ : Pairwise R l
ih : (∀ {a b : α}, a ∈ l → b ∈ l → R a b → S a b) → Pairwise S l
H : ∀ {a_1 b : α}, a_1 ∈ a :: l → b ∈ a :: l → R a_1 b → S a_1 b
⊢ Pairwise S (a :: l)
state_after: case cons.a
α : Type u_1
l✝ : List α
R S : α → α → Prop
a : α
l : List α
r : ∀ (a' : α), a' ∈ l → R a a'
a✝ : Pairwise R l
ih : (∀ {a b : α}, a ∈ l → b ∈ l → R a b → S a b) → Pairwise S l
H : ∀ {a_1 b : α}, a_1 ∈ a :: l → b ∈ a :: l → R a_1 b → S a_1 b
⊢ ∀ (a' : α), a' ∈ l → S a a'

case cons.a
α : Type u_1
l✝ : List α
R S : α → α → Prop
a : α
l : List α
r : ∀ (a' : α), a' ∈ l → R a a'
a✝ : Pairwise R l
ih : (∀ {a b : α}, a ∈ l → b ∈ l → R a b → S a b) → Pairwise S l
H : ∀ {a_1 b : α}, a_1 ∈ a :: l → b ∈ a :: l → R a_1 b → S a_1 b
⊢ Pairwise S l

tactic: exact fun x h => H (mem_cons_self ..) (mem_cons_of_mem _ h) <| r x h
state_before: case cons.a
α : Type u_1
l✝ : List α
R S : α → α → Prop
a : α
l : List α
r : ∀ (a' : α), a' ∈ l → R a a'
a✝ : Pairwise R l
ih : (∀ {a b : α}, a ∈ l → b ∈ l → R a b → S a b) → Pairwise S l
H : ∀ {a_1 b : α}, a_1 ∈ a :: l → b ∈ a :: l → R a_1 b → S a_1 b
⊢ ∀ (a' : α), a' ∈ l → S a a'
state_after: no goals

tactic: exact ih fun m m' => H (mem_cons_of_mem _ m) (mem_cons_of_mem _ m')
state_before: case cons.a
α : Type u_1
l✝ : List α
R S : α → α → Prop
a : α
l : List α
r : ∀ (a' : α), a' ∈ l → R a a'
a✝ : Pairwise R l
ih : (∀ {a b : α}, a ∈ l → b ∈ l → R a b → S a b) → Pairwise S l
H : ∀ {a_1 b : α}, a_1 ∈ a :: l → b ∈ a :: l → R a_1 b → S a_1 b
⊢ Pairwise S l
state_after: no goals
Theorem: Set.neg_mem_centralizer
File: Mathlib/Algebra/Ring/Centralizer.lean

tactic: rw [mul_neg, ha c hc, neg_mul]
state_before: M : Type u_1
S T : Set M
a : M
b : ?m.797
inst✝¹ : Mul M
inst✝ : HasDistribNeg M
ha : a ∈ S.centralizer
c : M
hc : c ∈ S
⊢ c * -a = -a * c
state_after: no goals
Theorem: GaussianInt.div_def
File: Mathlib/NumberTheory/Zsqrtd/GaussianInt.lean

tactic: simp [div_eq_mul_inv]
state_before: x y : ℤ[i]
⊢ { re := round (↑(x * star y).re * (↑(norm y))⁻¹), im := round (↑(x * star y).im * (↑(norm y))⁻¹) } =
    { re := round (↑(x * star y).re / ↑(norm y)), im := round (↑(x * star y).im / ↑(norm y)) }
state_after: no goals
Theorem: Batteries.TransCmp.cmp_congr_right
File: .lake/packages/batteries/Batteries/Classes/Order.lean

tactic: rw [← Ordering.swap_inj, symm, symm, cmp_congr_left yz]
state_before: cmp✝ : ?m.5873 → ?m.5873 → Ordering
inst✝² : TransCmp cmp✝
x✝ : Sort u_1
cmp : x✝ → x✝ → Ordering
inst✝¹ : TransCmp cmp
y z x : x✝
inst✝ : TransCmp cmp
yz : cmp y z = Ordering.eq
⊢ cmp x y = cmp x z
state_after: no goals
Theorem: ONote.fastGrowing_def
File: Mathlib/SetTheory/Ordinal/Notation.lean

tactic: subst x
state_before: o : ONote
x : Option ONote ⊕ (ℕ → ONote)
e : o.fundamentalSequence = x
⊢ o.fastGrowing =
    match (motive := (x : Option ONote ⊕ (ℕ → ONote)) → o.FundamentalSequenceProp x → ℕ → ℕ) x, ⋯ with
    | Sum.inl none, x => Nat.succ
    | Sum.inl (some a), x => fun i => a.fastGrowing^[i] i
    | Sum.inr f, x => fun i => (f i).fastGrowing i
state_after: o : ONote
⊢ o.fastGrowing =
    match (motive := (x : Option ONote ⊕ (ℕ → ONote)) → o.FundamentalSequenceProp x → ℕ → ℕ) o.fundamentalSequence,
      ⋯ with
    | Sum.inl none, x => Nat.succ
    | Sum.inl (some a), x => fun i => a.fastGrowing^[i] i
    | Sum.inr f, x => fun i => (f i).fastGrowing i

tactic: rw [fastGrowing]
state_before: o : ONote
⊢ o.fastGrowing =
    match (motive := (x : Option ONote ⊕ (ℕ → ONote)) → o.FundamentalSequenceProp x → ℕ → ℕ) o.fundamentalSequence,
      ⋯ with
    | Sum.inl none, x => Nat.succ
    | Sum.inl (some a), x => fun i => a.fastGrowing^[i] i
    | Sum.inr f, x => fun i => (f i).fastGrowing i
state_after: no goals
Theorem: Hyperreal.infiniteNeg_mul_of_infiniteNeg_not_infinitesimal_pos
File: Mathlib/Data/Real/Hyperreal.lean

tactic: rw [← infinitePos_neg, ← infinitePos_neg, neg_mul_eq_neg_mul]
state_before: x y : ℝ*
⊢ x.InfiniteNeg → ¬y.Infinitesimal → 0 < y → (x * y).InfiniteNeg
state_after: x y : ℝ*
⊢ (-x).InfinitePos → ¬y.Infinitesimal → 0 < y → (-x * y).InfinitePos

tactic: exact infinitePos_mul_of_infinitePos_not_infinitesimal_pos
state_before: x y : ℝ*
⊢ (-x).InfinitePos → ¬y.Infinitesimal → 0 < y → (-x * y).InfinitePos
state_after: no goals