ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: List.dProd_monoid
File: Mathlib/Algebra/GradedMonoid.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
α : Type u_3
inst✝¹ : AddMonoid ι
inst✝ : Monoid R
l : List α
fι : α → ι
fA : α → R
⊢ l.dProd fι fA = (map fA l).prod
state_after: no goals
tactic: match l with
  | [] =>
    rw [List.dProd_nil, List.map_nil, List.prod_nil]
    rfl
  | head::tail =>
    rw [List.dProd_cons, List.map_cons, List.prod_cons, List.dProd_monoid tail _ _]
    rfl
Theorem: HurwitzZeta.differentiableAt_completedHurwitzZetaEven
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

Proof steps:
state_before: a : UnitAddCircle
s : ℂ
hs : s ≠ 0 ∨ a ≠ 0
hs' : s ≠ 1
⊢ DifferentiableAt ℂ (completedHurwitzZetaEven a) s
state_after: case refine_1
a : UnitAddCircle
s : ℂ
hs : s ≠ 0 ∨ a ≠ 0
hs' : s ≠ 1
⊢ s / 2 ≠ 0 ∨ (hurwitzEvenFEPair a).f₀ = 0

case refine_2
a : UnitAddCircle
s : ℂ
hs : s ≠ 0 ∨ a ≠ 0
hs' : s ≠ 1
⊢ s / 2 ≠ ↑(hurwitzEvenFEPair a).k
tactic: refine (((hurwitzEvenFEPair a).differentiableAt_Λ ?_ (Or.inl ?_)).comp s
      (differentiableAt_id.div_const _)).div_const _
Theorem: Matrix.mulVec_cramer
File: Mathlib/LinearAlgebra/Matrix/Adjugate.lean

Proof steps:
state_before: m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
b : n → α
⊢ A *ᵥ A.cramer b = A.det • b
state_after: no goals
tactic: rw [cramer_eq_adjugate_mulVec, mulVec_mulVec, mul_adjugate, smul_mulVec_assoc, one_mulVec]
Theorem: LieDerivation.IsKilling.range_ad_eq_top
File: Mathlib/Algebra/Lie/Derivation/Killing.lean

Proof steps:
state_before: R : Type u_1
L : Type u_2
inst✝⁴ : Field R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : Module.Finite R L
inst✝ : LieAlgebra.IsKilling R L
⊢ (ad R L).range = ⊤
state_after: R : Type u_1
L : Type u_2
inst✝⁴ : Field R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : Module.Finite R L
inst✝ : LieAlgebra.IsKilling R L
⊢ (ad R L).range.toSubmodule = ⊤.toSubmodule
tactic: rw [← LieSubalgebra.coe_to_submodule_eq_iff]
state_before: R : Type u_1
L : Type u_2
inst✝⁴ : Field R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : Module.Finite R L
inst✝ : LieAlgebra.IsKilling R L
⊢ (ad R L).range.toSubmodule = ⊤.toSubmodule
state_after: R : Type u_1
L : Type u_2
inst✝⁴ : Field R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : Module.Finite R L
inst✝ : LieAlgebra.IsKilling R L
⊢ (LieModule.traceForm R (LieDerivation R L L) (LieDerivation R L L)).orthogonal (ad R L).range.toSubmodule = ⊥
tactic: apply LinearMap.BilinForm.eq_top_of_restrict_nondegenerate_of_orthogonal_eq_bot
    (LieModule.traceForm_isSymm R 𝔻 𝔻).isRefl (killingForm_restrict_range_ad_nondegenerate R L)
