ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Rel.interedges_empty_left
File: Mathlib/Combinatorics/SimpleGraph/Density.lean

Proof steps:
state_before: 𝕜 : Type u_1
ι : Type u_2
κ : Type u_3
α : Type u_4
β : Type u_5
inst✝¹ : LinearOrderedField 𝕜
r : α → β → Prop
inst✝ : (a : α) → DecidablePred (r a)
s s₁ s₂ : Finset α
t✝ t₁ t₂ : Finset β
a : α
b : β
δ : 𝕜
t : Finset β
⊢ interedges r ∅ t = ∅
state_after: no goals
tactic: rw [interedges, Finset.empty_product, filter_empty]
Theorem: EReal.image_coe_Iio
File: Mathlib/Data/Real/EReal.lean

Proof steps:
state_before: x : ℝ
⊢ Real.toEReal '' Iio x = Ioo ⊥ ↑x
state_after: x : ℝ
⊢ WithBot.some '' (WithTop.some '' Iio x) = Ioo ⊥ ↑x
tactic: refine (image_comp WithBot.some WithTop.some _).trans ?_
state_before: x : ℝ
⊢ WithBot.some '' (WithTop.some '' Iio x) = Ioo ⊥ ↑x
state_after: x : ℝ
⊢ Ioo ⊥ ↑↑x = Ioo ⊥ ↑x
tactic: rw [WithTop.image_coe_Iio, WithBot.image_coe_Iio]
state_before: x : ℝ
⊢ Ioo ⊥ ↑↑x = Ioo ⊥ ↑x
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Functor.IsHomological.mk'
File: Mathlib/CategoryTheory/Triangulated/HomologicalFunctor.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁴ : Category.{u_4, u_1} C
inst✝¹³ : HasZeroObject C
inst✝¹² : HasShift C ℤ
inst✝¹¹ : Preadditive C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : Category.{?u.5817, u_2} D
inst✝⁷ : HasZeroObject D
inst✝⁶ : HasShift D ℤ
inst✝⁵ : Preadditive D
inst✝⁴ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝³ : Pretriangulated D
inst✝² : Category.{u_5, u_3} A
inst✝¹ : Abelian A
F : C ⥤ A
inst✝ : F.PreservesZeroMorphisms
hF : ∀ (T : Triangle C) (hT : T ∈ distinguishedTriangles), ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
T : Triangle C
hT : T ∈ distinguishedTriangles
⊢ ((shortComplexOfDistTriangle T hT).map F).Exact
state_after: case intro.intro
C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁴ : Category.{u_4, u_1} C
inst✝¹³ : HasZeroObject C
inst✝¹² : HasShift C ℤ
inst✝¹¹ : Preadditive C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : Category.{?u.5817, u_2} D
inst✝⁷ : HasZeroObject D
inst✝⁶ : HasShift D ℤ
inst✝⁵ : Preadditive D
inst✝⁴ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝³ : Pretriangulated D
inst✝² : Category.{u_5, u_3} A
inst✝¹ : Abelian A
F : C ⥤ A
inst✝ : F.PreservesZeroMorphisms
hF : ∀ (T : Triangle C) (hT : T ∈ distinguishedTriangles), ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
T : Triangle C
hT : T ∈ distinguishedTriangles
T' : Triangle C
e : T ≅ T'
h' : ((shortComplexOfDistTriangle T' ⋯).map F).Exact
⊢ ((shortComplexOfDistTriangle T hT).map F).Exact
tactic: obtain ⟨T', e, h'⟩ := hF T hT
state_before: case intro.intro
C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁴ : Category.{u_4, u_1} C
inst✝¹³ : HasZeroObject C
inst✝¹² : HasShift C ℤ
inst✝¹¹ : Preadditive C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : Category.{?u.5817, u_2} D
inst✝⁷ : HasZeroObject D
inst✝⁶ : HasShift D ℤ
inst✝⁵ : Preadditive D
inst✝⁴ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝³ : Pretriangulated D
inst✝² : Category.{u_5, u_3} A
inst✝¹ : Abelian A
F : C ⥤ A
inst✝ : F.PreservesZeroMorphisms
hF : ∀ (T : Triangle C) (hT : T ∈ distinguishedTriangles), ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
T : Triangle C
hT : T ∈ distinguishedTriangles
T' : Triangle C
e : T ≅ T'
h' : ((shortComplexOfDistTriangle T' ⋯).map F).Exact
⊢ ((shortComplexOfDistTriangle T hT).map F).Exact
state_after: no goals
tactic: exact (ShortComplex.exact_iff_of_iso
      (F.mapShortComplex.mapIso ((shortComplexOfDistTriangleIsoOfIso e hT)))).2 h'
