ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Real.tan_pi_div_four
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

Proof steps:
state_before: ⊢ tan (π / 4) = 1
state_after: ⊢ √2 / 2 / (√2 / 2) = 1
tactic: rw [tan_eq_sin_div_cos, cos_pi_div_four, sin_pi_div_four]
state_before: ⊢ √2 / 2 / (√2 / 2) = 1
state_after: h : √2 / 2 > 0
⊢ √2 / 2 / (√2 / 2) = 1
tactic: have h : √2 / 2 > 0 := by positivity
state_before: h : √2 / 2 > 0
⊢ √2 / 2 / (√2 / 2) = 1
state_after: no goals
tactic: exact div_self (ne_of_gt h)
Theorem: ProbabilityTheory.Kernel.IndepSets.symm
File: Mathlib/Probability/Independence/Kernel.lean

Proof steps:
state_before: α : Type u_1
Ω : Type u_2
ι : Type u_3
_mα : MeasurableSpace α
_mΩ : MeasurableSpace Ω
κ : Kernel α Ω
μ : Measure α
s₁ s₂ : Set (Set Ω)
h : IndepSets s₁ s₂ κ μ
⊢ IndepSets s₂ s₁ κ μ
state_after: α : Type u_1
Ω : Type u_2
ι : Type u_3
_mα : MeasurableSpace α
_mΩ : MeasurableSpace Ω
κ : Kernel α Ω
μ : Measure α
s₁ s₂ : Set (Set Ω)
h : IndepSets s₁ s₂ κ μ
t1 t2 : Set Ω
ht1 : t1 ∈ s₂
ht2 : t2 ∈ s₁
⊢ ∀ᵐ (a : α) ∂μ, (κ a) (t1 ∩ t2) = (κ a) t1 * (κ a) t2
tactic: intros t1 t2 ht1 ht2
state_before: α : Type u_1
Ω : Type u_2
ι : Type u_3
_mα : MeasurableSpace α
_mΩ : MeasurableSpace Ω
κ : Kernel α Ω
μ : Measure α
s₁ s₂ : Set (Set Ω)
h : IndepSets s₁ s₂ κ μ
t1 t2 : Set Ω
ht1 : t1 ∈ s₂
ht2 : t2 ∈ s₁
⊢ ∀ᵐ (a : α) ∂μ, (κ a) (t1 ∩ t2) = (κ a) t1 * (κ a) t2
state_after: case h
α : Type u_1
Ω : Type u_2
ι : Type u_3
_mα : MeasurableSpace α
_mΩ : MeasurableSpace Ω
κ : Kernel α Ω
μ : Measure α
s₁ s₂ : Set (Set Ω)
h : IndepSets s₁ s₂ κ μ
t1 t2 : Set Ω
ht1 : t1 ∈ s₂
ht2 : t2 ∈ s₁
a : α
ha : (κ a) (t2 ∩ t1) = (κ a) t2 * (κ a) t1
⊢ (κ a) (t1 ∩ t2) = (κ a) t1 * (κ a) t2
tactic: filter_upwards [h t2 t1 ht2 ht1] with a ha
state_before: case h
α : Type u_1
Ω : Type u_2
ι : Type u_3
_mα : MeasurableSpace α
_mΩ : MeasurableSpace Ω
κ : Kernel α Ω
μ : Measure α
s₁ s₂ : Set (Set Ω)
h : IndepSets s₁ s₂ κ μ
t1 t2 : Set Ω
ht1 : t1 ∈ s₂
ht2 : t2 ∈ s₁
a : α
ha : (κ a) (t2 ∩ t1) = (κ a) t2 * (κ a) t1
⊢ (κ a) (t1 ∩ t2) = (κ a) t1 * (κ a) t2
state_after: no goals
tactic: rwa [Set.inter_comm, mul_comm]
Theorem: neg_add_neg_iff_lt
File: Mathlib/Algebra/Order/Group/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LT α
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c : α
⊢ a * b⁻¹ < 1 ↔ a < b
state_after: no goals
tactic: rw [← mul_lt_mul_iff_right b, inv_mul_cancel_right, one_mul]
Theorem: Finsupp.toAList_keys_toFinset
File: Mathlib/Data/Finsupp/AList.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
inst✝¹ : Zero M
inst✝ : DecidableEq α
f : α →₀ M
⊢ f.toAList.keys.toFinset = f.support
state_after: case a
α : Type u_1
M : Type u_2
inst✝¹ : Zero M
inst✝ : DecidableEq α
f : α →₀ M
a✝ : α
⊢ a✝ ∈ f.toAList.keys.toFinset ↔ a✝ ∈ f.support
tactic: ext
state_before: case a
α : Type u_1
M : Type u_2
inst✝¹ : Zero M
inst✝ : DecidableEq α
f : α →₀ M
a✝ : α
⊢ a✝ ∈ f.toAList.keys.toFinset ↔ a✝ ∈ f.support
state_after: no goals
tactic: simp [toAList, AList.mem_keys, AList.keys, List.keys]
Theorem: Rat.inv_natCast_den
File: Mathlib/Data/Rat/Lemmas.lean

