ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: ContinuousMap.Homotopy.symm_symm
File: Mathlib/Topology/Homotopy/Basic.lean

Proof steps:
state_before: F✝ : Type u_1
X : Type u
Y : Type v
Z : Type w
Z' : Type x
ι : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
f₀ f₁ : C(X, Y)
F : f₀.Homotopy f₁
⊢ F.symm.symm = F
state_after: case h
F✝ : Type u_1
X : Type u
Y : Type v
Z : Type w
Z' : Type x
ι : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
f₀ f₁ : C(X, Y)
F : f₀.Homotopy f₁
x✝ : ↑I × X
⊢ F.symm.symm x✝ = F x✝
tactic: ext
state_before: case h
F✝ : Type u_1
X : Type u
Y : Type v
Z : Type w
Z' : Type x
ι : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
f₀ f₁ : C(X, Y)
F : f₀.Homotopy f₁
x✝ : ↑I × X
⊢ F.symm.symm x✝ = F x✝
state_after: no goals
tactic: simp
Theorem: lowerSemicontinuousAt_iff_le_liminf
File: Mathlib/Topology/Semicontinuous.lean

Proof steps:
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
β : Type u_2
inst✝² : Preorder β
f✝ g : α → β
x : α
s t : Set α
y z : β
γ : Type u_3
inst✝¹ : CompleteLinearOrder γ
inst✝ : DenselyOrdered γ
f : α → γ
⊢ LowerSemicontinuousAt f x ↔ f x ≤ liminf f (𝓝 x)
state_after: no goals
tactic: rw [← lowerSemicontinuousWithinAt_univ_iff, lowerSemicontinuousWithinAt_iff_le_liminf,
    ← nhdsWithin_univ]
Theorem: Int.card_fintype_uIcc
File: Mathlib/Data/Int/Interval.lean

Proof steps:
state_before: a b : ℤ
⊢ Fintype.card ↑(Set.uIcc a b) = (b - a).natAbs + 1
state_after: no goals
tactic: rw [← card_uIcc, Fintype.card_ofFinset]
Theorem: Complex.integral_rpow_mul_exp_neg_mul_rpow
File: Mathlib/MeasureTheory/Integral/Gamma.lean

Proof steps:
state_before: p q b : ℝ
hp : 1 ≤ p
hq : -2 < q
hb : 0 < b
⊢ ∫ (x : ℂ), ‖x‖ ^ q * rexp (-b * ‖x‖ ^ p) = 2 * π / p * b ^ (-(q + 2) / p) * Real.Gamma ((q + 2) / p)
state_after: no goals
tactic: calc
    _ = ∫ x in Ioi (0 : ℝ) ×ˢ Ioo (-π) π, x.1 * (|x.1| ^ q * rexp (- b * |x.1| ^ p)) := by
      rw [← Complex.integral_comp_polarCoord_symm, polarCoord_target]
      simp_rw [Complex.norm_eq_abs, Complex.polarCoord_symm_abs, smul_eq_mul]
    _ = (∫ x in Ioi (0 : ℝ), x * |x| ^ q * rexp (- b * |x| ^ p)) * ∫ _ in Ioo (-π) π, 1 := by
      rw [← setIntegral_prod_mul, volume_eq_prod]
      simp_rw [mul_one]
      congr! 2; ring
    _ = 2 * π * ∫ x in Ioi (0 : ℝ), x * |x| ^ q * rexp (- b * |x| ^ p) := by
      simp_rw [integral_const, Measure.restrict_apply MeasurableSet.univ, Set.univ_inter,
        volume_Ioo, sub_neg_eq_add, ← two_mul, ENNReal.toReal_ofReal (by positivity : 0 ≤ 2 * π),
        smul_eq_mul, mul_one, mul_comm]
    _ = 2 * π * ∫ x in Ioi (0 : ℝ), x ^ (q + 1) * rexp (-b * x ^ p) := by
      congr 1
      refine setIntegral_congr measurableSet_Ioi (fun x hx => ?_)
      rw [mem_Ioi] at hx
      rw [abs_eq_self.mpr hx.le, rpow_add hx, rpow_one]
      ring
    _ = (2 * π / p) * b ^ (-(q + 2) / p) * Real.Gamma ((q + 2) / p) := by
      rw [_root_.integral_rpow_mul_exp_neg_mul_rpow (by linarith) (by linarith) hb, add_assoc,
        one_add_one_eq_two]
      ring
