ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: MeasureTheory.cylinder_empty
File: Mathlib/MeasureTheory/Constructions/Cylinders.lean

Proof steps:
state_before: ι : Type u_1
α : ι → Type u_2
s : Finset ι
⊢ cylinder s ∅ = ∅
state_after: no goals
tactic: rw [cylinder, preimage_empty]
Theorem: iInf_le_iff
File: Mathlib/Order/CompleteLattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteSemilatticeInf α
s✝ t : Set α
a b : α
s : ι → α
⊢ iInf s ≤ a ↔ ∀ (b : α), (∀ (i : ι), b ≤ s i) → b ≤ a
state_after: no goals
tactic: simp [iInf, sInf_le_iff, lowerBounds]
Theorem: HomologicalComplex.homotopyCofiber.inrCompHomotopy_hom_desc_hom
File: Mathlib/Algebra/Homology/HomotopyCofiber.lean

Proof steps:
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: by_cases hij : c.Rel j i
Theorem: MeasureTheory.measure_smul_average
File: Mathlib/MeasureTheory/Integral/Average.lean

Proof steps:
state_before: α : Type u_1
E : Type u_2
F : Type u_3
m0 : MeasurableSpace α
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : CompleteSpace F
μ ν : Measure α
s t : Set α
f✝ g : α → E
inst✝ : IsFiniteMeasure μ
f : α → E
⊢ (μ univ).toReal • ⨍ (x : α), f x ∂μ = ∫ (x : α), f x ∂μ
state_after: case inl
α : Type u_1
E : Type u_2
F : Type u_3
m0 : MeasurableSpace α
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : CompleteSpace F
μ ν : Measure α
s t : Set α
f✝ g : α → E
inst✝ : IsFiniteMeasure μ
f : α → E
hμ : μ = 0
⊢ (μ univ).toReal • ⨍ (x : α), f x ∂μ = ∫ (x : α), f x ∂μ

case inr
α : Type u_1
E : Type u_2
F : Type u_3
m0 : MeasurableSpace α
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : CompleteSpace E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
inst✝¹ : CompleteSpace F
μ ν : Measure α
s t : Set α
f✝ g : α → E
inst✝ : IsFiniteMeasure μ
f : α → E
hμ : μ ≠ 0
⊢ (μ univ).toReal • ⨍ (x : α), f x ∂μ = ∫ (x : α), f x ∂μ
tactic: rcases eq_or_ne μ 0 with hμ | hμ
Theorem: Filter.Eventually.intCast_atBot
File: Mathlib/Order/Filter/Archimedean.lean

Proof steps:
state_before: α : Type u_1
R : Type u_2
inst✝¹ : StrictOrderedRing R
inst✝ : Archimedean R
p : R → Prop
h : ∀ᶠ (x : R) in atBot, p x
⊢ ∀ᶠ (n : ℤ) in atBot, p ↑n
state_after: α : Type u_1
R : Type u_2
inst✝¹ : StrictOrderedRing R
inst✝ : Archimedean R
p : R → Prop
h : ∀ᶠ (x : R) in atBot, p x
⊢ ∀ᶠ (n : ℤ) in Filter.comap Int.cast atBot, p ↑n
tactic: rw [← Int.comap_cast_atBot (R := R)]
state_before: α : Type u_1
R : Type u_2
inst✝¹ : StrictOrderedRing R
inst✝ : Archimedean R
p : R → Prop
h : ∀ᶠ (x : R) in atBot, p x
⊢ ∀ᶠ (n : ℤ) in Filter.comap Int.cast atBot, p ↑n
state_after: no goals
tactic: exact h.comap _
Theorem: String.find_of_valid
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

Proof steps:
state_before: p : Char → Bool
s : String
⊢ s.find p = { byteIdx := utf8Len (List.takeWhile (fun x => !p x) s.data) }
state_after: no goals
tactic: simpa using findAux_of_valid p [] s.1 []
Theorem: Units.inv_mul_cancel_right
File: Mathlib/Algebra/Group/Units.lean

