ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Polynomial.aroots_smul_nonzero
File: Mathlib/Algebra/Polynomial/Roots.lean

Proof steps:
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
inst✝ : NoZeroSMulDivisors T S
a : T
p : T[X]
ha : a ≠ 0
⊢ (a • p).aroots S = p.aroots S
state_after: no goals
tactic: rw [smul_eq_C_mul, aroots_C_mul _ ha]
Theorem: AlgebraicGeometry.Scheme.restrictFunctor_map_ofRestrict
File: Mathlib/AlgebraicGeometry/Restrict.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X : Scheme
U✝ U V : X.Opens
i : U ⟶ V
⊢ Set.range ⇑U.ι.val.base ⊆ Set.range ⇑V.ι.val.base
state_after: no goals
tactic: simpa using i.le
Theorem: ContDiffBump.neg
File: Mathlib/Analysis/Calculus/BumpFunction/Basic.lean

Proof steps:
state_before: E : Type u_1
X : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup X
inst✝¹ : NormedSpace ℝ X
inst✝ : HasContDiffBump E
c : E
f✝ : ContDiffBump c
x✝ : E
n : ℕ∞
f : ContDiffBump 0
x : E
⊢ ↑f (-x) = ↑f x
state_after: no goals
tactic: simp_rw [← zero_sub, f.sub, zero_add]
Theorem: WeakDual.isClosed_polar
File: Mathlib/Analysis/Normed/Module/WeakDual.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
s : Set E
⊢ IsClosed (polar 𝕜 s)
state_after: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
s : Set E
⊢ IsClosed (⋂ i ∈ s, {x | ‖x i‖ ≤ 1})
tactic: simp only [polar_def, setOf_forall]
state_before: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
s : Set E
⊢ IsClosed (⋂ i ∈ s, {x | ‖x i‖ ≤ 1})
state_after: no goals
tactic: exact isClosed_biInter fun x hx => isClosed_Iic.preimage (WeakBilin.eval_continuous _ _).norm
Theorem: ModP.preVal_eq_zero
File: Mathlib/RingTheory/Perfection.lean

Proof steps:
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
hvx : preVal K v O hv p x = 0
hx0 : x ≠ 0
⊢ False
state_after: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
hvx : preVal K v O hv p x = 0
hx0 : v ↑p < 0
⊢ False
tactic: rw [← v_p_lt_preVal, hvx] at hx0
state_before: K : Type u₁
inst✝² : Field K
v : Valuation K ℝ≥0
O : Type u₂
inst✝¹ : CommRing O
inst✝ : Algebra O K
hv : v.Integers O
p : ℕ
hp : Fact (Nat.Prime p)
hvp : Fact (v ↑p ≠ 1)
x : ModP K v O hv p
hvx : preVal K v O hv p x = 0
hx0 : v ↑p < 0
⊢ False
state_after: no goals
tactic: exact not_lt_zero' hx0
Theorem: GaussianInt.norm_le_norm_mul_left
File: Mathlib/NumberTheory/Zsqrtd/GaussianInt.lean

Proof steps:
state_before: x y : ℤ[i]
hy : y ≠ 0
⊢ (norm x).natAbs ≤ (norm (x * y)).natAbs
state_after: x y : ℤ[i]
hy : y ≠ 0
⊢ (norm x).natAbs ≤ (norm x).natAbs * (norm y).natAbs
tactic: rw [Zsqrtd.norm_mul, Int.natAbs_mul]
state_before: x y : ℤ[i]
hy : y ≠ 0
⊢ (norm x).natAbs ≤ (norm x).natAbs * (norm y).natAbs
state_after: no goals
tactic: exact le_mul_of_one_le_right (Nat.zero_le _) (Int.ofNat_le.1 (by
    rw [abs_natCast_norm]
    exact Int.add_one_le_of_lt (norm_pos.2 hy)))
Theorem: AffineIndependent.eq_of_sum_eq_sum
File: Mathlib/LinearAlgebra/AffineSpace/Independent.lean

