1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Polynomial.leadingCoeff_mul_monic
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: rw [H, leadingCoeff_eq_zero.1 H, zero_mul, leadingCoeff_zero]
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q✝ : R[X]
ι : Type u_1
p q : R[X]
hq : q.Monic
this : DecidableEq R := Classical.decEq R
H : p.leadingCoeff = 0
⊢ (p * q).leadingCoeff = p.leadingCoeff
state_after: no goals

tactic: rw [leadingCoeff_mul', hq.leadingCoeff, mul_one]
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q✝ : R[X]
ι : Type u_1
p q : R[X]
hq : q.Monic
this : DecidableEq R := Classical.decEq R
H : p.leadingCoeff ≠ 0
⊢ (p * q).leadingCoeff = p.leadingCoeff
state_after: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q✝ : R[X]
ι : Type u_1
p q : R[X]
hq : q.Monic
this : DecidableEq R := Classical.decEq R
H : p.leadingCoeff ≠ 0
⊢ p.leadingCoeff * q.leadingCoeff ≠ 0

tactic: rwa [hq.leadingCoeff, mul_one]
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q✝ : R[X]
ι : Type u_1
p q : R[X]
hq : q.Monic
this : DecidableEq R := Classical.decEq R
H : p.leadingCoeff ≠ 0
⊢ p.leadingCoeff * q.leadingCoeff ≠ 0
state_after: no goals
Theorem: EisensteinSeries.r_pos
File: Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConvergence.lean

tactic: simp only [r, lt_min_iff, im_pos, Real.sqrt_pos, r1_pos, and_self]
state_before: z : ℍ
⊢ 0 < r z
state_after: no goals
Theorem: affineSpan_insert_affineSpan
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: rw [Set.insert_eq, Set.insert_eq, span_union, span_union, affineSpan_coe]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type u_4
p : P
ps : Set P
⊢ affineSpan k (insert p ↑(affineSpan k ps)) = affineSpan k (insert p ps)
state_after: no goals
Theorem: Submodule.exists_add_eq_of_codisjoint
File: Mathlib/LinearAlgebra/Span.lean

tactic: suffices x ∈ p ⊔ p' by exact Submodule.mem_sup.mp this
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x✝ : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
h : Codisjoint p p'
x : M
⊢ ∃ y ∈ p, ∃ z ∈ p', y + z = x
state_after: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x✝ : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
h : Codisjoint p p'
x : M
⊢ x ∈ p ⊔ p'

tactic: simpa only [h.eq_top] using Submodule.mem_top
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x✝ : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
h : Codisjoint p p'
x : M
⊢ x ∈ p ⊔ p'
state_after: no goals

tactic: exact Submodule.mem_sup.mp this
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x✝ : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
h : Codisjoint p p'
x : M
this : x ∈ p ⊔ p'
⊢ ∃ y ∈ p, ∃ z ∈ p', y + z = x
state_after: no goals
Theorem: AdjoinRoot.evalEval_mk
File: Mathlib/Algebra/Polynomial/Bivariate.lean

tactic: rw [evalEval, lift_mk, eval₂_evalRingHom]
state_before: R : Type u_1
inst✝ : CommRing R
x y : R
p : R[X][Y]
h : Polynomial.evalEval x y p = 0
g : R[X][Y]
⊢ (evalEval h) ((mk p) g) = Polynomial.evalEval x y g
state_after: no goals
Theorem: min_choice
File: Mathlib/Order/MinMax.lean

tactic: cases le_total a b <;> simp [*]
state_before: α : Type u
β : Type v
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a✝ b✝ c d a b : α
⊢ min a b = a ∨ min a b = b
state_after: no goals
Theorem: MeasureTheory.OuterMeasure.dirac_caratheodory
File: Mathlib/MeasureTheory/OuterMeasure/Caratheodory.lean

tactic: by_cases ht : a ∈ t
state_before: α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)
state_after: case pos
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∈ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)

case neg
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∉ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)