state_before: R : Type u_1
L : Type u_2
inst✝⁴ : Field R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : Module.Finite R L
inst✝ : LieAlgebra.IsKilling R L
⊢ (LieModule.traceForm R (LieDerivation R L L) (LieDerivation R L L)).orthogonal (ad R L).range.toSubmodule = ⊥
state_after: R : Type u_1
L : Type u_2
inst✝⁴ : Field R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : Module.Finite R L
inst✝ : LieAlgebra.IsKilling R L
D : LieDerivation R L L
hD : D ∈ (LieModule.traceForm R (LieDerivation R L L) (LieDerivation R L L)).orthogonal (ad R L).range.toSubmodule
x : L
⊢ D x = 0 x
tactic: refine (Submodule.eq_bot_iff _).mpr fun D hD ↦ ext fun x ↦ ?_
state_before: R : Type u_1
L : Type u_2
inst✝⁴ : Field R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : Module.Finite R L
inst✝ : LieAlgebra.IsKilling R L
D : LieDerivation R L L
hD : D ∈ (LieModule.traceForm R (LieDerivation R L L) (LieDerivation R L L)).orthogonal (ad R L).range.toSubmodule
x : L
⊢ D x = 0 x
state_after: no goals
tactic: simpa using ad_mem_ker_killingForm_ad_range_of_mem_orthogonal hD x
Theorem: List.foldr_inf_eq_inf_toFinset
File: Mathlib/Data/Finset/Lattice.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝² : SemilatticeInf α
inst✝¹ : OrderTop α
s s₁ s₂ : Finset β
f g : β → α
a : α
inst✝ : DecidableEq α
l : List α
⊢ List.foldr (fun x x_1 => x ⊓ x_1) ⊤ l = l.toFinset.inf id
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝² : SemilatticeInf α
inst✝¹ : OrderTop α
s s₁ s₂ : Finset β
f g : β → α
a : α
inst✝ : DecidableEq α
l : List α
⊢ Multiset.fold (fun x x_1 => x ⊓ x_1) ⊤ (↑l).dedup = (↑l).dedup.inf
tactic: rw [← coe_fold_r, ← Multiset.fold_dedup_idem, inf_def, ← List.toFinset_coe, toFinset_val,
    Multiset.map_id]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝² : SemilatticeInf α
inst✝¹ : OrderTop α
s s₁ s₂ : Finset β
f g : β → α
a : α
inst✝ : DecidableEq α
l : List α
⊢ Multiset.fold (fun x x_1 => x ⊓ x_1) ⊤ (↑l).dedup = (↑l).dedup.inf
state_after: no goals
tactic: rfl
Theorem: Subfield.mem_map
File: Mathlib/Algebra/Field/Subfield.lean