Proof steps:
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type u_4
s : Finset ι
w w₁ w₂ : ι → k
p : ι → V
hp : AffineIndependent k p
hw : ∑ i ∈ s, w₁ i = ∑ i ∈ s, w₂ i
hwp : ∑ i ∈ s, w₁ i • p i = ∑ i ∈ s, w₂ i • p i
⊢ ∀ i ∈ s, w₁ i = w₂ i
state_after: no goals
tactic: refine fun i hi ↦ sub_eq_zero.1 (hp.eq_zero_of_sum_eq_zero (w := w₁ - w₂) ?_ ?_ _ hi) <;>
    simpa [sub_mul, sub_smul, sub_eq_zero]
Theorem: OrderIso.ofRelIsoLT_toRelIsoLT
File: Mathlib/Order/Hom/Basic.lean

Proof steps:
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
δ : Type u_5
inst✝⁴ : Preorder α✝
inst✝³ : Preorder β✝
inst✝² : Preorder γ
α : Type u_6
β : Type u_7
inst✝¹ : PartialOrder α
inst✝ : PartialOrder β
e : α ≃o β
⊢ ofRelIsoLT e.toRelIsoLT = e
state_after: case h.h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
δ : Type u_5
inst✝⁴ : Preorder α✝
inst✝³ : Preorder β✝
inst✝² : Preorder γ
α : Type u_6
β : Type u_7
inst✝¹ : PartialOrder α
inst✝ : PartialOrder β
e : α ≃o β
x✝ : α
⊢ (ofRelIsoLT e.toRelIsoLT) x✝ = e x✝
tactic: ext
state_before: case h.h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
δ : Type u_5
inst✝⁴ : Preorder α✝
inst✝³ : Preorder β✝
inst✝² : Preorder γ
α : Type u_6
β : Type u_7
inst✝¹ : PartialOrder α
inst✝ : PartialOrder β
e : α ≃o β
x✝ : α
⊢ (ofRelIsoLT e.toRelIsoLT) x✝ = e x✝
state_after: no goals
tactic: simp
Theorem: Nat.primesBelow_zero
File: Mathlib/NumberTheory/SmoothNumbers.lean

Proof steps:
state_before: ⊢ primesBelow 0 = ∅
state_after: no goals
tactic: rw [primesBelow, Finset.range_zero, Finset.filter_empty]
Theorem: AlgebraicGeometry.IsClosedImmersion.eq_inf
File: Mathlib/AlgebraicGeometry/Morphisms/ClosedImmersion.lean

Proof steps:
state_before: ⊢ @IsClosedImmersion =
    (topologically fun {α β} [TopologicalSpace α] [TopologicalSpace β] => ClosedEmbedding) ⊓
      stalkwise fun {R S} [CommRing R] [CommRing S] f => Function.Surjective ⇑f
state_after: case h.h.h.a
X Y : Scheme
f : X ⟶ Y
⊢ IsClosedImmersion f ↔
    ((topologically fun {α β} [TopologicalSpace α] [TopologicalSpace β] => ClosedEmbedding) ⊓
        stalkwise fun {R S} [CommRing R] [CommRing S] f => Function.Surjective ⇑f)
      f
tactic: ext X Y f
state_before: case h.h.h.a
X Y : Scheme
f : X ⟶ Y
⊢ IsClosedImmersion f ↔
    ((topologically fun {α β} [TopologicalSpace α] [TopologicalSpace β] => ClosedEmbedding) ⊓
        stalkwise fun {R S} [CommRing R] [CommRing S] f => Function.Surjective ⇑f)
      f
state_after: case h.h.h.a
X Y : Scheme
f : X ⟶ Y
⊢ (ClosedEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), Function.Surjective ⇑(Scheme.Hom.stalkMap f x)) ↔
    ((topologically fun {α β} [TopologicalSpace α] [TopologicalSpace β] => ClosedEmbedding) ⊓
        stalkwise fun {R S} [CommRing R] [CommRing S] f => Function.Surjective ⇑f)
      f
tactic: rw [isClosedImmersion_iff]
state_before: case h.h.h.a
X Y : Scheme
f : X ⟶ Y
⊢ (ClosedEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), Function.Surjective ⇑(Scheme.Hom.stalkMap f x)) ↔
    ((topologically fun {α β} [TopologicalSpace α] [TopologicalSpace β] => ClosedEmbedding) ⊓
        stalkwise fun {R S} [CommRing R] [CommRing S] f => Function.Surjective ⇑f)
      f
