ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: IsLocalization.Away.mul_invSelf
File: Mathlib/RingTheory/Localization/Away/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝⁴ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommSemiring P
x : R
inst✝ : Away x S
⊢ (algebraMap R S) x * invSelf x = 1
state_after: case h.e'_2.h.e'_5
R : Type u_1
inst✝⁴ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommSemiring P
x : R
inst✝ : Away x S
⊢ (algebraMap R S) x = mk' S (↑⟨x, ⋯⟩) 1
tactic: convert IsLocalization.mk'_mul_mk'_eq_one (M := Submonoid.powers x) (S := S) _ 1
state_before: case h.e'_2.h.e'_5
R : Type u_1
inst✝⁴ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommSemiring P
x : R
inst✝ : Away x S
⊢ (algebraMap R S) x = mk' S (↑⟨x, ⋯⟩) 1
state_after: case h.e'_2.h.e'_5
R : Type u_1
inst✝⁴ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommSemiring P
x : R
inst✝ : Away x S
⊢ mk' S (↑⟨x, ⋯⟩) 1 = (algebraMap R S) x
tactic: symm
state_before: case h.e'_2.h.e'_5
R : Type u_1
inst✝⁴ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommSemiring P
x : R
inst✝ : Away x S
⊢ mk' S (↑⟨x, ⋯⟩) 1 = (algebraMap R S) x
state_after: no goals
tactic: apply IsLocalization.mk'_one
Theorem: Multiset.count_nsmul
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
n : ℕ
s : Multiset α
⊢ count a (n • s) = n * count a s
state_after: no goals
tactic: induction n <;> simp [*, succ_nsmul, succ_mul, zero_nsmul]
Theorem: Quiver.Push.lift_comp
File: Mathlib/Combinatorics/Quiver/Push.lean

Proof steps:
state_before: V : Type u_1
inst✝¹ : Quiver V
W : Type u_2
σ : V → W
W' : Type u_3
inst✝ : Quiver W'
φ : V ⥤q W'
τ : W → W'
h : ∀ (x : V), φ.obj x = τ (σ x)
⊢ of σ ⋙q lift σ φ τ h = φ
state_after: case h_obj
V : Type u_1
inst✝¹ : Quiver V
W : Type u_2
σ : V → W
W' : Type u_3
inst✝ : Quiver W'
φ : V ⥤q W'
τ : W → W'
h : ∀ (x : V), φ.obj x = τ (σ x)
⊢ ∀ (X : V), (of σ ⋙q lift σ φ τ h).obj X = φ.obj X

case h_map
V : Type u_1
inst✝¹ : Quiver V
W : Type u_2
σ : V → W
W' : Type u_3
inst✝ : Quiver W'
φ : V ⥤q W'
τ : W → W'
h : ∀ (x : V), φ.obj x = τ (σ x)
⊢ ∀ (X Y : V) (f : X ⟶ Y), (of σ ⋙q lift σ φ τ h).map f = Eq.recOn ⋯ (Eq.recOn ⋯ (φ.map f))
tactic: fapply Prefunctor.ext
Theorem: PartialOrder.toPreorder_injective
File: Mathlib/Order/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
A B : PartialOrder α
h : toPreorder = toPreorder
⊢ A = B
state_after: case mk
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
B : PartialOrder α
toPreorder✝ : Preorder α
le_antisymm✝ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
h : toPreorder = toPreorder
⊢ mk le_antisymm✝ = B
tactic: cases A
state_before: case mk
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
B : PartialOrder α
toPreorder✝ : Preorder α
le_antisymm✝ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
h : toPreorder = toPreorder
⊢ mk le_antisymm✝ = B
state_after: case mk.mk
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
toPreorder✝¹ : Preorder α
le_antisymm✝¹ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
toPreorder✝ : Preorder α
le_antisymm✝ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
h : toPreorder = toPreorder
⊢ mk le_antisymm✝¹ = mk le_antisymm✝
tactic: cases B
state_before: case mk.mk
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
toPreorder✝¹ : Preorder α
le_antisymm✝¹ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
toPreorder✝ : Preorder α
le_antisymm✝ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
h : toPreorder = toPreorder
⊢ mk le_antisymm✝¹ = mk le_antisymm✝
state_after: case mk.mk.refl
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
toPreorder✝ : Preorder α
le_antisymm✝¹ le_antisymm✝ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
⊢ mk le_antisymm✝¹ = mk le_antisymm✝
tactic: cases h
state_before: case mk.mk.refl
ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
toPreorder✝ : Preorder α
le_antisymm✝¹ le_antisymm✝ : ∀ (a b : α), a ≤ b → b ≤ a → a = b
⊢ mk le_antisymm✝¹ = mk le_antisymm✝
state_after: no goals
tactic: congr
Theorem: LocallyFinite.smul_left
File: Mathlib/Topology/Support.lean

