1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Fin.predAbove_rev_left
File: Mathlib/Data/Fin/Basic.lean

tactic: obtain h | h := (rev i).succ_le_or_le_castSucc p
state_before: n m : ℕ
p : Fin n
i : Fin (n + 1)
⊢ p.rev.predAbove i = (p.predAbove i.rev).rev
state_after: case inl
n m : ℕ
p : Fin n
i : Fin (n + 1)
h : p.succ ≤ i.rev
⊢ p.rev.predAbove i = (p.predAbove i.rev).rev

case inr
n m : ℕ
p : Fin n
i : Fin (n + 1)
h : i.rev ≤ p.castSucc
⊢ p.rev.predAbove i = (p.predAbove i.rev).rev

tactic: rw [predAbove_of_succ_le _ _ h, rev_pred,
  predAbove_of_le_castSucc _ _ (rev_succ _ ▸ (le_rev_iff.mpr h)), castPred_inj, rev_rev]
state_before: case inl
n m : ℕ
p : Fin n
i : Fin (n + 1)
h : p.succ ≤ i.rev
⊢ p.rev.predAbove i = (p.predAbove i.rev).rev
state_after: no goals

tactic: rw [predAbove_of_le_castSucc _ _ h, rev_castPred,
  predAbove_of_succ_le _ _ (rev_castSucc _ ▸ (rev_le_iff.mpr h)), pred_inj, rev_rev]
state_before: case inr
n m : ℕ
p : Fin n
i : Fin (n + 1)
h : i.rev ≤ p.castSucc
⊢ p.rev.predAbove i = (p.predAbove i.rev).rev
state_after: no goals
Theorem: intervalIntegral.integral_deriv_comp_mul_deriv
File: Mathlib/MeasureTheory/Integral/FundThmCalculus.lean