state_after: no goals
tactic: rfl
Theorem: ContinuousLinearMap.dist_le_opNorm
File: Mathlib/Analysis/NormedSpace/OperatorNorm/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
𝕜₂ : Type u_2
𝕜₃ : Type u_3
E : Type u_4
Eₗ : Type u_5
F : Type u_6
Fₗ : Type u_7
G : Type u_8
Gₗ : Type u_9
𝓕 : Type u_10
inst✝¹⁷ : SeminormedAddCommGroup E
inst✝¹⁶ : SeminormedAddCommGroup Eₗ
inst✝¹⁵ : SeminormedAddCommGroup F
inst✝¹⁴ : SeminormedAddCommGroup Fₗ
inst✝¹³ : SeminormedAddCommGroup G
inst✝¹² : SeminormedAddCommGroup Gₗ
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NontriviallyNormedField 𝕜₂
inst✝⁹ : NontriviallyNormedField 𝕜₃
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace 𝕜 Eₗ
inst✝⁶ : NormedSpace 𝕜₂ F
inst✝⁵ : NormedSpace 𝕜 Fₗ
inst✝⁴ : NormedSpace 𝕜₃ G
σ₁₂ : 𝕜 →+* 𝕜₂
σ₂₃ : 𝕜₂ →+* 𝕜₃
σ₁₃ : 𝕜 →+* 𝕜₃
inst✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝² : FunLike 𝓕 E F
inst✝¹ : RingHomIsometric σ₁₂
inst✝ : RingHomIsometric σ₂₃
f g : E →SL[σ₁₂] F
h : F →SL[σ₂₃] G
x✝ x y : E
⊢ dist (f x) (f y) ≤ ‖f‖ * dist x y
state_after: no goals
tactic: simp_rw [dist_eq_norm, ← map_sub, f.le_opNorm]
Theorem: Set.Ici_inter_Ici
File: Mathlib/Order/Interval/Set/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : SemilatticeSup α
a b : α
⊢ Ici a ∩ Ici b = Ici (a ⊔ b)
state_after: case h
α : Type u_1
β : Type u_2
inst✝ : SemilatticeSup α
a b x : α
⊢ x ∈ Ici a ∩ Ici b ↔ x ∈ Ici (a ⊔ b)
tactic: ext x
state_before: case h
α : Type u_1
β : Type u_2
inst✝ : SemilatticeSup α
a b x : α
⊢ x ∈ Ici a ∩ Ici b ↔ x ∈ Ici (a ⊔ b)
state_after: no goals
tactic: simp [Ici]
Theorem: AddMonoidAlgebra.single_mem_gradeBy
File: Mathlib/Algebra/MonoidAlgebra/Grading.lean

Proof steps:
state_before: M : Type u_1
ι : Type u_2
R✝ : Type u_3
inst✝¹ : CommSemiring R✝
R : Type u_4
inst✝ : CommSemiring R
f : M → ι
m : M
r : R
⊢ Finsupp.single m r ∈ gradeBy R f (f m)
state_after: M : Type u_1
ι : Type u_2
R✝ : Type u_3
inst✝¹ : CommSemiring R✝
R : Type u_4
inst✝ : CommSemiring R
f : M → ι
m : M
r : R
x : M
hx : x ∈ (Finsupp.single m r).support
⊢ f x = f m
tactic: intro x hx
state_before: M : Type u_1
ι : Type u_2
R✝ : Type u_3
inst✝¹ : CommSemiring R✝
R : Type u_4
inst✝ : CommSemiring R
f : M → ι
m : M
r : R
x : M
hx : x ∈ (Finsupp.single m r).support
⊢ f x = f m
state_after: no goals
tactic: rw [Finset.mem_singleton.mp (Finsupp.support_single_subset hx)]
Theorem: Option.guard_eq_some'
File: Mathlib/Data/Option/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
p : Prop
inst✝ : Decidable p
u : Unit
⊢ _root_.guard p = some u ↔ p
state_after: case unit
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
p : Prop
inst✝ : Decidable p
⊢ _root_.guard p = some PUnit.unit ↔ p
tactic: cases u
state_before: case unit
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
p : Prop
inst✝ : Decidable p
⊢ _root_.guard p = some PUnit.unit ↔ p
state_after: no goals
tactic: by_cases h : p <;> simp [_root_.guard, h]
Theorem: Orientation.oangle_neg_neg
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

