ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: exists_nontrivial_relation_sum_zero_of_not_affine_ind
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
t : Finset V
h : ¬AffineIndependent k Subtype.val
⊢ ∃ f, ∑ e ∈ t, f e • e = 0 ∧ ∑ e ∈ t, f e = 0 ∧ ∃ x ∈ t, f x ≠ 0
state_after: no goals
tactic: classical
    rw [affineIndependent_iff_of_fintype] at h
    simp only [exists_prop, not_forall] at h
    obtain ⟨w, hw, hwt, i, hi⟩ := h
    simp only [Finset.weightedVSub_eq_weightedVSubOfPoint_of_sum_eq_zero _ w ((↑) : t → V) hw 0,
      vsub_eq_sub, Finset.weightedVSubOfPoint_apply, sub_zero] at hwt
    let f : ∀ x : V, x ∈ t → k := fun x hx => w ⟨x, hx⟩
    refine ⟨fun x => if hx : x ∈ t then f x hx else (0 : k), ?_, ?_, by use i; simp [hi]⟩
    on_goal 1 =>
      suffices (∑ e ∈ t, dite (e ∈ t) (fun hx => f e hx • e) fun _ => 0) = 0 by
        convert this
        rename V => x
        by_cases hx : x ∈ t <;> simp [hx]
    all_goals
      simp only [Finset.sum_dite_of_true fun _ h => h, Finset.mk_coe, hwt, hw]
Theorem: AddSubmonoid.LocalizationMap.mk'_cancel
File: Mathlib/GroupTheory/MonoidLocalization/Basic.lean

Proof steps:
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
a : M
b c : ↥S
⊢ a * ↑(b * c) = a * ↑c * ↑b
state_after: no goals
tactic: rw [Submonoid.coe_mul, mul_comm (b : M), mul_assoc]
Theorem: AddSubgroup.disjoint_def
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
H₁ H₂ : Subgroup G
⊢ H₁ ⊓ H₂ ≤ ⊥ ↔ ∀ {x : G}, x ∈ H₁ → x ∈ H₂ → x = 1
state_after: no goals
tactic: simp only [Disjoint, SetLike.le_def, mem_inf, mem_bot, and_imp]
Theorem: WeierstrassCurve.ΨSq_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : NoZeroDivisors R
n : ℤ
h : ↑n ≠ 0
⊢ W.ΨSq n ≠ 0
state_after: case pos
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : NoZeroDivisors R
n : ℤ
h : ↑n ≠ 0
hn : 1 < n.natAbs
⊢ W.ΨSq n ≠ 0

case neg
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : NoZeroDivisors R
n : ℤ
h : ↑n ≠ 0
hn : ¬1 < n.natAbs
⊢ W.ΨSq n ≠ 0
tactic: by_cases hn : 1 < n.natAbs
Theorem: RelEmbedding.wellFounded_iff_no_descending_seq
File: Mathlib/Order/OrderIsoNat.lean

Proof steps:
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsStrictOrder α r
⊢ WellFounded r ↔ IsEmpty ((fun x x_1 => x > x_1) ↪r r)
state_after: case mp
α : Type u_1
r : α → α → Prop
inst✝ : IsStrictOrder α r
⊢ WellFounded r → IsEmpty ((fun x x_1 => x > x_1) ↪r r)