tactic: swap
state_before: case pos
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∈ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)

case neg
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∉ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)
state_after: case neg
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∉ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)

case pos
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∈ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)

tactic: by_cases hs : a ∈ s <;> simp [*]
state_before: case pos
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∈ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)
state_after: no goals

tactic: simp [ht]
state_before: case neg
α : Type u_1
a : α
s : Set α
x✝ : MeasurableSet s
t : Set α
ht : a ∉ t
⊢ (dirac a) t = (dirac a) (t ∩ s) + (dirac a) (t \ s)
state_after: no goals
Theorem: UpperHalfPlane.comp_ofComplex
File: Mathlib/Analysis/Complex/UpperHalfPlane/Topology.lean

tactic: rw [Function.comp_apply, ofComplex_apply]
state_before: f : ℍ → ℂ
z : ℍ
⊢ (f ∘ ↑ofComplex) ↑z = f z
state_after: no goals
Theorem: BoxIntegral.Box.splitUpper_eq_self
File: Mathlib/Analysis/BoxIntegral/Partition/Split.lean

tactic: simp [splitUpper, update_eq_iff]
state_before: ι : Type u_1
M : Type u_2
n : ℕ
I : Box ι
i : ι
x : ℝ
y : ι → ℝ
⊢ I.splitUpper i x = ↑I ↔ x ≤ I.lower i
state_after: no goals
Theorem: Multiset.multinomial_zero
File: Mathlib/Data/Nat/Choose/Multinomial.lean

tactic: simp [multinomial, Finsupp.multinomial]
state_before: α : Type u_1
inst✝ : DecidableEq α
⊢ multinomial 0 = 1
state_after: no goals
Theorem: Associates.prod_mono
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: have : b = ⊤ := top_unique h
state_before: α : Type u_1
inst✝ : CancelCommMonoidWithZero α
b : FactorSet α
h : ⊤ ≤ b
⊢ ⊤.prod ≤ b.prod
state_after: α : Type u_1
inst✝ : CancelCommMonoidWithZero α
b : FactorSet α
h : ⊤ ≤ b
this : b = ⊤
⊢ ⊤.prod ≤ b.prod

tactic: rw [this, prod_top]
state_before: α : Type u_1
inst✝ : CancelCommMonoidWithZero α
b : FactorSet α
h : ⊤ ≤ b
this : b = ⊤
⊢ ⊤.prod ≤ b.prod
state_after: no goals

tactic: simp
state_before: α : Type u_1
inst✝ : CancelCommMonoidWithZero α
a : FactorSet α
x✝ : a ≤ ⊤
⊢ a.prod ≤ ⊤.prod
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.whiskerRight_id
File: Mathlib/CategoryTheory/Monoidal/Category.lean

tactic: rw [← assoc, ← rightUnitor_naturality]
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X Y : C
f : X ⟶ Y
⊢ f ▷ 𝟙_ C = (ρ_ X).hom ≫ f ≫ (ρ_ Y).inv
state_after: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X Y : C
f : X ⟶ Y
⊢ f ▷ 𝟙_ C = (f ▷ 𝟙_ C ≫ (ρ_ Y).hom) ≫ (ρ_ Y).inv

tactic: simp [tensorHom_id]
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝ : MonoidalCategory C
X Y : C
f : X ⟶ Y
⊢ f ▷ 𝟙_ C = (f ▷ 𝟙_ C ≫ (ρ_ Y).hom) ≫ (ρ_ Y).inv
state_after: no goals
Theorem: Ordinal.blsub_lt_ord_lift
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

tactic: simpa [← iSup_ord, hf, h] using cof_blsub_le_lift.{u, v} f
state_before: α : Type u_1
r : α → α → Prop
o : Ordinal.{u}
f : (a : Ordinal.{u}) → a < o → Ordinal.{max u v}
c : Ordinal.{max u v}
ho : Cardinal.lift.{v, u} o.card < c.cof
hf : ∀ (i : Ordinal.{u}) (hi : i < o), f i hi < c
h : o.blsub f = c
⊢ c.cof ≤ Cardinal.lift.{v, u} o.card
state_after: no goals
Theorem: isClosed_isNowhereDense_iff_compl
File: Mathlib/Topology/GDelta.lean