Proof steps:
state_before: α : Type u
inst✝ : Monoid α
a✝ b✝ c u : αˣ
a : α
b : αˣ
⊢ a * ↑b⁻¹ * ↑b = a
state_after: no goals
tactic: rw [mul_assoc, inv_mul, mul_one]
Theorem: Metric.thickening_eq_biUnion_ball
File: Mathlib/Topology/MetricSpace/Thickening.lean

Proof steps:
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
δ✝ : ℝ
s : Set α
x : α
X : Type u
inst✝ : PseudoMetricSpace X
δ : ℝ
E : Set X
⊢ thickening δ E = ⋃ x ∈ E, ball x δ
state_after: case h
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
δ✝ : ℝ
s : Set α
x✝ : α
X : Type u
inst✝ : PseudoMetricSpace X
δ : ℝ
E : Set X
x : X
⊢ x ∈ thickening δ E ↔ x ∈ ⋃ x ∈ E, ball x δ
tactic: ext x
state_before: case h
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
δ✝ : ℝ
s : Set α
x✝ : α
X : Type u
inst✝ : PseudoMetricSpace X
δ : ℝ
E : Set X
x : X
⊢ x ∈ thickening δ E ↔ x ∈ ⋃ x ∈ E, ball x δ
state_after: case h
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
δ✝ : ℝ
s : Set α
x✝ : α
X : Type u
inst✝ : PseudoMetricSpace X
δ : ℝ
E : Set X
x : X
⊢ x ∈ thickening δ E ↔ ∃ i ∈ E, x ∈ ball i δ
tactic: simp only [mem_iUnion₂, exists_prop]
state_before: case h
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
δ✝ : ℝ
s : Set α
x✝ : α
X : Type u
inst✝ : PseudoMetricSpace X
δ : ℝ
E : Set X
x : X
⊢ x ∈ thickening δ E ↔ ∃ i ∈ E, x ∈ ball i δ
state_after: no goals
tactic: exact mem_thickening_iff
Theorem: PNat.XgcdType.reduce_b
File: Mathlib/Data/PNat/Xgcd.lean

Proof steps:
state_before: u✝ u : XgcdType
h : u.r ≠ 0
⊢ u.reduce = u.step.reduce.flip
state_after: u✝ u : XgcdType
h : u.r ≠ 0
⊢ (if x : u.r = 0 then u.finish else u.step.reduce.flip) = u.step.reduce.flip
tactic: rw [reduce]
state_before: u✝ u : XgcdType
h : u.r ≠ 0
⊢ (if x : u.r = 0 then u.finish else u.step.reduce.flip) = u.step.reduce.flip
state_after: no goals
tactic: exact if_neg h
Theorem: Encodable.iUnion_decode₂_cases
File: Mathlib/Logic/Encodable/Lattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : Encodable β
f : β → Set α
C : Set α → Prop
H0 : C ∅
H1 : ∀ (b : β), C (f b)
n : ℕ
⊢ C (⋃ b ∈ none, f b)
state_after: α : Type u_1
β : Type u_2
inst✝ : Encodable β
f : β → Set α
C : Set α → Prop
H0 : C ∅
H1 : ∀ (b : β), C (f b)
n : ℕ
⊢ C ∅
tactic: simp only [Option.mem_def, iUnion_of_empty, iUnion_empty]
state_before: α : Type u_1
β : Type u_2
inst✝ : Encodable β
f : β → Set α
C : Set α → Prop
H0 : C ∅
H1 : ∀ (b : β), C (f b)
n : ℕ
⊢ C ∅
state_after: no goals
tactic: apply H0
state_before: α : Type u_1
β : Type u_2
inst✝ : Encodable β
f : β → Set α
C : Set α → Prop
H0 : C ∅
H1 : ∀ (b : β), C (f b)
n : ℕ
b : β
⊢ C (⋃ b_1 ∈ some b, f b_1)
state_after: case h.e'_1
α : Type u_1
β : Type u_2
inst✝ : Encodable β
f : β → Set α
C : Set α → Prop
H0 : C ∅
H1 : ∀ (b : β), C (f b)
n : ℕ
b : β
⊢ ⋃ b_1 ∈ some b, f b_1 = f b
tactic: convert H1 b
state_before: case h.e'_1
α : Type u_1
β : Type u_2
inst✝ : Encodable β
f : β → Set α
C : Set α → Prop
H0 : C ∅
H1 : ∀ (b : β), C (f b)
n : ℕ
b : β
⊢ ⋃ b_1 ∈ some b, f b_1 = f b
state_after: no goals
tactic: simp [Set.ext_iff]
Theorem: Lists.equiv_atom
File: Mathlib/SetTheory/Lists.lean