case mpr
α : Type u_1
r : α → α → Prop
inst✝ : IsStrictOrder α r
⊢ IsEmpty ((fun x x_1 => x > x_1) ↪r r) → WellFounded r
tactic: constructor
Theorem: Multiset.map_eq_map
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Injective f
s t : Multiset α
⊢ map f s = map f t ↔ s = t
state_after: α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Injective f
s t : Multiset α
⊢ Rel (fun a b => f a = f b) s t ↔ Rel (fun x x_1 => x = x_1) s t
tactic: rw [← rel_eq, ← rel_eq, rel_map]
state_before: α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Injective f
s t : Multiset α
⊢ Rel (fun a b => f a = f b) s t ↔ Rel (fun x x_1 => x = x_1) s t
state_after: no goals
tactic: simp only [hf.eq_iff]
Theorem: indicator_eventuallyEq
File: Mathlib/Order/Filter/IndicatorFunction.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
M : Type u_3
E : Type u_4
inst✝ : One M
s t : Set α
f g : α → M
a : α
l : Filter α
hf : f =ᶠ[l ⊓ 𝓟 s] g
hs : s =ᶠ[l] t
x : α
hst : x ∈ s ↔ x ∈ t
hfg : x ∈ s → f x = g x
hxs : x ∈ s
⊢ s.mulIndicator f x = t.mulIndicator g x
state_after: no goals
tactic: simp only [*, hst.1 hxs, mulIndicator_of_mem]
state_before: α : Type u_1
β : Type u_2
M : Type u_3
E : Type u_4
inst✝ : One M
s t : Set α
f g : α → M
a : α
l : Filter α
hf : f =ᶠ[l ⊓ 𝓟 s] g
hs : s =ᶠ[l] t
x : α
hst : x ∈ s ↔ x ∈ t
hfg : x ∈ s → f x = g x
hxs : x ∉ s
⊢ s.mulIndicator f x = t.mulIndicator g x
state_after: no goals
tactic: simp only [mulIndicator_of_not_mem, hxs, mt hst.2 hxs, not_false_eq_true]
Theorem: PNat.lt_find_iff
File: Mathlib/Data/PNat/Find.lean

Proof steps:
state_before: p q : ℕ+ → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∃ n, p n
n✝ m n : ℕ+
⊢ n < PNat.find h ↔ ∀ m ≤ n, ¬p m
state_after: no goals
tactic: simp only [← add_one_le_iff, le_find_iff, add_le_add_iff_right]
Theorem: AlgebraicGeometry.PresheafedSpace.ext
File: Mathlib/Geometry/RingedSpace/PresheafedSpace.lean

Proof steps:
state_before: C : Type u_1
inst✝ : Category.{?u.17939, u_1} C
X Y : PresheafedSpace C
α β : X ⟶ Y
w : α.base = β.base
⊢ (Opens.map α.base).op = (Opens.map β.base).op
state_after: no goals
tactic: rw [w]
Theorem: CategoryTheory.ShortComplex.abLeftHomologyData_π
File: Mathlib/Algebra/Homology/ShortComplex/Ab.lean

