1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Filter.inf_principal_eq_bot
File: Mathlib/Order/Filter/Basic.lean

tactic: rw [← empty_mem_iff_bot, mem_inf_principal]
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
f : Filter α
s : Set α
⊢ f ⊓ 𝓟 s = ⊥ ↔ sᶜ ∈ f
state_after: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
f : Filter α
s : Set α
⊢ {x | x ∈ s → x ∈ ∅} ∈ f ↔ sᶜ ∈ f

tactic: simp only [mem_empty_iff_false, imp_false, compl_def]
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
f : Filter α
s : Set α
⊢ {x | x ∈ s → x ∈ ∅} ∈ f ↔ sᶜ ∈ f
state_after: no goals
Theorem: Finset.max_eq_bot
File: Mathlib/Data/Finset/Lattice.lean

tactic: obtain ⟨a, ha⟩ := max_of_nonempty H
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s : Finset α
h : s.max = ⊥
H : s.Nonempty
⊢ s = ∅
state_after: case intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s : Finset α
h : s.max = ⊥
H : s.Nonempty
a : α
ha : s.max = ↑a
⊢ s = ∅

tactic: rw [h] at ha
state_before: case intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s : Finset α
h : s.max = ⊥
H : s.Nonempty
a : α
ha : s.max = ↑a
⊢ s = ∅
state_after: case intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s : Finset α
h : s.max = ⊥
H : s.Nonempty
a : α
ha : ⊥ = ↑a
⊢ s = ∅

tactic: cases ha
state_before: case intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s : Finset α
h : s.max = ⊥
H : s.Nonempty
a : α
ha : ⊥ = ↑a
⊢ s = ∅
state_after: no goals
Theorem: MeasureTheory.Measure.isMulInvariant_eq_smul_of_compactSpace
File: Mathlib/MeasureTheory/Measure/Haar/Unique.lean

tactic: ext s _hs
state_before: G : Type u_1
inst✝⁸ : TopologicalSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalGroup G
inst✝⁵ : MeasurableSpace G
inst✝⁴ : BorelSpace G
inst✝³ : CompactSpace G
μ' μ : Measure G
inst✝² : μ.IsHaarMeasure
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : IsFiniteMeasureOnCompacts μ'
⊢ μ' = μ'.haarScalarFactor μ • μ
state_after: case h
G : Type u_1
inst✝⁸ : TopologicalSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalGroup G
inst✝⁵ : MeasurableSpace G
inst✝⁴ : BorelSpace G
inst✝³ : CompactSpace G
μ' μ : Measure G
inst✝² : μ.IsHaarMeasure
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : IsFiniteMeasureOnCompacts μ'
s : Set G
_hs : MeasurableSet s
⊢ μ' s = (μ'.haarScalarFactor μ • μ) s

tactic: exact measure_isMulInvariant_eq_smul_of_isCompact_closure _ _ isClosed_closure.isCompact
state_before: case h
G : Type u_1
inst✝⁸ : TopologicalSpace G
inst✝⁷ : Group G
inst✝⁶ : TopologicalGroup G
inst✝⁵ : MeasurableSpace G
inst✝⁴ : BorelSpace G
inst✝³ : CompactSpace G
μ' μ : Measure G
inst✝² : μ.IsHaarMeasure
inst✝¹ : μ'.IsMulLeftInvariant
inst✝ : IsFiniteMeasureOnCompacts μ'
s : Set G
_hs : MeasurableSet s
⊢ μ' s = (μ'.haarScalarFactor μ • μ) s
state_after: no goals
Theorem: OreLocalization.nonempty_oreSet_iff
File: Mathlib/RingTheory/OreLocalization/OreSet.lean

tactic: constructor
state_before: R : Type u_1
inst✝ : Ring R
S : Submonoid R
⊢ Nonempty (OreSet S) ↔
    (∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂) ∧
      ∀ (r : R) (s : ↥S), ∃ r' s', ↑s' * r = r' * ↑s