Proof steps:
state_before: a : ℕ
⊢ (↑a)⁻¹.den = if a = 0 then 1 else a
state_after: no goals
tactic: simpa [-inv_intCast_den, ofInt_eq_cast] using inv_intCast_den a
Theorem: RingSubgroupsBasis.hasBasis_nhds
File: Mathlib/Topology/Algebra/Nonarchimedean/Bases.lean

Proof steps:
state_before: A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
⊢ ∀ (t : Set A), t ∈ 𝓝 a ↔ ∃ i, True ∧ {b | b - a ∈ B i} ⊆ t
state_after: A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ s ∈ 𝓝 a ↔ ∃ i, True ∧ {b | b - a ∈ B i} ⊆ s
tactic: intro s
state_before: A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ s ∈ 𝓝 a ↔ ∃ i, True ∧ {b | b - a ∈ B i} ⊆ s
state_after: A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ (∃ i ∈ RingFilterBasis.toAddGroupFilterBasis, (fun y => a + y) '' i ⊆ s) ↔ ∃ i, True ∧ {b | b - a ∈ B i} ⊆ s
tactic: rw [(hB.toRingFilterBasis.toAddGroupFilterBasis.nhds_hasBasis a).mem_iff]
state_before: A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ (∃ i ∈ RingFilterBasis.toAddGroupFilterBasis, (fun y => a + y) '' i ⊆ s) ↔ ∃ i, True ∧ {b | b - a ∈ B i} ⊆ s
state_after: A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ (∃ i ∈ RingFilterBasis.toAddGroupFilterBasis, (fun y => a + y) '' i ⊆ s) ↔ ∃ i, {b | b - a ∈ B i} ⊆ s
tactic: simp only [true_and]
state_before: A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ (∃ i ∈ RingFilterBasis.toAddGroupFilterBasis, (fun y => a + y) '' i ⊆ s) ↔ ∃ i, {b | b - a ∈ B i} ⊆ s
state_after: case mp
A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ (∃ i ∈ RingFilterBasis.toAddGroupFilterBasis, (fun y => a + y) '' i ⊆ s) → ∃ i, {b | b - a ∈ B i} ⊆ s

case mpr
A : Type u_1
ι : Type u_2
inst✝¹ : Ring A
inst✝ : Nonempty ι
B : ι → AddSubgroup A
hB : RingSubgroupsBasis B
a : A
s : Set A
⊢ (∃ i, {b | b - a ∈ B i} ⊆ s) → ∃ i ∈ RingFilterBasis.toAddGroupFilterBasis, (fun y => a + y) '' i ⊆ s
tactic: constructor
Theorem: Substring.ValidFor.toIterator
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