Proof steps:
state_before: S : ShortComplex Ab
⊢ (AddMonoidHom.ker S.g).subtype ≫ S.g = 0
state_after: case w.mk
S : ShortComplex Ab
val✝ : ↑S.X₂
hx : val✝ ∈ AddMonoidHom.ker S.g
⊢ ((AddMonoidHom.ker S.g).subtype ≫ S.g) ⟨val✝, hx⟩ = 0 ⟨val✝, hx⟩
tactic: ext ⟨_, hx⟩
state_before: case w.mk
S : ShortComplex Ab
val✝ : ↑S.X₂
hx : val✝ ∈ AddMonoidHom.ker S.g
⊢ ((AddMonoidHom.ker S.g).subtype ≫ S.g) ⟨val✝, hx⟩ = 0 ⟨val✝, hx⟩
state_after: no goals
tactic: exact hx
state_before: S : ShortComplex Ab
⊢ (AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range = 0
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range) x = 0 x
tactic: ext (x : S.X₁)
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range) x = 0 x
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x ∈ S.abToCycles.range
tactic: erw [QuotientAddGroup.eq_zero_iff]
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x ∈ S.abToCycles.range
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ∃ x_1, S.abToCycles x_1 = ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x
tactic: rw [AddMonoidHom.mem_range]
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ∃ x_1, S.abToCycles x_1 = ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x
state_after: no goals
tactic: apply exists_apply_eq_apply
Theorem: unique_unit_speed
File: Mathlib/Analysis/ConstantSpeed.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : ℝ → E
s : Set ℝ
l : ℝ≥0
φ : ℝ → ℝ
φm : MonotoneOn φ s
hfφ : HasUnitSpeedOn (f ∘ φ) s
hf : HasUnitSpeedOn f (φ '' s)
x : ℝ
xs : x ∈ s
⊢ EqOn φ (fun y => y - x + φ x) s
state_after: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : ℝ → E
s : Set ℝ
l : ℝ≥0
φ : ℝ → ℝ
φm : MonotoneOn φ s
hfφ : HasConstantSpeedOnWith (f ∘ φ) s 1
hf : HasConstantSpeedOnWith f (φ '' s) 1
x : ℝ
xs : x ∈ s
⊢ EqOn φ (fun y => y - x + φ x) s
tactic: dsimp only [HasUnitSpeedOn] at hf hfφ
state_before: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : ℝ → E
s : Set ℝ
l : ℝ≥0
φ : ℝ → ℝ
φm : MonotoneOn φ s
hfφ : HasConstantSpeedOnWith (f ∘ φ) s 1
hf : HasConstantSpeedOnWith f (φ '' s) 1
x : ℝ
xs : x ∈ s
⊢ EqOn φ (fun y => y - x + φ x) s
state_after: case h.e'_4.h.h.e'_5
α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : ℝ → E
s : Set ℝ
l : ℝ≥0
φ : ℝ → ℝ
φm : MonotoneOn φ s
hfφ : HasConstantSpeedOnWith (f ∘ φ) s 1
hf : HasConstantSpeedOnWith f (φ '' s) 1
x : ℝ
xs : x ∈ s
x✝ : ℝ
⊢ x✝ - x = ↑1 / ↑1 * (x✝ - x)
tactic: convert HasConstantSpeedOnWith.ratio one_ne_zero φm hfφ hf xs using 3
state_before: case h.e'_4.h.h.e'_5
α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : ℝ → E
s : Set ℝ
l : ℝ≥0
φ : ℝ → ℝ
φm : MonotoneOn φ s
hfφ : HasConstantSpeedOnWith (f ∘ φ) s 1
hf : HasConstantSpeedOnWith f (φ '' s) 1
x : ℝ
xs : x ∈ s
x✝ : ℝ
⊢ x✝ - x = ↑1 / ↑1 * (x✝ - x)
state_after: no goals
tactic: norm_num
Theorem: HahnSeries.leadingCoeff_eq
File: Mathlib/RingTheory/HahnSeries/Basic.lean

Proof steps:
state_before: Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
inst✝² : Zero R
a b : Γ
r : R
inst✝¹ inst✝ : Zero Γ
x : HahnSeries Γ R
⊢ x.leadingCoeff = x.coeff x.order
state_after: case pos
Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
inst✝² : Zero R
a b : Γ
r : R
inst✝¹ inst✝ : Zero Γ
x : HahnSeries Γ R
h : x = 0
⊢ x.leadingCoeff = x.coeff x.order

case neg
Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
inst✝² : Zero R
a b : Γ
r : R
inst✝¹ inst✝ : Zero Γ
x : HahnSeries Γ R
h : ¬x = 0
⊢ x.leadingCoeff = x.coeff x.order
tactic: by_cases h : x = 0
Theorem: Set.insert_subset_iff
File: Mathlib/Data/Set/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁ s₂ t t₁ t₂ u : Set α
⊢ insert a s ⊆ t ↔ a ∈ t ∧ s ⊆ t
state_after: no goals
tactic: simp only [subset_def, mem_insert_iff, or_imp, forall_and, forall_eq]
Theorem: GaussianFourier.integral_cexp_neg_mul_sq_norm_add
File: Mathlib/Analysis/SpecialFunctions/Gaussian/FourierTransform.lean