Proof steps:
state_before: α : Type u_1
a : α
l : Lists α
h : atom a ~ l
⊢ atom a = l
state_after: case refl
α : Type u_1
a : α
⊢ atom a = atom a
tactic: cases h
state_before: case refl
α : Type u_1
a : α
⊢ atom a = atom a
state_after: no goals
tactic: rfl
Theorem: Matroid.Basis'.encard_eq_encard
File: Mathlib/Data/Matroid/Restrict.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Basis' I X
hJ : M.Basis' J X
⊢ I.encard = J.encard
state_after: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : (M ↾ X).Base I
hJ : (M ↾ X).Base J
⊢ I.encard = J.encard
tactic: rw [← base_restrict_iff'] at hI hJ
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : (M ↾ X).Base I
hJ : (M ↾ X).Base J
⊢ I.encard = J.encard
state_after: no goals
tactic: exact hI.card_eq_card_of_base hJ
Theorem: Multiset.trop_sum
File: Mathlib/Algebra/Tropical/BigOperators.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝ : AddCommMonoid R
s : Multiset R
⊢ ∀ (a : List R), trop (sum ⟦a⟧) = (map trop ⟦a⟧).prod
state_after: no goals
tactic: simpa using List.trop_sum
Theorem: Rat.le_def
File: Mathlib/Algebra/Order/Ring/Rat.lean

Proof steps:
state_before: a b c p q : ℚ
⊢ p ≤ q ↔ p.num * ↑q.den ≤ q.num * ↑p.den
state_after: a b c p q : ℚ
⊢ p.num /. ↑p.den ≤ q.num /. ↑q.den ↔
    (p.num /. ↑p.den).num * ↑(q.num /. ↑q.den).den ≤ (q.num /. ↑q.den).num * ↑(p.num /. ↑p.den).den
tactic: rw [← num_divInt_den q, ← num_divInt_den p]
state_before: a b c p q : ℚ
⊢ p.num /. ↑p.den ≤ q.num /. ↑q.den ↔
    (p.num /. ↑p.den).num * ↑(q.num /. ↑q.den).den ≤ (q.num /. ↑q.den).num * ↑(p.num /. ↑p.den).den
state_after: a b c p q : ℚ
⊢ p.num /. ↑p.den ≤ q.num /. ↑q.den ↔ p.num * ↑q.den ≤ q.num * ↑p.den
tactic: conv_rhs => simp only [num_divInt_den]
state_before: a b c p q : ℚ
⊢ p.num /. ↑p.den ≤ q.num /. ↑q.den ↔ p.num * ↑q.den ≤ q.num * ↑p.den
state_after: no goals
tactic: exact Rat.divInt_le_divInt (mod_cast p.pos) (mod_cast q.pos)
Theorem: CategoryTheory.leftDistributor_ext_left
File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

Proof steps:
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y : C
f : J → C
g h : X ⊗ ⨁ f ⟶ Y
w : ∀ (j : J), X ◁ biproduct.ι f j ≫ g = X ◁ biproduct.ι f j ≫ h
⊢ g = h
state_after: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y : C
f : J → C
g h : X ⊗ ⨁ f ⟶ Y
w : ∀ (j : J), X ◁ biproduct.ι f j ≫ g = X ◁ biproduct.ι f j ≫ h
⊢ (leftDistributor X f).inv ≫ g = (leftDistributor X f).inv ≫ h
tactic: apply (cancel_epi (leftDistributor X f).inv).mp
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y : C
f : J → C
g h : X ⊗ ⨁ f ⟶ Y
w : ∀ (j : J), X ◁ biproduct.ι f j ≫ g = X ◁ biproduct.ι f j ≫ h
⊢ (leftDistributor X f).inv ≫ g = (leftDistributor X f).inv ≫ h
state_after: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y : C
f : J → C
g h : X ⊗ ⨁ f ⟶ Y
w : ∀ (j : J), X ◁ biproduct.ι f j ≫ g = X ◁ biproduct.ι f j ≫ h
j✝ : J
⊢ biproduct.ι (fun j => X ⊗ f j) j✝ ≫ (leftDistributor X f).inv ≫ g =
    biproduct.ι (fun j => X ⊗ f j) j✝ ≫ (leftDistributor X f).inv ≫ h
tactic: ext
state_before: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y : C
f : J → C
g h : X ⊗ ⨁ f ⟶ Y
w : ∀ (j : J), X ◁ biproduct.ι f j ≫ g = X ◁ biproduct.ι f j ≫ h
j✝ : J
⊢ biproduct.ι (fun j => X ⊗ f j) j✝ ≫ (leftDistributor X f).inv ≫ g =
    biproduct.ι (fun j => X ⊗ f j) j✝ ≫ (leftDistributor X f).inv ≫ h
state_after: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y : C
f : J → C
g h : X ⊗ ⨁ f ⟶ Y
w : ∀ (j : J), X ◁ biproduct.ι f j ≫ g = X ◁ biproduct.ι f j ≫ h
j✝ : J
⊢ X ◁ biproduct.ι f j✝ ≫ g = X ◁ biproduct.ι f j✝ ≫ h
tactic: simp? [leftDistributor_inv, Preadditive.comp_sum_assoc, biproduct.ι_π_assoc, dite_comp] says
    simp only [leftDistributor_inv, Preadditive.comp_sum_assoc, biproduct.ι_π_assoc, dite_comp,
      zero_comp, Finset.sum_dite_eq, Finset.mem_univ, ↓reduceIte, eqToHom_refl, Category.id_comp]
state_before: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y : C
f : J → C
g h : X ⊗ ⨁ f ⟶ Y
w : ∀ (j : J), X ◁ biproduct.ι f j ≫ g = X ◁ biproduct.ι f j ≫ h
j✝ : J
⊢ X ◁ biproduct.ι f j✝ ≫ g = X ◁ biproduct.ι f j✝ ≫ h
state_after: no goals
tactic: apply w
Theorem: Real.Angle.coe_toReal
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

Proof steps:
state_before: θ : Angle
⊢ ↑θ.toReal = θ
state_after: case h
x✝ : ℝ
⊢ ↑(↑x✝).toReal = ↑x✝
tactic: induction θ using Real.Angle.induction_on
state_before: case h
x✝ : ℝ
⊢ ↑(↑x✝).toReal = ↑x✝
state_after: no goals
tactic: exact coe_toIocMod _ _
Theorem: Nat.Prime.multiplicity_factorial_mul
File: Mathlib/Data/Nat/Multiplicity.lean

Proof steps:
state_before: n p : ℕ
hp : Prime p
⊢ multiplicity p (p * n)! = multiplicity p n ! + ↑n
state_after: case zero
p : ℕ
hp : Prime p
⊢ multiplicity p (p * 0)! = multiplicity p 0! + ↑0

case succ
p : ℕ
hp : Prime p
n : ℕ
ih : multiplicity p (p * n)! = multiplicity p n ! + ↑n
⊢ multiplicity p (p * (n + 1))! = multiplicity p (n + 1)! + ↑(n + 1)
tactic: induction' n with n ih
Theorem: MeasureTheory.levyProkhorovEDist_comm
File: Mathlib/MeasureTheory/Measure/LevyProkhorovMetric.lean

Proof steps:
state_before: ι : Type u_1
Ω : Type u_2
inst✝¹ : MeasurableSpace Ω
inst✝ : PseudoEMetricSpace Ω
μ ν : Measure Ω
⊢ levyProkhorovEDist μ ν = levyProkhorovEDist ν μ
state_after: no goals
tactic: simp only [levyProkhorovEDist, and_comm]
Theorem: Complex.cos_add_sin_mul_I_pow
File: Mathlib/Data/Complex/Exponential.lean

Proof steps:
state_before: x y : ℂ
n : ℕ
z : ℂ
⊢ (cos z + sin z * I) ^ n = cos (↑n * z) + sin (↑n * z) * I
state_after: x y : ℂ
n : ℕ
z : ℂ
⊢ cexp (z * I) ^ n = cexp (↑n * z * I)
tactic: rw [← exp_mul_I, ← exp_mul_I]
state_before: x y : ℂ
n : ℕ
z : ℂ
⊢ cexp (z * I) ^ n = cexp (↑n * z * I)
state_after: case zero
x y z : ℂ
⊢ cexp (z * I) ^ 0 = cexp (↑0 * z * I)

case succ
x y z : ℂ
n : ℕ
ih : cexp (z * I) ^ n = cexp (↑n * z * I)
⊢ cexp (z * I) ^ (n + 1) = cexp (↑(n + 1) * z * I)
tactic: induction' n with n ih
Theorem: List.alternatingSum_eq_finset_sum
File: Mathlib/Algebra/BigOperators/Fin.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
⊢ [].alternatingProd = ∏ i : Fin [].length, [].get i ^ (-1) ^ ↑i
state_after: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
⊢ ∀ x ∈ univ, [].get x ^ (-1) ^ ↑x = 1
tactic: rw [alternatingProd, Finset.prod_eq_one]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
⊢ ∀ x ∈ univ, [].get x ^ (-1) ^ ↑x = 1
state_after: no goals
tactic: rintro ⟨i, ⟨⟩⟩
state_before: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g : G
⊢ [g].alternatingProd = ∏ i : Fin [g].length, [g].get i ^ (-1) ^ ↑i
state_after: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g : G
⊢ g = ∏ i : Fin 1, [g].get i ^ (-1) ^ ↑i
tactic: show g = ∏ i : Fin 1, [g].get i ^ (-1 : ℤ) ^ (i : ℕ)
state_before: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g : G
⊢ g = ∏ i : Fin 1, [g].get i ^ (-1) ^ ↑i
state_after: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g : G
⊢ g = [g].get 0 ^ (-1) ^ ↑0 * ∏ i : Fin 0, [g].get i.succ ^ (-1) ^ ↑i.succ
tactic: rw [Fin.prod_univ_succ]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g : G
⊢ g = [g].get 0 ^ (-1) ^ ↑0 * ∏ i : Fin 0, [g].get i.succ ^ (-1) ^ ↑i.succ
state_after: no goals
tactic: simp
state_before: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g h : G
L : List G
⊢ g * h⁻¹ * ∏ i : Fin L.length, L.get i ^ (-1) ^ ↑i = ∏ i : Fin (L.length + 2), (g :: h :: L).get i ^ (-1) ^ ↑i
state_after: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g h : G
L : List G
⊢ g * (h⁻¹ * ∏ i : Fin L.length, L.get i ^ (-1) ^ ↑i) =
    (g :: h :: L).get 0 ^ (-1) ^ ↑0 *
      ((g :: h :: L).get (Fin.succ 0) ^ (-1) ^ ↑(Fin.succ 0) *
        ∏ i : Fin L.length, (g :: h :: L).get i.succ.succ ^ (-1) ^ ↑i.succ.succ)
tactic: rw [Fin.prod_univ_succ, Fin.prod_univ_succ, mul_assoc]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
inst✝ : CommGroup G
g h : G
L : List G
⊢ g * (h⁻¹ * ∏ i : Fin L.length, L.get i ^ (-1) ^ ↑i) =
    (g :: h :: L).get 0 ^ (-1) ^ ↑0 *
      ((g :: h :: L).get (Fin.succ 0) ^ (-1) ^ ↑(Fin.succ 0) *
        ∏ i : Fin L.length, (g :: h :: L).get i.succ.succ ^ (-1) ^ ↑i.succ.succ)
state_after: no goals
tactic: simp [pow_add]
Theorem: LocallyConvexSpace.ofBasisZero
File: Mathlib/Topology/Algebra/Module/LocallyConvex.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalAddGroup E
ι : Type u_3
b : ι → Set E
p : ι → Prop
hbasis : (𝓝 0).HasBasis p b
hconvex : ∀ (i : ι), p i → Convex 𝕜 (b i)
x : E
⊢ (𝓝 x).HasBasis ((fun x => p) x) ((fun x i => (fun x_1 => x + x_1) '' b i) x)
state_after: 𝕜 : Type u_1
E : Type u_2
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalAddGroup E
ι : Type u_3
b : ι → Set E
p : ι → Prop
hbasis : (𝓝 0).HasBasis p b
hconvex : ∀ (i : ι), p i → Convex 𝕜 (b i)
x : E
⊢ (map (fun x_1 => x + x_1) (𝓝 0)).HasBasis ((fun x => p) x) ((fun x i => (fun x_1 => x + x_1) '' b i) x)
tactic: rw [← map_add_left_nhds_zero]
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalAddGroup E
ι : Type u_3
b : ι → Set E
p : ι → Prop
hbasis : (𝓝 0).HasBasis p b
hconvex : ∀ (i : ι), p i → Convex 𝕜 (b i)
x : E
⊢ (map (fun x_1 => x + x_1) (𝓝 0)).HasBasis ((fun x => p) x) ((fun x i => (fun x_1 => x + x_1) '' b i) x)
state_after: no goals
tactic: exact hbasis.map _
Theorem: Interval.coe_dual
File: Mathlib/Order/Interval/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
κ : ι → Sort u_6
inst✝¹ : PartialOrder α
inst✝ : PartialOrder β
s✝ t : Interval α
a b : α
s : Interval α
⊢ ↑(dual s) = ⇑ofDual ⁻¹' ↑s
state_after: no goals
tactic: cases s with
  | bot => rfl
  | coe s₀ => exact NonemptyInterval.coe_dual s₀
Theorem: WittVector.mul_polyOfInterest_aux5
File: Mathlib/RingTheory/WittVector/MulCoeff.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝ : CommRing k
n : ℕ
⊢ ↑p ^ (n + 1) * polyOfInterest p n = remainder p n - wittPolyProdRemainder p (n + 1)
state_after: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝ : CommRing k
n : ℕ
⊢ ↑p ^ (n + 1) * wittMul p (n + 1) + ↑p ^ (n + 1) * (↑p ^ (n + 1) * X (0, n + 1) * X (1, n + 1)) =
    ↑p ^ (n + 1) * (X (0, n + 1) * (rename (Prod.mk 1)) (wittPolynomial p ℤ (n + 1))) +
      (↑p ^ (n + 1) * (X (1, n + 1) * (rename (Prod.mk 0)) (wittPolynomial p ℤ (n + 1))) +
        (remainder p n - wittPolyProdRemainder p (n + 1)))
tactic: simp only [polyOfInterest, mul_sub, mul_add, sub_eq_iff_eq_add']
state_before: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝ : CommRing k
n : ℕ
⊢ ↑p ^ (n + 1) * wittMul p (n + 1) + ↑p ^ (n + 1) * (↑p ^ (n + 1) * X (0, n + 1) * X (1, n + 1)) =
    ↑p ^ (n + 1) * (X (0, n + 1) * (rename (Prod.mk 1)) (wittPolynomial p ℤ (n + 1))) +
      (↑p ^ (n + 1) * (X (1, n + 1) * (rename (Prod.mk 0)) (wittPolynomial p ℤ (n + 1))) +
        (remainder p n - wittPolyProdRemainder p (n + 1)))
state_after: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝ : CommRing k
n : ℕ
⊢ -(↑p ^ (n + 1) * X (0, n + 1)) * (↑p ^ (n + 1) * X (1, n + 1)) +
            ↑p ^ (n + 1) * X (0, n + 1) * (rename (Prod.mk 1)) (wittPolynomial p ℤ (n + 1)) +
          ↑p ^ (n + 1) * X (1, n + 1) * (rename (Prod.mk 0)) (wittPolynomial p ℤ (n + 1)) +
        (remainder p n - wittPolyProdRemainder p (n + 1)) +
      ↑p ^ (n + 1) * (↑p ^ (n + 1) * X (0, n + 1) * X (1, n + 1)) =
    ↑p ^ (n + 1) * (X (0, n + 1) * (rename (Prod.mk 1)) (wittPolynomial p ℤ (n + 1))) +
      (↑p ^ (n + 1) * (X (1, n + 1) * (rename (Prod.mk 0)) (wittPolynomial p ℤ (n + 1))) +
        (remainder p n - wittPolyProdRemainder p (n + 1)))
tactic: rw [mul_polyOfInterest_aux4 p n]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝ : CommRing k
n : ℕ
⊢ -(↑p ^ (n + 1) * X (0, n + 1)) * (↑p ^ (n + 1) * X (1, n + 1)) +
            ↑p ^ (n + 1) * X (0, n + 1) * (rename (Prod.mk 1)) (wittPolynomial p ℤ (n + 1)) +
          ↑p ^ (n + 1) * X (1, n + 1) * (rename (Prod.mk 0)) (wittPolynomial p ℤ (n + 1)) +
        (remainder p n - wittPolyProdRemainder p (n + 1)) +
      ↑p ^ (n + 1) * (↑p ^ (n + 1) * X (0, n + 1) * X (1, n + 1)) =
    ↑p ^ (n + 1) * (X (0, n + 1) * (rename (Prod.mk 1)) (wittPolynomial p ℤ (n + 1))) +
      (↑p ^ (n + 1) * (X (1, n + 1) * (rename (Prod.mk 0)) (wittPolynomial p ℤ (n + 1))) +
        (remainder p n - wittPolyProdRemainder p (n + 1)))
state_after: no goals
tactic: ring
Theorem: Polynomial.cyclotomic.roots_eq_primitiveRoots_val
File: Mathlib/RingTheory/Polynomial/Cyclotomic/Roots.lean

Proof steps:
state_before: R : Type u_1
inst✝² : CommRing R
n : ℕ
inst✝¹ : IsDomain R
inst✝ : NeZero ↑n
⊢ (cyclotomic n R).roots = (primitiveRoots n R).val
state_after: no goals
tactic: rw [← cyclotomic.roots_to_finset_eq_primitiveRoots]
Theorem: Ordinal.nhds_left_eq_nhds
File: Mathlib/SetTheory/Ordinal/Topology.lean

Proof steps:
state_before: s : Set Ordinal.{u}
a✝ : Ordinal.{u}
a : Ordinal.{u_1}
⊢ 𝓝[≤] a = 𝓝 a
state_after: no goals
tactic: rw [← nhds_left_sup_nhds_right', nhds_right', sup_bot_eq]
Theorem: Ideal.iInf_sup_eq_top
File: Mathlib/RingTheory/Ideal/Operations.lean

Proof steps:
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ (⨅ i ∈ s, J i) ⊔ I = ⊤
state_after: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ ∀ i ∈ s, I ⊔ J i = ⊤
tactic: rw [sup_comm, sup_iInf_eq_top]
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ ∀ i ∈ s, I ⊔ J i = ⊤
state_after: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
i : ι
hi : i ∈ s
⊢ I ⊔ J i = ⊤
tactic: intro i hi
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
i : ι
hi : i ∈ s
⊢ I ⊔ J i = ⊤
state_after: no goals
tactic: rw [sup_comm, h i hi]
Theorem: Nat.ceil_eq_zero
File: Mathlib/Algebra/Order/Floor.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedSemiring α
inst✝ : FloorSemiring α
a : α
n : ℕ
⊢ ⌈a⌉₊ = 0 ↔ a ≤ 0
state_after: no goals
tactic: rw [← Nat.le_zero, ceil_le, Nat.cast_zero]
Theorem: UpperSet.mem_iInf_iff
File: Mathlib/Order/UpperLower/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : LE α
S : Set (UpperSet α)
s t : UpperSet α
a : α
f : ι → UpperSet α
⊢ a ∈ ⨅ i, f i ↔ ∃ i, a ∈ f i
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : LE α
S : Set (UpperSet α)
s t : UpperSet α
a : α
f : ι → UpperSet α
⊢ a ∈ ⋃ i, ↑(f i) ↔ ∃ i, a ∈ f i
tactic: rw [← SetLike.mem_coe, coe_iInf]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : LE α
S : Set (UpperSet α)
s t : UpperSet α
a : α
f : ι → UpperSet α
⊢ a ∈ ⋃ i, ↑(f i) ↔ ∃ i, a ∈ f i
state_after: no goals
tactic: exact mem_iUnion