state_after: case mp
R : Type u_1
inst✝ : Ring R
S : Submonoid R
⊢ Nonempty (OreSet S) →
    (∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂) ∧
      ∀ (r : R) (s : ↥S), ∃ r' s', ↑s' * r = r' * ↑s

case mpr
R : Type u_1
inst✝ : Ring R
S : Submonoid R
⊢ ((∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂) ∧
      ∀ (r : R) (s : ↥S), ∃ r' s', ↑s' * r = r' * ↑s) →
    Nonempty (OreSet S)

tactic: exact fun ⟨_⟩ ↦ ⟨ore_right_cancel, fun r s ↦ ⟨oreNum r s, oreDenom r s, ore_eq r s⟩⟩
state_before: case mp
R : Type u_1
inst✝ : Ring R
S : Submonoid R
⊢ Nonempty (OreSet S) →
    (∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂) ∧
      ∀ (r : R) (s : ↥S), ∃ r' s', ↑s' * r = r' * ↑s
state_after: no goals

tactic: intro ⟨H, H'⟩
state_before: case mpr
R : Type u_1
inst✝ : Ring R
S : Submonoid R
⊢ ((∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂) ∧
      ∀ (r : R) (s : ↥S), ∃ r' s', ↑s' * r = r' * ↑s) →
    Nonempty (OreSet S)
state_after: case mpr
R : Type u_1
inst✝ : Ring R
S : Submonoid R
H : ∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂
H' : ∀ (r : R) (s : ↥S), ∃ r' s', ↑s' * r = r' * ↑s
⊢ Nonempty (OreSet S)

