1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: normEDS_zero
File: Mathlib/NumberTheory/EllipticDivisibilitySequence.lean

tactic: erw [normEDS_ofNat, preNormEDS'_zero, zero_mul]
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
W : ℤ → R
f : R →+* S
b c d : R
⊢ normEDS b c d 0 = 0
state_after: no goals
Theorem: finprod_def
File: Mathlib/Algebra/BigOperators/Finprod.lean

tactic: split_ifs with h
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
⊢ ∏ᶠ (i : α), f i = if h : (mulSupport f).Finite then ∏ i ∈ h.toFinset, f i else 1
state_after: case pos
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : (mulSupport f).Finite
⊢ ∏ᶠ (i : α), f i = ∏ i ∈ h.toFinset, f i

case neg
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : ¬(mulSupport f).Finite
⊢ ∏ᶠ (i : α), f i = 1

tactic: exact finprod_eq_prod_of_mulSupport_toFinset_subset _ h (Finset.Subset.refl _)
state_before: case pos
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : (mulSupport f).Finite
⊢ ∏ᶠ (i : α), f i = ∏ i ∈ h.toFinset, f i
state_after: no goals

tactic: rw [finprod, dif_neg]
state_before: case neg
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : ¬(mulSupport f).Finite
⊢ ∏ᶠ (i : α), f i = 1
state_after: case neg.hnc
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : ¬(mulSupport f).Finite
⊢ ¬(mulSupport ((fun i => f i) ∘ PLift.down)).Finite

tactic: rw [mulSupport_comp_eq_preimage]
state_before: case neg.hnc
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : ¬(mulSupport f).Finite
⊢ ¬(mulSupport ((fun i => f i) ∘ PLift.down)).Finite
state_after: case neg.hnc
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : ¬(mulSupport f).Finite
⊢ ¬(PLift.down ⁻¹' mulSupport fun i => f i).Finite

tactic: exact mt (fun hf => hf.of_preimage Equiv.plift.surjective) h
state_before: case neg.hnc
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
inst✝ : Decidable (mulSupport f).Finite
h : ¬(mulSupport f).Finite
⊢ ¬(PLift.down ⁻¹' mulSupport fun i => f i).Finite
state_after: no goals
Theorem: Real.Angle.cos_neg
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: induction θ using Real.Angle.induction_on
state_before: θ : Angle
⊢ (-θ).cos = θ.cos
state_after: case h
x✝ : ℝ
⊢ (-↑x✝).cos = (↑x✝).cos

tactic: exact Real.cos_neg _
state_before: case h
x✝ : ℝ
⊢ (-↑x✝).cos = (↑x✝).cos
state_after: no goals
Theorem: Subgroup.zpowers_le
File: Mathlib/Algebra/Group/Subgroup/ZPowers.lean

tactic: rw [zpowers_eq_closure, closure_le, Set.singleton_subset_iff, SetLike.mem_coe]
state_before: G : Type u_1
inst✝² : Group G
A : Type u_2
inst✝¹ : AddGroup A
N : Type u_3
inst✝ : Group N
s : Set G
g✝ g : G
H : Subgroup G
⊢ zpowers g ≤ H ↔ g ∈ H
state_after: no goals
Theorem: Vector.scanl_cons
File: Mathlib/Data/Vector/Basic.lean

tactic: simp only [scanl, toList_cons, List.scanl]
state_before: n : ℕ
α : Type u_1
β : Type u_2
f : β → α → β
b : β
v : Vector α n
x : α
⊢ scanl f b (x ::ᵥ v) = b ::ᵥ scanl f (f b x) v
state_after: n : ℕ
α : Type u_1
β : Type u_2
f : β → α → β
b : β
v : Vector α n
x : α
⊢ ⟨b :: List.scanl f (f b x) ↑v, ⋯⟩ = b ::ᵥ ⟨List.scanl f (f b x) v.toList, ⋯⟩

tactic: simp only [cons]
state_before: n : ℕ
α : Type u_1
β : Type u_2
f : β → α → β
b : β
v : Vector α n
x : α
⊢ ⟨b :: List.scanl f (f b x) ↑v, ⋯⟩ = b ::ᵥ ⟨List.scanl f (f b x) v.toList, ⋯⟩
state_after: n : ℕ
α : Type u_1
β : Type u_2
f : β → α → β
b : β
v : Vector α n
x : α
⊢ ⟨b :: List.scanl f (f b x) ↑v, ⋯⟩ = ⟨b :: List.scanl f (f b x) v.toList, ⋯⟩

tactic: rfl
state_before: n : ℕ
α : Type u_1
β : Type u_2
f : β → α → β
b : β
v : Vector α n
x : α
⊢ ⟨b :: List.scanl f (f b x) ↑v, ⋯⟩ = ⟨b :: List.scanl f (f b x) v.toList, ⋯⟩
state_after: no goals
Theorem: CategoryTheory.Sheaf.isSheaf_of_isLimit
File: Mathlib/CategoryTheory/Sites/Limits.lean

tactic: rw [Presheaf.isSheaf_iff_multifork]
state_before: C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{w', w} D
K : Type z
inst✝¹ : Category.{z', z} K
inst✝ : HasLimitsOfShape K D
F : K ⥤ Sheaf J D
E : Cone (F ⋙ sheafToPresheaf J D)
hE : IsLimit E
⊢ Presheaf.IsSheaf J E.pt
state_after: C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{w', w} D
K : Type z
inst✝¹ : Category.{z', z} K
inst✝ : HasLimitsOfShape K D
F : K ⥤ Sheaf J D
E : Cone (F ⋙ sheafToPresheaf J D)
hE : IsLimit E
⊢ ∀ (X : C) (S : J.Cover X), Nonempty (IsLimit (S.multifork E.pt))

tactic: intro X S
state_before: C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{w', w} D
K : Type z
inst✝¹ : Category.{z', z} K
inst✝ : HasLimitsOfShape K D
F : K ⥤ Sheaf J D
E : Cone (F ⋙ sheafToPresheaf J D)
hE : IsLimit E
⊢ ∀ (X : C) (S : J.Cover X), Nonempty (IsLimit (S.multifork E.pt))
state_after: C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{w', w} D
K : Type z
inst✝¹ : Category.{z', z} K
inst✝ : HasLimitsOfShape K D
F : K ⥤ Sheaf J D
E : Cone (F ⋙ sheafToPresheaf J D)
hE : IsLimit E
X : C
S : J.Cover X
⊢ Nonempty (IsLimit (S.multifork E.pt))

tactic: exact ⟨isLimitMultiforkOfIsLimit _ _ hE _ _⟩
state_before: C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{w', w} D
K : Type z
inst✝¹ : Category.{z', z} K
inst✝ : HasLimitsOfShape K D
F : K ⥤ Sheaf J D
E : Cone (F ⋙ sheafToPresheaf J D)
hE : IsLimit E
X : C
S : J.Cover X
⊢ Nonempty (IsLimit (S.multifork E.pt))
state_after: no goals
Theorem: SModEq.smul
File: Mathlib/LinearAlgebra/SModEq.lean

tactic: rw [SModEq.def] at hxy ⊢
state_before: R : Type u_1
inst✝⁵ : Ring R
A : Type u_2
inst✝⁴ : CommRing A
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
U U₁ U₂ : Submodule R M
x x₁ x₂ y y₁ y₂ z z₁ z₂ : M
N : Type u_4
inst✝¹ : AddCommGroup N
inst✝ : Module R N
V V₁ V₂ : Submodule R N
hxy : x ≡ y [SMOD U]
c : R
⊢ c • x ≡ c • y [SMOD U]
state_after: R : Type u_1
inst✝⁵ : Ring R
A : Type u_2
inst✝⁴ : CommRing A
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
U U₁ U₂ : Submodule R M
x x₁ x₂ y y₁ y₂ z z₁ z₂ : M
N : Type u_4
inst✝¹ : AddCommGroup N
inst✝ : Module R N
V V₁ V₂ : Submodule R N
hxy : Submodule.Quotient.mk x = Submodule.Quotient.mk y
c : R
⊢ Submodule.Quotient.mk (c • x) = Submodule.Quotient.mk (c • y)

tactic: simp_rw [Quotient.mk_smul, hxy]
state_before: R : Type u_1
inst✝⁵ : Ring R
A : Type u_2
inst✝⁴ : CommRing A
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
U U₁ U₂ : Submodule R M
x x₁ x₂ y y₁ y₂ z z₁ z₂ : M
N : Type u_4
inst✝¹ : AddCommGroup N
inst✝ : Module R N
V V₁ V₂ : Submodule R N
hxy : Submodule.Quotient.mk x = Submodule.Quotient.mk y
c : R
⊢ Submodule.Quotient.mk (c • x) = Submodule.Quotient.mk (c • y)
state_after: no goals
Theorem: PMF.mem_support_bernoulli_iff
File: Mathlib/Probability/ProbabilityMassFunction/Constructions.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
p : ℝ≥0∞
h : p ≤ 1
b : Bool
⊢ b ∈ (bernoulli p h).support ↔ bif b then p ≠ 0 else p ≠ 1
state_after: no goals
Theorem: ProbabilityTheory.Indep_iff_IndepSets
File: Mathlib/Probability/Independence/Basic.lean

tactic: simp only [Indep, IndepSets, kernel.Indep]
state_before: Ω : Type u_1
ι : Type u_2
β : Type u_3
γ : Type u_4
κ : ι → Type u_5
π : ι → Set (Set Ω)
m : ι → MeasurableSpace Ω
x✝ : MeasurableSpace Ω
μ✝ : Measure Ω
S : Finset ι
s : ι → Set Ω
m₁ m₂ _mΩ : MeasurableSpace Ω
μ : Measure Ω
⊢ Indep m₁ m₂ μ ↔ IndepSets {s | MeasurableSet s} {s | MeasurableSet s} μ
state_after: no goals
Theorem: Convex.mapsTo_lineMap
File: Mathlib/Analysis/Convex/Basic.lean

tactic: simpa only [mapsTo', segment_eq_image_lineMap] using h.segment_subset hx hy
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
inst✝⁴ : OrderedRing 𝕜
inst✝³ : AddCommGroup E
inst✝² : AddCommGroup F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s t : Set E
h : Convex 𝕜 s
x y : E
hx : x ∈ s
hy : y ∈ s
⊢ MapsTo (⇑(AffineMap.lineMap x y)) (Icc 0 1) s
state_after: no goals
Theorem: Matroid.Basis.eq_exchange_of_diff_eq_singleton
File: Mathlib/Data/Matroid/Restrict.lean

tactic: rw [← base_restrict_iff] at hI hJ
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Basis I X
hJ : M.Basis J X
hIJ : I \ J = {e}
⊢ ∃ f ∈ J \ I, J = insert f I \ {e}
state_after: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : (M ↾ X).Base I
hJ : (M ↾ X).Base J
hIJ : I \ J = {e}
⊢ ∃ f ∈ J \ I, J = insert f I \ {e}

tactic: exact hI.eq_exchange_of_diff_eq_singleton hJ hIJ
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : (M ↾ X).Base I
hJ : (M ↾ X).Base J
hIJ : I \ J = {e}
⊢ ∃ f ∈ J \ I, J = insert f I \ {e}
state_after: no goals
Theorem: Matrix.zpow_neg
File: Mathlib/LinearAlgebra/Matrix/ZPow.lean

tactic: rw [zpow_negSucc, neg_negSucc, zpow_natCast, nonsing_inv_nonsing_inv]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
h : IsUnit A.det
n : ℕ
⊢ A ^ (- -[n+1]) = (A ^ -[n+1])⁻¹
state_after: case h
n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
h : IsUnit A.det
n : ℕ
⊢ IsUnit (A ^ (n + 1)).det

tactic: rw [det_pow]
state_before: case h
n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
h : IsUnit A.det
n : ℕ
⊢ IsUnit (A ^ (n + 1)).det
state_after: case h
n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
h : IsUnit A.det
n : ℕ
⊢ IsUnit (A.det ^ (n + 1))

tactic: exact h.pow _
state_before: case h
n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
h : IsUnit A.det
n : ℕ
⊢ IsUnit (A.det ^ (n + 1))
state_after: no goals
Theorem: Surreal.Multiplication.P3_comm
File: Mathlib/SetTheory/Surreal/Multiplication.lean

tactic: rw [P3, P3, add_comm]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ P3 x₁ x₂ y₁ y₂ ↔ P3 y₁ y₂ x₁ x₂
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ ⟦x₂ * y₁⟧ + ⟦x₁ * y₂⟧ < ⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ ↔ ⟦y₁ * x₂⟧ + ⟦y₂ * x₁⟧ < ⟦y₁ * x₁⟧ + ⟦y₂ * x₂⟧

tactic: congr! 2 <;> rw [quot_mul_comm]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ ⟦x₂ * y₁⟧ + ⟦x₁ * y₂⟧ < ⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ ↔ ⟦y₁ * x₂⟧ + ⟦y₂ * x₁⟧ < ⟦y₁ * x₁⟧ + ⟦y₂ * x₂⟧
state_after: no goals
Theorem: intervalIntegral.inv_smul_integral_comp_div_sub
File: Mathlib/MeasureTheory/Integral/IntervalIntegral.lean

tactic: by_cases hc : c = 0 <;> simp [hc, integral_comp_div_sub]
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
F : Type u_4
A : Type u_5
inst✝² : NormedAddCommGroup E
inst✝¹ : CompleteSpace E
inst✝ : NormedSpace ℝ E
a b c✝ d✝ : ℝ
f : ℝ → E
c d : ℝ
⊢ c⁻¹ • ∫ (x : ℝ) in a..b, f (x / c - d) = ∫ (x : ℝ) in a / c - d..b / c - d, f x
state_after: no goals
Theorem: NNReal.le_add_nndist
File: Mathlib/Topology/MetricSpace/Pseudo/Constructions.lean

tactic: suffices (a : ℝ) ≤ (b : ℝ) + dist a b by
  rwa [← NNReal.coe_le_coe, NNReal.coe_add, coe_nndist]
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
a b : ℝ≥0
⊢ a ≤ b + nndist a b
state_after: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
a b : ℝ≥0
⊢ ↑a ≤ ↑b + dist a b

tactic: rw [← sub_le_iff_le_add']
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
a b : ℝ≥0
⊢ ↑a ≤ ↑b + dist a b
state_after: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
a b : ℝ≥0
⊢ ↑a - ↑b ≤ dist a b

tactic: exact le_of_abs_le (dist_eq a b).ge
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
a b : ℝ≥0
⊢ ↑a - ↑b ≤ dist a b
state_after: no goals

tactic: rwa [← NNReal.coe_le_coe, NNReal.coe_add, coe_nndist]
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
a b : ℝ≥0
this : ↑a ≤ ↑b + dist a b
⊢ a ≤ b + nndist a b
state_after: no goals
Theorem: Real.logb_self_eq_one_iff
File: Mathlib/Analysis/SpecialFunctions/Log/Base.lean

tactic: simp [logb, h'] at h
state_before: b x y : ℝ
h : logb b b = 1
h' : log b = 0
⊢ False
state_after: no goals
Theorem: CategoryTheory.ShortComplex.leftRightHomologyComparison'_fac
File: Mathlib/Algebra/Homology/ShortComplex/Homology.lean

tactic: rw [leftRightHomologyComparison'_eq_leftHomologpMap'_comp_iso_hom_comp_rightHomologyMap'
  S.homologyData h₁ h₂]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
h₁ : S.LeftHomologyData
h₂ : S.RightHomologyData
inst✝ : S.HasHomology
⊢ leftRightHomologyComparison' h₁ h₂ = h₁.homologyIso.inv ≫ h₂.homologyIso.hom
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
h₁ : S.LeftHomologyData
h₂ : S.RightHomologyData
inst✝ : S.HasHomology
⊢ leftHomologyMap' (𝟙 S) h₁ S.homologyData.left ≫
      S.homologyData.iso.hom ≫ rightHomologyMap' (𝟙 S) S.homologyData.right h₂ =
    h₁.homologyIso.inv ≫ h₂.homologyIso.hom

tactic: dsimp only [LeftHomologyData.homologyIso, LeftHomologyData.leftHomologyIso,
  Iso.symm, Iso.trans, Iso.refl, leftHomologyMapIso', leftHomologyIso,
  RightHomologyData.homologyIso, RightHomologyData.rightHomologyIso,
  rightHomologyMapIso', rightHomologyIso]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
h₁ : S.LeftHomologyData
h₂ : S.RightHomologyData
inst✝ : S.HasHomology
⊢ leftHomologyMap' (𝟙 S) h₁ S.homologyData.left ≫
      S.homologyData.iso.hom ≫ rightHomologyMap' (𝟙 S) S.homologyData.right h₂ =
    h₁.homologyIso.inv ≫ h₂.homologyIso.hom
state_after: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
h₁ : S.LeftHomologyData
h₂ : S.RightHomologyData
inst✝ : S.HasHomology
⊢ leftHomologyMap' (𝟙 S) h₁ S.homologyData.left ≫
      S.homologyData.iso.hom ≫ rightHomologyMap' (𝟙 S) S.homologyData.right h₂ =
    (leftHomologyMap' (𝟙 S) h₁ S.leftHomologyData ≫ leftHomologyMap' (𝟙 S) S.leftHomologyData S.homologyData.left) ≫
      (S.homologyData.iso.hom ≫ rightHomologyMap' (𝟙 S) S.homologyData.right S.rightHomologyData) ≫
        rightHomologyMap' (𝟙 S) S.rightHomologyData h₂

tactic: simp only [assoc, ← leftHomologyMap'_comp_assoc, id_comp, ← rightHomologyMap'_comp]
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
h₁ : S.LeftHomologyData
h₂ : S.RightHomologyData
inst✝ : S.HasHomology
⊢ leftHomologyMap' (𝟙 S) h₁ S.homologyData.left ≫
      S.homologyData.iso.hom ≫ rightHomologyMap' (𝟙 S) S.homologyData.right h₂ =
    (leftHomologyMap' (𝟙 S) h₁ S.leftHomologyData ≫ leftHomologyMap' (𝟙 S) S.leftHomologyData S.homologyData.left) ≫
      (S.homologyData.iso.hom ≫ rightHomologyMap' (𝟙 S) S.homologyData.right S.rightHomologyData) ≫
        rightHomologyMap' (𝟙 S) S.rightHomologyData h₂
state_after: no goals
Theorem: Filter.Tendsto.atBot_mul_atTop
File: Mathlib/Order/Filter/AtTopBot.lean

tactic: have : Tendsto (fun x => -f x * g x) l atTop :=
  (tendsto_neg_atBot_atTop.comp hf).atTop_mul_atTop hg
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : OrderedRing α
l : Filter β
f g : β → α
hf : Tendsto f l atBot
hg : Tendsto g l atTop
⊢ Tendsto (fun x => f x * g x) l atBot
state_after: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : OrderedRing α
l : Filter β
f g : β → α
hf : Tendsto f l atBot
hg : Tendsto g l atTop
this : Tendsto (fun x => -f x * g x) l atTop
⊢ Tendsto (fun x => f x * g x) l atBot
Theorem: Nat.Partrec.Code.eval_id
File: Mathlib/Computability/PartrecCode.lean

tactic: simp! [Seq.seq]
state_before: n : ℕ
⊢ Code.id.eval n = Part.some n
state_after: no goals
Theorem: CharTwo.sum_mul_self
File: Mathlib/Algebra/CharP/Two.lean

tactic: simp_rw [← pow_two, sum_sq]
state_before: R : Type u_1
ι : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CharP R 2
s : Finset ι
f : ι → R
⊢ (∑ i ∈ s, f i) * ∑ i ∈ s, f i = ∑ i ∈ s, f i * f i
state_after: no goals
Theorem: Nat.lt_div_mul_add
File: Mathlib/Data/Nat/Defs.lean

tactic: rw [← Nat.succ_mul, ← Nat.div_lt_iff_lt_mul hb]
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
hb : 0 < b
⊢ a < a / b * b + b
state_after: a b c d m n k : ℕ
p q : ℕ → Prop
hb : 0 < b
⊢ a / b < (a / b).succ

tactic: exact Nat.lt_succ_self _
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
hb : 0 < b
⊢ a / b < (a / b).succ
state_after: no goals
Theorem: Sublattice.coe_iInf
File: Mathlib/Order/Sublattice.lean

tactic: simp [iInf]
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Lattice α
inst✝¹ : Lattice β
inst✝ : Lattice γ
L M : Sublattice α
f✝ : LatticeHom α β
s t : Set α
a : α
f : ι → Sublattice α
⊢ ↑(⨅ i, f i) = ⋂ i, ↑(f i)
state_after: no goals
Theorem: linearIndependent_iff_totalOn
File: Mathlib/LinearAlgebra/LinearIndependent.lean

tactic: rw [Finsupp.totalOn, LinearMap.ker, LinearMap.comap_codRestrict, Submodule.map_bot, comap_bot,
  LinearMap.ker_comp, linearIndependent_subtype_disjoint, disjoint_iff_inf_le, ←
  map_comap_subtype, map_le_iff_le_comap, comap_bot, ker_subtype, le_bot_iff]
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
⊢ (LinearIndependent R fun (x : ↑s) => ↑x) ↔ LinearMap.ker (Finsupp.totalOn M M R id s) = ⊥
state_after: no goals
Theorem: Commute.mul_mul_mul_comm
File: Mathlib/Algebra/Group/Commute/Defs.lean

tactic: simp only [hbc.left_comm, mul_assoc]
state_before: G : Type u_1
M : Type u_2
S : Type u_3
inst✝ : Semigroup S
a✝ b c : S
hbc : Commute b c
a d : S
⊢ a * b * (c * d) = a * c * (b * d)
state_after: no goals
Theorem: one_le_mabs
File: Mathlib/Algebra/Order/Group/Abs.lean

tactic: apply pow_two_semiclosed _
state_before: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ mabs a
state_after: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ mabs a ^ 2

tactic: rw [mabs, pow_two, mul_sup,  sup_mul, ← pow_two, mul_left_inv, sup_comm, ← sup_assoc]
state_before: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ mabs a ^ 2
state_after: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ (a ⊔ a⁻¹) * a⁻¹ ⊔ a ^ 2 ⊔ 1

tactic: apply le_sup_right
state_before: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ (a ⊔ a⁻¹) * a⁻¹ ⊔ a ^ 2 ⊔ 1
state_after: no goals
Theorem: Complex.inv_re
File: Mathlib/Data/Complex/Basic.lean

tactic: simp [inv_def, division_def, ofReal']
state_before: z : ℂ
⊢ z⁻¹.re = z.re / normSq z
state_after: no goals
Theorem: CategoryTheory.Functor.map_eq_zero_iff
File: Mathlib/CategoryTheory/Limits/Preserves/Shapes/Zero.lean

tactic: rintro rfl
state_before: C : Type u₁
inst✝⁷ : Category.{v₁, u₁} C
D : Type u₂
inst✝⁶ : Category.{v₂, u₂} D
E : Type u₃
inst✝⁵ : Category.{v₃, u₃} E
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
inst✝² : HasZeroMorphisms E
F : C ⥤ D
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : F.Faithful
X Y : C
f : X ⟶ Y
⊢ f = 0 → F.map f = 0
state_after: C : Type u₁
inst✝⁷ : Category.{v₁, u₁} C
D : Type u₂
inst✝⁶ : Category.{v₂, u₂} D
E : Type u₃
inst✝⁵ : Category.{v₃, u₃} E
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
inst✝² : HasZeroMorphisms E
F : C ⥤ D
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : F.Faithful
X Y : C
⊢ F.map 0 = 0

tactic: exact F.map_zero _ _
state_before: C : Type u₁
inst✝⁷ : Category.{v₁, u₁} C
D : Type u₂
inst✝⁶ : Category.{v₂, u₂} D
E : Type u₃
inst✝⁵ : Category.{v₃, u₃} E
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
inst✝² : HasZeroMorphisms E
F : C ⥤ D
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : F.Faithful
X Y : C
⊢ F.map 0 = 0
state_after: no goals
Theorem: Equiv.Perm.two_le_of_mem_cycleType
File: Mathlib/GroupTheory/Perm/Cycle/Type.lean

tactic: simp only [cycleType_def, ← Finset.mem_def, Function.comp_apply, Multiset.mem_map,
  mem_cycleFactorsFinset_iff] at h
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
n : ℕ
h : n ∈ σ.cycleType
⊢ 2 ≤ n
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
n : ℕ
h : ∃ a, (a.IsCycle ∧ ∀ a_1 ∈ a.support, a a_1 = σ a_1) ∧ a.support.card = n
⊢ 2 ≤ n

tactic: obtain ⟨_, ⟨hc, -⟩, rfl⟩ := h
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
n : ℕ
h : ∃ a, (a.IsCycle ∧ ∀ a_1 ∈ a.support, a a_1 = σ a_1) ∧ a.support.card = n
⊢ 2 ≤ n
state_after: case intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ w✝ : Perm α
hc : w✝.IsCycle
⊢ 2 ≤ w✝.support.card

tactic: exact hc.two_le_card_support
state_before: case intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ w✝ : Perm α
hc : w✝.IsCycle
⊢ 2 ≤ w✝.support.card
state_after: no goals