Proof steps:
state_before: X : Type u_1
α : Type u_2
α' : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
M : Type u_7
E : Type u_8
R : Type u_9
ι : Type u_10
inst✝³ : TopologicalSpace X
inst✝² : Zero R
inst✝¹ : Zero M
inst✝ : SMulWithZero R M
s : ι → X → R
h✝ : LocallyFinite fun i => support (s i)
f : ι → X → M
i : ι
x : X
h : s i x = 0
⊢ (s i • f i) x = 0
state_after: no goals
tactic: rw [Pi.smul_apply', h, zero_smul]
Theorem: CategoryTheory.ShortComplex.isIso_homologyMap_of_epi_of_isIso_of_mono'
File: Mathlib/Algebra/Homology/ShortComplex/Homology.lean

Proof steps:
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
φ : S₁ ⟶ S₂
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
h₁ : Epi φ.τ₁
h₂ : IsIso φ.τ₂
h₃ : Mono φ.τ₃
⊢ IsIso (homologyMap φ)
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
φ : S₁ ⟶ S₂
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
h₁ : Epi φ.τ₁
h₂ : IsIso φ.τ₂
h₃ : Mono φ.τ₃
⊢ IsIso (homologyMap' φ S₁.homologyData S₂.homologyData)
tactic: dsimp only [homologyMap]
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
φ : S₁ ⟶ S₂
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
h₁ : Epi φ.τ₁
h₂ : IsIso φ.τ₂
h₃ : Mono φ.τ₃
⊢ IsIso (homologyMap' φ S₁.homologyData S₂.homologyData)
state_after: no goals
tactic: infer_instance
Theorem: CharTwo.sum_mul_self
File: Mathlib/Algebra/CharP/Two.lean

Proof steps:
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
tactic: simp_rw [← pow_two, sum_sq]
Theorem: Real.convs_eq_convergent
File: Mathlib/NumberTheory/DiophantineApproximation.lean

Proof steps:
state_before: ξ : ℝ
n : ℕ
⊢ (GenContFract.of ξ).convs n = ↑(ξ.convergent n)
state_after: case zero
ξ : ℝ
⊢ (GenContFract.of ξ).convs 0 = ↑(ξ.convergent 0)

case succ
n : ℕ
ih : ∀ (ξ : ℝ), (GenContFract.of ξ).convs n = ↑(ξ.convergent n)
ξ : ℝ
⊢ (GenContFract.of ξ).convs (n + 1) = ↑(ξ.convergent (n + 1))
tactic: induction' n with n ih generalizing ξ
Theorem: IsPoly.add
File: Mathlib/NumberTheory/Dioph.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : (α → ℕ) → ℤ
hf : IsPoly f
hg : IsPoly g
⊢ IsPoly (f + g)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
f g : (α → ℕ) → ℤ
hf : IsPoly f
hg : IsPoly g
⊢ IsPoly (f - -g)
tactic: rw [← sub_neg_eq_add]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : (α → ℕ) → ℤ
hf : IsPoly f
hg : IsPoly g
⊢ IsPoly (f - -g)
state_after: no goals
tactic: exact hf.sub hg.neg
Theorem: max_mul_mul_le_max_mul_max
File: Mathlib/Algebra/Order/Ring/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
β : Type u_1
inst✝³ : CommSemiring α
inst✝² : LinearOrder α
a b✝ c✝ d : α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
b c : α
ha : 0 ≤ a
hd : 0 ≤ d
ba : b * a ≤ max d b * max c a
cd : c * d ≤ max a c * max b d
⊢ a * b ≤ max a c * max d b
state_after: no goals
tactic: simpa [mul_comm, max_comm] using ba
state_before: α : Type u
β : Type u_1
inst✝³ : CommSemiring α
inst✝² : LinearOrder α
a b✝ c✝ d : α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
b c : α
ha : 0 ≤ a
hd : 0 ≤ d
ba : b * a ≤ max d b * max c a
cd : c * d ≤ max a c * max b d
⊢ d * c ≤ max a c * max d b
state_after: no goals
tactic: simpa [mul_comm, max_comm] using cd
Theorem: Composition.single_blocksFun
File: Mathlib/Combinatorics/Enumerative/Composition.lean

Proof steps:
state_before: n✝ : ℕ
c : Composition n✝
n : ℕ
h : 0 < n
i : Fin (single n h).length
⊢ (single n h).blocksFun i = n
state_after: no goals
tactic: simp [blocksFun, single, blocks, i.2]
Theorem: Algebra.iInf_toSubmodule
File: Mathlib/Algebra/Algebra/Subalgebra/Basic.lean

Proof steps:
state_before: R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
ι : Sort u_1
S : ι → Subalgebra R A
⊢ ↑(toSubmodule (⨅ i, S i)) = ↑(⨅ i, toSubmodule (S i))
state_after: no goals
tactic: simp
Theorem: Polynomial.tendsto_div_exp_atTop
File: Mathlib/Analysis/SpecialFunctions/PolynomialExp.lean

Proof steps:
state_before: p : ℝ[X]
⊢ Tendsto (fun x => eval x p / rexp x) atTop (𝓝 0)
state_after: no goals
tactic: induction p using Polynomial.induction_on' with
  | h_monomial n c => simpa [exp_neg, div_eq_mul_inv, mul_assoc]
    using tendsto_const_nhds.mul (tendsto_pow_mul_exp_neg_atTop_nhds_zero n)
  | h_add p q hp hq => simpa [add_div] using hp.add hq
Theorem: WittVector.bind₁_frobeniusPoly_wittPolynomial
File: Mathlib/RingTheory/WittVector/Frobenius.lean

Proof steps:
state_before: p : ℕ
R : Type u_1
S : Type u_2
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CommRing S
n : ℕ
⊢ (bind₁ (frobeniusPoly p)) (wittPolynomial p ℤ n) = wittPolynomial p ℤ (n + 1)
state_after: case a
p : ℕ
R : Type u_1
S : Type u_2
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CommRing S
n : ℕ
⊢ (MvPolynomial.map (Int.castRingHom ℚ)) ((bind₁ (frobeniusPoly p)) (wittPolynomial p ℤ n)) =
    (MvPolynomial.map (Int.castRingHom ℚ)) (wittPolynomial p ℤ (n + 1))
tactic: apply MvPolynomial.map_injective (Int.castRingHom ℚ) Int.cast_injective
state_before: case a
p : ℕ
R : Type u_1
S : Type u_2
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CommRing S
n : ℕ
⊢ (MvPolynomial.map (Int.castRingHom ℚ)) ((bind₁ (frobeniusPoly p)) (wittPolynomial p ℤ n)) =
    (MvPolynomial.map (Int.castRingHom ℚ)) (wittPolynomial p ℤ (n + 1))
state_after: no goals
tactic: simp only [map_bind₁, map_frobeniusPoly, bind₁_frobeniusPolyRat_wittPolynomial,
    map_wittPolynomial]
Theorem: CategoryTheory.monoidalOfHasFiniteProducts.associator_inv_fst_snd
File: Mathlib/CategoryTheory/Monoidal/OfHasFiniteProducts.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y Z : C
⊢ (α_ X Y Z).inv ≫ prod.fst ≫ prod.snd = prod.snd ≫ prod.fst
state_after: no goals
tactic: simp [associator_inv]
Theorem: Set.not_ordConnected_inter_Icc_iff
File: Mathlib/Order/Interval/Set/OrdConnected.lean

Proof steps:
state_before: α : Type u_1
inst✝ : PartialOrder α
s : Set α
x y : α
hx : x ∈ s
hy : y ∈ s
⊢ ¬(s ∩ Icc x y).OrdConnected ↔ ∃ z ∉ s, z ∈ Ioo x y
state_after: no goals
tactic: simp_rw [ordConnected_inter_Icc_iff hx hy, subset_def, not_forall, exists_prop, and_comm]
Theorem: spectrum.inv_mem_resolventSet
File: Mathlib/Algebra/Algebra/Spectrum.lean

Proof steps:
state_before: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : ↑r ∈ resolventSet R ↑a
⊢ ↑r⁻¹ ∈ resolventSet R ↑a⁻¹
state_after: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
⊢ IsUnit (r⁻¹ • 1 - ↑a⁻¹)
tactic: rw [mem_resolventSet_iff, Algebra.algebraMap_eq_smul_one, ← Units.smul_def] at h ⊢
state_before: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
⊢ IsUnit (r⁻¹ • 1 - ↑a⁻¹)
state_after: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
⊢ IsUnit (r • ↑a⁻¹ - 1)
tactic: rw [IsUnit.smul_sub_iff_sub_inv_smul, inv_inv, IsUnit.sub_iff]
state_before: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
⊢ IsUnit (r • ↑a⁻¹ - 1)
state_after: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
h₁ : ↑a * (r • ↑a⁻¹ - 1) = r • 1 - ↑a
⊢ IsUnit (r • ↑a⁻¹ - 1)
tactic: have h₁ : (a : A) * (r • (↑a⁻¹ : A) - 1) = r • (1 : A) - a := by
    rw [mul_sub, mul_smul_comm, a.mul_inv, mul_one]
state_before: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
h₁ : ↑a * (r • ↑a⁻¹ - 1) = r • 1 - ↑a
⊢ IsUnit (r • ↑a⁻¹ - 1)
state_after: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
h₁ : ↑a * (r • ↑a⁻¹ - 1) = r • 1 - ↑a
h₂ : (r • ↑a⁻¹ - 1) * ↑a = r • 1 - ↑a
⊢ IsUnit (r • ↑a⁻¹ - 1)
tactic: have h₂ : (r • (↑a⁻¹ : A) - 1) * a = r • (1 : A) - a := by
    rw [sub_mul, smul_mul_assoc, a.inv_mul, one_mul]
state_before: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
h₁ : ↑a * (r • ↑a⁻¹ - 1) = r • 1 - ↑a
h₂ : (r • ↑a⁻¹ - 1) * ↑a = r • 1 - ↑a
⊢ IsUnit (r • ↑a⁻¹ - 1)
state_after: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
h₁ : ↑a * (r • ↑a⁻¹ - 1) = r • 1 - ↑a
h₂ : (r • ↑a⁻¹ - 1) * ↑a = r • 1 - ↑a
hcomm : Commute (↑a) (r • ↑a⁻¹ - 1)
⊢ IsUnit (r • ↑a⁻¹ - 1)
tactic: have hcomm : Commute (a : A) (r • (↑a⁻¹ : A) - 1) := by rwa [← h₂] at h₁
state_before: R : Type u
A : Type v
inst✝² : CommSemiring R
inst✝¹ : Ring A
inst✝ : Algebra R A
r : Rˣ
a : Aˣ
h : IsUnit (r • 1 - ↑a)
h₁ : ↑a * (r • ↑a⁻¹ - 1) = r • 1 - ↑a
h₂ : (r • ↑a⁻¹ - 1) * ↑a = r • 1 - ↑a
hcomm : Commute (↑a) (r • ↑a⁻¹ - 1)
⊢ IsUnit (r • ↑a⁻¹ - 1)
state_after: no goals
tactic: exact (hcomm.isUnit_mul_iff.mp (h₁.symm ▸ h)).2
Theorem: LocalRing.residue_eq_zero_iff
File: Mathlib/RingTheory/LocalRing/ResidueField/Basic.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : LocalRing R
inst✝³ : CommRing S
inst✝² : LocalRing S
inst✝¹ : CommRing T
inst✝ : LocalRing T
x : R
⊢ (residue R) x = 0 ↔ x ∈ maximalIdeal R
state_after: no goals
tactic: rw [← RingHom.mem_ker, ker_residue]
Theorem: Filter.bot_coprod
File: Mathlib/Order/Filter/Prod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
f : Filter α
g l : Filter β
⊢ ⊥.coprod l = comap Prod.snd l
state_after: no goals
tactic: simp [Filter.coprod]
Theorem: mul_nonneg_iff_neg_imp_nonpos
File: Mathlib/Algebra/Order/Ring/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
β : Type u_1
inst✝⁵ : Ring α
inst✝⁴ : LinearOrder α
a b : α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
⊢ 0 ≤ a * b ↔ (a < 0 → b ≤ 0) ∧ (b < 0 → a ≤ 0)
state_after: α : Type u
β : Type u_1
inst✝⁵ : Ring α
inst✝⁴ : LinearOrder α
a b : α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
⊢ (0 < -a → 0 ≤ -b) ∧ (0 < -b → 0 ≤ -a) ↔ (a < 0 → b ≤ 0) ∧ (b < 0 → a ≤ 0)
tactic: rw [← neg_mul_neg, mul_nonneg_iff_pos_imp_nonneg (α := α)]
state_before: α : Type u
β : Type u_1
inst✝⁵ : Ring α
inst✝⁴ : LinearOrder α
a b : α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
⊢ (0 < -a → 0 ≤ -b) ∧ (0 < -b → 0 ≤ -a) ↔ (a < 0 → b ≤ 0) ∧ (b < 0 → a ≤ 0)
state_after: no goals
tactic: simp only [neg_pos, neg_nonneg]
Theorem: contDiff_euclidean
File: Mathlib/Analysis/InnerProductSpace/Calculus.lean

Proof steps:
state_before: 𝕜 : Type u_1
ι : Type u_2
H : Type u_3
inst✝³ : _root_.RCLike 𝕜
inst✝² : NormedAddCommGroup H
inst✝¹ : NormedSpace 𝕜 H
inst✝ : Fintype ι
f : H → EuclideanSpace 𝕜 ι
f' : H →L[𝕜] EuclideanSpace 𝕜 ι
t : Set H
y : H
n : ℕ∞
⊢ ContDiff 𝕜 n f ↔ ∀ (i : ι), ContDiff 𝕜 n fun x => f x i
state_after: 𝕜 : Type u_1
ι : Type u_2
H : Type u_3
inst✝³ : _root_.RCLike 𝕜
inst✝² : NormedAddCommGroup H
inst✝¹ : NormedSpace 𝕜 H
inst✝ : Fintype ι
f : H → EuclideanSpace 𝕜 ι
f' : H →L[𝕜] EuclideanSpace 𝕜 ι
t : Set H
y : H
n : ℕ∞
⊢ (∀ (i : ι), ContDiff 𝕜 n fun x => (⇑(EuclideanSpace.equiv ι 𝕜) ∘ f) x i) ↔ ∀ (i : ι), ContDiff 𝕜 n fun x => f x i
tactic: rw [← (EuclideanSpace.equiv ι 𝕜).comp_contDiff_iff, contDiff_pi]
state_before: 𝕜 : Type u_1
ι : Type u_2
H : Type u_3
inst✝³ : _root_.RCLike 𝕜
inst✝² : NormedAddCommGroup H
inst✝¹ : NormedSpace 𝕜 H
inst✝ : Fintype ι
f : H → EuclideanSpace 𝕜 ι
f' : H →L[𝕜] EuclideanSpace 𝕜 ι
t : Set H
y : H
n : ℕ∞
⊢ (∀ (i : ι), ContDiff 𝕜 n fun x => (⇑(EuclideanSpace.equiv ι 𝕜) ∘ f) x i) ↔ ∀ (i : ι), ContDiff 𝕜 n fun x => f x i
state_after: no goals
tactic: rfl
Theorem: AddAction.nsmul_period_add_vadd
File: Mathlib/Dynamics/PeriodicPts.lean

Proof steps:
state_before: α : Type v
G : Type u
inst✝³ : Group G
inst✝² : MulAction G α
M : Type u
inst✝¹ : Monoid M
inst✝ : MulAction M α
n : ℕ
m : M
a : α
⊢ m ^ (period m a + n) • a = m ^ n • a
state_after: no goals
tactic: rw [← pow_mod_period_smul, Nat.add_mod_left, pow_mod_period_smul]
Theorem: Polynomial.rootMultiplicity_eq_multiplicity
File: Mathlib/Algebra/Polynomial/Div.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝² : Ring R
p✝ q : R[X]
inst✝¹ : DecidableEq R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p : R[X]
a : R
⊢ rootMultiplicity a p = if h0 : p = 0 then 0 else (multiplicity (X - C a) p).get ⋯
state_after: R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝² : Ring R
p✝ q : R[X]
inst✝¹ : DecidableEq R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p : R[X]
a : R
⊢ (if h : p = 0 then 0 else Nat.find ⋯) = if h : p = 0 then 0 else Nat.find ⋯
tactic: simp [multiplicity, rootMultiplicity, Part.Dom]
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝² : Ring R
p✝ q : R[X]
inst✝¹ : DecidableEq R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p : R[X]
a : R
⊢ (if h : p = 0 then 0 else Nat.find ⋯) = if h : p = 0 then 0 else Nat.find ⋯
state_after: case e_e
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝² : Ring R
p✝ q : R[X]
inst✝¹ : DecidableEq R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p : R[X]
a : R
⊢ (fun h => Nat.find ⋯) = fun h => Nat.find ⋯
tactic: congr
state_before: case e_e
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝² : Ring R
p✝ q : R[X]
inst✝¹ : DecidableEq R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p : R[X]
a : R
⊢ (fun h => Nat.find ⋯) = fun h => Nat.find ⋯
state_after: case e_e.h
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝² : Ring R
p✝ q : R[X]
inst✝¹ : DecidableEq R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p : R[X]
a : R
x✝ : ¬p = 0
⊢ Nat.find ⋯ = Nat.find ⋯
tactic: funext
state_before: case e_e.h
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝² : Ring R
p✝ q : R[X]
inst✝¹ : DecidableEq R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
p : R[X]
a : R
x✝ : ¬p = 0
⊢ Nat.find ⋯ = Nat.find ⋯
state_after: no goals
tactic: congr
Theorem: IsFractionRing.associated_num_den_inv
File: Mathlib/RingTheory/Localization/NumDen.lean

Proof steps:
state_before: R : Type u_1
inst✝⁹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁸ : CommRing S
inst✝⁷ : Algebra R S
P : Type u_3
inst✝⁶ : CommRing P
A : Type u_4
inst✝⁵ : CommRing A
inst✝⁴ : IsDomain A
inst✝³ : UniqueFactorizationMonoid A
K : Type u_5
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : x ≠ 0
⊢ Associated (num A x) ↑(den A x⁻¹)
state_after: R : Type u_1
inst✝⁹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁸ : CommRing S
inst✝⁷ : Algebra R S
P : Type u_3
inst✝⁶ : CommRing P
A : Type u_4
inst✝⁵ : CommRing A
inst✝⁴ : IsDomain A
inst✝³ : UniqueFactorizationMonoid A
K : Type u_5
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : x ≠ 0
this : Associated (num A x⁻¹⁻¹) ↑(den A x⁻¹)
⊢ Associated (num A x) ↑(den A x⁻¹)
tactic: have : Associated (num A x⁻¹⁻¹ : A) (den A x⁻¹) :=
    (associated_den_num_inv x⁻¹ (inv_ne_zero hx)).symm
state_before: R : Type u_1
inst✝⁹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁸ : CommRing S
inst✝⁷ : Algebra R S
P : Type u_3
inst✝⁶ : CommRing P
A : Type u_4
inst✝⁵ : CommRing A
inst✝⁴ : IsDomain A
inst✝³ : UniqueFactorizationMonoid A
K : Type u_5
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : x ≠ 0
this : Associated (num A x⁻¹⁻¹) ↑(den A x⁻¹)
⊢ Associated (num A x) ↑(den A x⁻¹)
state_after: R : Type u_1
inst✝⁹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁸ : CommRing S
inst✝⁷ : Algebra R S
P : Type u_3
inst✝⁶ : CommRing P
A : Type u_4
inst✝⁵ : CommRing A
inst✝⁴ : IsDomain A
inst✝³ : UniqueFactorizationMonoid A
K : Type u_5
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : x ≠ 0
this : Associated (num A x) ↑(den A x⁻¹)
⊢ Associated (num A x) ↑(den A x⁻¹)
tactic: rw [inv_inv] at this
state_before: R : Type u_1
inst✝⁹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝⁸ : CommRing S
inst✝⁷ : Algebra R S
P : Type u_3
inst✝⁶ : CommRing P
A : Type u_4
inst✝⁵ : CommRing A
inst✝⁴ : IsDomain A
inst✝³ : UniqueFactorizationMonoid A
K : Type u_5
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : x ≠ 0
this : Associated (num A x) ↑(den A x⁻¹)
⊢ Associated (num A x) ↑(den A x⁻¹)
state_after: no goals
tactic: exact this
Theorem: Set.infsep_pair_eq_toReal
File: Mathlib/Topology/MetricSpace/Infsep.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoEMetricSpace α
x y : α
s : Set α
⊢ {x, y}.infsep = (edist x y).toReal
state_after: case pos
α : Type u_1
β : Type u_2
inst✝ : PseudoEMetricSpace α
x y : α
s : Set α
hxy : x = y
⊢ {x, y}.infsep = (edist x y).toReal

case neg
α : Type u_1
β : Type u_2
inst✝ : PseudoEMetricSpace α
x y : α
s : Set α
hxy : ¬x = y
⊢ {x, y}.infsep = (edist x y).toReal
tactic: by_cases hxy : x = y
Theorem: Monoid.exponent_dvd_of_monoidHom
File: Mathlib/GroupTheory/Exponent.lean

Proof steps:
state_before: G : Type u
inst✝¹ : Monoid G
H : Type u_1
inst✝ : Monoid H
e : G →* H
e_inj : Function.Injective ⇑e
g : G
⊢ e (g ^ exponent H) = e 1
state_after: no goals
tactic: rw [map_pow, pow_exponent_eq_one, map_one]
Theorem: Complex.continuousAt_cpow_zero_of_re_pos
File: Mathlib/Analysis/SpecialFunctions/Pow/Continuity.lean

Proof steps:
state_before: z : ℂ
hz : 0 < z.re
⊢ ContinuousAt (fun x => x.1 ^ x.2) (0, z)
state_after: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ ContinuousAt (fun x => x.1 ^ x.2) (0, z)
tactic: have hz₀ : z ≠ 0 := ne_of_apply_ne re hz.ne'
state_before: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ ContinuousAt (fun x => x.1 ^ x.2) (0, z)
state_after: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ Tendsto (fun x => ‖x.1 ^ x.2‖) (𝓝 (0, z)) (𝓝 0)
tactic: rw [ContinuousAt, zero_cpow hz₀, tendsto_zero_iff_norm_tendsto_zero]
state_before: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ Tendsto (fun x => ‖x.1 ^ x.2‖) (𝓝 (0, z)) (𝓝 0)
state_after: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ Tendsto (fun x => abs x.1 ^ x.2.re / rexp (x.1.arg * x.2.im)) (𝓝 (0, z)) (𝓝 0)
tactic: refine squeeze_zero (fun _ => norm_nonneg _) (fun _ => abs_cpow_le _ _) ?_
state_before: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ Tendsto (fun x => abs x.1 ^ x.2.re / rexp (x.1.arg * x.2.im)) (𝓝 (0, z)) (𝓝 0)
state_after: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ Tendsto (fun x => abs x.1 ^ x.2.re * rexp (-(x.1.arg * x.2.im))) (𝓝 (0, z)) (𝓝 0)
tactic: simp only [div_eq_mul_inv, ← Real.exp_neg]
state_before: z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ Tendsto (fun x => abs x.1 ^ x.2.re * rexp (-(x.1.arg * x.2.im))) (𝓝 (0, z)) (𝓝 0)
state_after: case refine_1
z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ Tendsto (fun x => abs x.1 ^ x.2.re) (𝓝 (0, z)) (𝓝 0)

case refine_2
z : ℂ
hz : 0 < z.re
hz₀ : z ≠ 0
⊢ IsBoundedUnder (fun x x_1 => x ≤ x_1) (𝓝 (0, z)) ((fun x => ‖x‖) ∘ fun x => rexp (-(x.1.arg * x.2.im)))
tactic: refine Tendsto.zero_mul_isBoundedUnder_le ?_ ?_