Proof steps:
state_before: b : ℂ
V : Type u_1
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : FiniteDimensional ℝ V
inst✝¹ : MeasurableSpace V
inst✝ : BorelSpace V
hb : 0 < b.re
c : ℂ
w : V
⊢ ∫ (v : V), cexp (-b * ↑‖v‖ ^ 2 + c * ↑⟪w, v⟫_ℝ) =
    (↑π / b) ^ (↑(FiniteDimensional.finrank ℝ V) / 2) * cexp (c ^ 2 * ↑‖w‖ ^ 2 / (4 * b))
state_after: b : ℂ
V : Type u_1
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : FiniteDimensional ℝ V
inst✝¹ : MeasurableSpace V
inst✝ : BorelSpace V
hb : 0 < b.re
c : ℂ
w : V
e : EuclideanSpace ℝ (Fin (FiniteDimensional.finrank ℝ V)) ≃ₗᵢ[ℝ] V := (stdOrthonormalBasis ℝ V).repr.symm
⊢ ∫ (v : V), cexp (-b * ↑‖v‖ ^ 2 + c * ↑⟪w, v⟫_ℝ) =
    (↑π / b) ^ (↑(FiniteDimensional.finrank ℝ V) / 2) * cexp (c ^ 2 * ↑‖w‖ ^ 2 / (4 * b))
tactic: let e := (stdOrthonormalBasis ℝ V).repr.symm
state_before: b : ℂ
V : Type u_1
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : FiniteDimensional ℝ V
inst✝¹ : MeasurableSpace V
inst✝ : BorelSpace V
hb : 0 < b.re
c : ℂ
w : V
e : EuclideanSpace ℝ (Fin (FiniteDimensional.finrank ℝ V)) ≃ₗᵢ[ℝ] V := (stdOrthonormalBasis ℝ V).repr.symm
⊢ ∫ (v : V), cexp (-b * ↑‖v‖ ^ 2 + c * ↑⟪w, v⟫_ℝ) =
    (↑π / b) ^ (↑(FiniteDimensional.finrank ℝ V) / 2) * cexp (c ^ 2 * ↑‖w‖ ^ 2 / (4 * b))
state_after: b : ℂ
V : Type u_1
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : FiniteDimensional ℝ V
inst✝¹ : MeasurableSpace V
inst✝ : BorelSpace V
hb : 0 < b.re
c : ℂ
w : V
e : EuclideanSpace ℝ (Fin (FiniteDimensional.finrank ℝ V)) ≃ₗᵢ[ℝ] V := (stdOrthonormalBasis ℝ V).repr.symm
⊢ ∫ (x : EuclideanSpace ℝ (Fin (FiniteDimensional.finrank ℝ V))), cexp (-b * ↑‖e x‖ ^ 2 + c * ↑⟪w, e x⟫_ℝ) ∂volume =
    (↑π / b) ^ (↑(FiniteDimensional.finrank ℝ V) / 2) * cexp (c ^ 2 * ↑‖w‖ ^ 2 / (4 * b))
tactic: rw [← e.measurePreserving.integral_comp e.toHomeomorph.measurableEmbedding]
state_before: b : ℂ
V : Type u_1
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : FiniteDimensional ℝ V
inst✝¹ : MeasurableSpace V
inst✝ : BorelSpace V
hb : 0 < b.re
c : ℂ
w : V
e : EuclideanSpace ℝ (Fin (FiniteDimensional.finrank ℝ V)) ≃ₗᵢ[ℝ] V := (stdOrthonormalBasis ℝ V).repr.symm
⊢ ∫ (x : EuclideanSpace ℝ (Fin (FiniteDimensional.finrank ℝ V))), cexp (-b * ↑‖e x‖ ^ 2 + c * ↑⟪w, e x⟫_ℝ) ∂volume =
    (↑π / b) ^ (↑(FiniteDimensional.finrank ℝ V) / 2) * cexp (c ^ 2 * ↑‖w‖ ^ 2 / (4 * b))