tactic: simpa [mul_comm] using integral_deriv_comp_smul_deriv hf hg hf' hg'
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
F : Type u_4
A : Type u_5
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
f✝¹ : ℝ → E
g'✝ g✝ φ : ℝ → ℝ
a b : ℝ
inst✝ : CompleteSpace E
f✝ f'✝ : ℝ → E
f f' g g' : ℝ → ℝ
hf : ∀ x ∈ [[a, b]], HasDerivAt f (f' x) x
hg : ∀ x ∈ [[a, b]], HasDerivAt g (g' (f x)) (f x)
hf' : ContinuousOn f' [[a, b]]
hg' : Continuous g'
⊢ ∫ (x : ℝ) in a..b, (g' ∘ f) x * f' x = (g ∘ f) b - (g ∘ f) a
state_after: no goals
Theorem: Filter.Tendsto.atTop_div_const
File: Mathlib/Order/Filter/AtTopBot.lean

tactic: simpa only [div_eq_mul_inv] using hf.atTop_mul_const (inv_pos.2 hr)
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : LinearOrderedSemifield α
l : Filter β
f : β → α
r c : α
n : ℕ
hr : 0 < r
hf : Tendsto f l atTop
⊢ Tendsto (fun x => f x / r) l atTop
state_after: no goals
Theorem: cauchy_series_of_le_geometric
File: Mathlib/Analysis/SpecificLimits/Normed.lean

tactic: simp [h]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : SeminormedAddCommGroup α
r✝ C✝ : ℝ
f : ℕ → α
C : ℝ
u : ℕ → α
r : ℝ
hr : r < 1
h : ∀ (n : ℕ), ‖u n‖ ≤ C * r ^ n
⊢ ∀ (n : ℕ), dist (∑ k ∈ Finset.range n, u k) (∑ k ∈ Finset.range (n + 1), u k) ≤ C * r ^ n
state_after: no goals
Theorem: RatFunc.ofFractionRing_add
File: Mathlib/FieldTheory/RatFunc/Basic.lean

tactic: simp only [HAdd.hAdd, Add.add, RatFunc.add]
state_before: K : Type u
inst✝ : CommRing K
p q : FractionRing K[X]
⊢ { toFractionRing := p + q } = { toFractionRing := p } + { toFractionRing := q }
state_after: no goals
Theorem: div_mul_div_cancel''
File: Mathlib/Algebra/Group/Basic.lean

tactic: rw [mul_comm]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommGroup G
a✝ b✝ c✝ d a b c : G
⊢ a / b * (c / a) = c / b
state_after: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommGroup G
a✝ b✝ c✝ d a b c : G
⊢ c / a * (a / b) = c / b

tactic: apply div_mul_div_cancel'
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommGroup G
a✝ b✝ c✝ d a b c : G
⊢ c / a * (a / b) = c / b
state_after: no goals
Theorem: QuasispectrumRestricts.of_subset_range_algebraMap
File: Mathlib/Algebra/Algebra/Quasispectrum.lean

tactic: obtain ⟨r, rfl⟩ := h hs
state_before: R✝ : Type u_1
A✝ : Type u_2
inst✝¹² : CommSemiring R✝
inst✝¹¹ : NonUnitalRing A✝
inst✝¹⁰ : Module R✝ A✝
inst✝⁹ : IsScalarTower R✝ A✝ A✝
inst✝⁸ : SMulCommClass R✝ A✝ A✝
R : Type u_3
S : Type u_4
A : Type u_5
inst✝⁷ : Semifield R
inst✝⁶ : Field S
inst✝⁵ : NonUnitalRing A
inst✝⁴ : Module R A
inst✝³ : Module S A
inst✝² : IsScalarTower S A A
inst✝¹ : SMulCommClass S A A
inst✝ : Algebra R S
a : A
f : S → R
hf : Function.LeftInverse f ⇑(algebraMap R S)
h : quasispectrum S a ⊆ Set.range ⇑(algebraMap R S)
s : S
hs : s ∈ quasispectrum S a
⊢ (algebraMap R S) (f s) = s
state_after: case intro
R✝ : Type u_1
A✝ : Type u_2
inst✝¹² : CommSemiring R✝
inst✝¹¹ : NonUnitalRing A✝
inst✝¹⁰ : Module R✝ A✝
inst✝⁹ : IsScalarTower R✝ A✝ A✝
inst✝⁸ : SMulCommClass R✝ A✝ A✝
R : Type u_3
S : Type u_4
A : Type u_5
inst✝⁷ : Semifield R
inst✝⁶ : Field S
inst✝⁵ : NonUnitalRing A
inst✝⁴ : Module R A
inst✝³ : Module S A
inst✝² : IsScalarTower S A A
inst✝¹ : SMulCommClass S A A
inst✝ : Algebra R S
a : A
f : S → R
hf : Function.LeftInverse f ⇑(algebraMap R S)
h : quasispectrum S a ⊆ Set.range ⇑(algebraMap R S)
r : R
hs : (algebraMap R S) r ∈ quasispectrum S a
⊢ (algebraMap R S) (f ((algebraMap R S) r)) = (algebraMap R S) r

tactic: rw [hf r]
state_before: case intro
R✝ : Type u_1
A✝ : Type u_2
inst✝¹² : CommSemiring R✝
inst✝¹¹ : NonUnitalRing A✝
inst✝¹⁰ : Module R✝ A✝
inst✝⁹ : IsScalarTower R✝ A✝ A✝
inst✝⁸ : SMulCommClass R✝ A✝ A✝
R : Type u_3
S : Type u_4
A : Type u_5
inst✝⁷ : Semifield R
inst✝⁶ : Field S
inst✝⁵ : NonUnitalRing A
inst✝⁴ : Module R A
inst✝³ : Module S A
inst✝² : IsScalarTower S A A
inst✝¹ : SMulCommClass S A A
inst✝ : Algebra R S
a : A
f : S → R
hf : Function.LeftInverse f ⇑(algebraMap R S)
h : quasispectrum S a ⊆ Set.range ⇑(algebraMap R S)
r : R
hs : (algebraMap R S) r ∈ quasispectrum S a
⊢ (algebraMap R S) (f ((algebraMap R S) r)) = (algebraMap R S) r
state_after: no goals
Theorem: CochainComplex.HomComplex.Cochain.ext₀
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplex.lean

tactic: ext p q hpq
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
z₁ z₂ : Cochain F G 0
h : ∀ (p : ℤ), z₁.v p p ⋯ = z₂.v p p ⋯
⊢ z₁ = z₂
state_after: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
z₁ z₂ : Cochain F G 0
h : ∀ (p : ℤ), z₁.v p p ⋯ = z₂.v p p ⋯
p q : ℤ
hpq : p + 0 = q
⊢ z₁.v p q hpq = z₂.v p q hpq

tactic: obtain rfl : q = p := by rw [← hpq, add_zero]
state_before: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
z₁ z₂ : Cochain F G 0
h : ∀ (p : ℤ), z₁.v p p ⋯ = z₂.v p p ⋯
p q : ℤ
hpq : p + 0 = q
⊢ z₁.v p q hpq = z₂.v p q hpq
state_after: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
z₁ z₂ : Cochain F G 0
h : ∀ (p : ℤ), z₁.v p p ⋯ = z₂.v p p ⋯
q : ℤ
hpq : q + 0 = q
⊢ z₁.v q q hpq = z₂.v q q hpq

tactic: exact h q
state_before: case h
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
z₁ z₂ : Cochain F G 0
h : ∀ (p : ℤ), z₁.v p p ⋯ = z₂.v p p ⋯
q : ℤ
hpq : q + 0 = q
⊢ z₁.v q q hpq = z₂.v q q hpq
state_after: no goals

tactic: rw [← hpq, add_zero]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
z₁ z₂ : Cochain F G 0
h : ∀ (p : ℤ), z₁.v p p ⋯ = z₂.v p p ⋯
p q : ℤ
hpq : p + 0 = q
⊢ q = p
state_after: no goals
Theorem: Multiset.map_add_left_Ioc
File: Mathlib/Algebra/Order/Interval/Multiset.lean

tactic: classical rw [Ioc, Ioc, ← Finset.image_add_left_Ioc, Finset.image_val,
    ((Finset.nodup _).map <| add_right_injective c).dedup]
state_before: α : Type u_1
inst✝² : OrderedCancelAddCommMonoid α
inst✝¹ : ExistsAddOfLE α
inst✝ : LocallyFiniteOrder α
a b c : α
⊢ map (fun x => c + x) (Ioc a b) = Ioc (c + a) (c + b)
state_after: no goals

tactic: rw [Ioc, Ioc, ← Finset.image_add_left_Ioc, Finset.image_val,
((Finset.nodup _).map <| add_right_injective c).dedup]
state_before: α : Type u_1
inst✝² : OrderedCancelAddCommMonoid α
inst✝¹ : ExistsAddOfLE α
inst✝ : LocallyFiniteOrder α
a b c : α
⊢ map (fun x => c + x) (Ioc a b) = Ioc (c + a) (c + b)
state_after: no goals
Theorem: RingQuot.liftAlgHom_unique
File: Mathlib/Algebra/RingQuot.lean

tactic: ext
state_before: R : Type uR
inst✝⁶ : Semiring R
S : Type uS
inst✝⁵ : CommSemiring S
T : Type uT
A : Type uA
inst✝⁴ : Semiring A
inst✝³ : Algebra S A
r : R → R → Prop
inst✝² : Semiring T
B : Type u₄
inst✝¹ : Semiring B
inst✝ : Algebra S B
f : A →ₐ[S] B
s : A → A → Prop
w : ∀ ⦃x y : A⦄, s x y → f x = f y
g : RingQuot s →ₐ[S] B
h : g.comp (mkAlgHom S s) = f
⊢ g = (liftAlgHom S) ⟨f, w⟩
state_after: case w.H
R : Type uR
inst✝⁶ : Semiring R
S : Type uS
inst✝⁵ : CommSemiring S
T : Type uT
A : Type uA
inst✝⁴ : Semiring A
inst✝³ : Algebra S A
r : R → R → Prop
inst✝² : Semiring T
B : Type u₄
inst✝¹ : Semiring B
inst✝ : Algebra S B
f : A →ₐ[S] B
s : A → A → Prop
w : ∀ ⦃x y : A⦄, s x y → f x = f y
g : RingQuot s →ₐ[S] B
h : g.comp (mkAlgHom S s) = f
x✝ : A
⊢ (g.comp (mkAlgHom S s)) x✝ = (((liftAlgHom S) ⟨f, w⟩).comp (mkAlgHom S s)) x✝

tactic: simp [h]
state_before: case w.H
R : Type uR
inst✝⁶ : Semiring R
S : Type uS
inst✝⁵ : CommSemiring S
T : Type uT
A : Type uA
inst✝⁴ : Semiring A
inst✝³ : Algebra S A
r : R → R → Prop
inst✝² : Semiring T
B : Type u₄
inst✝¹ : Semiring B
inst✝ : Algebra S B
f : A →ₐ[S] B
s : A → A → Prop
w : ∀ ⦃x y : A⦄, s x y → f x = f y
g : RingQuot s →ₐ[S] B
h : g.comp (mkAlgHom S s) = f
x✝ : A
⊢ (g.comp (mkAlgHom S s)) x✝ = (((liftAlgHom S) ⟨f, w⟩).comp (mkAlgHom S s)) x✝
state_after: no goals
Theorem: CategoryTheory.SmallObject.ι_functorMapSrc
File: Mathlib/CategoryTheory/SmallObject/Construction.lean

tactic: rw [← w, ← fac, assoc, hφ]
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
hφ : φ ≫ πY = πX
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
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
t' : A i ⟶ Y
fac : t ≫ φ = t'
⊢ t' ≫ πY = f i ≫ b
state_after: no goals

tactic: subst fac
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
hφ : φ ≫ πY = πX
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
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
t' : A i ⟶ Y
fac : t ≫ φ = t'
⊢ Sigma.ι (functorObjSrcFamily f πX) { i := i, t := t, b := b, w := w } ≫ functorMapSrc f πX πY φ hφ =
    Sigma.ι (functorObjSrcFamily f πY) { i := i, t := t', b := b, w := ⋯ }
state_after: 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
hφ : φ ≫ πY = πX
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
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.ι (functorObjSrcFamily f πX) { i := i, t := t, b := b, w := w } ≫ functorMapSrc f πX πY φ hφ =
    Sigma.ι (functorObjSrcFamily f πY) { i := i, t := t ≫ φ, b := b, w := ⋯ }

tactic: simp [functorMapSrc]
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
hφ : φ ≫ πY = πX
inst✝³ : HasColimitsOfShape (Discrete (FunctorObjIndex f πX)) C
inst✝² : HasColimitsOfShape (Discrete (FunctorObjIndex f πY)) C
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.ι (functorObjSrcFamily f πX) { i := i, t := t, b := b, w := w } ≫ functorMapSrc f πX πY φ hφ =
    Sigma.ι (functorObjSrcFamily f πY) { i := i, t := t ≫ φ, b := b, w := ⋯ }
state_after: no goals
Theorem: CategoryTheory.ShortComplex.liftCycles_homologyπ_eq_zero_of_boundary
File: Mathlib/Algebra/Homology/ShortComplex/Homology.lean

tactic: rw [hx, assoc, S.zero, comp_zero]
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
A : C
inst✝ : S.HasHomology
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ k ≫ S.g = 0
state_after: no goals

tactic: dsimp only [homologyπ]
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
A : C
inst✝ : S.HasHomology
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ S.liftCycles k ⋯ ≫ S.homologyπ = 0
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
A : C
inst✝ : S.HasHomology
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ S.liftCycles k ⋯ ≫ S.leftHomologyπ ≫ S.leftHomologyIso.hom = 0

tactic: rw [S.liftCycles_leftHomologyπ_eq_zero_of_boundary_assoc k x hx, zero_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
A : C
inst✝ : S.HasHomology
k : A ⟶ S.X₂
x : A ⟶ S.X₁
hx : k = x ≫ S.f
⊢ S.liftCycles k ⋯ ≫ S.leftHomologyπ ≫ S.leftHomologyIso.hom = 0
state_after: no goals
Theorem: CategoryTheory.PreservesImage.factorThruImage_comp_hom
File: Mathlib/CategoryTheory/Limits/Preserves/Shapes/Images.lean

tactic: simp
state_before: A : Type u₁
B : Type u₂
inst✝⁷ : Category.{v₁, u₁} A
inst✝⁶ : Category.{v₂, u₂} B
inst✝⁵ : HasEqualizers A
inst✝⁴ : HasImages A
inst✝³ : StrongEpiCategory B
inst✝² : HasImages B
L : A ⥤ B
inst✝¹ : {X Y Z : A} → (f : X ⟶ Z) → (g : Y ⟶ Z) → PreservesLimit (cospan f g) L
inst✝ : {X Y Z : A} → (f : X ⟶ Y) → (g : X ⟶ Z) → PreservesColimit (span f g) L
X Y : A
f : X ⟶ Y
⊢ factorThruImage (L.map f) ≫ (iso L f).hom = L.map (factorThruImage f)
state_after: no goals
Theorem: FreeGroup.norm_mul_le
File: Mathlib/GroupTheory/FreeGroup/Basic.lean

tactic: rw [← mul_mk, mk_toWord, mk_toWord]
state_before: α : Type u
L L₁ L₂ L₃ L₄ : List (α × Bool)
inst✝ : DecidableEq α
x y : FreeGroup α
⊢ (x * y).norm = (mk (x.toWord ++ y.toWord)).norm
state_after: no goals
Theorem: Primrec₂.unpaired
File: Mathlib/Computability/Primrec.lean

tactic: simpa using h.comp natPair
state_before: α : Type u_1
β : Type u_2
σ : Type u_3
inst✝² : Primcodable α
inst✝¹ : Primcodable β
inst✝ : Primcodable σ
f : ℕ → ℕ → α
h : Primrec (Nat.unpaired f)
⊢ Primrec₂ f
state_after: no goals
Theorem: RatFunc.toFractionRing_eq
File: Mathlib/FieldTheory/RatFunc/Basic.lean

tactic: simp only [Localization.mk_eq_mk'_apply, ofFractionRing_mk', IsLocalization.algEquiv_apply,
  IsLocalization.ringEquivOfRingEquiv_apply, IsLocalization.map_mk',
  RingEquiv.coe_toRingHom, RingEquiv.refl_apply, SetLike.eta]
state_before: K : Type u
inst✝¹ : CommRing K
inst✝ : IsDomain K
x✝¹ : RatFunc K
x✝ : FractionRing K[X]
x : K[X] × ↥K[X]⁰
⊢ { toFractionRing := Localization.mk x.1 x.2 }.toFractionRing =
    (IsLocalization.algEquiv K[X]⁰ (RatFunc K) (FractionRing K[X])) { toFractionRing := Localization.mk x.1 x.2 }
state_after: K : Type u
inst✝¹ : CommRing K
inst✝ : IsDomain K
x✝¹ : RatFunc K
x✝ : FractionRing K[X]
x : K[X] × ↥K[X]⁰
⊢ IsLocalization.mk' (Localization K[X]⁰) x.1 x.2 =
    IsLocalization.mk' (FractionRing K[X]) ((RingHom.id K[X]) x.1) ⟨(RingHom.id K[X]) ↑x.2, ⋯⟩

tactic: simp only [IsFractionRing.mk'_eq_div, RingHom.id_apply, Subtype.coe_eta]
state_before: K : Type u
inst✝¹ : CommRing K
inst✝ : IsDomain K
x✝¹ : RatFunc K
x✝ : FractionRing K[X]
x : K[X] × ↥K[X]⁰
⊢ IsLocalization.mk' (Localization K[X]⁰) x.1 x.2 =
    IsLocalization.mk' (FractionRing K[X]) ((RingHom.id K[X]) x.1) ⟨(RingHom.id K[X]) ↑x.2, ⋯⟩
state_after: no goals
Theorem: Finsupp.toFreeAbelianGroup_comp_singleAddHom
File: Mathlib/GroupTheory/FreeAbelianGroupFinsupp.lean

tactic: ext
state_before: X : Type u_1
x : X
⊢ toFreeAbelianGroup.comp (singleAddHom x) = (smulAddHom ℤ (FreeAbelianGroup X)).flip (of x)
state_after: case h1
X : Type u_1
x : X
⊢ (toFreeAbelianGroup.comp (singleAddHom x)) 1 = ((smulAddHom ℤ (FreeAbelianGroup X)).flip (of x)) 1

tactic: simp only [AddMonoidHom.coe_comp, Finsupp.singleAddHom_apply, Function.comp_apply, one_smul,
  toFreeAbelianGroup, Finsupp.liftAddHom_apply_single]
state_before: case h1
X : Type u_1
x : X
⊢ (toFreeAbelianGroup.comp (singleAddHom x)) 1 = ((smulAddHom ℤ (FreeAbelianGroup X)).flip (of x)) 1
state_after: no goals
Theorem: Matrix.transvection_mul_apply_of_ne
File: Mathlib/LinearAlgebra/Matrix/Transvection.lean

tactic: simp [transvection, Matrix.add_mul, ha]
state_before: n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁴ : Field 𝕜
inst✝³ : DecidableEq n
inst✝² : DecidableEq p
inst✝¹ : CommRing R
i j : n
inst✝ : Fintype n
a b : n
ha : a ≠ i
c : R
M : Matrix n n R
⊢ (transvection i j c * M) a b = M a b
state_after: no goals
Theorem: Order.Ioi_pred_eq_insert_of_not_isMin
File: Mathlib/Order/SuccPred/Basic.lean

tactic: ext x
state_before: α : Type u_1
β : Type u_2
inst✝¹ : PartialOrder α
inst✝ : PredOrder α
a b : α
ha : ¬IsMin a
⊢ Ioi (pred a) = insert a (Ioi a)
state_after: case h
α : Type u_1
β : Type u_2
inst✝¹ : PartialOrder α
inst✝ : PredOrder α
a b : α
ha : ¬IsMin a
x : α
⊢ x ∈ Ioi (pred a) ↔ x ∈ insert a (Ioi a)

tactic: simp only [insert, mem_setOf, @eq_comm _ x a, mem_Ioi, Set.insert]
state_before: case h
α : Type u_1
β : Type u_2
inst✝¹ : PartialOrder α
inst✝ : PredOrder α
a b : α
ha : ¬IsMin a
x : α
⊢ x ∈ Ioi (pred a) ↔ x ∈ insert a (Ioi a)
state_after: case h
α : Type u_1
β : Type u_2
inst✝¹ : PartialOrder α
inst✝ : PredOrder α
a b : α
ha : ¬IsMin a
x : α
⊢ pred a < x ↔ a = x ∨ a < x

tactic: exact pred_lt_iff_eq_or_lt_of_not_isMin ha
state_before: case h
α : Type u_1
β : Type u_2
inst✝¹ : PartialOrder α
inst✝ : PredOrder α
a b : α
ha : ¬IsMin a
x : α
⊢ pred a < x ↔ a = x ∨ a < x
state_after: no goals
Theorem: SheafOfModules.unitHomEquiv_symm_comp
File: Mathlib/Algebra/Category/ModuleCat/Sheaf.lean

tactic: simp [unitHomEquiv_comp_apply]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R : Sheaf J RingCat
inst✝ : J.HasSheafCompose (forget₂ RingCat AddCommGrp)
M N : SheafOfModules R
s : M.sections
p : M ⟶ N
⊢ N.unitHomEquiv (M.unitHomEquiv.symm s ≫ p) = N.unitHomEquiv (N.unitHomEquiv.symm (sectionsMap p s))
state_after: no goals
Theorem: Module.comap_eval_surjective
File: Mathlib/LinearAlgebra/Dual.lean

tactic: apply Submodule.comap_surjective_of_injective
state_before: K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
⊢ Function.Surjective (comap (eval K V))
state_after: case hf
K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
⊢ Function.Injective ⇑(eval K V)

tactic: rw [← LinearMap.ker_eq_bot]
state_before: case hf
K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
⊢ Function.Injective ⇑(eval K V)
state_after: case hf
K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
⊢ ker (eval K V) = ⊥

tactic: exact eval_ker K V
state_before: case hf
K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
⊢ ker (eval K V) = ⊥
state_after: no goals
Theorem: List.Sublist.erase
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

tactic: simp only [erase_eq_eraseP']
state_before: α : Type u_1
inst✝ : BEq α
a : α
l₁ l₂ : List α
h : l₁ <+ l₂
⊢ l₁.erase a <+ l₂.erase a
state_after: α : Type u_1
inst✝ : BEq α
a : α
l₁ l₂ : List α
h : l₁ <+ l₂
⊢ eraseP (fun x => x == a) l₁ <+ eraseP (fun x => x == a) l₂

tactic: exact h.eraseP
state_before: α : Type u_1
inst✝ : BEq α
a : α
l₁ l₂ : List α
h : l₁ <+ l₂
⊢ eraseP (fun x => x == a) l₁ <+ eraseP (fun x => x == a) l₂
state_after: no goals
Theorem: Equiv.cast_eq_iff_heq
File: Mathlib/Logic/Equiv/Defs.lean

tactic: subst h
state_before: α✝ : Sort u
β✝ : Sort v
γ : Sort w
α β : Sort u_1
h : α = β
a : α
b : β
⊢ (Equiv.cast h) a = b ↔ HEq a b
state_after: α✝ : Sort u
β : Sort v
γ : Sort w
α : Sort u_1
a b : α
⊢ (Equiv.cast ⋯) a = b ↔ HEq a b

tactic: simp [coe_refl]
state_before: α✝ : Sort u
β : Sort v
γ : Sort w
α : Sort u_1
a b : α
⊢ (Equiv.cast ⋯) a = b ↔ HEq a b
state_after: no goals
Theorem: EMetric.mem_ball'
File: Mathlib/Topology/EMetricSpace/Basic.lean

tactic: rw [edist_comm, mem_ball]
state_before: α : Type u
β : Type v
X : Type u_1
inst✝ : PseudoEMetricSpace α
x y z : α
ε ε₁ ε₂ : ℝ≥0∞
s t : Set α
⊢ y ∈ ball x ε ↔ edist x y < ε
state_after: no goals
Theorem: WithBot.unbot'_le_iff
File: Mathlib/Order/WithBot.lean

tactic: induction a
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a✝ b✝ : α
inst✝ : LE α
a : WithBot α
b c : α
h : a = ⊥ → b ≤ c
⊢ unbot' b a ≤ c ↔ a ≤ ↑c
state_after: case bot
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a b✝ : α
inst✝ : LE α
b c : α
h : ⊥ = ⊥ → b ≤ c
⊢ unbot' b ⊥ ≤ c ↔ ⊥ ≤ ↑c

case coe
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a b✝ : α
inst✝ : LE α
b c a✝ : α
h : ↑a✝ = ⊥ → b ≤ c
⊢ unbot' b ↑a✝ ≤ c ↔ ↑a✝ ≤ ↑c

tactic: simpa using h rfl
state_before: case bot
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a b✝ : α
inst✝ : LE α
b c : α
h : ⊥ = ⊥ → b ≤ c
⊢ unbot' b ⊥ ≤ c ↔ ⊥ ≤ ↑c
state_after: no goals

tactic: simp
state_before: case coe
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a b✝ : α
inst✝ : LE α
b c a✝ : α
h : ↑a✝ = ⊥ → b ≤ c
⊢ unbot' b ↑a✝ ≤ c ↔ ↑a✝ ≤ ↑c
state_after: no goals
Theorem: smul_nonpos_iff_neg_imp_nonneg
File: Mathlib/Algebra/Order/Module/Defs.lean

tactic: rw [← neg_nonneg, ← neg_smul, smul_nonneg_iff_pos_imp_nonneg]
state_before: α : Type u_1
β : Type u_2
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : PosSMulStrictMono α β
a : α
b : β
⊢ a • b ≤ 0 ↔ (a < 0 → 0 ≤ b) ∧ (0 < b → a ≤ 0)
state_after: α : Type u_1
β : Type u_2
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : PosSMulStrictMono α β
a : α
b : β
⊢ (0 < -a → 0 ≤ b) ∧ (0 < b → 0 ≤ -a) ↔ (a < 0 → 0 ≤ b) ∧ (0 < b → a ≤ 0)

tactic: simp only [neg_pos, neg_nonneg]
state_before: α : Type u_1
β : Type u_2
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : PosSMulStrictMono α β
a : α
b : β
⊢ (0 < -a → 0 ≤ b) ∧ (0 < b → 0 ≤ -a) ↔ (a < 0 → 0 ≤ b) ∧ (0 < b → a ≤ 0)
state_after: no goals
Theorem: support_finRotate_of_le
File: Mathlib/GroupTheory/Perm/Fin.lean

tactic: obtain ⟨m, rfl⟩ := exists_add_of_le h
state_before: n : ℕ
h : 2 ≤ n
⊢ (finRotate n).support = Finset.univ
state_after: case intro
m : ℕ
h : 2 ≤ 2 + m
⊢ (finRotate (2 + m)).support = Finset.univ

tactic: rw [add_comm, support_finRotate]
state_before: case intro
m : ℕ
h : 2 ≤ 2 + m
⊢ (finRotate (2 + m)).support = Finset.univ
state_after: no goals
Theorem: IsSMulRegular.of_mul
File: Mathlib/Algebra/Regular/SMul.lean

tactic: rw [← smul_eq_mul] at ab
state_before: R : Type u_1
S : Type u_2
M : Type u_3
a b : R
s : S
inst✝⁵ : SMul R M
inst✝⁴ : SMul R S
inst✝³ : SMul S M
inst✝² : IsScalarTower R S M
inst✝¹ : Mul R
inst✝ : IsScalarTower R R M
ab : IsSMulRegular M (a * b)
⊢ IsSMulRegular M b
state_after: R : Type u_1
S : Type u_2
M : Type u_3
a b : R
s : S
inst✝⁵ : SMul R M
inst✝⁴ : SMul R S
inst✝³ : SMul S M
inst✝² : IsScalarTower R S M
inst✝¹ : Mul R
inst✝ : IsScalarTower R R M
ab : IsSMulRegular M (a • b)
⊢ IsSMulRegular M b

tactic: exact ab.of_smul _
state_before: R : Type u_1
S : Type u_2
M : Type u_3
a b : R
s : S
inst✝⁵ : SMul R M
inst✝⁴ : SMul R S
inst✝³ : SMul S M
inst✝² : IsScalarTower R S M
inst✝¹ : Mul R
inst✝ : IsScalarTower R R M
ab : IsSMulRegular M (a • b)
⊢ IsSMulRegular M b
state_after: no goals