Theorem: Asymptotics.isBigO_iff_isBigOWith
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
E' : Type u_6
F' : Type u_7
G' : Type u_8
E'' : Type u_9
F'' : Type u_10
G'' : Type u_11
E''' : Type u_12
R : Type u_13
R' : Type u_14
𝕜 : Type u_15
𝕜' : Type u_16
inst✝¹³ : Norm E
inst✝¹² : Norm F
inst✝¹¹ : Norm G
inst✝¹⁰ : SeminormedAddCommGroup E'
inst✝⁹ : SeminormedAddCommGroup F'
inst✝⁸ : SeminormedAddCommGroup G'
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedAddCommGroup F''
inst✝⁵ : NormedAddCommGroup G''
inst✝⁴ : SeminormedRing R
inst✝³ : SeminormedAddGroup E'''
inst✝² : SeminormedRing R'
inst✝¹ : NormedDivisionRing 𝕜
inst✝ : NormedDivisionRing 𝕜'
c c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
⊢ f =O[l] g ↔ ∃ c, IsBigOWith c l f g
state_after: no goals
tactic: rw [IsBigO_def]
Theorem: Real.ofCauchy_div
File: Mathlib/Data/Real/Basic.lean

Proof steps:
state_before: x y : ℝ
f g : Cauchy abs
⊢ { cauchy := f / g } = { cauchy := f } / { cauchy := g }
state_after: no goals
tactic: simp_rw [div_eq_mul_inv, ofCauchy_mul, ofCauchy_inv]
Theorem: Convex.combo_self_interior_subset_interior
File: Mathlib/Analysis/Convex/Topology.lean

Proof steps:
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : Module 𝕜 E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousConstSMul 𝕜 E
s : Set E
hs : Convex 𝕜 s
a b : 𝕜
ha : 0 ≤ a
hb : 0 < b
hab : a + b = 1
⊢ a • s + b • interior s ⊆ interior s
state_after: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : Module 𝕜 E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousConstSMul 𝕜 E
s : Set E
hs : Convex 𝕜 s
a b : 𝕜
ha : 0 ≤ a
hb : 0 < b
hab : a + b = 1
⊢ b • interior s + a • s ⊆ interior s
tactic: rw [add_comm]
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : Module 𝕜 E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousConstSMul 𝕜 E
s : Set E
hs : Convex 𝕜 s
a b : 𝕜
ha : 0 ≤ a
hb : 0 < b
hab : a + b = 1
⊢ b • interior s + a • s ⊆ interior s
state_after: no goals
tactic: exact hs.combo_interior_self_subset_interior hb ha (add_comm a b ▸ hab)
Theorem: MvPolynomial.coe_injective
File: Mathlib/RingTheory/MvPowerSeries/Basic.lean