state_after: no goals
tactic: convert integral_cexp_neg_mul_sq_norm_add_of_euclideanSpace
    hb c (e.symm w) <;> simp [LinearIsometryEquiv.inner_map_eq_flip]
Theorem: Finset.add_sum_Iio_eq_sum_Iic
File: Mathlib/Algebra/BigOperators/Intervals.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
inst✝² : PartialOrder α
inst✝¹ : CommMonoid M
f : α → M
a✝ b : α
inst✝ : LocallyFiniteOrderBot α
a : α
⊢ f a * ∏ x ∈ Iio a, f x = ∏ x ∈ Iic a, f x
state_after: no goals
tactic: rw [Iic_eq_cons_Iio, prod_cons]
Theorem: Polynomial.degree_toSubring
File: Mathlib/RingTheory/Polynomial/Basic.lean

Proof steps:
state_before: R : Type u
S : Type u_1
inst✝¹ : Ring R
inst✝ : Semiring S
f : R →+* S
x : S
p : R[X]
T : Subring R
hp : ↑p.coeffs ⊆ ↑T
⊢ (p.toSubring T hp).degree = p.degree
state_after: no goals
tactic: simp [degree]
Theorem: Comon_.Comon_ToMon_OpOp_obj'_X
File: Mathlib/CategoryTheory/Monoidal/Comon_.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ A.counit.op ▷ op A.X ≫ A.comul.op = (λ_ (op A.X)).hom
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ (λ_ A.X).inv.op = (λ_ (op A.X)).hom
tactic: rw [← op_whiskerRight, ← op_comp, counit_comul]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ (λ_ A.X).inv.op = (λ_ (op A.X)).hom
state_after: no goals
tactic: rfl
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ op A.X ◁ A.counit.op ≫ A.comul.op = (ρ_ (op A.X)).hom
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ (ρ_ A.X).inv.op = (ρ_ (op A.X)).hom
tactic: rw [← op_whiskerLeft, ← op_comp, comul_counit]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ (ρ_ A.X).inv.op = (ρ_ (op A.X)).hom
state_after: no goals
tactic: rfl
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ A.comul.op ▷ op A.X ≫ A.comul.op = (α_ (op A.X) (op A.X) (op A.X)).hom ≫ op A.X ◁ A.comul.op ≫ A.comul.op
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ (α_ A.X A.X A.X).inv.op ≫ (A.X ◁ A.comul).op ≫ A.comul.op = (α_ A.X A.X A.X).inv.op ≫ (A.comul ≫ A.X ◁ A.comul).op
tactic: rw [← op_inv_associator, ← op_whiskerRight, ← op_comp, ← op_whiskerLeft, ← op_comp,
      comul_assoc_flip, op_comp, op_comp_assoc]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
M A : Comon_ C
⊢ (α_ A.X A.X A.X).inv.op ≫ (A.X ◁ A.comul).op ≫ A.comul.op = (α_ A.X A.X A.X).inv.op ≫ (A.comul ≫ A.X ◁ A.comul).op
state_after: no goals
tactic: rfl
Theorem: Set.mem_center_iff_addMonoidHom
File: Mathlib/RingTheory/NonUnitalSubsemiring/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
inst✝³ : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝² : NonUnitalNonAssocSemiring S
inst✝¹ : NonUnitalNonAssocSemiring T
inst✝ : NonUnitalNonAssocSemiring R
a : R
⊢ a ∈ Set.center R ↔
    AddMonoidHom.mulLeft a = AddMonoidHom.mulRight a ∧
      AddMonoidHom.mul.compr₂ (AddMonoidHom.mulLeft a) = AddMonoidHom.mul.comp (AddMonoidHom.mulLeft a) ∧
        AddMonoidHom.mul.comp (AddMonoidHom.mulRight a) = AddMonoidHom.mul.compl₂ (AddMonoidHom.mulLeft a) ∧
          AddMonoidHom.mul.compr₂ (AddMonoidHom.mulRight a) = AddMonoidHom.mul.compl₂ (AddMonoidHom.mulRight a)