Proof steps:
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ o.oangle (-x) (-y) = o.oangle x y
state_after: no goals
tactic: simp [oangle]
Theorem: Mathlib.Meta.NormNum.isRat_ratCast
File: Mathlib/Tactic/NormNum/Inv.lean

Proof steps:
state_before: u : Lean.Level
R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑qi * ↑denom✝ = 1
state_after: no goals
tactic: norm_cast
state_before: u : Lean.Level
R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑denom✝ * ↑qi = 1
state_after: no goals
tactic: norm_cast
state_before: u : Lean.Level
R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑(↑num✝ * ⅟↑denom✝) = ↑num✝ * ⅟↑denom✝
state_after: u : Lean.Level
R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑(↑num✝ * qi) = ↑num✝ * ↑qi
tactic: simp only []
state_before: u : Lean.Level
R : Type u_1
inst✝¹ : DivisionRing R
inst✝ : CharZero R
num✝ : ℤ
denom✝ : ℕ
qi : ℚ
invOf_mul_self✝ : qi * ↑denom✝ = 1
mul_invOf_self✝ : ↑denom✝ * qi = 1
⊢ ↑(↑num✝ * qi) = ↑num✝ * ↑qi
state_after: no goals
tactic: norm_cast
Theorem: integrable_mul_cexp_neg_mul_sq
File: Mathlib/Analysis/SpecialFunctions/Gaussian/GaussianIntegral.lean

Proof steps:
state_before: b : ℂ
hb : 0 < b.re
⊢ Integrable (fun x => ↑x * cexp (-b * ↑x ^ 2)) volume
state_after: case refine_1
b : ℂ
hb : 0 < b.re
⊢ Continuous fun x => -b * ↑x ^ 2

case refine_2
b : ℂ
hb : 0 < b.re
⊢ HasFiniteIntegral (fun x => ↑x * cexp (-b * ↑x ^ 2)) volume
tactic: refine ⟨(continuous_ofReal.mul (Complex.continuous_exp.comp ?_)).aestronglyMeasurable, ?_⟩
state_before: case refine_2
b : ℂ
hb : 0 < b.re
⊢ HasFiniteIntegral (fun x => ↑x * cexp (-b * ↑x ^ 2)) volume
state_after: case refine_2
b : ℂ
hb : 0 < b.re
this : HasFiniteIntegral (fun x => x * rexp (-b.re * x ^ 2)) volume
⊢ HasFiniteIntegral (fun x => ↑x * cexp (-b * ↑x ^ 2)) volume
tactic: have := (integrable_mul_exp_neg_mul_sq hb).hasFiniteIntegral
state_before: case refine_2
b : ℂ
hb : 0 < b.re
this : HasFiniteIntegral (fun x => x * rexp (-b.re * x ^ 2)) volume
⊢ HasFiniteIntegral (fun x => ↑x * cexp (-b * ↑x ^ 2)) volume
state_after: case refine_2
b : ℂ
hb : 0 < b.re
this : HasFiniteIntegral (fun a => ‖a * rexp (-b.re * a ^ 2)‖) volume
⊢ HasFiniteIntegral (fun a => ‖↑a * cexp (-b * ↑a ^ 2)‖) volume
tactic: rw [← hasFiniteIntegral_norm_iff] at this ⊢
state_before: case refine_2
b : ℂ
hb : 0 < b.re
this : HasFiniteIntegral (fun a => ‖a * rexp (-b.re * a ^ 2)‖) volume
⊢ HasFiniteIntegral (fun a => ‖↑a * cexp (-b * ↑a ^ 2)‖) volume
state_after: case h.e'_5.h
b : ℂ
hb : 0 < b.re
this : HasFiniteIntegral (fun a => ‖a * rexp (-b.re * a ^ 2)‖) volume
x✝ : ℝ
⊢ ‖↑x✝ * cexp (-b * ↑x✝ ^ 2)‖ = ‖x✝ * rexp (-b.re * x✝ ^ 2)‖
tactic: convert this
state_before: case h.e'_5.h
b : ℂ
hb : 0 < b.re
this : HasFiniteIntegral (fun a => ‖a * rexp (-b.re * a ^ 2)‖) volume
x✝ : ℝ
⊢ ‖↑x✝ * cexp (-b * ↑x✝ ^ 2)‖ = ‖x✝ * rexp (-b.re * x✝ ^ 2)‖
state_after: no goals
tactic: rw [norm_mul, norm_mul, norm_cexp_neg_mul_sq b, Complex.norm_eq_abs, abs_ofReal, Real.norm_eq_abs,
    norm_of_nonneg (exp_pos _).le]