tactic: choose r' s' h using H'
state_before: case mpr
R : Type u_1
inst✝ : Ring R
S : Submonoid R
H : ∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂
H' : ∀ (r : R) (s : ↥S), ∃ r' s', ↑s' * r = r' * ↑s
⊢ Nonempty (OreSet S)
state_after: case mpr
R : Type u_1
inst✝ : Ring R
S : Submonoid R
H : ∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂
r' : R → ↥S → R
s' : R → ↥S → ↥S
h : ∀ (r : R) (s : ↥S), ↑(s' r s) * r = r' r s * ↑s
⊢ Nonempty (OreSet S)

tactic: exact ⟨H, r', s', h⟩
state_before: case mpr
R : Type u_1
inst✝ : Ring R
S : Submonoid R
H : ∀ (r₁ r₂ : R) (s : ↥S), r₁ * ↑s = r₂ * ↑s → ∃ s', ↑s' * r₁ = ↑s' * r₂
r' : R → ↥S → R
s' : R → ↥S → ↥S
h : ∀ (r : R) (s : ↥S), ↑(s' r s) * r = r' r s * ↑s
⊢ Nonempty (OreSet S)
state_after: no goals
Theorem: inf_himp
File: Mathlib/Order/Heyting/Basic.lean

tactic: rw [inf_comm, ← le_himp_iff]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : GeneralizedHeytingAlgebra α
a✝ b✝ c d a b : α
⊢ a ⊓ (a ⇨ b) ≤ b
state_after: no goals
Theorem: IsBoundedLinearMap.tendsto
File: Mathlib/Analysis/NormedSpace/BoundedLinearMaps.lean

tactic: rw [(hf.mk' _).map_sub e x]
state_before: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
x : E
hf✝ : IsBoundedLinearMap 𝕜 f
hf : IsLinearMap 𝕜 f
M : ℝ
left✝ : 0 < M
hM : ∀ (x : E), ‖f x‖ ≤ M * ‖x‖
e : E
⊢ ‖f e - f x‖ = ‖(IsLinearMap.mk' f hf) (e - x)‖
state_after: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
x : E
hf✝ : IsBoundedLinearMap 𝕜 f
hf : IsLinearMap 𝕜 f
M : ℝ
left✝ : 0 < M
hM : ∀ (x : E), ‖f x‖ ≤ M * ‖x‖
e : E
⊢ ‖f e - f x‖ = ‖(IsLinearMap.mk' f hf) e - (IsLinearMap.mk' f hf) x‖

tactic: rfl
state_before: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
x : E
hf✝ : IsBoundedLinearMap 𝕜 f
hf : IsLinearMap 𝕜 f
M : ℝ
left✝ : 0 < M
hM : ∀ (x : E), ‖f x‖ ≤ M * ‖x‖
e : E
⊢ ‖f e - f x‖ = ‖(IsLinearMap.mk' f hf) e - (IsLinearMap.mk' f hf) x‖
state_after: no goals

tactic: simpa
state_before: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
x : E
hf✝ : IsBoundedLinearMap 𝕜 f
hf : IsLinearMap 𝕜 f
M : ℝ
left✝ : 0 < M
hM : ∀ (x : E), ‖f x‖ ≤ M * ‖x‖
this : Tendsto (fun e => M * ‖e - x‖) (𝓝 x) (𝓝 (M * 0))
⊢ Tendsto (fun e => M * ‖e - x‖) (𝓝 x) (𝓝 0)
state_after: no goals
Theorem: mem_coclosed_Lindelof'
File: Mathlib/Topology/Compactness/Lindelof.lean

tactic: simp only [mem_coclosedLindelof, compl_subset_comm]
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
⊢ s ∈ coclosedLindelof X ↔ ∃ t, IsClosed t ∧ IsLindelof t ∧ sᶜ ⊆ t
state_after: no goals
Theorem: Multiset.prod_induction
File: Mathlib/Algebra/BigOperators/Group/Multiset.lean

tactic: rw [prod_eq_foldr]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s✝ t : Multiset α
a : α
m : Multiset ι
f g : ι → α
p : α → Prop
s : Multiset α
p_mul : ∀ (a b : α), p a → p b → p (a * b)
p_one : p 1
p_s : ∀ a ∈ s, p a
⊢ p s.prod
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s✝ t : Multiset α
a : α
m : Multiset ι
f g : ι → α
p : α → Prop
s : Multiset α
p_mul : ∀ (a b : α), p a → p b → p (a * b)
p_one : p 1
p_s : ∀ a ∈ s, p a
⊢ p (foldr (fun x x_1 => x * x_1) ⋯ 1 s)

tactic: simp [mul_left_comm]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s✝ t : Multiset α
a : α
m : Multiset ι
f g : ι → α
p : α → Prop
s : Multiset α
p_mul : ∀ (a b : α), p a → p b → p (a * b)
p_one : p 1
p_s : ∀ a ∈ s, p a
x y z : α
⊢ (fun x x_1 => x * x_1) x ((fun x x_1 => x * x_1) y z) = (fun x x_1 => x * x_1) y ((fun x x_1 => x * x_1) x z)
state_after: no goals
Theorem: Subgroup.map_le_map_iff'
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: simp only [map_le_map_iff, sup_le_iff, le_sup_right, and_true_iff]
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ f : G →* N
H K : Subgroup G
⊢ map f H ≤ map f K ↔ H ⊔ f.ker ≤ K ⊔ f.ker
state_after: no goals
Theorem: PNat.add_sub_of_lt
File: Mathlib/Data/PNat/Basic.lean

tactic: rw [add_coe, sub_coe, if_pos h]
state_before: a b : ℕ+
h : a < b
⊢ ↑(a + (b - a)) = ↑b
state_after: a b : ℕ+
h : a < b
⊢ ↑a + (↑b - ↑a) = ↑b

tactic: exact add_tsub_cancel_of_le h.le
state_before: a b : ℕ+
h : a < b
⊢ ↑a + (↑b - ↑a) = ↑b
state_after: no goals
Theorem: matPolyEquiv_symm_X
File: Mathlib/RingTheory/PolynomialAlgebra.lean

tactic: suffices (Matrix.map 1 fun x ↦ X * algebraMap R R[X] x) = diagonal fun _ : n => (X : R[X]) by
  simpa [matPolyEquiv]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
⊢ matPolyEquiv.symm X = diagonal fun x => X
state_after: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
⊢ (Matrix.map 1 fun x => X * (algebraMap R R[X]) x) = diagonal fun x => X

tactic: rw [← Matrix.diagonal_one]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
⊢ (Matrix.map 1 fun x => X * (algebraMap R R[X]) x) = diagonal fun x => X
state_after: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
⊢ ((diagonal fun x => 1).map fun x => X * (algebraMap R R[X]) x) = diagonal fun x => X

tactic: simp [-Matrix.diagonal_one]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
⊢ ((diagonal fun x => 1).map fun x => X * (algebraMap R R[X]) x) = diagonal fun x => X
state_after: no goals

tactic: simpa [matPolyEquiv]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
this : (Matrix.map 1 fun x => X * (algebraMap R R[X]) x) = diagonal fun x => X
⊢ matPolyEquiv.symm X = diagonal fun x => X
state_after: no goals
Theorem: HomologicalComplex.homotopyCofiber.inrCompHomotopy_hom_desc_hom
File: Mathlib/Algebra/Homology/HomotopyCofiber.lean

tactic: by_cases hij : c.Rel j i
state_before: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
α : G ⟶ K
hα : Homotopy (φ ≫ α) 0
hc : ∀ (j : ι), ∃ i, c.Rel i j
i j : ι
⊢ (inrCompHomotopy φ hc).hom i j ≫ (desc φ α hα).f j = hα.hom i j
state_after: case pos
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
α : G ⟶ K
hα : Homotopy (φ ≫ α) 0
hc : ∀ (j : ι), ∃ i, c.Rel i j
i j : ι
hij : c.Rel j i
⊢ (inrCompHomotopy φ hc).hom i j ≫ (desc φ α hα).f j = hα.hom i j

case neg
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
α : G ⟶ K
hα : Homotopy (φ ≫ α) 0
hc : ∀ (j : ι), ∃ i, c.Rel i j
i j : ι
hij : ¬c.Rel j i
⊢ (inrCompHomotopy φ hc).hom i j ≫ (desc φ α hα).f j = hα.hom i j

tactic: simp only [inrCompHomotopy_hom φ hc i j hij, desc_f φ α hα _ _ hij,
  comp_add, inlX_fstX_assoc, inlX_sndX_assoc, zero_comp, add_zero]
state_before: case pos
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
α : G ⟶ K
hα : Homotopy (φ ≫ α) 0
hc : ∀ (j : ι), ∃ i, c.Rel i j
i j : ι
hij : c.Rel j i
⊢ (inrCompHomotopy φ hc).hom i j ≫ (desc φ α hα).f j = hα.hom i j
state_after: no goals

tactic: simp only [Homotopy.zero _ _ _ hij, zero_comp]
state_before: case neg
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
α : G ⟶ K
hα : Homotopy (φ ≫ α) 0
hc : ∀ (j : ι), ∃ i, c.Rel i j
i j : ι
hij : ¬c.Rel j i
⊢ (inrCompHomotopy φ hc).hom i j ≫ (desc φ α hα).f j = hα.hom i j
state_after: no goals
Theorem: FiniteDimensional.finrank_eq_zero_iff
File: Mathlib/LinearAlgebra/Dimension/Finite.lean

tactic: rw [← rank_eq_zero_iff (R := R), ← finrank_eq_rank]
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M₁
inst✝³ : Nontrivial R
inst✝² : NoZeroSMulDivisors R M
inst✝¹ : StrongRankCondition R
inst✝ : Module.Finite R M
⊢ finrank R M = 0 ↔ ∀ (x : M), ∃ a, a ≠ 0 ∧ a • x = 0
state_after: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M₁
inst✝³ : Nontrivial R
inst✝² : NoZeroSMulDivisors R M
inst✝¹ : StrongRankCondition R
inst✝ : Module.Finite R M
⊢ finrank R M = 0 ↔ ↑(finrank R M) = 0

tactic: norm_cast
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M₁
inst✝³ : Nontrivial R
inst✝² : NoZeroSMulDivisors R M
inst✝¹ : StrongRankCondition R
inst✝ : Module.Finite R M
⊢ finrank R M = 0 ↔ ↑(finrank R M) = 0
state_after: no goals
Theorem: Filter.EventuallyEq.congr_continuousWithinAt
File: Mathlib/Topology/ContinuousOn.lean

tactic: rw [ContinuousWithinAt, hx, tendsto_congr' h, ContinuousWithinAt]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁴ : TopologicalSpace α
ι : Type u_5
π : ι → Type u_6
inst✝³ : (i : ι) → TopologicalSpace (π i)
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : α → β
s : Set α
x : α
h : f =ᶠ[𝓝[s] x] g
hx : f x = g x
⊢ ContinuousWithinAt f s x ↔ ContinuousWithinAt g s x
state_after: no goals
Theorem: Real.deriv2_mul_log
File: Mathlib/Analysis/SpecialFunctions/Log/NegMulLog.lean

tactic: simp only [Function.iterate_succ, Function.iterate_zero, Function.id_comp, Function.comp_apply]
state_before: x : ℝ
hx : x ≠ 0
⊢ deriv^[2] (fun x => x * log x) x = x⁻¹
state_after: x : ℝ
hx : x ≠ 0
⊢ deriv (deriv fun x => x * log x) x = x⁻¹

tactic: suffices ∀ᶠ y in (𝓝 x), deriv (fun x ↦ x * log x) y = log y + 1 by
  refine (Filter.EventuallyEq.deriv_eq this).trans ?_
  rw [deriv_add_const, deriv_log x]
state_before: x : ℝ
hx : x ≠ 0
⊢ deriv (deriv fun x => x * log x) x = x⁻¹
state_after: x : ℝ
hx : x ≠ 0
⊢ ∀ᶠ (y : ℝ) in 𝓝 x, deriv (fun x => x * log x) y = log y + 1

tactic: filter_upwards [eventually_ne_nhds hx] with y hy using deriv_mul_log hy
state_before: x : ℝ
hx : x ≠ 0
⊢ ∀ᶠ (y : ℝ) in 𝓝 x, deriv (fun x => x * log x) y = log y + 1
state_after: no goals

tactic: refine (Filter.EventuallyEq.deriv_eq this).trans ?_
state_before: x : ℝ
hx : x ≠ 0
this : ∀ᶠ (y : ℝ) in 𝓝 x, deriv (fun x => x * log x) y = log y + 1
⊢ deriv (deriv fun x => x * log x) x = x⁻¹
state_after: x : ℝ
hx : x ≠ 0
this : ∀ᶠ (y : ℝ) in 𝓝 x, deriv (fun x => x * log x) y = log y + 1
⊢ deriv (fun x => log x + 1) x = x⁻¹

tactic: rw [deriv_add_const, deriv_log x]
state_before: x : ℝ
hx : x ≠ 0
this : ∀ᶠ (y : ℝ) in 𝓝 x, deriv (fun x => x * log x) y = log y + 1
⊢ deriv (fun x => log x + 1) x = x⁻¹
state_after: no goals
Theorem: WeierstrassCurve.expCoeff_rec
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

tactic: push_cast [← @Int.cast_inj ℚ, expCoeff_cast, even_two_mul, m.not_even_two_mul_add_one,
  Nat.even_add_one, ite_not]
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
m : ℕ
⊢ WeierstrassCurve.expCoeff (2 * (m + 3)) =
      WeierstrassCurve.expCoeff (m + 2) ^ 2 * WeierstrassCurve.expCoeff (m + 3) * WeierstrassCurve.expCoeff (m + 5) -
        WeierstrassCurve.expCoeff (m + 1) * WeierstrassCurve.expCoeff (m + 3) * WeierstrassCurve.expCoeff (m + 4) ^ 2 ∧
    WeierstrassCurve.expCoeff (2 * (m + 2) + 1) =
      (WeierstrassCurve.expCoeff (m + 4) * WeierstrassCurve.expCoeff (m + 2) ^ 3 * if Even m then 4 ^ 2 else 1) -
        WeierstrassCurve.expCoeff (m + 1) * WeierstrassCurve.expCoeff (m + 3) ^ 3 * if Even m then 1 else 4 ^ 2
state_after: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
m : ℕ
⊢ 2 * (↑m + 3) / 2 =
      (((if Even m then (↑m + 2) / 2 else ↑m + 2) ^ 2 * if Even m then ↑m + 3 else (↑m + 3) / 2) *
          if Even m then ↑m + 5 else (↑m + 5) / 2) -
        ((if Even m then ↑m + 1 else (↑m + 1) / 2) * if Even m then ↑m + 3 else (↑m + 3) / 2) *
          (if Even m then (↑m + 4) / 2 else ↑m + 4) ^ 2 ∧
    2 * (↑m + 2) + 1 =
      ((if Even m then (↑m + 4) / 2 else ↑m + 4) * (if Even m then (↑m + 2) / 2 else ↑m + 2) ^ 3 *
          if Even m then 16 else 1) -
        (if Even m then ↑m + 1 else (↑m + 1) / 2) * (if Even m then ↑m + 3 else (↑m + 3) / 2) ^ 3 *
          if Even m then 1 else 16

tactic: constructor <;> split_ifs <;> ring1
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
m : ℕ
⊢ 2 * (↑m + 3) / 2 =
      (((if Even m then (↑m + 2) / 2 else ↑m + 2) ^ 2 * if Even m then ↑m + 3 else (↑m + 3) / 2) *
          if Even m then ↑m + 5 else (↑m + 5) / 2) -
        ((if Even m then ↑m + 1 else (↑m + 1) / 2) * if Even m then ↑m + 3 else (↑m + 3) / 2) *
          (if Even m then (↑m + 4) / 2 else ↑m + 4) ^ 2 ∧
    2 * (↑m + 2) + 1 =
      ((if Even m then (↑m + 4) / 2 else ↑m + 4) * (if Even m then (↑m + 2) / 2 else ↑m + 2) ^ 3 *
          if Even m then 16 else 1) -
        (if Even m then ↑m + 1 else (↑m + 1) / 2) * (if Even m then ↑m + 3 else (↑m + 3) / 2) ^ 3 *
          if Even m then 1 else 16
state_after: no goals
Theorem: Quaternion.summable_coe
File: Mathlib/Analysis/Quaternion.lean

tactic: simpa only using
  Summable.map_iff_of_leftInverse (algebraMap ℝ ℍ) (show ℍ →ₗ[ℝ] ℝ from QuaternionAlgebra.reₗ _ _)
    (continuous_algebraMap _ _) continuous_re coe_re
state_before: α : Type u_1
f : α → ℝ
⊢ (Summable fun a => ↑(f a)) ↔ Summable f
state_after: no goals
Theorem: Mathlib.Tactic.ComputeDegree.degree_eq_of_le_of_coeff_ne_zero'
File: Mathlib/Tactic/ComputeDegree.lean

tactic: subst coeff_eq coeff_eq_deg deg_eq_deg
state_before: R : Type u_1
inst✝ : Semiring R
deg m o : WithBot ℕ
c : R
p : R[X]
h_deg_le : p.degree ≤ m
coeff_eq : p.coeff (WithBot.unbot' 0 deg) = c
coeff_ne_zero : c ≠ 0
deg_eq_deg : m = deg
coeff_eq_deg : o = deg
⊢ p.degree = deg
state_after: R : Type u_1
inst✝ : Semiring R
m : WithBot ℕ
p : R[X]
h_deg_le : p.degree ≤ m
coeff_ne_zero : p.coeff (WithBot.unbot' 0 m) ≠ 0
⊢ p.degree = m

tactic: rcases eq_or_ne m ⊥ with rfl|hh
state_before: R : Type u_1
inst✝ : Semiring R
m : WithBot ℕ
p : R[X]
h_deg_le : p.degree ≤ m
coeff_ne_zero : p.coeff (WithBot.unbot' 0 m) ≠ 0
⊢ p.degree = m
state_after: case inl
R : Type u_1
inst✝ : Semiring R
p : R[X]
h_deg_le : p.degree ≤ ⊥
coeff_ne_zero : p.coeff (WithBot.unbot' 0 ⊥) ≠ 0
⊢ p.degree = ⊥

case inr
R : Type u_1
inst✝ : Semiring R
m : WithBot ℕ
p : R[X]
h_deg_le : p.degree ≤ m
coeff_ne_zero : p.coeff (WithBot.unbot' 0 m) ≠ 0
hh : m ≠ ⊥
⊢ p.degree = m

tactic: exact bot_unique h_deg_le
state_before: case inl
R : Type u_1
inst✝ : Semiring R
p : R[X]
h_deg_le : p.degree ≤ ⊥
coeff_ne_zero : p.coeff (WithBot.unbot' 0 ⊥) ≠ 0
⊢ p.degree = ⊥
state_after: no goals

tactic: obtain ⟨m, rfl⟩ := WithBot.ne_bot_iff_exists.mp hh
state_before: case inr
R : Type u_1
inst✝ : Semiring R
m : WithBot ℕ
p : R[X]
h_deg_le : p.degree ≤ m
coeff_ne_zero : p.coeff (WithBot.unbot' 0 m) ≠ 0
hh : m ≠ ⊥
⊢ p.degree = m
state_after: case inr.intro
R : Type u_1
inst✝ : Semiring R
p : R[X]
m : ℕ
h_deg_le : p.degree ≤ ↑m
coeff_ne_zero : p.coeff (WithBot.unbot' 0 ↑m) ≠ 0
hh : ↑m ≠ ⊥
⊢ p.degree = ↑m

tactic: exact degree_eq_of_le_of_coeff_ne_zero ‹_› ‹_›
state_before: case inr.intro
R : Type u_1
inst✝ : Semiring R
p : R[X]
m : ℕ
h_deg_le : p.degree ≤ ↑m
coeff_ne_zero : p.coeff (WithBot.unbot' 0 ↑m) ≠ 0
hh : ↑m ≠ ⊥
⊢ p.degree = ↑m
state_after: no goals
Theorem: HomologicalComplex.cycles_eq_top
File: Mathlib/Algebra/Homology/Homology.lean

tactic: rw [eq_top_iff]
state_before: ι : Type u_1
V : Type u
inst✝² : Category.{v, u} V
inst✝¹ : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝ : HasKernels V
i : ι
h : ¬c.Rel i (c.next i)
⊢ C.cycles' i = ⊤
state_after: ι : Type u_1
V : Type u
inst✝² : Category.{v, u} V
inst✝¹ : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝ : HasKernels V
i : ι
h : ¬c.Rel i (c.next i)
⊢ ⊤ ≤ C.cycles' i

tactic: apply le_kernelSubobject
state_before: ι : Type u_1
V : Type u
inst✝² : Category.{v, u} V
inst✝¹ : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝ : HasKernels V
i : ι
h : ¬c.Rel i (c.next i)
⊢ ⊤ ≤ C.cycles' i
state_after: case h
ι : Type u_1
V : Type u
inst✝² : Category.{v, u} V
inst✝¹ : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝ : HasKernels V
i : ι
h : ¬c.Rel i (c.next i)
⊢ ⊤.arrow ≫ C.dFrom i = 0

tactic: rw [C.dFrom_eq_zero h, comp_zero]
state_before: case h
ι : Type u_1
V : Type u
inst✝² : Category.{v, u} V
inst✝¹ : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝ : HasKernels V
i : ι
h : ¬c.Rel i (c.next i)
⊢ ⊤.arrow ≫ C.dFrom i = 0
state_after: no goals
Theorem: Int.ModEq.of_mul_left
File: Mathlib/Data/Int/ModEq.lean

tactic: rw [modEq_iff_dvd] at *
state_before: m✝ n a b c d m : ℤ
h : a ≡ b [ZMOD m * n]
⊢ a ≡ b [ZMOD n]
state_after: m✝ n a b c d m : ℤ
h : m * n ∣ b - a
⊢ n ∣ b - a

tactic: exact (dvd_mul_left n m).trans h
state_before: m✝ n a b c d m : ℤ
h : m * n ∣ b - a
⊢ n ∣ b - a
state_after: no goals