state_after: R : Type u
S : Type v
T : Type w
inst✝³ : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝² : NonUnitalNonAssocSemiring S
inst✝¹ : NonUnitalNonAssocSemiring T
inst✝ : NonUnitalNonAssocSemiring R
a : R
⊢ ((∀ (a_1 : R), a * a_1 = a_1 * a) ∧
      (∀ (b c : R), a * (b * c) = a * b * c) ∧
        (∀ (a_1 c : R), a_1 * a * c = a_1 * (a * c)) ∧ ∀ (a_1 b : R), a_1 * b * a = a_1 * (b * a)) ↔
    AddMonoidHom.mulLeft a = AddMonoidHom.mulRight a ∧
      AddMonoidHom.mul.compr₂ (AddMonoidHom.mulLeft a) = AddMonoidHom.mul.comp (AddMonoidHom.mulLeft a) ∧
        AddMonoidHom.mul.comp (AddMonoidHom.mulRight a) = AddMonoidHom.mul.compl₂ (AddMonoidHom.mulLeft a) ∧
          AddMonoidHom.mul.compr₂ (AddMonoidHom.mulRight a) = AddMonoidHom.mul.compl₂ (AddMonoidHom.mulRight a)
tactic: rw [Set.mem_center_iff, isMulCentral_iff]
state_before: R : Type u
S : Type v
T : Type w
inst✝³ : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝² : NonUnitalNonAssocSemiring S
inst✝¹ : NonUnitalNonAssocSemiring T
inst✝ : NonUnitalNonAssocSemiring R
a : R
⊢ ((∀ (a_1 : R), a * a_1 = a_1 * a) ∧
      (∀ (b c : R), a * (b * c) = a * b * c) ∧
        (∀ (a_1 c : R), a_1 * a * c = a_1 * (a * c)) ∧ ∀ (a_1 b : R), a_1 * b * a = a_1 * (b * a)) ↔
    AddMonoidHom.mulLeft a = AddMonoidHom.mulRight a ∧
      AddMonoidHom.mul.compr₂ (AddMonoidHom.mulLeft a) = AddMonoidHom.mul.comp (AddMonoidHom.mulLeft a) ∧
        AddMonoidHom.mul.comp (AddMonoidHom.mulRight a) = AddMonoidHom.mul.compl₂ (AddMonoidHom.mulLeft a) ∧
          AddMonoidHom.mul.compr₂ (AddMonoidHom.mulRight a) = AddMonoidHom.mul.compl₂ (AddMonoidHom.mulRight a)
state_after: no goals
tactic: simp [DFunLike.ext_iff]
Theorem: BoxIntegral.HasIntegral.mcShane_of_forall_isLittleO
File: Mathlib/Analysis/BoxIntegral/Basic.lean

Proof steps:
state_before: ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ B J
g : ι →ᵇᵃ[↑I] F
H :
  ℝ≥0 →
    ∀ x ∈ Box.Icc I, ∀ ε > 0, ∃ δ > 0, ∀ J ≤ I, Box.Icc J ⊆ Metric.closedBall x δ → dist ((vol J) (f x)) (g J) ≤ ε * B J
⊢ ∀ (c : ℝ≥0),
    ∀ x ∈ Box.Icc I \ ∅,
      ∀ ε > 0,
        ∃ δ > 0,
          ∀ J ≤ I,
            Box.Icc J ⊆ Metric.closedBall x δ →
              (McShane.bHenstock = true → x ∈ Box.Icc J) →
                (McShane.bDistortion = true → J.distortion ≤ c) → dist ((vol J) (f x)) (g J) ≤ ε * B J