Proof steps:
state_before: l m r : List Char
x✝ : Substring
h : ValidFor l m r x✝
⊢ Iterator.ValidFor l.reverse (m ++ r) x✝.toIterator
state_after: l m r : List Char
x✝ : Substring
h : ValidFor l m r x✝
⊢ Iterator.ValidFor l.reverse (m ++ r) { s := x✝.str, i := x✝.startPos }
tactic: simp only [Substring.toIterator]
state_before: l m r : List Char
x✝ : Substring
h : ValidFor l m r x✝
⊢ Iterator.ValidFor l.reverse (m ++ r) { s := x✝.str, i := x✝.startPos }
state_after: no goals
tactic: exact .of_eq _ (by simp [h.str, List.reverseAux_eq]) (by simp [h.startPos])
Theorem: RingHom.isIntegral_stableUnderBaseChange
File: Mathlib/RingTheory/RingHom/Integral.lean

Proof steps:
state_before: ⊢ StableUnderBaseChange fun {R S} [CommRing R] [CommRing S] f => f.IsIntegral
state_after: ⊢ ∀ ⦃R S T : Type u_1⦄ [inst : CommRing R] [inst_1 : CommRing S] [inst_2 : CommRing T] [inst_3 : Algebra R S]
    [inst_4 : Algebra R T], (algebraMap R T).IsIntegral → includeLeftRingHom.IsIntegral
tactic: refine StableUnderBaseChange.mk _ isIntegral_respectsIso ?_
state_before: ⊢ ∀ ⦃R S T : Type u_1⦄ [inst : CommRing R] [inst_1 : CommRing S] [inst_2 : CommRing T] [inst_3 : Algebra R S]
    [inst_4 : Algebra R T], (algebraMap R T).IsIntegral → includeLeftRingHom.IsIntegral
state_after: R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ includeLeftRingHom.IsIntegralElem x
tactic: introv h x
state_before: R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ includeLeftRingHom.IsIntegralElem x
state_after: case refine_1
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ includeLeftRingHom.IsIntegralElem 0

case refine_2
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ ∀ (x : S) (y : T), includeLeftRingHom.IsIntegralElem (x ⊗ₜ[R] y)

case refine_3
R S T : Type u_1
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
h : (algebraMap R T).IsIntegral
x : S ⊗[R] T
⊢ ∀ (x y : S ⊗[R] T),
    includeLeftRingHom.IsIntegralElem x →
      includeLeftRingHom.IsIntegralElem y → includeLeftRingHom.IsIntegralElem (x + y)