tactic: rw [and_congr_right IsClosed.isNowhereDense_iff,
  isOpen_compl_iff, interior_eq_empty_iff_dense_compl]
state_before: X✝ : Type u_1
Y : Type u_2
ι : Type u_3
ι' : Sort u_4
X : Type u_5
inst✝ : TopologicalSpace X
s : Set X
⊢ IsClosed s ∧ IsNowhereDense s ↔ IsOpen sᶜ ∧ Dense sᶜ
state_after: no goals
Theorem: ENNReal.inv_le_iff_inv_le
File: Mathlib/Data/ENNReal/Inv.lean

tactic: simpa only [inv_inv] using @ENNReal.inv_le_inv a b⁻¹
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
⊢ a⁻¹ ≤ b ↔ b⁻¹ ≤ a
state_after: no goals
Theorem: summable_of_sum_range_le
File: Mathlib/Topology/Algebra/InfiniteSum/Real.lean

tactic: refine (summable_iff_not_tendsto_nat_atTop_of_nonneg hf).2 fun H => ?_
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
f✝ : ℕ → α
a : α
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i ∈ range n, f i ≤ c
⊢ Summable f
state_after: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
f✝ : ℕ → α
a : α
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i ∈ range n, f i ≤ c
H : Tendsto (fun n => ∑ i ∈ range n, f i) atTop atTop
⊢ False

tactic: rcases exists_lt_of_tendsto_atTop H 0 c with ⟨n, -, hn⟩
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
f✝ : ℕ → α
a : α
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i ∈ range n, f i ≤ c
H : Tendsto (fun n => ∑ i ∈ range n, f i) atTop atTop
⊢ False
state_after: case intro.intro
α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
f✝ : ℕ → α
a : α
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i ∈ range n, f i ≤ c
H : Tendsto (fun n => ∑ i ∈ range n, f i) atTop atTop
n : ℕ
hn : c < ∑ i ∈ range n, f i
⊢ False

tactic: exact lt_irrefl _ (hn.trans_le (h n))
state_before: case intro.intro
α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
f✝ : ℕ → α
a : α
f : ℕ → ℝ
c : ℝ
hf : ∀ (n : ℕ), 0 ≤ f n
h : ∀ (n : ℕ), ∑ i ∈ range n, f i ≤ c
H : Tendsto (fun n => ∑ i ∈ range n, f i) atTop atTop
n : ℕ
hn : c < ∑ i ∈ range n, f i
⊢ False
state_after: no goals
Theorem: Set.exists_injOn_iff_injective
File: Mathlib/Data/Set/Function.lean

tactic: lift f to α → β using trivial
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f✝ f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
inst✝ : Nonempty β
x✝ : ∃ f, Injective f
f : ↑s → β
hf : Injective f
⊢ ∃ f, InjOn f s
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f✝ f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
inst✝ : Nonempty β
x✝ : ∃ f, Injective f
f : α → β
hf : Injective fun i => f ↑i
⊢ ∃ f, InjOn f s

tactic: exact ⟨f, injOn_iff_injective.2 hf⟩
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f✝ f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
inst✝ : Nonempty β
x✝ : ∃ f, Injective f
f : α → β
hf : Injective fun i => f ↑i
⊢ ∃ f, InjOn f s
state_after: no goals
Theorem: ProbabilityTheory.IdentDistrib.measure_mem_eq
File: Mathlib/Probability/IdentDistrib.lean