state_after: no goals
tactic: simpa only [McShane, Bool.coe_sort_false, false_imp_iff, true_imp_iff, diff_empty] using H
Theorem: CategoryTheory.Limits.IsZero.of_epi_zero
File: Mathlib/CategoryTheory/Limits/Shapes/ZeroMorphisms.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms C
X Y : C
inst✝ : Epi 0
⊢ 0 ≫ 𝟙 Y = 0 ≫ 0
state_after: no goals
tactic: simp
Theorem: CategoryTheory.Discrete.natTrans_app
File: Mathlib/CategoryTheory/DiscreteCategory.lean

Proof steps:
state_before: α : Type u₁
C : Type u₂
inst✝ : Category.{v₂, u₂} C
I : Type u₁
F G : Discrete I ⥤ C
f : (i : Discrete I) → F.obj i ⟶ G.obj i
X Y : Discrete I
x✝ : X ⟶ Y
g : X.as = Y.as
⊢ F.map { down := { down := g } } ≫ f Y = f X ≫ G.map { down := { down := g } }
state_after: case mk.mk.up.up
α : Type u₁
C : Type u₂
inst✝ : Category.{v₂, u₂} C
I : Type u₁
F G : Discrete I ⥤ C
f : (i : Discrete I) → F.obj i ⟶ G.obj i
as✝¹ as✝ : I
g down✝ : { as := as✝¹ }.as = { as := as✝ }.as
⊢ F.map { down := { down := g } } ≫ f { as := as✝ } = f { as := as✝¹ } ≫ G.map { down := { down := g } }
tactic: discrete_cases
state_before: case mk.mk.up.up
α : Type u₁
C : Type u₂
inst✝ : Category.{v₂, u₂} C
I : Type u₁
F G : Discrete I ⥤ C
f : (i : Discrete I) → F.obj i ⟶ G.obj i
as✝¹ as✝ : I
g down✝ : { as := as✝¹ }.as = { as := as✝ }.as
⊢ F.map { down := { down := g } } ≫ f { as := as✝ } = f { as := as✝¹ } ≫ G.map { down := { down := g } }
state_after: case mk.mk.up.up.refl
α : Type u₁
C : Type u₂
inst✝ : Category.{v₂, u₂} C
I : Type u₁
F G : Discrete I ⥤ C
f : (i : Discrete I) → F.obj i ⟶ G.obj i
as✝ : I
down✝ : { as := as✝ }.as = { as := as✝ }.as
⊢ F.map { down := { down := ⋯ } } ≫ f { as := as✝ } = f { as := as✝ } ≫ G.map { down := { down := ⋯ } }
tactic: rcases g
state_before: case mk.mk.up.up.refl
α : Type u₁
C : Type u₂
inst✝ : Category.{v₂, u₂} C
I : Type u₁
F G : Discrete I ⥤ C
f : (i : Discrete I) → F.obj i ⟶ G.obj i
as✝ : I
down✝ : { as := as✝ }.as = { as := as✝ }.as
⊢ F.map { down := { down := ⋯ } } ≫ f { as := as✝ } = f { as := as✝ } ≫ G.map { down := { down := ⋯ } }
state_after: case mk.mk.up.up.refl
α : Type u₁
C : Type u₂
inst✝ : Category.{v₂, u₂} C
I : Type u₁
F G : Discrete I ⥤ C
f : (i : Discrete I) → F.obj i ⟶ G.obj i
as✝ : I
down✝ : { as := as✝ }.as = { as := as✝ }.as
⊢ F.map (𝟙 { as := as✝ }) ≫ f { as := as✝ } = f { as := as✝ } ≫ G.map (𝟙 { as := as✝ })
tactic: change F.map (𝟙 _) ≫ _ = _ ≫ G.map (𝟙 _)
state_before: case mk.mk.up.up.refl
α : Type u₁
C : Type u₂
inst✝ : Category.{v₂, u₂} C
I : Type u₁
F G : Discrete I ⥤ C
f : (i : Discrete I) → F.obj i ⟶ G.obj i
as✝ : I
down✝ : { as := as✝ }.as = { as := as✝ }.as
⊢ F.map (𝟙 { as := as✝ }) ≫ f { as := as✝ } = f { as := as✝ } ≫ G.map (𝟙 { as := as✝ })
state_after: no goals
tactic: simp
Theorem: inner_self_eq_norm_sq_to_K
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x : E
⊢ ⟪x, x⟫_𝕜 = ↑‖x‖ ^ 2
state_after: no goals
tactic: rw [← inner_self_ofReal_re, ← norm_sq_eq_inner, ofReal_pow]
Theorem: Finset.prod_dite_of_false
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f✝ g✝ : α → β
inst✝ : CommMonoid β
p : α → Prop
x✝ : DecidablePred p
h : ∀ i ∈ s, ¬p i
f : (i : α) → p i → β
g : (i : α) → ¬p i → β
⊢ (∏ i ∈ s, if hi : p i then f i hi else g i hi) = ∏ i : { x // x ∈ s }, g ↑i ⋯
state_after: no goals
tactic: refine prod_bij' (fun x hx => ⟨x, hx⟩) (fun x _ ↦ x) ?_ ?_ ?_ ?_ ?_ <;> aesop
Theorem: Subgroup.comap_normalClosure
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
s : Set N
f : G ≃* N
⊢ normalClosure (⇑f ⁻¹' s) = comap (↑f) (normalClosure s)
state_after: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
s : Set N
f : G ≃* N
this : ⇑f.toEquiv ⁻¹' s = ⇑f.symm '' s
⊢ normalClosure (⇑f ⁻¹' s) = comap (↑f) (normalClosure s)
tactic: have := Set.preimage_equiv_eq_image_symm s f.toEquiv
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
s : Set N
f : G ≃* N
this : ⇑f.toEquiv ⁻¹' s = ⇑f.symm '' s
⊢ normalClosure (⇑f ⁻¹' s) = comap (↑f) (normalClosure s)
state_after: no goals
tactic: simp_all [comap_equiv_eq_map_symm, map_normalClosure s f.symm f.symm.surjective]
Theorem: CategoryTheory.ShortComplex.Homotopy.eq_add_nullHomotopic
File: Mathlib/Algebra/Homology/ShortComplex/Preadditive.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ₁ φ₂ φ₃ φ₄ : S₁ ⟶ S₂
h : Homotopy φ₁ φ₂
⊢ φ₁ = φ₂ + S₁.nullHomotopic S₂ h.h₀ ⋯ h.h₁ h.h₂ h.h₃ ⋯
state_after: case h₁
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ₁ φ₂ φ₃ φ₄ : S₁ ⟶ S₂
h : Homotopy φ₁ φ₂
⊢ φ₁.τ₁ = (φ₂ + S₁.nullHomotopic S₂ h.h₀ ⋯ h.h₁ h.h₂ h.h₃ ⋯).τ₁

case h₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ₁ φ₂ φ₃ φ₄ : S₁ ⟶ S₂
h : Homotopy φ₁ φ₂
⊢ φ₁.τ₂ = (φ₂ + S₁.nullHomotopic S₂ h.h₀ ⋯ h.h₁ h.h₂ h.h₃ ⋯).τ₂

case h₃
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ₁ φ₂ φ₃ φ₄ : S₁ ⟶ S₂
h : Homotopy φ₁ φ₂
⊢ φ₁.τ₃ = (φ₂ + S₁.nullHomotopic S₂ h.h₀ ⋯ h.h₁ h.h₂ h.h₃ ⋯).τ₃
tactic: ext