tactic: refine TensorProduct.induction_on x ?_ ?_ ?_
Theorem: Matroid.Base.ncard_eq_ncard_of_base
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
B B₁ B₂ : Set α
hB₁ : M.Base B₁
hB₂ : M.Base B₂
⊢ B₁.ncard = B₂.ncard
state_after: no goals
tactic: rw [ncard_def B₁, hB₁.card_eq_card_of_base hB₂, ← ncard_def]
Theorem: LowerSet.mem_sSup_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 (LowerSet α)
s t : LowerSet α
a : α
⊢ (∃ i, ∃ (_ : i ∈ S), a ∈ ↑i) ↔ ∃ s ∈ S, a ∈ s
state_after: no goals
tactic: simp only [exists_prop, SetLike.mem_coe]
Theorem: FormalMultilinearSeries.changeOriginSeries_summable_aux₂
File: Mathlib/Analysis/Analytic/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x y : E
r R : ℝ≥0
hr : ↑r < p.radius
k : ℕ
⊢ Summable fun s => ‖p (k + s.fst)‖₊ * r ^ s.fst
state_after: case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x y : E
r R : ℝ≥0
hr : ↑r < p.radius
k : ℕ
r' : ℝ≥0
h0 : 0 < r'
hr' : ↑r + ↑r' < p.radius
⊢ Summable fun s => ‖p (k + s.fst)‖₊ * r ^ s.fst
tactic: rcases ENNReal.lt_iff_exists_add_pos_lt.1 hr with ⟨r', h0, hr'⟩
state_before: case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x y : E
r R : ℝ≥0
hr : ↑r < p.radius
k : ℕ
r' : ℝ≥0
h0 : 0 < r'
hr' : ↑r + ↑r' < p.radius
⊢ Summable fun s => ‖p (k + s.fst)‖₊ * r ^ s.fst
state_after: no goals
tactic: simpa only [mul_inv_cancel_right₀ (pow_pos h0 _).ne'] using
    ((NNReal.summable_sigma.1 (p.changeOriginSeries_summable_aux₁ hr')).1 k).mul_right (r' ^ k)⁻¹
Theorem: Ideal.span_singleton_absNorm
File: Mathlib/RingTheory/Ideal/Norm.lean

Proof steps:
state_before: S : Type u_1
inst✝⁵ : CommRing S
inst✝⁴ : IsDomain S
inst✝³ : Nontrivial S
inst✝² : IsDedekindDomain S
inst✝¹ : Module.Free ℤ S
inst✝ : Module.Finite ℤ S
I : Ideal S
hI : Nat.Prime (absNorm I)
⊢ span {↑(absNorm I)} = comap (algebraMap ℤ S) I
state_after: S : Type u_1
inst✝⁵ : CommRing S
inst✝⁴ : IsDomain S
inst✝³ : Nontrivial S
inst✝² : IsDedekindDomain S
inst✝¹ : Module.Free ℤ S
inst✝ : Module.Finite ℤ S
I : Ideal S
hI : Nat.Prime (absNorm I)
this : (span {↑(absNorm I)}).IsPrime
⊢ span {↑(absNorm I)} = comap (algebraMap ℤ S) I
tactic: have : Ideal.IsPrime (Ideal.span (singleton (Ideal.absNorm I : ℤ))) := by
    rwa [Ideal.span_singleton_prime (Int.ofNat_ne_zero.mpr hI.ne_zero), ← Nat.prime_iff_prime_int]
state_before: S : Type u_1
inst✝⁵ : CommRing S
inst✝⁴ : IsDomain S
inst✝³ : Nontrivial S
inst✝² : IsDedekindDomain S
inst✝¹ : Module.Free ℤ S
inst✝ : Module.Finite ℤ S
I : Ideal S
hI : Nat.Prime (absNorm I)
this : (span {↑(absNorm I)}).IsPrime
⊢ span {↑(absNorm I)} = comap (algebraMap ℤ S) I
state_after: case hJ
S : Type u_1
inst✝⁵ : CommRing S
inst✝⁴ : IsDomain S
inst✝³ : Nontrivial S
inst✝² : IsDedekindDomain S
inst✝¹ : Module.Free ℤ S
inst✝ : Module.Finite ℤ S
I : Ideal S
hI : Nat.Prime (absNorm I)
this : (span {↑(absNorm I)}).IsPrime
⊢ comap (algebraMap ℤ S) I ≠ ⊤

case IJ
S : Type u_1
inst✝⁵ : CommRing S
inst✝⁴ : IsDomain S
inst✝³ : Nontrivial S
inst✝² : IsDedekindDomain S
inst✝¹ : Module.Free ℤ S
inst✝ : Module.Finite ℤ S
I : Ideal S
hI : Nat.Prime (absNorm I)
this : (span {↑(absNorm I)}).IsPrime
⊢ span {↑(absNorm I)} ≤ comap (algebraMap ℤ S) I

S : Type u_1
inst✝⁵ : CommRing S
inst✝⁴ : IsDomain S
inst✝³ : Nontrivial S
inst✝² : IsDedekindDomain S
inst✝¹ : Module.Free ℤ S
inst✝ : Module.Finite ℤ S
I : Ideal S
hI : Nat.Prime (absNorm I)
this : (span {↑(absNorm I)}).IsPrime
⊢ span {↑(absNorm I)} ≠ ⊥
tactic: apply (this.isMaximal _).eq_of_le
Theorem: WittVector.RecursionBase.solution_spec'
File: Mathlib/RingTheory/WittVector/FrobeniusFractionField.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
⊢ solution p a₁ a₂ ^ p * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
state_after: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
⊢ solution p a₁ a₂ ^ p * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
tactic: have := solution_spec p a₁ a₂
state_before: p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
⊢ solution p a₁ a₂ ^ p * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
state_after: case intro
p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
q : ℕ
hq : p = q.succ
⊢ solution p a₁ a₂ ^ p * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
tactic: cases' Nat.exists_eq_succ_of_ne_zero hp.out.ne_zero with q hq
state_before: case intro
p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
q : ℕ
hq : p = q.succ
⊢ solution p a₁ a₂ ^ p * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
state_after: case intro
p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
q : ℕ
hq : p = q.succ
hq' : q = p - 1
⊢ solution p a₁ a₂ ^ p * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
tactic: have hq' : q = p - 1 := by simp only [hq, tsub_zero, Nat.succ_sub_succ_eq_sub]
state_before: case intro
p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
q : ℕ
hq : p = q.succ
hq' : q = p - 1
⊢ solution p a₁ a₂ ^ q.succ * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
state_after: case intro
p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
q : ℕ
hq : p = q.succ
hq' : q = p - 1
⊢ solution p a₁ a₂ * (a₂.coeff 0 / a₁.coeff 0) * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
tactic: rw [pow_succ', hq', this]
state_before: case intro
p : ℕ
hp : Fact (Nat.Prime p)
k : Type u_1
inst✝¹ : Field k
inst✝ : IsAlgClosed k
a₁ : 𝕎 k
ha₁ : a₁.coeff 0 ≠ 0
a₂ : 𝕎 k
this : solution p a₁ a₂ ^ (p - 1) = a₂.coeff 0 / a₁.coeff 0
q : ℕ
hq : p = q.succ
hq' : q = p - 1
⊢ solution p a₁ a₂ * (a₂.coeff 0 / a₁.coeff 0) * a₁.coeff 0 = solution p a₁ a₂ * a₂.coeff 0
state_after: no goals
tactic: field_simp [ha₁, mul_comm]
Theorem: Computation.results_of_terminates'
File: Mathlib/Data/Seq/Computation.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
s : Computation α
T : s.Terminates
a : α
h : a ∈ s
⊢ s.Results a s.length
state_after: α : Type u
β : Type v
γ : Type w
s : Computation α
T : s.Terminates
a : α
h : a ∈ s
⊢ s.Results s.get s.length
tactic: rw [← get_eq_of_mem _ h]
state_before: α : Type u
β : Type v
γ : Type w
s : Computation α
T : s.Terminates
a : α
h : a ∈ s
⊢ s.Results s.get s.length
state_after: no goals
tactic: apply results_of_terminates
Theorem: List.Nodup.erase_eq_filter
File: Mathlib/Data/List/Nodup.lean

Proof steps:
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r : α → α → Prop
a✝ b : α
inst✝ : DecidableEq α
l : List α
d : l.Nodup
a : α
⊢ l.erase a = List.filter (fun x => decide (x ≠ a)) l
state_after: case nil
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r : α → α → Prop
a✝ b : α
inst✝ : DecidableEq α
l : List α
a : α
⊢ [].erase a = List.filter (fun x => decide (x ≠ a)) []

case cons
α : Type u
β : Type v
l✝¹ l₁ l₂ : List α
r : α → α → Prop
a✝¹ b✝ : α
inst✝ : DecidableEq α
l✝ : List α
a b : α
l : List α
m : ∀ a' ∈ l, b ≠ a'
a✝ : Pairwise (fun x x_1 => x ≠ x_1) l
IH : l.erase a = List.filter (fun x => decide (x ≠ a)) l
⊢ (b :: l).erase a = List.filter (fun x => decide (x ≠ a)) (b :: l)
tactic: induction' d with b l m _ IH
state_before: case cons
α : Type u
β : Type v
l✝¹ l₁ l₂ : List α
r : α → α → Prop
a✝¹ b✝ : α
inst✝ : DecidableEq α
l✝ : List α
a b : α
l : List α
m : ∀ a' ∈ l, b ≠ a'
a✝ : Pairwise (fun x x_1 => x ≠ x_1) l
IH : l.erase a = List.filter (fun x => decide (x ≠ a)) l
⊢ (b :: l).erase a = List.filter (fun x => decide (x ≠ a)) (b :: l)
state_after: case pos
α : Type u
β : Type v
l✝¹ l₁ l₂ : List α
r : α → α → Prop
a✝¹ b✝ : α
inst✝ : DecidableEq α
l✝ : List α
a b : α
l : List α
m : ∀ a' ∈ l, b ≠ a'
a✝ : Pairwise (fun x x_1 => x ≠ x_1) l
IH : l.erase a = List.filter (fun x => decide (x ≠ a)) l
h : b = a
⊢ (b :: l).erase a = List.filter (fun x => decide (x ≠ a)) (b :: l)

case neg
α : Type u
β : Type v
l✝¹ l₁ l₂ : List α
r : α → α → Prop
a✝¹ b✝ : α
inst✝ : DecidableEq α
l✝ : List α
a b : α
l : List α
m : ∀ a' ∈ l, b ≠ a'
a✝ : Pairwise (fun x x_1 => x ≠ x_1) l
IH : l.erase a = List.filter (fun x => decide (x ≠ a)) l
h : ¬b = a
⊢ (b :: l).erase a = List.filter (fun x => decide (x ≠ a)) (b :: l)
tactic: by_cases h : b = a
Theorem: LipschitzWith.ediam_image_le
File: Mathlib/Topology/EMetricSpace/Lipschitz.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
x y : α
r : ℝ≥0∞
hf : LipschitzWith K f
s : Set α
⊢ diam (f '' s) ≤ ↑K * diam s
state_after: case h
α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
x y : α
r : ℝ≥0∞
hf : LipschitzWith K f
s : Set α
⊢ ∀ x ∈ f '' s, ∀ y ∈ f '' s, edist x y ≤ ↑K * diam s
tactic: apply EMetric.diam_le
state_before: case h
α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
x y : α
r : ℝ≥0∞
hf : LipschitzWith K f
s : Set α
⊢ ∀ x ∈ f '' s, ∀ y ∈ f '' s, edist x y ≤ ↑K * diam s
state_after: case h.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
x✝ y✝ : α
r : ℝ≥0∞
hf : LipschitzWith K f
s : Set α
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ edist (f x) (f y) ≤ ↑K * diam s
tactic: rintro _ ⟨x, hx, rfl⟩ _ ⟨y, hy, rfl⟩
state_before: case h.intro.intro.intro.intro
α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
x✝ y✝ : α
r : ℝ≥0∞
hf : LipschitzWith K f
s : Set α
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ edist (f x) (f y) ≤ ↑K * diam s
state_after: no goals
tactic: exact hf.edist_le_mul_of_le (EMetric.edist_le_diam_of_mem hx hy)
Theorem: right_mem_openSegment_iff
File: Mathlib/Analysis/Convex/Segment.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : LinearOrderedRing 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
x y : E
inst✝¹ : DenselyOrdered 𝕜
inst✝ : NoZeroSMulDivisors 𝕜 E
⊢ y ∈ openSegment 𝕜 x y ↔ x = y
state_after: no goals
tactic: rw [openSegment_symm, left_mem_openSegment_iff, eq_comm]
Theorem: Measurable.mul_iff_right
File: Mathlib/MeasureTheory/Group/Arithmetic.lean

Proof steps:
state_before: α : Type u_1
G : Type u_2
inst✝⁴ : MeasurableSpace G
inst✝³ : MeasurableSpace α
inst✝² : CommGroup G
inst✝¹ : MeasurableMul₂ G
inst✝ : MeasurableInv G
f g : α → G
hf : Measurable f
h : Measurable (f * g)
⊢ g = f * g * f⁻¹
state_after: no goals
tactic: simp only [mul_inv_cancel_comm]
Theorem: MeasureTheory.measure_iInter_eq_iInf
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s✝ s₁ s₂ t : Set α
inst✝ : Countable ι
s : ι → Set α
h : ∀ (i : ι), MeasurableSet (s i)
hd : Directed (fun x x_1 => x ⊇ x_1) s
hfin : ∃ i, μ (s i) ≠ ⊤
⊢ μ (⋂ i, s i) = ⨅ i, μ (s i)
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s✝ s₁ s₂ t : Set α
inst✝ : Countable ι
s : ι → Set α
h : ∀ (i : ι), MeasurableSet (s i)
hd : Directed (fun x x_1 => x ⊇ x_1) s
k : ι
hk : μ (s k) ≠ ⊤
⊢ μ (⋂ i, s i) = ⨅ i, μ (s i)
tactic: rcases hfin with ⟨k, hk⟩
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s✝ s₁ s₂ t : Set α
inst✝ : Countable ι
s : ι → Set α
h : ∀ (i : ι), MeasurableSet (s i)
hd : Directed (fun x x_1 => x ⊇ x_1) s
k : ι
hk : μ (s k) ≠ ⊤
⊢ μ (⋂ i, s i) = ⨅ i, μ (s i)
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s✝ s₁ s₂ t : Set α
inst✝ : Countable ι
s : ι → Set α
h : ∀ (i : ι), MeasurableSet (s i)
hd : Directed (fun x x_1 => x ⊇ x_1) s
k : ι
hk : μ (s k) ≠ ⊤
this : ∀ t ⊆ s k, μ t ≠ ⊤
⊢ μ (⋂ i, s i) = ⨅ i, μ (s i)
tactic: have : ∀ t ⊆ s k, μ t ≠ ∞ := fun t ht => ne_top_of_le_ne_top hk (measure_mono ht)
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s✝ s₁ s₂ t : Set α
inst✝ : Countable ι
s : ι → Set α
h : ∀ (i : ι), MeasurableSet (s i)
hd : Directed (fun x x_1 => x ⊇ x_1) s
k : ι
hk : μ (s k) ≠ ⊤
this : ∀ t ⊆ s k, μ t ≠ ⊤
⊢ μ (⋂ i, s i) = ⨅ i, μ (s i)
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s✝ s₁ s₂ t : Set α
inst✝ : Countable ι
s : ι → Set α
h : ∀ (i : ι), MeasurableSet (s i)
hd : Directed (fun x x_1 => x ⊇ x_1) s
k : ι
hk : μ (s k) ≠ ⊤
this : ∀ t ⊆ s k, μ t ≠ ⊤
⊢ μ (s k) - ⨆ i, μ (s k \ s i) = μ (s k) - ⨆ i, μ (s k) - μ (s i)

case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s✝ s₁ s₂ t : Set α
inst✝ : Countable ι
s : ι → Set α
h : ∀ (i : ι), MeasurableSet (s i)
hd : Directed (fun x x_1 => x ⊇ x_1) s
k : ι
hk : μ (s k) ≠ ⊤
this : ∀ t ⊆ s k, μ t ≠ ⊤
⊢ Directed (fun x x_1 => x ⊆ x_1) fun i => s k \ s i
tactic: rw [← ENNReal.sub_sub_cancel hk (iInf_le _ k), ENNReal.sub_iInf, ←
    ENNReal.sub_sub_cancel hk (measure_mono (iInter_subset _ k)), ←
    measure_diff (iInter_subset _ k) (MeasurableSet.iInter h) (this _ (iInter_subset _ k)),
    diff_iInter, measure_iUnion_eq_iSup]
Theorem: AddMonoidHom.fromIntEquiv_apply
File: Mathlib/Algebra/Category/Grp/ForgetCorepresentable.lean

Proof steps:
state_before: α : Type u
inst✝ : AddGroup α
φ : ℤ →+ α
⊢ (fun x => (zmultiplesHom α) x) ((fun φ => φ 1) φ) = φ
state_after: case h1
α : Type u
inst✝ : AddGroup α
φ : ℤ →+ α
⊢ ((fun x => (zmultiplesHom α) x) ((fun φ => φ 1) φ)) 1 = φ 1
tactic: ext
state_before: case h1
α : Type u
inst✝ : AddGroup α
φ : ℤ →+ α
⊢ ((fun x => (zmultiplesHom α) x) ((fun φ => φ 1) φ)) 1 = φ 1
state_after: no goals
tactic: simp
state_before: α : Type u
inst✝ : AddGroup α
x : α
⊢ (fun φ => φ 1) ((fun x => (zmultiplesHom α) x) x) = x
state_after: no goals
tactic: simp