tactic: rw [← Measure.map_apply_of_aemeasurable h.aemeasurable_fst hs, ←
  Measure.map_apply_of_aemeasurable h.aemeasurable_snd hs, h.map_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : MeasurableSpace γ
inst✝ : MeasurableSpace δ
μ : Measure α
ν : Measure β
f : α → γ
g : β → γ
h : IdentDistrib f g μ ν
s : Set γ
hs : MeasurableSet s
⊢ μ (f ⁻¹' s) = ν (g ⁻¹' s)
state_after: no goals
Theorem: Batteries.RBNode.reverse_balance2
File: .lake/packages/batteries/Batteries/Data/RBMap/WF.lean

tactic: refine Eq.trans ?_ (reverse_reverse _)
state_before: α : Type u_1
l : RBNode α
v : α
r : RBNode α
⊢ (l.balance2 v r).reverse = r.reverse.balance1 v l.reverse
state_after: α : Type u_1
l : RBNode α
v : α
r : RBNode α
⊢ (l.balance2 v r).reverse = (r.reverse.balance1 v l.reverse).reverse.reverse

tactic: rw [reverse_balance1]
state_before: α : Type u_1
l : RBNode α
v : α
r : RBNode α
⊢ (l.balance2 v r).reverse = (r.reverse.balance1 v l.reverse).reverse.reverse
state_after: α : Type u_1
l : RBNode α
v : α
r : RBNode α
⊢ (l.balance2 v r).reverse = (l.reverse.reverse.balance2 v r.reverse.reverse).reverse

tactic: simp
state_before: α : Type u_1
l : RBNode α
v : α
r : RBNode α
⊢ (l.balance2 v r).reverse = (l.reverse.reverse.balance2 v r.reverse.reverse).reverse
state_after: no goals
Theorem: ZMod.χ₄_int_three_mod_four
File: Mathlib/NumberTheory/LegendreSymbol/ZModChar.lean

tactic: rw [χ₄_int_mod_four, hn]
state_before: n : ℤ
hn : n % 4 = 3
⊢ χ₄ ↑n = -1
state_after: n : ℤ
hn : n % 4 = 3
⊢ χ₄ ↑3 = -1

tactic: rfl
state_before: n : ℤ
hn : n % 4 = 3
⊢ χ₄ ↑3 = -1
state_after: no goals
Theorem: Filter.map_surjOn_Iic_iff_le_map
File: Mathlib/Order/Filter/Basic.lean

tactic: refine ⟨fun hm ↦ ?_, fun hm ↦ ?_⟩
state_before: α : Type u_1
β : Type u_2
F : Filter α
G : Filter β
m : α → β
⊢ SurjOn (map m) (Iic F) (Iic G) ↔ G ≤ map m F
state_after: case refine_1
α : Type u_1
β : Type u_2
F : Filter α
G : Filter β
m : α → β
hm : SurjOn (map m) (Iic F) (Iic G)
⊢ G ≤ map m F

case refine_2
α : Type u_1
β : Type u_2
F : Filter α
G : Filter β
m : α → β
hm : G ≤ map m F
⊢ SurjOn (map m) (Iic F) (Iic G)

tactic: rcases hm right_mem_Iic with ⟨H, (hHF : H ≤ F), rfl⟩
state_before: case refine_1
α : Type u_1
β : Type u_2
F : Filter α
G : Filter β
m : α → β
hm : SurjOn (map m) (Iic F) (Iic G)
⊢ G ≤ map m F
state_after: case refine_1.intro.intro
α : Type u_1
β : Type u_2
F : Filter α
m : α → β
H : Filter α
hHF : H ≤ F
hm : SurjOn (map m) (Iic F) (Iic (map m H))
⊢ map m H ≤ map m F

tactic: exact map_mono hHF
state_before: case refine_1.intro.intro
α : Type u_1
β : Type u_2
F : Filter α
m : α → β
H : Filter α
hHF : H ≤ F
hm : SurjOn (map m) (Iic F) (Iic (map m H))
⊢ map m H ≤ map m F
state_after: no goals

tactic: exact this.surjOn fun H _ ↦ mem_Iic.mpr inf_le_left
state_before: case refine_2
α : Type u_1
β : Type u_2
F : Filter α
G : Filter β
m : α → β
hm : G ≤ map m F
this : RightInvOn (fun x => F ⊓ comap m x) (map m) (Iic G)
⊢ SurjOn (map m) (Iic F) (Iic G)
state_after: no goals

tactic: simpa [Filter.push_pull] using hHG.trans hm
state_before: α : Type u_1
β : Type u_2
F : Filter α
G : Filter β
m : α → β
hm : G ≤ map m F
H : Filter β
hHG : H ≤ G
⊢ map m ((fun x => F ⊓ comap m x) H) = H
state_after: no goals
Theorem: LowerSet.erase_eq
File: Mathlib/Order/UpperLower/Basic.lean

tactic: rw [← sdiff_singleton]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : Preorder α
s : LowerSet α
t : Set α
a : α
⊢ s.erase a = s ↔ a ∉ s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : Preorder α
s : LowerSet α
t : Set α
a : α
⊢ s.sdiff {a} = s ↔ a ∉ s

tactic: simp [-sdiff_singleton]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : Preorder α
s : LowerSet α
t : Set α
a : α
⊢ s.sdiff {a} = s ↔ a ∉ s
state_after: no goals
Theorem: EReal.abs_mul
File: Mathlib/Data/Real/EReal.lean

tactic: induction x, y using induction₂_symm_neg with
| top_zero => simp only [zero_mul, mul_zero, abs_zero]
| top_top => rfl
| symm h => rwa [mul_comm, EReal.mul_comm]
| coe_coe => simp only [← coe_mul, abs_def, _root_.abs_mul, ENNReal.ofReal_mul (abs_nonneg _)]
| top_pos _ h =>
  rw [top_mul_coe_of_pos h, abs_top, ENNReal.top_mul]
  rw [Ne, abs_eq_zero_iff, coe_eq_zero]
  exact h.ne'
| neg_left h => rwa [neg_mul, EReal.abs_neg, EReal.abs_neg]
state_before: x y : EReal
⊢ (x * y).abs = x.abs * y.abs
state_after: no goals

tactic: simp only [zero_mul, mul_zero, abs_zero]
state_before: case top_zero

⊢ (⊤ * 0).abs = ⊤.abs * EReal.abs 0
state_after: no goals

tactic: rfl
state_before: case top_top

⊢ (⊤ * ⊤).abs = ⊤.abs * ⊤.abs
state_after: no goals

tactic: rwa [mul_comm, EReal.mul_comm]
state_before: case symm
x✝ y✝ : EReal
h : (x✝ * y✝).abs = x✝.abs * y✝.abs
⊢ (y✝ * x✝).abs = y✝.abs * x✝.abs
state_after: no goals

tactic: simp only [← coe_mul, abs_def, _root_.abs_mul, ENNReal.ofReal_mul (abs_nonneg _)]
state_before: case coe_coe
x✝ y✝ : ℝ
⊢ (↑x✝ * ↑y✝).abs = (↑x✝).abs * (↑y✝).abs
state_after: no goals

tactic: rw [top_mul_coe_of_pos h, abs_top, ENNReal.top_mul]
state_before: case top_pos
x✝ : ℝ
h : 0 < x✝
⊢ (⊤ * ↑x✝).abs = ⊤.abs * (↑x✝).abs
state_after: case top_pos
x✝ : ℝ
h : 0 < x✝
⊢ (↑x✝).abs ≠ 0

tactic: rw [Ne, abs_eq_zero_iff, coe_eq_zero]
state_before: case top_pos
x✝ : ℝ
h : 0 < x✝
⊢ (↑x✝).abs ≠ 0
state_after: case top_pos
x✝ : ℝ
h : 0 < x✝
⊢ ¬x✝ = 0

tactic: exact h.ne'
state_before: case top_pos
x✝ : ℝ
h : 0 < x✝
⊢ ¬x✝ = 0
state_after: no goals

tactic: rwa [neg_mul, EReal.abs_neg, EReal.abs_neg]
state_before: case neg_left
x✝ y✝ : EReal
h : (x✝ * y✝).abs = x✝.abs * y✝.abs
⊢ (-x✝ * y✝).abs = (-x✝).abs * y✝.abs
state_after: no goals
Theorem: Perfection.frobenius_pthRoot
File: Mathlib/RingTheory/Perfection.lean

tactic: rw [RingHom.comp_apply, RingHom.id_apply, RingHom.map_frobenius, coeff_pthRoot,
  ← @RingHom.map_frobenius (Ring.Perfection R p) _ R, coeff_frobenius]
state_before: R : Type u₁
inst✝¹ : CommSemiring R
p : ℕ
hp : Fact (Nat.Prime p)
inst✝ : CharP R p
x : Ring.Perfection R p
n : ℕ
⊢ (coeff R p n) (((frobenius (Ring.Perfection R p) p).comp (pthRoot R p)) x) =
    (coeff R p n) ((RingHom.id (Ring.Perfection R p)) x)
state_after: no goals
Theorem: LiouvilleWith.nat_mul
File: Mathlib/NumberTheory/Liouville/LiouvilleWith.lean

tactic: rw [mul_comm]
state_before: p q x y : ℝ
r : ℚ
m : ℤ
n : ℕ
h : LiouvilleWith p x
hn : n ≠ 0
⊢ LiouvilleWith p (↑n * x)
state_after: p q x y : ℝ
r : ℚ
m : ℤ
n : ℕ
h : LiouvilleWith p x
hn : n ≠ 0
⊢ LiouvilleWith p (x * ↑n)

tactic: exact h.mul_nat hn
state_before: p q x y : ℝ
r : ℚ
m : ℤ
n : ℕ
h : LiouvilleWith p x
hn : n ≠ 0
⊢ LiouvilleWith p (x * ↑n)
state_after: no goals
Theorem: Fin.castSucc_eq_zero_iff'
File: Mathlib/Data/Fin/Basic.lean

tactic: simp
state_before: n m : ℕ
inst✝ : NeZero n
a : Fin n
⊢ ↑a = ↑0 ↔ ↑a.castSucc = ↑0
state_after: no goals
Theorem: Filter.blimsup_eq_iInf_biSup_of_nat
File: Mathlib/Order/LiminfLimsup.lean

tactic: simp only [atTop_basis.blimsup_eq_iInf_iSup, @and_comm (p _), iSup_and, mem_Ici, iInf_true]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝ : CompleteLattice α
p : ℕ → Prop
u : ℕ → α
⊢ blimsup u atTop p = ⨅ i, ⨆ j, ⨆ (_ : p j ∧ i ≤ j), u j
state_after: no goals
Theorem: exp_neg_mul_sq_isLittleO_exp_neg
File: Mathlib/Analysis/SpecialFunctions/Gaussian/GaussianIntegral.lean

tactic: exact exp_neg_mul_rpow_isLittleO_exp_neg hb one_lt_two
state_before: b : ℝ
hb : 0 < b
⊢ (fun x => rexp (-b * x ^ 2)) =o[atTop] fun x => rexp (-x)
state_after: no goals
Theorem: Matroid.ground_indep_iff_eq_freeOn
File: Mathlib/Data/Matroid/Constructions.lean

tactic: simp [eq_freeOn_iff]
state_before: α : Type u_1
M : Matroid α
E B I X R J : Set α
⊢ M.Indep M.E ↔ M = freeOn M.E
state_after: no goals
Theorem: Filter.tendsto_image_smallSets
File: Mathlib/Order/Filter/SmallSets.lean

tactic: rw [tendsto_smallSets_iff]
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
⊢ Tendsto (fun x => f '' x) la.smallSets lb.smallSets ↔ Tendsto f la lb
state_after: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
⊢ (∀ t ∈ lb, ∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ t) ↔ Tendsto f la lb

tactic: refine forall₂_congr fun u hu ↦ ?_
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
⊢ (∀ t ∈ lb, ∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ t) ↔ Tendsto f la lb
state_after: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ u) ↔ u ∈ map f la