Proof steps:
state_before: σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : MvPolynomial σ R
h : Coe.coe x = Coe.coe y
⊢ x = y
state_after: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : MvPolynomial σ R
h : Coe.coe x = Coe.coe y
m✝ : σ →₀ ℕ
⊢ coeff m✝ x = coeff m✝ y
tactic: ext
state_before: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : MvPolynomial σ R
h : Coe.coe x = Coe.coe y
m✝ : σ →₀ ℕ
⊢ coeff m✝ x = coeff m✝ y
state_after: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : MvPolynomial σ R
h : Coe.coe x = Coe.coe y
m✝ : σ →₀ ℕ
⊢ (MvPowerSeries.coeff R m✝) ↑x = (MvPowerSeries.coeff R m✝) ↑y
tactic: simp_rw [← coeff_coe]
state_before: case a
σ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
φ ψ x y : MvPolynomial σ R
h : Coe.coe x = Coe.coe y
m✝ : σ →₀ ℕ
⊢ (MvPowerSeries.coeff R m✝) ↑x = (MvPowerSeries.coeff R m✝) ↑y
state_after: no goals
tactic: congr
Theorem: nnnorm_norm
File: Mathlib/Analysis/Normed/Field/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
inst✝ : SeminormedAddCommGroup α
a : α
⊢ ‖‖a‖‖₊ = ‖a‖₊
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
inst✝ : SeminormedAddCommGroup α
a : α
⊢ ⟨‖a‖, ⋯⟩ = ‖a‖₊
tactic: rw [Real.nnnorm_of_nonneg (norm_nonneg a)]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
inst✝ : SeminormedAddCommGroup α
a : α
⊢ ⟨‖a‖, ⋯⟩ = ‖a‖₊
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.GrothendieckTopology.OneHypercoverFamily.isSheaf_iff
File: Mathlib/CategoryTheory/Sites/IsSheafOneHypercover.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝¹ : Category.{v', u'} A
H : J.OneHypercoverFamily
inst✝ : H.IsGenerating
P : Cᵒᵖ ⥤ A
⊢ Presheaf.IsSheaf J P ↔ ∀ ⦃X : C⦄ (E : J.OneHypercover X), H E → Nonempty (IsLimit (E.multifork P))
state_after: case mp
C : Type u
inst✝² : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝¹ : Category.{v', u'} A
H : J.OneHypercoverFamily
inst✝ : H.IsGenerating
P : Cᵒᵖ ⥤ A
⊢ Presheaf.IsSheaf J P → ∀ ⦃X : C⦄ (E : J.OneHypercover X), H E → Nonempty (IsLimit (E.multifork P))

case mpr
C : Type u
inst✝² : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝¹ : Category.{v', u'} A
H : J.OneHypercoverFamily
inst✝ : H.IsGenerating
P : Cᵒᵖ ⥤ A
⊢ (∀ ⦃X : C⦄ (E : J.OneHypercover X), H E → Nonempty (IsLimit (E.multifork P))) → Presheaf.IsSheaf J P
tactic: constructor
Theorem: LaurentSeries.valuation_X_pow
File: Mathlib/RingTheory/LaurentSeries.lean

Proof steps:
state_before: R : Type u_1
K : Type u_2
inst✝ : Field K
s : ℕ
⊢ Valued.v ((ofPowerSeries ℤ K) PowerSeries.X ^ s) = ↑(Multiplicative.ofAdd (-↑s))
state_after: no goals
tactic: erw [map_pow, ← one_mul (s : ℤ), ← neg_mul (1 : ℤ) s, Int.ofAdd_mul,
    WithZero.coe_zpow, ofAdd_neg, WithZero.coe_inv, zpow_natCast, valuation_of_algebraMap,
    intValuation_toFun, intValuation_X, ofAdd_neg, WithZero.coe_inv, inv_pow]