Theorem: CategoryTheory.SimplicialObject.eqToIso_refl
File: Mathlib/AlgebraicTopology/SimplicialObject.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X : SimplicialObject C
n : ℕ
h : n = n
⊢ X.eqToIso h = Iso.refl (X _[n])
state_after: case w
C : Type u
inst✝ : Category.{v, u} C
X : SimplicialObject C
n : ℕ
h : n = n
⊢ (X.eqToIso h).hom = (Iso.refl (X _[n])).hom
tactic: ext
state_before: case w
C : Type u
inst✝ : Category.{v, u} C
X : SimplicialObject C
n : ℕ
h : n = n
⊢ (X.eqToIso h).hom = (Iso.refl (X _[n])).hom
state_after: no goals
tactic: simp [eqToIso]
Theorem: List.length_iterate
File: Mathlib/Data/List/Iterate.lean

Proof steps:
state_before: α : Type u_1
f : α → α
a : α
n : ℕ
⊢ (iterate f a n).length = n
state_after: no goals
tactic: induction n generalizing a <;> simp [*]
Theorem: QuotientAddGroup.sound
File: Mathlib/GroupTheory/QuotientGroup.lean

Proof steps:
state_before: G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
U : Set (G ⧸ N)
g : ↥N.op
⊢ g • ⇑(mk' N) ⁻¹' U = ⇑(mk' N) ⁻¹' U
state_after: case h
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
U : Set (G ⧸ N)
g : ↥N.op
x : G
⊢ x ∈ g • ⇑(mk' N) ⁻¹' U ↔ x ∈ ⇑(mk' N) ⁻¹' U
tactic: ext x
state_before: case h
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
U : Set (G ⧸ N)
g : ↥N.op
x : G
⊢ x ∈ g • ⇑(mk' N) ⁻¹' U ↔ x ∈ ⇑(mk' N) ⁻¹' U
state_after: case h
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
U : Set (G ⧸ N)
g : ↥N.op
x : G
⊢ (mk' N) (g⁻¹ • x) ∈ U ↔ (mk' N) x ∈ U
tactic: simp only [Set.mem_preimage, Set.mem_smul_set_iff_inv_smul_mem]
state_before: case h
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
U : Set (G ⧸ N)
g : ↥N.op
x : G
⊢ (mk' N) (g⁻¹ • x) ∈ U ↔ (mk' N) x ∈ U
state_after: case h.a.h.e'_4
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
U : Set (G ⧸ N)
g : ↥N.op
x : G
⊢ (mk' N) (g⁻¹ • x) = (mk' N) x
tactic: congr! 1
state_before: case h.a.h.e'_4
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
U : Set (G ⧸ N)
g : ↥N.op
x : G
⊢ (mk' N) (g⁻¹ • x) = (mk' N) x
state_after: no goals
tactic: exact Quotient.sound ⟨g⁻¹, rfl⟩
Theorem: Nat.choose_symm_of_eq_add
File: Mathlib/Data/Nat/Choose/Basic.lean

Proof steps:
state_before: n a b : ℕ
h : n = a + b
⊢ n.choose a = n.choose b
state_after: n a b : ℕ
h : n = a + b
⊢ n.choose (n - b) = n.choose b
tactic: suffices choose n (n - b) = choose n b by
    rw [h, Nat.add_sub_cancel_right] at this; rwa [h]
state_before: n a b : ℕ
h : n = a + b
⊢ n.choose (n - b) = n.choose b
state_after: no goals
tactic: exact choose_symm (h ▸ le_add_left _ _)
Theorem: min_le_left
File: Mathlib/Init/Order/LinearOrder.lean

Proof steps:
state_before: α : Type u
inst✝ : LinearOrder α
a b : α
⊢ min a b ≤ a
state_after: no goals
tactic: if h : a ≤ b
  then simp [min_def, if_pos h, le_refl]
  else simp [min_def, if_neg h]; exact le_of_not_le h
Theorem: CategoryTheory.MonoidalCategory.dite_whiskerRight
File: Mathlib/CategoryTheory/Monoidal/Category.lean

Proof steps:
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝³ : MonoidalCategory C✝
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : MonoidalCategory C
U V W X✝ Y✝ Z✝ : C
P : Prop
inst✝ : Decidable P
X Y : C
f : P → (X ⟶ Y)
f' : ¬P → (X ⟶ Y)
Z : C
⊢ (if h : P then f h else f' h) ▷ Z = if h : P then f h ▷ Z else f' h ▷ Z
state_after: no goals
tactic: split_ifs <;> rfl
Theorem: Cubic.natDegree_of_a_eq_zero
File: Mathlib/Algebra/CubicDiscriminant.lean

Proof steps:
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
⊢ P.toPoly.natDegree ≤ 2
state_after: no goals
tactic: simpa only [of_a_eq_zero ha] using natDegree_quadratic_le
Theorem: pow_mul_comm'
File: Mathlib/Algebra/Group/Defs.lean

Proof steps:
state_before: G : Type u_1
M : Type u_2
inst✝ : Monoid M
a✝ b c : M
m n✝ : ℕ
a : M
n : ℕ
⊢ a ^ n * a = a * a ^ n
state_after: no goals
tactic: rw [← pow_succ, pow_succ']
Theorem: Polynomial.prod_cyclotomic_eq_geom_sum
File: Mathlib/RingTheory/Polynomial/Cyclotomic/Basic.lean

Proof steps:
state_before: n : ℕ
h : 0 < n
R : Type u_1
inst✝ : CommRing R
⊢ ∏ i ∈ n.divisors.erase 1, cyclotomic i R = ∑ i ∈ range n, X ^ i
state_after: n : ℕ
h : 0 < n
R : Type u_1
inst✝ : CommRing R
⊢ ∏ i ∈ n.divisors.erase 1, cyclotomic i ℤ = ∑ i ∈ range n, X ^ i
tactic: suffices (∏ i ∈ n.divisors.erase 1, cyclotomic i ℤ) = ∑ i ∈ Finset.range n, X ^ i by
    simpa only [Polynomial.map_prod, map_cyclotomic_int, Polynomial.map_sum, Polynomial.map_pow,
      Polynomial.map_X] using congr_arg (map (Int.castRingHom R)) this
state_before: n : ℕ
h : 0 < n
R : Type u_1
inst✝ : CommRing R
⊢ ∏ i ∈ n.divisors.erase 1, cyclotomic i ℤ = ∑ i ∈ range n, X ^ i
state_after: no goals
tactic: rw [← mul_left_inj' (cyclotomic_ne_zero 1 ℤ), prod_erase_mul _ _ (Nat.one_mem_divisors.2 h.ne'),
    cyclotomic_one, geom_sum_mul, prod_cyclotomic_eq_X_pow_sub_one h]
Theorem: Real.tan_neg_of_neg_of_pi_div_two_lt
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

Proof steps:
state_before: x : ℝ
hx0 : x < 0
hpx : -(π / 2) < x
⊢ 0 < -x
state_after: no goals
tactic: linarith
state_before: x : ℝ
hx0 : x < 0
hpx : -(π / 2) < x
⊢ -x < π / 2
state_after: no goals
tactic: linarith [pi_pos]
Theorem: ContinuousMultilinearMap.opNorm_zero_iff
File: Mathlib/Analysis/NormedSpace/Multilinear/Basic.lean

Proof steps:
state_before: 𝕜 : Type u
ι : Type v
E : ι → Type wE
G : Type wG
G' : Type wG'
inst✝⁷ : Fintype ι
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : SeminormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f : ContinuousMultilinearMap 𝕜 E G
⊢ ‖f‖ = 0 ↔ f = 0
state_after: no goals
tactic: simp [← (opNorm_nonneg f).le_iff_eq, opNorm_le_iff f le_rfl, ContinuousMultilinearMap.ext_iff]
Theorem: antilipschitzWith_mul_right
File: Mathlib/Analysis/Normed/Field/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
inst✝ : NormedDivisionRing α
a✝ a : α
ha : a ≠ 0
x✝¹ x✝ : α
⊢ dist x✝¹ x✝ ≤ ↑‖a‖₊⁻¹ * dist (x✝¹ * a) (x✝ * a)
state_after: no goals
tactic: simp [dist_eq_norm, ← _root_.sub_mul, ← mul_comm (‖a‖), ha]
Theorem: orthogonalProjection_comp_subtypeL_eq_zero_iff
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : (orthogonalProjection U).comp V.subtypeL = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
⊢ ⟪v, u⟫_𝕜 = 0
state_after: case h.e'_2.h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : (orthogonalProjection U).comp V.subtypeL = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
⊢ v = v - ↑((orthogonalProjection U) v)
tactic: convert orthogonalProjection_inner_eq_zero v u hu using 2
state_before: case h.e'_2.h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : (orthogonalProjection U).comp V.subtypeL = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
⊢ v = v - ↑((orthogonalProjection U) v)
state_after: case h.e'_2.h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : (orthogonalProjection U).comp V.subtypeL = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
this : (orthogonalProjection U) v = 0
⊢ v = v - ↑((orthogonalProjection U) v)
tactic: have : orthogonalProjection U v = 0 := DFunLike.congr_fun h (⟨_, hv⟩ : V)
state_before: case h.e'_2.h.e'_4
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K U V : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection U
h : (orthogonalProjection U).comp V.subtypeL = 0
u : E
hu : u ∈ U
v : E
hv : v ∈ V
this : (orthogonalProjection U) v = 0
⊢ v = v - ↑((orthogonalProjection U) v)
state_after: no goals
tactic: rw [this, Submodule.coe_zero, sub_zero]
Theorem: IsScalarTower.smulHomClass
File: Mathlib/GroupTheory/GroupAction/Hom.lean

Proof steps:
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 : Type u_8
inst✝⁴ : FunLike F X Y
inst✝³ : MulOneClass X
inst✝² : SMul X Y
inst✝¹ : IsScalarTower M' X Y
inst✝ : MulActionHomClass F X X Y
f : F
m : M'
x : X
⊢ f (m • x) = id m • f x
state_after: no goals
tactic: rw [← mul_one (m • x), ← smul_eq_mul, map_smul, smul_assoc, ← map_smul,
      smul_eq_mul, mul_one, id_eq]
Theorem: LieAlgebra.IsKilling.chainLength_neg
File: Mathlib/Algebra/Lie/Weights/RootSystem.lean

Proof steps:
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
⊢ chainLength (-α) β = chainLength α β
state_after: no goals
tactic: rw [← chainBotCoeff_add_chainTopCoeff, ← chainBotCoeff_add_chainTopCoeff, add_comm,
    Weight.coe_neg, chainTopCoeff_neg, chainBotCoeff_neg]
Theorem: Basis.finTwoProd_one
File: Mathlib/LinearAlgebra/Basis.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
R✝ : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
v : ι → M
inst✝⁹ : Ring R✝
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R✝ M
inst✝³ : Module R₂ M
inst✝² : Module R✝ M'
inst✝¹ : Module R✝ M''
c d : R✝
x y : M
b : Basis ι R✝ M
R : Type u_10
inst✝ : Semiring R
⊢ (Basis.finTwoProd R) 1 = (0, 1)
state_after: no goals
tactic: simp [Basis.finTwoProd, LinearEquiv.finTwoArrow]