Proof steps:
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s✝ t : Subfield K
f✝ f : K →+* L
s : Subfield K
y : L
⊢ y ∈ map f s ↔ ∃ x ∈ s, f x = y
state_after: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s✝ t : Subfield K
f✝ f : K →+* L
s : Subfield K
y : L
⊢ (y ∈
      let __src := Subring.map f s.toSubring;
      { toSubring := __src, inv_mem' := ⋯ }) ↔
    ∃ x ∈ s, f x = y
tactic: unfold map
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s✝ t : Subfield K
f✝ f : K →+* L
s : Subfield K
y : L
⊢ (y ∈
      let __src := Subring.map f s.toSubring;
      { toSubring := __src, inv_mem' := ⋯ }) ↔
    ∃ x ∈ s, f x = y
state_after: no goals
tactic: simp only [mem_mk, Subring.mem_mk, Subring.mem_toSubsemiring, Subring.mem_map, mem_toSubring]
Theorem: Filter.sdiff_liminf
File: Mathlib/Order/LiminfLimsup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝ : CompleteBooleanAlgebra α
f : Filter β
u : β → α
a : α
⊢ a \ liminf u f = limsup (fun b => a \ u b) f
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝ : CompleteBooleanAlgebra α
f : Filter β
u : β → α
a : α
⊢ (a \ liminf u f)ᶜ = (limsup (fun b => a \ u b) f)ᶜ
tactic: rw [← compl_inj_iff]
Theorem: IsAssociatedPrime.map_of_injective
File: Mathlib/RingTheory/Ideal/AssociatedPrime.lean

Proof steps:
state_before: R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type u_3
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
h : IsAssociatedPrime I M
hf : Function.Injective ⇑f
⊢ IsAssociatedPrime I M'
state_after: case intro
R : Type u_1
inst✝⁴ : CommRing R
J : Ideal R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type u_3
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hf : Function.Injective ⇑f
x : M
h : IsAssociatedPrime (Submodule.span R {x}).annihilator M
⊢ IsAssociatedPrime (Submodule.span R {x}).annihilator M'
tactic: obtain ⟨x, rfl⟩ := h.2
state_before: case intro
R : Type u_1
inst✝⁴ : CommRing R
J : Ideal R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type u_3
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hf : Function.Injective ⇑f
x : M
h : IsAssociatedPrime (Submodule.span R {x}).annihilator M
⊢ IsAssociatedPrime (Submodule.span R {x}).annihilator M'
state_after: case intro
R : Type u_1
inst✝⁴ : CommRing R
J : Ideal R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type u_3
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hf : Function.Injective ⇑f
x : M
h : IsAssociatedPrime (Submodule.span R {x}).annihilator M
⊢ (Submodule.span R {x}).annihilator = (Submodule.span R {f x}).annihilator
tactic: refine ⟨h.1, ⟨f x, ?_⟩⟩
state_before: case intro
R : Type u_1
inst✝⁴ : CommRing R
J : Ideal R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type u_3
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hf : Function.Injective ⇑f
x : M
h : IsAssociatedPrime (Submodule.span R {x}).annihilator M
⊢ (Submodule.span R {x}).annihilator = (Submodule.span R {f x}).annihilator
state_after: case intro.h
R : Type u_1
inst✝⁴ : CommRing R
J : Ideal R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type u_3
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hf : Function.Injective ⇑f
x : M
h : IsAssociatedPrime (Submodule.span R {x}).annihilator M
r : R
⊢ r ∈ (Submodule.span R {x}).annihilator ↔ r ∈ (Submodule.span R {f x}).annihilator
tactic: ext r
state_before: case intro.h
R : Type u_1
inst✝⁴ : CommRing R
J : Ideal R
M : Type u_2
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type u_3
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hf : Function.Injective ⇑f
x : M
h : IsAssociatedPrime (Submodule.span R {x}).annihilator M
r : R
⊢ r ∈ (Submodule.span R {x}).annihilator ↔ r ∈ (Submodule.span R {f x}).annihilator
state_after: no goals
tactic: rw [Submodule.mem_annihilator_span_singleton, Submodule.mem_annihilator_span_singleton, ←
    map_smul, ← f.map_zero, hf.eq_iff]
Theorem: rec_heq_iff_heq
File: Mathlib/Logic/Basic.lean

Proof steps:
state_before: α : Sort u_2
a : α
β : Sort u_1
b : α
C : α → Sort u_1
x : C a
y : β
e : a = b
⊢ HEq (e ▸ x) y ↔ HEq x y
state_after: α : Sort u_2
a : α
β : Sort u_1
C : α → Sort u_1
x : C a
y : β
⊢ HEq (⋯ ▸ x) y ↔ HEq x y
tactic: subst e
state_before: α : Sort u_2
a : α
β : Sort u_1
C : α → Sort u_1
x : C a
y : β
⊢ HEq (⋯ ▸ x) y ↔ HEq x y
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Presheaf.equalizerSieve_self_eq_top
File: Mathlib/CategoryTheory/Sites/LocallyInjective.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x : (forget D).obj (F.obj X)
⊢ equalizerSieve x x = ⊤
state_after: no goals
tactic: aesop
Theorem: AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.isoOfRangeEq_hom
File: Mathlib/Geometry/RingedSpace/OpenImmersion.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : PresheafedSpace C
f : X ⟶ Z
hf : IsOpenImmersion f
g : Y ⟶ Z
s : PullbackCone f g
inst✝ : IsOpenImmersion g
e : Set.range ⇑f.base = Set.range ⇑g.base
⊢ lift g f ⋯ ≫ lift f g ⋯ = 𝟙 X
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : PresheafedSpace C
f : X ⟶ Z
hf : IsOpenImmersion f
g : Y ⟶ Z
s : PullbackCone f g
inst✝ : IsOpenImmersion g
e : Set.range ⇑f.base = Set.range ⇑g.base
⊢ (lift g f ⋯ ≫ lift f g ⋯) ≫ f = 𝟙 X ≫ f
tactic: rw [← cancel_mono f]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : PresheafedSpace C
f : X ⟶ Z
hf : IsOpenImmersion f
g : Y ⟶ Z
s : PullbackCone f g
inst✝ : IsOpenImmersion g
e : Set.range ⇑f.base = Set.range ⇑g.base
⊢ (lift g f ⋯ ≫ lift f g ⋯) ≫ f = 𝟙 X ≫ f
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : PresheafedSpace C
f : X ⟶ Z
hf : IsOpenImmersion f
g : Y ⟶ Z
s : PullbackCone f g
inst✝ : IsOpenImmersion g
e : Set.range ⇑f.base = Set.range ⇑g.base
⊢ lift f g ⋯ ≫ lift g f ⋯ = 𝟙 Y
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : PresheafedSpace C
f : X ⟶ Z
hf : IsOpenImmersion f
g : Y ⟶ Z
s : PullbackCone f g
inst✝ : IsOpenImmersion g
e : Set.range ⇑f.base = Set.range ⇑g.base
⊢ (lift f g ⋯ ≫ lift g f ⋯) ≫ g = 𝟙 Y ≫ g
tactic: rw [← cancel_mono g]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : PresheafedSpace C
f : X ⟶ Z
hf : IsOpenImmersion f
g : Y ⟶ Z
s : PullbackCone f g
inst✝ : IsOpenImmersion g
e : Set.range ⇑f.base = Set.range ⇑g.base
⊢ (lift f g ⋯ ≫ lift g f ⋯) ≫ g = 𝟙 Y ≫ g
state_after: no goals
tactic: simp
Theorem: List.all₂_eq_true
File: .lake/packages/batteries/Batteries/Data/List/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Sort ?u.45682
δ : Sort ?u.45684
r✝ : α → β → Prop
p : γ → δ → Prop
r : α → β → Bool
⊢ all₂ r [] [] = true ↔ Forall₂ (fun x x_1 => r x x_1 = true) [] []
state_after: no goals
tactic: simp [all₂]
state_before: α : Type u_1
β : Type u_2
γ : Sort ?u.45682
δ : Sort ?u.45684
r✝ : α → β → Prop
p : γ → δ → Prop
r : α → β → Bool
a : α
as : List α
b : β
bs : List β
⊢ all₂ r (a :: as) (b :: bs) = true ↔ Forall₂ (fun x x_1 => r x x_1 = true) (a :: as) (b :: bs)
state_after: no goals
tactic: by_cases h : r a b
      <;> simp [all₂, h, all₂_eq_true, forall₂_cons]
state_before: α : Type u_1
β : Type u_2
γ : Sort ?u.45682
δ : Sort ?u.45684
r✝ : α → β → Prop
p : γ → δ → Prop
r : α → β → Bool
head✝ : α
tail✝ : List α
⊢ all₂ r (head✝ :: tail✝) [] = true ↔ Forall₂ (fun x x_1 => r x x_1 = true) (head✝ :: tail✝) []
state_after: α : Type u_1
β : Type u_2
γ : Sort ?u.45682
δ : Sort ?u.45684
r✝ : α → β → Prop
p : γ → δ → Prop
r : α → β → Bool
head✝ : α
tail✝ : List α
⊢ ¬Forall₂ (fun x x_1 => r x x_1 = true) (head✝ :: tail✝) []
tactic: simp [all₂]
state_before: α : Type u_1
β : Type u_2
γ : Sort ?u.45682
δ : Sort ?u.45684
r✝ : α → β → Prop
p : γ → δ → Prop
r : α → β → Bool
head✝ : α
tail✝ : List α
⊢ ¬Forall₂ (fun x x_1 => r x x_1 = true) (head✝ :: tail✝) []
state_after: no goals
tactic: exact nofun
Theorem: CategoryTheory.SmallObject.functorMap_id
File: Mathlib/CategoryTheory/SmallObject/Construction.lean

Proof steps:
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
I : Type w
A B : I → C
f : (i : I) → A i ⟶ B i
S X Y Z : C
πX : X ⟶ S
πY : Y ⟶ S
φ : X ⟶ Y
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
hφ : φ ≫ πY = πX
inst✝¹ : HasPushout (functorObjTop f πX) (functorObjLeft f πX)
inst✝ : HasPushout (functorObjTop f πY) (functorObjLeft f πY)
⊢ 𝟙 X ≫ πX = πX
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
I : Type w
A B : I → C
f : (i : I) → A i ⟶ B i
S X Y Z : C
πX : X ⟶ S
πY : Y ⟶ S
φ : X ⟶ Y
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
hφ : φ ≫ πY = πX
inst✝¹ : HasPushout (functorObjTop f πX) (functorObjLeft f πX)
inst✝ : HasPushout (functorObjTop f πY) (functorObjLeft f πY)
⊢ functorMap f πX πX (𝟙 X) ⋯ = 𝟙 (functorObj f πX)
state_after: case h₀
C : Type u
inst✝⁴ : Category.{v, u} C
I : Type w
A B : I → C
f : (i : I) → A i ⟶ B i
S X Y Z : C
πX : X ⟶ S
πY : Y ⟶ S
φ : X ⟶ Y
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
hφ : φ ≫ πY = πX
inst✝¹ : HasPushout (functorObjTop f πX) (functorObjLeft f πX)
inst✝ : HasPushout (functorObjTop f πY) (functorObjLeft f πY)
⊢ pushout.inl (functorObjTop f πX) (functorObjLeft f πX) ≫ functorMap f πX πX (𝟙 X) ⋯ =
    pushout.inl (functorObjTop f πX) (functorObjLeft f πX) ≫ 𝟙 (functorObj f πX)

case h₁.h.mk
C : Type u
inst✝⁴ : Category.{v, u} C
I : Type w
A B : I → C
f : (i : I) → A i ⟶ B i
S X Y Z : C
πX : X ⟶ S
πY : Y ⟶ S
φ : X ⟶ Y
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
hφ : φ ≫ πY = πX
inst✝¹ : HasPushout (functorObjTop f πX) (functorObjLeft f πX)
inst✝ : HasPushout (functorObjTop f πY) (functorObjLeft f πY)
i : I
t : A i ⟶ X
b : B i ⟶ S
w : t ≫ πX = f i ≫ b
⊢ Sigma.ι (functorObjTgtFamily f πX) { i := i, t := t, b := b, w := w } ≫
      pushout.inr (functorObjTop f πX) (functorObjLeft f πX) ≫ functorMap f πX πX (𝟙 X) ⋯ =
    Sigma.ι (functorObjTgtFamily f πX) { i := i, t := t, b := b, w := w } ≫
      pushout.inr (functorObjTop f πX) (functorObjLeft f πX) ≫ 𝟙 (functorObj f πX)
tactic: ext ⟨i, t, b, w⟩
Theorem: Complex.div_ratCast_re
File: Mathlib/Data/Complex/Basic.lean

Proof steps:
state_before: z : ℂ
x : ℚ
⊢ (z / ↑x).re = z.re / ↑x
state_after: no goals
tactic: rw [div_ratCast]
Theorem: DerivedCategory.HomologySequence.exact₂
File: Mathlib/Algebra/Homology/DerivedCategory/HomologySequence.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
hT : T ∈ distinguishedTriangles
n₀ n₁ : ℤ
h : n₀ + 1 = n₁
⊢ (homologyFunctor C n₀).map T.mor₁ ≫ (homologyFunctor C n₀).map T.mor₂ = 0
state_after: no goals
tactic: simp only [← Functor.map_comp, comp_distTriang_mor_zero₁₂ _ hT,
        Functor.map_zero]
Theorem: CliffordAlgebra.changeForm_contractLeft
File: Mathlib/LinearAlgebra/CliffordAlgebra/Contraction.lean

Proof steps:
state_before: R : Type u1
inst✝² : CommRing R
M : Type u2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q Q' Q'' : QuadraticForm R M
B B' : BilinForm R M
h : BilinMap.toQuadraticMap B = Q' - Q
h' : BilinMap.toQuadraticMap B' = Q'' - Q'
d : Module.Dual R M
x : CliffordAlgebra Q
⊢ (changeForm h) ((contractLeft d) x) = (contractLeft d) ((changeForm h) x)
state_after: case algebraMap
R : Type u1
inst✝² : CommRing R
M : Type u2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q Q' Q'' : QuadraticForm R M
B B' : BilinForm R M
h : BilinMap.toQuadraticMap B = Q' - Q
h' : BilinMap.toQuadraticMap B' = Q'' - Q'
d : Module.Dual R M
r : R
⊢ (changeForm h) ((contractLeft d) ((algebraMap R (CliffordAlgebra Q)) r)) =
    (contractLeft d) ((changeForm h) ((algebraMap R (CliffordAlgebra Q)) r))

case add
R : Type u1
inst✝² : CommRing R
M : Type u2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q Q' Q'' : QuadraticForm R M
B B' : BilinForm R M
h : BilinMap.toQuadraticMap B = Q' - Q
h' : BilinMap.toQuadraticMap B' = Q'' - Q'
d : Module.Dual R M
x y : CliffordAlgebra Q
hx : (changeForm h) ((contractLeft d) x) = (contractLeft d) ((changeForm h) x)
hy : (changeForm h) ((contractLeft d) y) = (contractLeft d) ((changeForm h) y)
⊢ (changeForm h) ((contractLeft d) (x + y)) = (contractLeft d) ((changeForm h) (x + y))

case ι_mul
R : Type u1
inst✝² : CommRing R
M : Type u2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q Q' Q'' : QuadraticForm R M
B B' : BilinForm R M
h : BilinMap.toQuadraticMap B = Q' - Q
h' : BilinMap.toQuadraticMap B' = Q'' - Q'
d : Module.Dual R M
m : CliffordAlgebra Q
x : M
hx : (changeForm h) ((contractLeft d) m) = (contractLeft d) ((changeForm h) m)
⊢ (changeForm h) ((contractLeft d) ((ι Q) x * m)) = (contractLeft d) ((changeForm h) ((ι Q) x * m))
tactic: induction' x using CliffordAlgebra.left_induction with r x y hx hy m x hx
Theorem: nilpotencyClass_le_of_surjective
File: Mathlib/GroupTheory/Nilpotent.lean

Proof steps:
state_before: G : Type u_1
inst✝² : Group G
H : Subgroup G
inst✝¹ : H.Normal
G' : Type u_2
inst✝ : Group G'
f : G →* G'
hf : Function.Surjective ⇑f
h : Group.IsNilpotent G
⊢ Group.nilpotencyClass G' ≤ Group.nilpotencyClass G
state_after: G : Type u_1
inst✝² : Group G
H : Subgroup G
inst✝¹ : H.Normal
G' : Type u_2
inst✝ : Group G'
f : G →* G'
hf : Function.Surjective ⇑f
h : Group.IsNilpotent G
⊢ ∀ (n : ℕ), upperCentralSeries G n = ⊤ → upperCentralSeries G' n = ⊤
tactic: refine @Nat.find_mono _ _ (Classical.decPred _) (Classical.decPred _) ?_ _ _
state_before: G : Type u_1
inst✝² : Group G
H : Subgroup G
inst✝¹ : H.Normal
G' : Type u_2
inst✝ : Group G'
f : G →* G'
hf : Function.Surjective ⇑f
h : Group.IsNilpotent G
⊢ ∀ (n : ℕ), upperCentralSeries G n = ⊤ → upperCentralSeries G' n = ⊤
state_after: G : Type u_1
inst✝² : Group G
H : Subgroup G
inst✝¹ : H.Normal
G' : Type u_2
inst✝ : Group G'
f : G →* G'
hf : Function.Surjective ⇑f
h : Group.IsNilpotent G
n : ℕ
hn : upperCentralSeries G n = ⊤
⊢ upperCentralSeries G' n = ⊤
tactic: intro n hn
state_before: G : Type u_1
inst✝² : Group G
H : Subgroup G
inst✝¹ : H.Normal
G' : Type u_2
inst✝ : Group G'
f : G →* G'
hf : Function.Surjective ⇑f
h : Group.IsNilpotent G
n : ℕ
hn : upperCentralSeries G n = ⊤
⊢ upperCentralSeries G' n = ⊤
state_after: G : Type u_1
inst✝² : Group G
H : Subgroup G
inst✝¹ : H.Normal
G' : Type u_2
inst✝ : Group G'
f : G →* G'
hf : Function.Surjective ⇑f
h : Group.IsNilpotent G
n : ℕ
hn : upperCentralSeries G n = ⊤
⊢ ⊤ ≤ upperCentralSeries G' n
tactic: rw [eq_top_iff]
state_before: G : Type u_1
inst✝² : Group G
H : Subgroup G
inst✝¹ : H.Normal
G' : Type u_2
inst✝ : Group G'
f : G →* G'
hf : Function.Surjective ⇑f
h : Group.IsNilpotent G
n : ℕ
hn : upperCentralSeries G n = ⊤
⊢ ⊤ ≤ upperCentralSeries G' n
state_after: no goals
tactic: calc
    ⊤ = f.range := symm (f.range_top_of_surjective hf)
    _ = Subgroup.map f ⊤ := MonoidHom.range_eq_map _
    _ = Subgroup.map f (upperCentralSeries G n) := by rw [hn]
    _ ≤ upperCentralSeries G' n := upperCentralSeries.map hf n
Theorem: HasSum.add
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
inst✝ : ContinuousMul α
hf : HasProd f a
hg : HasProd g b
⊢ HasProd (fun b => f b * g b) (a * b)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
inst✝ : ContinuousMul α
hf : Tendsto (fun s => ∏ b ∈ s, f b) atTop (𝓝 a)
hg : Tendsto (fun s => ∏ b ∈ s, g b) atTop (𝓝 b)
⊢ Tendsto (fun s => ∏ b ∈ s, f b * g b) atTop (𝓝 (a * b))
tactic: dsimp only [HasProd] at hf hg ⊢
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
inst✝ : ContinuousMul α
hf : Tendsto (fun s => ∏ b ∈ s, f b) atTop (𝓝 a)
hg : Tendsto (fun s => ∏ b ∈ s, g b) atTop (𝓝 b)
⊢ Tendsto (fun s => ∏ b ∈ s, f b * g b) atTop (𝓝 (a * b))
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
inst✝ : ContinuousMul α
hf : Tendsto (fun s => ∏ b ∈ s, f b) atTop (𝓝 a)
hg : Tendsto (fun s => ∏ b ∈ s, g b) atTop (𝓝 b)
⊢ Tendsto (fun s => (∏ x ∈ s, f x) * ∏ x ∈ s, g x) atTop (𝓝 (a * b))
tactic: simp_rw [prod_mul_distrib]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
inst✝ : ContinuousMul α
hf : Tendsto (fun s => ∏ b ∈ s, f b) atTop (𝓝 a)
hg : Tendsto (fun s => ∏ b ∈ s, g b) atTop (𝓝 b)
⊢ Tendsto (fun s => (∏ x ∈ s, f x) * ∏ x ∈ s, g x) atTop (𝓝 (a * b))
state_after: no goals
tactic: exact hf.mul hg
Theorem: coe_sub_coe
File: Mathlib/Algebra/Group/Subgroup/Pointwise.lean

Proof steps:
state_before: α : Type u_1
G : Type u_2
A : Type u_3
S : Type u_4
inst✝² : SetLike S G
inst✝¹ : DivisionMonoid G
inst✝ : SubgroupClass S G
H : S
⊢ ↑H / ↑H = ↑H
state_after: no goals
tactic: simp [div_eq_mul_inv]