Theorem: deriv_const_mul_field
File: Mathlib/Analysis/Calculus/Deriv/Mul.lean

Proof steps:
state_before: 𝕜 : Type u
inst✝¹⁰ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : NormedSpace 𝕜 F
E : Type w
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
G : Type u_1
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace 𝕜 G
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_2
𝔸 : Type u_3
inst✝³ : NormedField 𝕜'
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕜 𝕜'
inst✝ : NormedAlgebra 𝕜 𝔸
c d : 𝕜 → 𝔸
c' d' : 𝔸
u✝ v : 𝕜 → 𝕜'
u : 𝕜'
⊢ deriv (fun y => u * v y) x = u * deriv v x
state_after: no goals
tactic: simp only [mul_comm u, deriv_mul_const_field]
Theorem: NNRat.addSubmonoid_closure_range_pow
File: Mathlib/Data/Rat/Star.lean

Proof steps:
state_before: n : ℕ
hn₀ : n ≠ 0
⊢ closure (range fun x => x ^ n) = ⊤
state_after: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x ∈ closure (range fun x => x ^ n)
tactic: refine (eq_top_iff' _).2 fun x ↦ ?_
state_before: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x ∈ closure (range fun x => x ^ n)
state_after: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x = (x.num * x.den ^ (n - 1)) • (↑x.den)⁻¹ ^ n
tactic: suffices x = (x.num * x.den ^ (n - 1)) • (x.den : ℚ≥0)⁻¹ ^ n by
    rw [this]
    exact nsmul_mem (subset_closure <| mem_range_self _) _
state_before: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x = (x.num * x.den ^ (n - 1)) • (↑x.den)⁻¹ ^ n
state_after: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x = ↑(x.num * x.den ^ (n - 1)) * (↑x.den)⁻¹ ^ n
tactic: rw [nsmul_eq_mul]
state_before: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x = ↑(x.num * x.den ^ (n - 1)) * (↑x.den)⁻¹ ^ n
state_after: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x = ↑x.num * ↑x.den ^ (n - 1) * (↑x.den)⁻¹ ^ n
tactic: push_cast
state_before: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ x = ↑x.num * ↑x.den ^ (n - 1) * (↑x.den)⁻¹ ^ n
state_after: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ ↑x.den ≠ 0

case ha
n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ ↑x.den ≠ 0

case h
n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ 1 ≤ n
tactic: rw [mul_assoc, pow_sub₀, pow_one, mul_right_comm, ← mul_pow, mul_inv_cancel, one_pow, one_mul,
    ← div_eq_mul_inv, num_div_den]
state_before: n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ ↑x.den ≠ 0

case ha
n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ ↑x.den ≠ 0

case h
n : ℕ
hn₀ : n ≠ 0
x : ℚ≥0
⊢ 1 ≤ n
state_after: no goals
tactic: all_goals simp [x.den_pos.ne', Nat.one_le_iff_ne_zero, *]
Theorem: AffineIsometryEquiv.dist_pointReflection_self
File: Mathlib/Analysis/NormedSpace/AffineIsometry.lean

Proof steps:
state_before: 𝕜 : Type u_1
V : Type u_2
V₁ : Type u_3
V₁' : Type u_4
V₂ : Type u_5
V₃ : Type u_6
V₄ : Type u_7
P₁ : Type u_8
P₁' : Type u_9
P : Type u_10
P₂ : Type u_11
P₃ : Type u_12
P₄ : Type u_13
inst✝²⁵ : NormedField 𝕜
inst✝²⁴ : SeminormedAddCommGroup V
inst✝²³ : NormedSpace 𝕜 V
inst✝²² : PseudoMetricSpace P
inst✝²¹ : NormedAddTorsor V P
inst✝²⁰ : SeminormedAddCommGroup V₁
inst✝¹⁹ : NormedSpace 𝕜 V₁
inst✝¹⁸ : PseudoMetricSpace P₁
inst✝¹⁷ : NormedAddTorsor V₁ P₁
inst✝¹⁶ : SeminormedAddCommGroup V₁'
inst✝¹⁵ : NormedSpace 𝕜 V₁'
inst✝¹⁴ : MetricSpace P₁'
inst✝¹³ : NormedAddTorsor V₁' P₁'
inst✝¹² : SeminormedAddCommGroup V₂
inst✝¹¹ : NormedSpace 𝕜 V₂
inst✝¹⁰ : PseudoMetricSpace P₂
inst✝⁹ : NormedAddTorsor V₂ P₂
inst✝⁸ : SeminormedAddCommGroup V₃
inst✝⁷ : NormedSpace 𝕜 V₃
inst✝⁶ : PseudoMetricSpace P₃
inst✝⁵ : NormedAddTorsor V₃ P₃
inst✝⁴ : SeminormedAddCommGroup V₄
inst✝³ : NormedSpace 𝕜 V₄
inst✝² : PseudoMetricSpace P₄
inst✝¹ : NormedAddTorsor V₄ P₄
e : P ≃ᵃⁱ[𝕜] P₂
α : Type u_14
inst✝ : TopologicalSpace α
x y : P
⊢ dist ((pointReflection 𝕜 x) y) y = ‖2‖ * dist x y
state_after: no goals
tactic: rw [dist_pointReflection_self', ← two_smul' 𝕜 (x -ᵥ y), norm_smul, ← dist_eq_norm_vsub V]
Theorem: range_vecMulLinear
File: Mathlib/LinearAlgebra/Matrix/ToLin.lean

Proof steps:
state_before: R : Type u_1
inst✝² : Semiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝¹ : Fintype m
inst✝ : DecidableEq m
M : Matrix m n R
⊢ LinearMap.range M.vecMulLinear = span R (Set.range M)
state_after: R : Type u_1
inst✝² : Semiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝¹ : Fintype m
inst✝ : DecidableEq m
M : Matrix m n R
this : DecidableEq m := Classical.decEq m
⊢ LinearMap.range M.vecMulLinear = span R (Set.range M)
tactic: letI := Classical.decEq m
state_before: R : Type u_1
inst✝² : Semiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝¹ : Fintype m
inst✝ : DecidableEq m
M : Matrix m n R
this : DecidableEq m := Classical.decEq m
⊢ LinearMap.range M.vecMulLinear = span R (Set.range M)
state_after: R : Type u_1
inst✝² : Semiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝¹ : Fintype m
inst✝ : DecidableEq m
M : Matrix m n R
this : DecidableEq m := Classical.decEq m
⊢ span R (Set.range fun x => Pi.single x 1 ᵥ* M) = span R (Set.range M)
tactic: simp_rw [range_eq_map, ← iSup_range_stdBasis, Submodule.map_iSup, range_eq_map, ←
    Ideal.span_singleton_one, Ideal.span, Submodule.map_span, image_image, image_singleton,
    Matrix.vecMulLinear_apply, iSup_span, range_eq_iUnion, iUnion_singleton_eq_range,
    LinearMap.stdBasis, coe_single]
state_before: R : Type u_1
inst✝² : Semiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝¹ : Fintype m
inst✝ : DecidableEq m
M : Matrix m n R
this : DecidableEq m := Classical.decEq m
⊢ span R (Set.range fun x => Pi.single x 1 ᵥ* M) = span R (Set.range M)
state_after: R : Type u_1
inst✝² : Semiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝¹ : Fintype m
inst✝ : DecidableEq m
M : Matrix m n R
this : DecidableEq m := Classical.decEq m
⊢ span R
      (Set.range fun x x_1 =>
        let j := x_1;
        Pi.single x 1 ⬝ᵥ fun i => M i j) =
    span R (Set.range M)
tactic: unfold vecMul
state_before: R : Type u_1
inst✝² : Semiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝¹ : Fintype m
inst✝ : DecidableEq m
M : Matrix m n R
this : DecidableEq m := Classical.decEq m
⊢ span R
      (Set.range fun x x_1 =>
        let j := x_1;
        Pi.single x 1 ⬝ᵥ fun i => M i j) =
    span R (Set.range M)
state_after: no goals
tactic: simp_rw [single_dotProduct, one_mul]
Theorem: rootsOfUnity_one
File: Mathlib/RingTheory/RootsOfUnity/Basic.lean

Proof steps:
state_before: M✝ : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝³ : CommMonoid M✝
inst✝² : CommMonoid N
inst✝¹ : DivisionCommMonoid G
k l : ℕ+
M : Type u_7
inst✝ : CommMonoid M
⊢ rootsOfUnity 1 M = ⊥
state_after: case h
M✝ : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝³ : CommMonoid M✝
inst✝² : CommMonoid N
inst✝¹ : DivisionCommMonoid G
k l : ℕ+
M : Type u_7
inst✝ : CommMonoid M
x✝ : Mˣ
⊢ x✝ ∈ rootsOfUnity 1 M ↔ x✝ ∈ ⊥
tactic: ext
state_before: case h
M✝ : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝³ : CommMonoid M✝
inst✝² : CommMonoid N
inst✝¹ : DivisionCommMonoid G
k l : ℕ+
M : Type u_7
inst✝ : CommMonoid M
x✝ : Mˣ
⊢ x✝ ∈ rootsOfUnity 1 M ↔ x✝ ∈ ⊥
state_after: no goals
tactic: simp
Theorem: IsLindelof.elim_countable_subcover_image
File: Mathlib/Topology/Compactness/Lindelof.lean

Proof steps:
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ i ∈ b, IsOpen (c i)
hc₂ : s ⊆ ⋃ i ∈ b, c i
⊢ ∃ b' ⊆ b, b'.Countable ∧ s ⊆ ⋃ i ∈ b', c i
state_after: X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
⊢ ∃ b' ⊆ b, b'.Countable ∧ s ⊆ ⋃ i ∈ b', c i
tactic: simp only [Subtype.forall', biUnion_eq_iUnion] at hc₁ hc₂
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
⊢ ∃ b' ⊆ b, b'.Countable ∧ s ⊆ ⋃ i ∈ b', c i
state_after: case intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
d : Set ↑b
hd : d.Countable ∧ s ⊆ ⋃ i ∈ d, c ↑i
⊢ ∃ b' ⊆ b, b'.Countable ∧ s ⊆ ⋃ i ∈ b', c i
tactic: rcases hs.elim_countable_subcover (fun i ↦ c i : b → Set X) hc₁ hc₂ with ⟨d, hd⟩
state_before: case intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
d : Set ↑b
hd : d.Countable ∧ s ⊆ ⋃ i ∈ d, c ↑i
⊢ ∃ b' ⊆ b, b'.Countable ∧ s ⊆ ⋃ i ∈ b', c i
state_after: case intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
d : Set ↑b
hd : d.Countable ∧ s ⊆ ⋃ i ∈ d, c ↑i
⊢ s ⊆ ⋃ i ∈ Subtype.val '' d, c i
tactic: refine ⟨Subtype.val '' d, by simp, Countable.image hd.1 Subtype.val, ?_⟩
state_before: case intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
d : Set ↑b
hd : d.Countable ∧ s ⊆ ⋃ i ∈ d, c ↑i
⊢ s ⊆ ⋃ i ∈ Subtype.val '' d, c i
state_after: case intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
d : Set ↑b
hd : d.Countable ∧ s ⊆ ⋃ i ∈ d, c ↑i
⊢ s ⊆ ⋃ y ∈ d, c ↑y
tactic: rw [biUnion_image]
state_before: case intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t : Set X
b : Set ι
c : ι → Set X
hs : IsLindelof s
hc₁ : ∀ (x : { a // a ∈ b }), IsOpen (c ↑x)
hc₂ : s ⊆ ⋃ x, c ↑x
d : Set ↑b
hd : d.Countable ∧ s ⊆ ⋃ i ∈ d, c ↑i
⊢ s ⊆ ⋃ y ∈ d, c ↑y
state_after: no goals
tactic: exact hd.2
Theorem: Mathlib.Tactic.Ring.zero_pow
File: Mathlib/Tactic/Ring/Basic.lean

Proof steps:
state_before: u✝ : Lean.Level
arg : Q(Type u✝)
sα✝ : Q(CommSemiring «$arg»)
u : Lean.Level
α : Q(Type u)
sα : Q(CommSemiring «$α»)
R : Type u_1
inst✝ : CommSemiring R
a a' a₁ a₂ a₃ b✝¹ b' b₁ b₂ b₃ c c₁ c₂ : R
b✝ b : ℕ
x✝ : 0 < b + 1
⊢ 0 ^ (b + 1) = 0
state_after: no goals
tactic: simp [pow_succ]
Theorem: mul_self_eq_one_iff
File: Mathlib/Algebra/Ring/Commute.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : NonAssocRing R
inst✝ : NoZeroDivisors R
a : R
⊢ a * a = 1 ↔ a = 1 ∨ a = -1
state_after: no goals
tactic: rw [← (Commute.one_right a).mul_self_eq_mul_self_iff, mul_one]
Theorem: FreeAddMonoid.hom_eq
File: Mathlib/Algebra/FreeMonoid/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
M : Type u_4
inst✝¹ : Monoid M
N : Type u_5
inst✝ : Monoid N
f g : FreeMonoid α →* M
h : ∀ (x : α), f (of x) = g (of x)
l : FreeMonoid α
x : α
xs : FreeMonoid α
hxs : f xs = g xs
⊢ f (of x * xs) = g (of x * xs)
state_after: no goals
tactic: simp only [h, hxs, MonoidHom.map_mul]
Theorem: List.reverse_foldl
File: Mathlib/Data/List/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
⊢ (foldl (fun t h => h :: t) [] l).reverse = l
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
⊢ (foldr cons [] l.reverse).reverse = l
tactic: rw [← foldr_reverse]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
⊢ (foldr cons [] l.reverse).reverse = l
state_after: no goals
tactic: simp only [foldr_self_append, append_nil, reverse_reverse]
Theorem: WeierstrassCurve.Φ_two
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean

Proof steps:
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ W.Φ 2 = X ^ 4 - C W.b₄ * X ^ 2 - C (2 * W.b₆) * X - C W.b₈
state_after: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ X * 1 ^ 2 * (C 4 * X ^ 3 + C W.b₂ * X ^ 2 + C (2 * W.b₄) * X + C W.b₆) -
      (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈) * 1 =
    X ^ 4 - C W.b₄ * X ^ 2 - C (2 * W.b₆) * X - C W.b₈
tactic: erw [Φ_ofNat, preΨ'_two, if_neg Nat.not_even_one, Ψ₂Sq, preΨ'_three, preΨ'_one, mul_one, Ψ₃]
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ X * 1 ^ 2 * (C 4 * X ^ 3 + C W.b₂ * X ^ 2 + C (2 * W.b₄) * X + C W.b₆) -
      (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈) * 1 =
    X ^ 4 - C W.b₄ * X ^ 2 - C (2 * W.b₆) * X - C W.b₈
state_after: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ X * 1 ^ 2 * (4 * X ^ 3 + C W.b₂ * X ^ 2 + 2 * C W.b₄ * X + C W.b₆) -
      (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈) * 1 =
    X ^ 4 - C W.b₄ * X ^ 2 - 2 * C W.b₆ * X - C W.b₈
tactic: C_simp
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
⊢ X * 1 ^ 2 * (4 * X ^ 3 + C W.b₂ * X ^ 2 + 2 * C W.b₄ * X + C W.b₆) -
      (3 * X ^ 4 + C W.b₂ * X ^ 3 + 3 * C W.b₄ * X ^ 2 + 3 * C W.b₆ * X + C W.b₈) * 1 =
    X ^ 4 - C W.b₄ * X ^ 2 - 2 * C W.b₆ * X - C W.b₈
state_after: no goals
tactic: ring1
Theorem: StieltjesFunction.iInf_Ioi_eq
File: Mathlib/MeasureTheory/Measure/Stieltjes.lean

Proof steps:
state_before: f✝ f : StieltjesFunction
x : ℝ
⊢ ⨅ r, ↑f ↑r = ↑f x
state_after: f✝ f : StieltjesFunction
x : ℝ
⊢ rightLim (↑f) x = ⨅ r, ↑f ↑r
tactic: suffices Function.rightLim f x = ⨅ r : Ioi x, f r by rw [← this, f.rightLim_eq]
state_before: f✝ f : StieltjesFunction
x : ℝ
⊢ rightLim (↑f) x = ⨅ r, ↑f ↑r
state_after: f✝ f : StieltjesFunction
x : ℝ
⊢ 𝓝[>] x ≠ ⊥
tactic: rw [f.mono.rightLim_eq_sInf, sInf_image']
state_before: f✝ f : StieltjesFunction
x : ℝ
⊢ 𝓝[>] x ≠ ⊥
state_after: f✝ f : StieltjesFunction
x : ℝ
⊢ (𝓝[>] x).NeBot
tactic: rw [← neBot_iff]
state_before: f✝ f : StieltjesFunction
x : ℝ
⊢ (𝓝[>] x).NeBot
state_after: no goals
tactic: infer_instance
Theorem: Real.arctan_ne_mul_pi_div_two
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Arctan.lean

Proof steps:
state_before: x : ℝ
⊢ ∀ (k : ℤ), arctan x ≠ (2 * ↑k + 1) * π / 2
state_after: x : ℝ
this : ∃ k, arctan x = (2 * ↑k + 1) * π / 2
⊢ False
tactic: by_contra!
state_before: x : ℝ
this : ∃ k, arctan x = (2 * ↑k + 1) * π / 2
⊢ False
state_after: case intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
⊢ False
tactic: obtain ⟨k, h⟩ := this
state_before: case intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
⊢ False
state_after: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : -(π / 2) < arctan x
ub : arctan x < π / 2
⊢ False
tactic: obtain ⟨lb, ub⟩ := arctan_mem_Ioo x
state_before: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : -(π / 2) < arctan x
ub : arctan x < π / 2
⊢ False
state_after: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : -1 < 2 * ↑k + 1
ub : arctan x < π / 2
⊢ False
tactic: rw [h, neg_eq_neg_one_mul, mul_div_assoc, mul_lt_mul_right (by positivity)] at lb
state_before: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : -1 < 2 * ↑k + 1
ub : arctan x < π / 2
⊢ False
state_after: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : -1 < 2 * ↑k + 1
ub : 2 * ↑k + 1 < 1
⊢ False
tactic: rw [h, ← one_mul (π / 2), mul_div_assoc, mul_lt_mul_right (by positivity)] at ub
state_before: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : -1 < 2 * ↑k + 1
ub : 2 * ↑k + 1 < 1
⊢ False
state_after: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : Int.negSucc 0 < 2 * k + 1
ub : 2 * k + 1 < 1
⊢ False
tactic: norm_cast at lb ub
state_before: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
lb : Int.negSucc 0 < 2 * k + 1
ub : 2 * k + 1 < 1
⊢ False
state_after: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
ub : 2 * k + 1 < 1
lb : -1 < 2 * k + 1
⊢ False
tactic: change -1 < _ at lb
state_before: case intro.intro
x : ℝ
k : ℤ
h : arctan x = (2 * ↑k + 1) * π / 2
ub : 2 * k + 1 < 1
lb : -1 < 2 * k + 1
⊢ False
state_after: no goals
tactic: omega
Theorem: Real.isLittleO_const_log_atTop
File: Mathlib/Analysis/SpecialFunctions/Log/Basic.lean

Proof steps:
state_before: x y c : ℝ
⊢ (fun x => c) =o[atTop] log
state_after: x y c : ℝ
⊢ ∀ᶠ (x : ℝ) in atTop, log x = 0 → c = 0
tactic: refine Asymptotics.isLittleO_of_tendsto' ?_
    <| Tendsto.div_atTop (a := c) (by simp) tendsto_log_atTop
state_before: x y c : ℝ
⊢ ∀ᶠ (x : ℝ) in atTop, log x = 0 → c = 0
state_after: case h
x✝ y c x : ℝ
hx : 1 < x
⊢ log x = 0 → c = 0
tactic: filter_upwards [eventually_gt_atTop 1] with x hx
state_before: case h
x✝ y c x : ℝ
hx : 1 < x
⊢ log x = 0 → c = 0
state_after: no goals
tactic: aesop (add safe forward log_pos)
Theorem: Module.finite_dual_iff
File: Mathlib/LinearAlgebra/Dual.lean

Proof steps:
state_before: K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
⊢ Finite K (Dual K V) ↔ Finite K V
state_after: case mp
K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
h : Finite K (Dual K V)
⊢ Finite K V

case mpr
K : Type uK
V : Type uV
inst✝³ : CommRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
h : Finite K V
⊢ Finite K (Dual K V)
tactic: constructor <;> intro h
Theorem: MonotoneOn.integral_le_sum
File: Mathlib/Analysis/SumIntegralComparisons.lean

Proof steps:
state_before: x₀ : ℝ
a b : ℕ
f : ℝ → ℝ
hf : MonotoneOn f (Icc x₀ (x₀ + ↑a))
⊢ ∫ (x : ℝ) in x₀..x₀ + ↑a, f x ≤ ∑ i ∈ Finset.range a, f (x₀ + ↑(i + 1))
state_after: x₀ : ℝ
a b : ℕ
f : ℝ → ℝ
hf : MonotoneOn f (Icc x₀ (x₀ + ↑a))
⊢ ∑ x ∈ Finset.range a, -f (x₀ + ↑(x + 1)) ≤ ∫ (x : ℝ) in x₀..x₀ + ↑a, -f x
tactic: rw [← neg_le_neg_iff, ← Finset.sum_neg_distrib, ← intervalIntegral.integral_neg]
state_before: x₀ : ℝ
a b : ℕ
f : ℝ → ℝ
hf : MonotoneOn f (Icc x₀ (x₀ + ↑a))
⊢ ∑ x ∈ Finset.range a, -f (x₀ + ↑(x + 1)) ≤ ∫ (x : ℝ) in x₀..x₀ + ↑a, -f x
state_after: no goals
tactic: exact hf.neg.sum_le_integral
Theorem: Int.toNat_add_toNat_neg_eq_norm
File: Mathlib/Analysis/NormedSpace/Int.lean

Proof steps:
state_before: n : ℤ
⊢ ↑n.toNat + ↑(-n).toNat = ‖n‖
state_after: no goals
tactic: simpa only [NNReal.coe_natCast, NNReal.coe_add] using
    congrArg NNReal.toReal (toNat_add_toNat_neg_eq_nnnorm n)
Theorem: smul_lt_of_lt_one_left
File: Mathlib/Algebra/Order/Module/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
a a₁ a₂ : α
b b₁ b₂ : β
inst✝⁶ : Monoid α
inst✝⁵ : Zero α
inst✝⁴ : Zero β
inst✝³ : MulAction α β
inst✝² : Preorder α
inst✝¹ : Preorder β
inst✝ : SMulPosStrictMono α β
hb : 0 < b
h : a < 1
⊢ a • b < b
state_after: no goals
tactic: simpa only [one_smul] using smul_lt_smul_of_pos_right h hb
Theorem: CategoryTheory.extendFan_pt
File: Mathlib/CategoryTheory/Limits/Constructions/FiniteProductsOfBinaryProducts.lean

Proof steps:
state_before: J : Type v
inst✝² : SmallCategory J
C : Type u
inst✝¹ : Category.{v, u} C
D : Type u'
inst✝ : Category.{v', u'} D
n : ℕ
f : Fin (n + 1) → C
c₁ : Fan fun i => f i.succ
c₂ : BinaryFan (f 0) c₁.pt
⊢ (b : Fin (n + 1)) → c₂.pt ⟶ f b
state_after: case refine_1
J : Type v
inst✝² : SmallCategory J
C : Type u
inst✝¹ : Category.{v, u} C
D : Type u'
inst✝ : Category.{v', u'} D
n : ℕ
f : Fin (n + 1) → C
c₁ : Fan fun i => f i.succ
c₂ : BinaryFan (f 0) c₁.pt
⊢ c₂.pt ⟶ f 0

case refine_2
J : Type v
inst✝² : SmallCategory J
C : Type u
inst✝¹ : Category.{v, u} C
D : Type u'
inst✝ : Category.{v', u'} D
n : ℕ
f : Fin (n + 1) → C
c₁ : Fan fun i => f i.succ
c₂ : BinaryFan (f 0) c₁.pt
⊢ (i : Fin n) → c₂.pt ⟶ f i.succ
tactic: refine Fin.cases ?_ ?_
Theorem: Set.image_const_add_Iic
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ (fun x => a + x) '' Iic b = Iic (a + b)
state_after: no goals
tactic: simp [add_comm]