tactic: rw [eventually_smallSets' fun s t hst ht ↦ (image_subset _ hst).trans ht]
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ u) ↔ u ∈ map f la
state_after: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∃ s ∈ la, f '' s ⊆ u) ↔ u ∈ map f la

tactic: simp only [image_subset_iff, exists_mem_subset_iff, mem_map]
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∃ s ∈ la, f '' s ⊆ u) ↔ u ∈ map f la
state_after: no goals
Theorem: List.Sublist.countP_le
File: .lake/packages/batteries/Batteries/Data/List/Count.lean

tactic: simp only [countP_eq_length_filter]
state_before: α : Type u_1
p q : α → Bool
l₁ l₂ : List α
s : l₁ <+ l₂
⊢ countP p l₁ ≤ countP p l₂
state_after: α : Type u_1
p q : α → Bool
l₁ l₂ : List α
s : l₁ <+ l₂
⊢ (List.filter p l₁).length ≤ (List.filter p l₂).length

tactic: apply s.filter _ |>.length_le
state_before: α : Type u_1
p q : α → Bool
l₁ l₂ : List α
s : l₁ <+ l₂
⊢ (List.filter p l₁).length ≤ (List.filter p l₂).length
state_after: no goals
Theorem: ConvexOn.congr
File: Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean

tactic: simpa only [← hfg hx, ← hfg hy, ← hfg (hf.1 hx hy ha hb hab)] using hf.2 hx hy ha hb hab
state_before: 𝕜 : Type u_1
E : Type u_2
β : Type u_3
s : Set E
f g : E → β
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : SMul 𝕜 E
inst✝² : AddCommMonoid E
inst✝¹ : OrderedAddCommMonoid β
inst✝ : SMul 𝕜 β
hf : ConvexOn 𝕜 s f
hfg : EqOn f g s
x : E
hx : x ∈ s
y : E
hy : y ∈ s
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
⊢ g (a • x + b • y) ≤ a • g x + b • g y
state_after: no goals
Theorem: cfc_neg_id
File: Mathlib/Topology/ContinuousFunction/FunctionalCalculus.lean

tactic: rw [cfc_neg _ a, cfc_id' R a]
state_before: R : Type u_1
A : Type u_2
p : A → Prop
inst✝⁹ : CommRing R
inst✝⁸ : StarRing R
inst✝⁷ : MetricSpace R
inst✝⁶ : TopologicalRing R
inst✝⁵ : ContinuousStar R
inst✝⁴ : TopologicalSpace A
inst✝³ : Ring A
inst✝² : StarRing A
inst✝¹ : Algebra R A
inst✝ : ContinuousFunctionalCalculus R p
f g : R → R
a : A
hf : autoParam (ContinuousOn f (spectrum R a)) _auto✝
hg : autoParam (ContinuousOn g (spectrum R a)) _auto✝
ha : autoParam (p a) _auto✝
⊢ cfc (fun x => -x) a = -a
state_after: no goals
Theorem: Matrix.vecMul_self_mul_conjTranspose_eq_zero
File: Mathlib/LinearAlgebra/Matrix/DotProduct.lean

tactic: simpa only [conjTranspose_conjTranspose] using vecMul_conjTranspose_mul_self_eq_zero Aᴴ _
state_before: m : Type u_1
n : Type u_2
p : Type u_3
R : Type u_4
inst✝⁷ : Fintype m
inst✝⁶ : Fintype n
inst✝⁵ : Fintype p
inst✝⁴ : PartialOrder R
inst✝³ : NonUnitalRing R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : NoZeroDivisors R
A : Matrix m n R
v : m → R
⊢ v ᵥ* (A * Aᴴ) = 0 ↔ v ᵥ* A = 0
state_after: no goals