Theorem: MeasureTheory.lintegral_smul_measure
File: Mathlib/MeasureTheory/Integral/Lebesgue.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
c : ℝ≥0∞
f : α → ℝ≥0∞
⊢ ∫⁻ (a : α), f a ∂c • μ = c * ∫⁻ (a : α), f a ∂μ
state_after: no goals
tactic: simp only [lintegral, iSup_subtype', SimpleFunc.lintegral_smul, ENNReal.mul_iSup, smul_eq_mul]
Theorem: Matrix.frobenius_nnnorm_transpose
File: Mathlib/Analysis/Matrix.lean

Proof steps:
state_before: R : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type u_5
β : Type u_6
ι : Type u_7
inst✝⁵ : Fintype l
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : Unique ι
inst✝¹ : SeminormedAddCommGroup α
inst✝ : SeminormedAddCommGroup β
A : Matrix m n α
⊢ ‖Aᵀ‖₊ = ‖A‖₊
state_after: R : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type u_5
β : Type u_6
ι : Type u_7
inst✝⁵ : Fintype l
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : Unique ι
inst✝¹ : SeminormedAddCommGroup α
inst✝ : SeminormedAddCommGroup β
A : Matrix m n α
⊢ (∑ y : m, ∑ x : n, ‖Aᵀ x y‖₊ ^ 2) ^ (1 / 2) = (∑ i : m, ∑ j : n, ‖A i j‖₊ ^ 2) ^ (1 / 2)
tactic: rw [frobenius_nnnorm_def, frobenius_nnnorm_def, Finset.sum_comm]
state_before: R : Type u_1
l : Type u_2
m : Type u_3
n : Type u_4
α : Type u_5
β : Type u_6
ι : Type u_7
inst✝⁵ : Fintype l
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : Unique ι
inst✝¹ : SeminormedAddCommGroup α
inst✝ : SeminormedAddCommGroup β
A : Matrix m n α
⊢ (∑ y : m, ∑ x : n, ‖Aᵀ x y‖₊ ^ 2) ^ (1 / 2) = (∑ i : m, ∑ j : n, ‖A i j‖₊ ^ 2) ^ (1 / 2)
state_after: no goals
tactic: simp_rw [Matrix.transpose_apply]
Theorem: le_of_lt_wellOrderSucc
File: Mathlib/Order/IsWellOrderLimitElement.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a b : α
h : a < wellOrderSucc b
⊢ a ≤ b
state_after: α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a b : α
h : a < wellOrderSucc b
this : b < a
⊢ False
tactic: by_contra!
state_before: α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a b : α
h : a < wellOrderSucc b
this : b < a
⊢ False
state_after: no goals
tactic: simpa using lt_of_lt_of_le h (wellOrderSucc_le this)
Theorem: mem_closure_iff_nhds_basis
File: Mathlib/Topology/Basic.lean

Proof steps:
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s✝ s₁ s₂ t : Set X
p✝ p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
p : ι → Prop
s : ι → Set X
h : (𝓝 x).HasBasis p s
⊢ (∀ (i : ι), p i → (s i ∩ t).Nonempty) ↔ ∀ (i : ι), p i → ∃ y ∈ t, y ∈ s i
state_after: no goals
tactic: simp only [Set.Nonempty, mem_inter_iff, exists_prop, and_comm]
Theorem: Left.mul_pos
File: Mathlib/Algebra/Order/GroupWithZero/Unbundled.lean

Proof steps:
state_before: α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : PosMulStrictMono α
ha : 0 < a
hb : 0 < b
⊢ 0 < a * b
state_after: no goals
tactic: simpa only [mul_zero] using mul_lt_mul_of_pos_left hb ha
Theorem: CategoryTheory.Functor.preservesEpimorphisms_of_map_exact
File: Mathlib/CategoryTheory/Abelian/Exact.lean

Proof steps:
state_before: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
inst✝⁵ : Abelian C
A : Type u₁
B : Type u₂
inst✝⁴ : Category.{v₁, u₁} A
inst✝³ : Category.{v₂, u₂} B
inst✝² : Abelian A
inst✝¹ : Abelian B
L : A ⥤ B
inst✝ : L.PreservesZeroMorphisms
hL : ∀ (S : ShortComplex A), S.Exact → (S.map L).Exact
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
⊢ Epi (L.map f)
state_after: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
inst✝⁵ : Abelian C
A : Type u₁
B : Type u₂
inst✝⁴ : Category.{v₁, u₁} A
inst✝³ : Category.{v₂, u₂} B
inst✝² : Abelian A
inst✝¹ : Abelian B
L : A ⥤ B
inst✝ : L.PreservesZeroMorphisms
hL : ∀ (S : ShortComplex A), S.Exact → (S.map L).Exact
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
⊢ (ShortComplex.mk (L.map f) 0 ⋯).Exact
tactic: apply ((Abelian.tfae_epi (L.map f) (L.obj 0)).out 2 0).mp
state_before: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
inst✝⁵ : Abelian C
A : Type u₁
B : Type u₂
inst✝⁴ : Category.{v₁, u₁} A
inst✝³ : Category.{v₂, u₂} B
inst✝² : Abelian A
inst✝¹ : Abelian B
L : A ⥤ B
inst✝ : L.PreservesZeroMorphisms
hL : ∀ (S : ShortComplex A), S.Exact → (S.map L).Exact
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
⊢ (ShortComplex.mk (L.map f) 0 ⋯).Exact
state_after: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
inst✝⁵ : Abelian C
A : Type u₁
B : Type u₂
inst✝⁴ : Category.{v₁, u₁} A
inst✝³ : Category.{v₂, u₂} B
inst✝² : Abelian A
inst✝¹ : Abelian B
L : A ⥤ B
inst✝ : L.PreservesZeroMorphisms
hL : ∀ (S : ShortComplex A), S.Exact → (S.map L).Exact
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
⊢ (ShortComplex.mk f 0 ⋯).map L ≅ ShortComplex.mk (L.map f) 0 ⋯
tactic: refine ShortComplex.exact_of_iso ?_ (hL _ (((tfae_epi f 0).out 0 2).mp hf))
state_before: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
inst✝⁵ : Abelian C
A : Type u₁
B : Type u₂
inst✝⁴ : Category.{v₁, u₁} A
inst✝³ : Category.{v₂, u₂} B
inst✝² : Abelian A
inst✝¹ : Abelian B
L : A ⥤ B
inst✝ : L.PreservesZeroMorphisms
hL : ∀ (S : ShortComplex A), S.Exact → (S.map L).Exact
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
⊢ (ShortComplex.mk f 0 ⋯).map L ≅ ShortComplex.mk (L.map f) 0 ⋯
state_after: no goals
tactic: exact ShortComplex.isoMk (Iso.refl _) (Iso.refl _)  (Iso.refl _)
Theorem: padicValRat.one
File: Mathlib/NumberTheory/Padics/PadicVal.lean

Proof steps:
state_before: p : ℕ
⊢ padicValRat p 1 = 0
state_after: no goals
tactic: simp [padicValRat]
Theorem: LinearMap.BilinForm.symmCompOfNondegenerate_left_apply
File: Mathlib/LinearAlgebra/BilinearForm/Properties.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝¹⁵ : CommSemiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹² : CommRing R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁹ : Field K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
M'✝ : Type u_7
M'' : Type u_8
inst✝⁶ : AddCommMonoid M'✝
inst✝⁵ : AddCommMonoid M''
inst✝⁴ : Module R M'✝
inst✝³ : Module R M''
B : BilinForm R M
B₁✝ : BilinForm R₁ M₁
M' : Type u_9
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : FiniteDimensional K V
B₁ B₂ : BilinForm K V
b₂ : B₂.Nondegenerate
v w : V
⊢ (B₂ ((B₁.symmCompOfNondegenerate B₂ b₂) w)) v = (B₁ w) v
state_after: no goals
tactic: conv_lhs => rw [comp_symmCompOfNondegenerate_apply]
Theorem: CategoryTheory.ShortComplex.RightHomologyData.ofIsLimitKernelFork_Q
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.19876, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
A : C
hf : S.f = 0
c : KernelFork S.g
hc : IsLimit c
⊢ S.f ≫ 𝟙 S.X₂ = 0
state_after: no goals
tactic: rw [comp_id, hf]
state_before: C : Type u_1
inst✝¹ : Category.{?u.19876, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
A : C
hf : S.f = 0
c : KernelFork S.g
hc : IsLimit c
⊢ (Iso.refl c.pt).hom ≫ Fork.ι (KernelFork.ofι (Fork.ι c) ⋯) = Fork.ι c
state_after: no goals
tactic: aesop_cat
Theorem: dvd_mul_sub_mul_mul_left_of_dvd
File: Mathlib/Algebra/Ring/Divisibility/Lemmas.lean

Proof steps:
state_before: R : Type u_1
inst✝ : CommRing R
p a b c d x y : R
h1 : p ∣ a * x + b * y
h2 : p ∣ c * x + d * y
⊢ p ∣ (a * d - b * c) * x
state_after: case intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y : R
h2 : p ∣ c * x + d * y
k1 : R
hk1 : a * x + b * y = p * k1
⊢ p ∣ (a * d - b * c) * x
tactic: obtain ⟨k1, hk1⟩ := h1
state_before: case intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y : R
h2 : p ∣ c * x + d * y
k1 : R
hk1 : a * x + b * y = p * k1
⊢ p ∣ (a * d - b * c) * x
state_after: case intro.intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y k1 : R
hk1 : a * x + b * y = p * k1
k2 : R
hk2 : c * x + d * y = p * k2
⊢ p ∣ (a * d - b * c) * x
tactic: obtain ⟨k2, hk2⟩ := h2
state_before: case intro.intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y k1 : R
hk1 : a * x + b * y = p * k1
k2 : R
hk2 : c * x + d * y = p * k2
⊢ p ∣ (a * d - b * c) * x
state_after: case intro.intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y k1 : R
hk1 : a * x + b * y = p * k1
k2 : R
hk2 : c * x + d * y = p * k2
⊢ (a * d - b * c) * x = p * (d * k1 - b * k2)
tactic: refine ⟨d * k1 - b * k2, ?_⟩
state_before: case intro.intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y k1 : R
hk1 : a * x + b * y = p * k1
k2 : R
hk2 : c * x + d * y = p * k2
⊢ (a * d - b * c) * x = p * (d * k1 - b * k2)
state_after: case intro.intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y k1 : R
hk1 : a * x + b * y = p * k1
k2 : R
hk2 : c * x + d * y = p * k2
⊢ (p * k1 - b * y) * d - (p * k2 - d * y) * b = p * (d * k1 - b * k2)
tactic: rw [show (a * d - b * c) * x = a * x * d - c * x * b by ring, eq_sub_of_add_eq hk1,
    eq_sub_of_add_eq hk2]
state_before: case intro.intro
R : Type u_1
inst✝ : CommRing R
p a b c d x y k1 : R
hk1 : a * x + b * y = p * k1
k2 : R
hk2 : c * x + d * y = p * k2
⊢ (p * k1 - b * y) * d - (p * k2 - d * y) * b = p * (d * k1 - b * k2)
state_after: no goals
tactic: ring
Theorem: Multiset.Ico_disjoint_Ico
File: Mathlib/Order/Interval/Multiset.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : LocallyFiniteOrder α
a✝ b✝ a b c d : α
h : b ≤ c
x : α
hab : x ∈ Ico a b
hbc : x ∈ Ico c d
⊢ False
state_after: α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : LocallyFiniteOrder α
a✝ b✝ a b c d : α
h : b ≤ c
x : α
hab : a ≤ x ∧ x < b
hbc : c ≤ x ∧ x < d
⊢ False
tactic: rw [mem_Ico] at hab hbc
state_before: α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : LocallyFiniteOrder α
a✝ b✝ a b c d : α
h : b ≤ c
x : α
hab : a ≤ x ∧ x < b
hbc : c ≤ x ∧ x < d
⊢ False
state_after: no goals
tactic: exact hab.2.not_le (h.trans hbc.1)
Theorem: ZMod.isUnit_prime_iff_not_dvd
File: Mathlib/Data/ZMod/Basic.lean

Proof steps:
state_before: m n✝ n p : ℕ
hp : Nat.Prime p
⊢ IsUnit ↑p ↔ ¬p ∣ n
state_after: no goals
tactic: rw [isUnit_iff_coprime, Nat.Prime.coprime_iff_not_dvd hp]
Theorem: Set.nonempty_of_union_eq_top_of_nonempty
File: Mathlib/Data/Set/Lattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι✝ → Sort u_7
κ₁ : ι✝ → Sort u_8
κ₂ : ι✝ → Sort u_9
κ' : ι' → Sort u_10
ι : Type u_11
t : Set ι
s : ι → Set α
H : Nonempty α
w : ⋃ i ∈ t, s i = ⊤
⊢ t.Nonempty
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι✝ → Sort u_7
κ₁ : ι✝ → Sort u_8
κ₂ : ι✝ → Sort u_9
κ' : ι' → Sort u_10
ι : Type u_11
t : Set ι
s : ι → Set α
H : Nonempty α
w : ⋃ i ∈ t, s i = ⊤
x : ι
m : x ∈ t
⊢ t.Nonempty
tactic: obtain ⟨x, m, -⟩ := exists_set_mem_of_union_eq_top t s w H.some
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι✝ → Sort u_7
κ₁ : ι✝ → Sort u_8
κ₂ : ι✝ → Sort u_9
κ' : ι' → Sort u_10
ι : Type u_11
t : Set ι
s : ι → Set α
H : Nonempty α
w : ⋃ i ∈ t, s i = ⊤
x : ι
m : x ∈ t
⊢ t.Nonempty
state_after: no goals
tactic: exact ⟨x, m⟩
Theorem: Multipliable.of_inv
File: Mathlib/Topology/Algebra/InfiniteSum/Group.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalGroup α
f g : β → α
a a₁ a₂ : α
hf : Multipliable fun b => (f b)⁻¹
⊢ Multipliable f
state_after: no goals
tactic: simpa only [inv_inv] using hf.inv
Theorem: EMetric.infEdist_biUnion
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

Proof steps:
state_before: ι✝ : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x✝ y : α
s t : Set α
Φ : α → β
ι : Type u_2
f : ι → Set α
I : Set ι
x : α
⊢ infEdist x (⋃ i ∈ I, f i) = ⨅ i ∈ I, infEdist x (f i)
state_after: no goals
tactic: simp only [infEdist_iUnion]
Theorem: ForInStep.bind_bindList_assoc
File: .lake/packages/batteries/Batteries/Control/ForInStep/Lemmas.lean

Proof steps:
state_before: m : Type u_1 → Type u_2
β : Type u_1
α : Type u_3
inst✝¹ : Monad m
inst✝ : LawfulMonad m
f : β → m (ForInStep β)
g : α → β → m (ForInStep β)
s : ForInStep β
l : List α
⊢ (do
      let x ← s.bind f
      bindList g l x) =
    s.bind fun b => do
      let x ← f b
      bindList g l x
state_after: no goals
tactic: cases s <;> simp
Theorem: AlgEquiv.subalgebraMap_apply_coe
File: Mathlib/Algebra/Algebra/Subalgebra/Basic.lean

Proof steps:
state_before: R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
e : A ≃ₐ[R] B
S : Subalgebra R A
r : R
⊢ __src✝.toFun ((algebraMap R ↥S) r) = (algebraMap R ↥(Subalgebra.map (↑e) S)) r
state_after: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
e : A ≃ₐ[R] B
S : Subalgebra R A
r : R
⊢ ↑(__src✝.toFun ((algebraMap R ↥S) r)) = ↑((algebraMap R ↥(Subalgebra.map (↑e) S)) r)
tactic: ext
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
e : A ≃ₐ[R] B
S : Subalgebra R A
r : R
⊢ ↑(__src✝.toFun ((algebraMap R ↥S) r)) = ↑((algebraMap R ↥(Subalgebra.map (↑e) S)) r)
state_after: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
e : A ≃ₐ[R] B
S : Subalgebra R A
r : R
⊢ ↑((e.toRingEquiv.subsemiringMap S.toSubsemiring).toFun ((algebraMap R ↥S) r)) =
    ↑((algebraMap R ↥(Subalgebra.map (↑e) S)) r)
tactic: dsimp only
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
e : A ≃ₐ[R] B
S : Subalgebra R A
r : R
⊢ ↑((e.toRingEquiv.subsemiringMap S.toSubsemiring).toFun ((algebraMap R ↥S) r)) =
    ↑((algebraMap R ↥(Subalgebra.map (↑e) S)) r)
state_after: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
e : A ≃ₐ[R] B
S : Subalgebra R A
r : R
⊢ e.toRingEquiv ↑((algebraMap R ↥S) r) = ↑((algebraMap R ↥(Subalgebra.map (↑e) S)) r)
tactic: erw [RingEquiv.subsemiringMap_apply_coe]
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Semiring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
e : A ≃ₐ[R] B
S : Subalgebra R A
r : R
⊢ e.toRingEquiv ↑((algebraMap R ↥S) r) = ↑((algebraMap R ↥(Subalgebra.map (↑e) S)) r)
state_after: no goals
tactic: exact e.commutes _
Theorem: SimpleGraph.Walk.toSubgraph_cons_nil_eq_subgraphOfAdj
File: Mathlib/Combinatorics/SimpleGraph/Connectivity/Subgraph.lean

Proof steps:
state_before: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
u v w : V
h : G.Adj u v
⊢ (cons h nil).toSubgraph = G.subgraphOfAdj h
state_after: no goals
tactic: simp