ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: affineSpan_coe_preimage_eq_top
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

Proof steps:
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_4
A : Set P
inst✝ : Nonempty ↑A
⊢ affineSpan k (Subtype.val ⁻¹' A) = ⊤
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_4
A : Set P
inst✝ : Nonempty ↑A
⊢ ⊤ ≤ affineSpan k (Subtype.val ⁻¹' A)
tactic: rw [eq_top_iff]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_4
A : Set P
inst✝ : Nonempty ↑A
⊢ ⊤ ≤ affineSpan k (Subtype.val ⁻¹' A)
state_after: case mk
k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_4
A : Set P
inst✝ : Nonempty ↑A
x : P
hx : x ∈ ↑(affineSpan k A)
⊢ ⟨x, hx⟩ ∈ ↑(affineSpan k (Subtype.val ⁻¹' A))
tactic: rintro ⟨x, hx⟩ -
state_before: case mk
k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_4
A : Set P
inst✝ : Nonempty ↑A
x : P
hx : x ∈ ↑(affineSpan k A)
⊢ ⟨x, hx⟩ ∈ ↑(affineSpan k (Subtype.val ⁻¹' A))
state_after: case mk.refine_1
k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_4
A : Set P
inst✝ : Nonempty ↑A
x : P
hx : x ∈ ↑(affineSpan k A)
y : P
hy : y ∈ A
⊢ ⟨y, ⋯⟩ ∈ ↑(affineSpan k (Subtype.val ⁻¹' A))

case mk.refine_2
k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_4
A : Set P
inst✝ : Nonempty ↑A
x : P
hx : x ∈ ↑(affineSpan k A)
c : k
u : P
hu : u ∈ affineSpan k A
v : P
hv : v ∈ affineSpan k A
w : P
hw : w ∈ affineSpan k A
⊢ ⟨u, hu⟩ ∈ ↑(affineSpan k (Subtype.val ⁻¹' A)) →
    ⟨v, hv⟩ ∈ ↑(affineSpan k (Subtype.val ⁻¹' A)) →
      ⟨w, hw⟩ ∈ ↑(affineSpan k (Subtype.val ⁻¹' A)) → ⟨c • (u -ᵥ v) +ᵥ w, ⋯⟩ ∈ ↑(affineSpan k (Subtype.val ⁻¹' A))
tactic: refine affineSpan_induction' (fun y hy ↦ ?_) (fun c u hu v hv w hw ↦ ?_) hx
Theorem: CategoryTheory.Limits.BinaryBicone.toBiconeFunctor_obj_ι
File: Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean

Proof steps:
state_before: J : Type w
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
D : Type uD
inst✝¹ : Category.{uD', uD} D
inst✝ : HasZeroMorphisms D
P Q X Y : C
b : BinaryBicone X Y
j j' : WalkingPair
⊢ (fun j => WalkingPair.casesOn j b.inl b.inr) j ≫ (fun j => WalkingPair.casesOn j b.fst b.snd) j' =
    if h : j = j' then eqToHom ⋯ else 0
state_after: no goals
tactic: rcases j with ⟨⟩ <;> rcases j' with ⟨⟩ <;> simp
Theorem: MeasureTheory.OuterMeasure.top_apply
File: Mathlib/MeasureTheory/OuterMeasure/Operations.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
m : OuterMeasure α
s : Set α
h : s.Nonempty
a : α
as : a ∈ s
⊢ ⊤ ≤ (⊤ • dirac a) s
state_after: no goals
tactic: simp [smul_dirac_apply, as]
Theorem: Asymptotics.IsBigOWith.pow
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
E' : Type u_6
F' : Type u_7
G' : Type u_8
E'' : Type u_9
F'' : Type u_10
G'' : Type u_11
E''' : Type u_12
R : Type u_13
R' : Type u_14
𝕜 : Type u_15
𝕜' : Type u_16
inst✝¹⁴ : Norm E
inst✝¹³ : Norm F
inst✝¹² : Norm G
inst✝¹¹ : SeminormedAddCommGroup E'
inst✝¹⁰ : SeminormedAddCommGroup F'
inst✝⁹ : SeminormedAddCommGroup G'
inst✝⁸ : NormedAddCommGroup E''
inst✝⁷ : NormedAddCommGroup F''
inst✝⁶ : NormedAddCommGroup G''
inst✝⁵ : SeminormedRing R
inst✝⁴ : SeminormedAddGroup E'''
inst✝³ : SeminormedRing R'
inst✝² : NormedDivisionRing 𝕜
inst✝¹ : NormedDivisionRing 𝕜'
c c' c₁ c₂ : ℝ
f✝ : α → E
g✝ : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
inst✝ : NormOneClass R
f : α → R
g : α → 𝕜
h : IsBigOWith c l f g
⊢ IsBigOWith (c ^ 0) l (fun x => f x ^ 0) fun x => g x ^ 0
state_after: no goals
tactic: simpa using h.pow' 0
Theorem: Multiset.count_inter
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
⊢ count a (s ∩ t) = min (count a s) (count a t)
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
⊢ count a (s - t) + count a (s ∩ t) = count a (s - t) + min (count a s) (count a t)
tactic: apply @Nat.add_left_cancel (count a (s - t))
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
⊢ count a (s - t) + count a (s ∩ t) = count a (s - t) + min (count a s) (count a t)
state_after: no goals
tactic: rw [← count_add, sub_add_inter, count_sub, Nat.sub_add_min_cancel]
Theorem: ProbabilityTheory.lintegral_gammaPDF_of_nonpos
File: Mathlib/Probability/Distributions/Gamma.lean

Proof steps:
state_before: x a r : ℝ
hx : x ≤ 0
⊢ ∫⁻ (y : ℝ) in Iio x, gammaPDF a r y = 0
state_after: x a r : ℝ
hx : x ≤ 0
⊢ ∫⁻ (x : ℝ) in Iio x, 0 = 0

x a r : ℝ
hx : x ≤ 0
⊢ ∀ᵐ (x_1 : ℝ), x_1 ∈ Iio x → gammaPDF a r x_1 = 0
tactic: rw [setLIntegral_congr_fun (g := fun _ ↦ 0) measurableSet_Iio]
Theorem: Matrix.det_fin_three
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

Proof steps:
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix (Fin 3) (Fin 3) R
⊢ A.det =
    A 0 0 * A 1 1 * A 2 2 - A 0 0 * A 1 2 * A 2 1 - A 0 1 * A 1 0 * A 2 2 + A 0 1 * A 1 2 * A 2 0 +
        A 0 2 * A 1 0 * A 2 1 -
      A 0 2 * A 1 1 * A 2 0
state_after: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix (Fin 3) (Fin 3) R
⊢ (-1) ^ 0 * A 0 0 * ((-1) ^ 0 * A 1 1 * A 2 2 + (-1) ^ (0 + 1) * A 1 2 * A 2 1) +
      ((-1) ^ (0 + 1) * A 0 1 * ((-1) ^ 0 * A 1 0 * A 2 2 + (-1) ^ (0 + 1) * A 1 2 * A 2 0) +
        (-1) ^ (0 + 1 + 1) * A 0 2 * ((-1) ^ 0 * A 1 0 * A 2 1 + (-1) ^ (0 + 1) * A 1 1 * A 2 0)) =
    A 0 0 * A 1 1 * A 2 2 - A 0 0 * A 1 2 * A 2 1 - A 0 1 * A 1 0 * A 2 2 + A 0 1 * A 1 2 * A 2 0 +
        A 0 2 * A 1 0 * A 2 1 -
      A 0 2 * A 1 1 * A 2 0
tactic: simp only [det_succ_row_zero, Nat.odd_iff_not_even, submatrix_apply, Fin.succ_zero_eq_one,
    submatrix_submatrix, det_unique, Fin.default_eq_zero, comp_apply, Fin.succ_one_eq_two,
    Fin.sum_univ_succ, Fin.val_zero, Fin.zero_succAbove, univ_unique, Fin.val_succ,
    Fin.coe_fin_one, Fin.succ_succAbove_zero, sum_singleton, Fin.succ_succAbove_one, even_add_self]
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix (Fin 3) (Fin 3) R
⊢ (-1) ^ 0 * A 0 0 * ((-1) ^ 0 * A 1 1 * A 2 2 + (-1) ^ (0 + 1) * A 1 2 * A 2 1) +
      ((-1) ^ (0 + 1) * A 0 1 * ((-1) ^ 0 * A 1 0 * A 2 2 + (-1) ^ (0 + 1) * A 1 2 * A 2 0) +
        (-1) ^ (0 + 1 + 1) * A 0 2 * ((-1) ^ 0 * A 1 0 * A 2 1 + (-1) ^ (0 + 1) * A 1 1 * A 2 0)) =
    A 0 0 * A 1 1 * A 2 2 - A 0 0 * A 1 2 * A 2 1 - A 0 1 * A 1 0 * A 2 2 + A 0 1 * A 1 2 * A 2 0 +
        A 0 2 * A 1 0 * A 2 1 -
      A 0 2 * A 1 1 * A 2 0
state_after: no goals
tactic: ring
Theorem: CategoryTheory.presheafHom_map_app_op_mk_id
File: Mathlib/CategoryTheory/Sites/SheafHom.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝ : Category.{v', u'} A
F G : Cᵒᵖ ⥤ A
X Y : C
g : Y ⟶ X
α : (presheafHom F G).obj (op X)
⊢ 𝟙 Y ≫ g = g
state_after: no goals
tactic: simp
Theorem: Nat.image_div_divisors_eq_divisors
File: Mathlib/NumberTheory/Divisors.lean

Proof steps:
state_before: n✝ n : ℕ
⊢ image (fun x => n / x) n.divisors = n.divisors
state_after: case pos
n✝ n : ℕ
hn : n = 0
⊢ image (fun x => n / x) n.divisors = n.divisors

case neg
n✝ n : ℕ
hn : ¬n = 0
⊢ image (fun x => n / x) n.divisors = n.divisors
tactic: by_cases hn : n = 0
state_before: case neg
n✝ n : ℕ
hn : ¬n = 0
⊢ image (fun x => n / x) n.divisors = n.divisors
state_after: case neg.a
n✝ n : ℕ
hn : ¬n = 0
a : ℕ
⊢ a ∈ image (fun x => n / x) n.divisors ↔ a ∈ n.divisors
tactic: ext a
state_before: case neg.a
n✝ n : ℕ
hn : ¬n = 0
a : ℕ
⊢ a ∈ image (fun x => n / x) n.divisors ↔ a ∈ n.divisors
state_after: case neg.a.mp
n✝ n : ℕ
hn : ¬n = 0
a : ℕ
⊢ a ∈ image (fun x => n / x) n.divisors → a ∈ n.divisors

case neg.a.mpr
n✝ n : ℕ
hn : ¬n = 0
a : ℕ
⊢ a ∈ n.divisors → a ∈ image (fun x => n / x) n.divisors
tactic: constructor
Theorem: Rat.MulRingNorm.exists_pos_mulRingNorm_eq_pow_neg
File: Mathlib/NumberTheory/Ostrowski.lean

Proof steps:
state_before: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
⊢ ∃ t, 0 < t ∧ f ↑p = ↑p ^ (-t)
state_after: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ ∃ t, 0 < t ∧ f ↑p = ↑p ^ (-t)
tactic: have pprime := is_prime_of_minimal_nat_zero_lt_mulRingNorm_lt_one hp0 hp1 hmin
state_before: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ ∃ t, 0 < t ∧ f ↑p = ↑p ^ (-t)
state_after: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ f ↑p = ↑p ^ (- -logb (↑p) (f ↑p))
tactic: refine ⟨- logb p (f p), Left.neg_pos_iff.2 <| logb_neg (mod_cast pprime.one_lt) hp0 hp1, ?_⟩
state_before: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ f ↑p = ↑p ^ (- -logb (↑p) (f ↑p))
state_after: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ f ↑p = ↑p ^ logb (↑p) (f ↑p)
tactic: rw [neg_neg]
state_before: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ f ↑p = ↑p ^ logb (↑p) (f ↑p)
state_after: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ ↑p ≠ 1
tactic: refine (rpow_logb (mod_cast pprime.pos) ?_ hp0).symm
state_before: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
pprime : Nat.Prime p
⊢ ↑p ≠ 1
state_after: no goals
tactic: simp only [ne_eq, Nat.cast_eq_one,Nat.Prime.ne_one pprime, not_false_eq_true]
Theorem: Polynomial.Chebyshev.T_add_one
File: Mathlib/RingTheory/Polynomial/Chebyshev.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
n : ℤ
⊢ T R (n + 1) = 2 * X * T R n - T R (n - 1)
state_after: no goals
tactic: linear_combination (norm := ring_nf) T_add_two R (n - 1)
Theorem: CategoryTheory.NatIso.inv_inv_app
File: Mathlib/CategoryTheory/NatIso.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
F✝ G✝ : C ⥤ D
α : F✝ ≅ G✝
F G : C ⥤ D
e : F ≅ G
X : C
⊢ inv (e.inv.app X) = e.hom.app X
state_after: no goals
tactic: aesop_cat
Theorem: sub_add_sub_cancel
File: Mathlib/Algebra/Group/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : Group G
a✝ b✝ c✝ d : G
n : ℤ
a b c : G
⊢ a / b * (b / c) = a / c
state_after: no goals
tactic: rw [← mul_div_assoc, div_mul_cancel]
Theorem: HomologicalComplex₂.d_f_comp_d_f
File: Mathlib/Algebra/Homology/HomologicalBicomplex.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{u_4, u_1} C
inst✝ : HasZeroMorphisms C
I₁ : Type u_2
I₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K : HomologicalComplex₂ C c₁ c₂
i₁ i₁' i₁'' : I₁
i₂ : I₂
⊢ (K.d i₁ i₁').f i₂ ≫ (K.d i₁' i₁'').f i₂ = 0
state_after: no goals
tactic: rw [← comp_f, d_comp_d, zero_f]
Theorem: CategoryTheory.isSeparating_iff_epi
File: Mathlib/CategoryTheory/Generator.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
𝒢 : Set C
inst✝ : ∀ (A : C), HasCoproduct fun f => ↑f.fst
⊢ IsSeparating 𝒢 ↔ ∀ (A : C), Epi (Sigma.desc Sigma.snd)
state_after: case refine_1
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
𝒢 : Set C
inst✝ : ∀ (A : C), HasCoproduct fun f => ↑f.fst
h : IsSeparating 𝒢
A Z✝ : C
u v : A ⟶ Z✝
huv : Sigma.desc Sigma.snd ≫ u = Sigma.desc Sigma.snd ≫ v
G : C
hG : G ∈ 𝒢
f : G ⟶ A
⊢ f ≫ u = f ≫ v

case refine_2
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
𝒢 : Set C
inst✝ : ∀ (A : C), HasCoproduct fun f => ↑f.fst
h : ∀ (A : C), Epi (Sigma.desc Sigma.snd)
X Y : C
f g : X ⟶ Y
hh : ∀ G ∈ 𝒢, ∀ (h : G ⟶ X), h ≫ f = h ≫ g
⊢ f = g
tactic: refine ⟨fun h A => ⟨fun u v huv => h _ _ fun G hG f => ?_⟩, fun h X Y f g hh => ?_⟩
Theorem: Set.image_update_uIcc
File: Mathlib/Order/Interval/Set/Pi.lean

Proof steps:
state_before: ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Lattice (α i)
inst✝ : DecidableEq ι
f : (i : ι) → α i
i : ι
a b : α i
⊢ Icc (update f i (a ⊓ b)) (update f i (a ⊔ b)) = uIcc (update f i a) (update f i b)
state_after: no goals
tactic: simp_rw [uIcc, update_sup, update_inf]
Theorem: List.destutter'_of_chain
File: Mathlib/Data/List/Destutter.lean

Proof steps:
state_before: α : Type u_1
l : List α
R : α → α → Prop
inst✝ : DecidableRel R
a b : α
h : Chain R a l
⊢ destutter' R a l = a :: l
state_after: case nil
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
b a : α
h : Chain R a []
⊢ destutter' R a [] = [a]

case cons
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
b✝ b : α
l : List α
hb : ∀ {a : α}, Chain R a l → destutter' R a l = a :: l
a : α
h : Chain R a (b :: l)
⊢ destutter' R a (b :: l) = a :: b :: l
tactic: induction' l with b l hb generalizing a
state_before: case cons
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
b✝ b : α
l : List α
hb : ∀ {a : α}, Chain R a l → destutter' R a l = a :: l
a : α
h : Chain R a (b :: l)
⊢ destutter' R a (b :: l) = a :: b :: l
state_after: case cons.intro
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
b✝ b : α
l : List α
hb : ∀ {a : α}, Chain R a l → destutter' R a l = a :: l
a : α
h✝ : Chain R a (b :: l)
h : R a b
hc : Chain R b l
⊢ destutter' R a (b :: l) = a :: b :: l
tactic: obtain ⟨h, hc⟩ := chain_cons.mp h
state_before: case cons.intro
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
b✝ b : α
l : List α
hb : ∀ {a : α}, Chain R a l → destutter' R a l = a :: l
a : α
h✝ : Chain R a (b :: l)
h : R a b
hc : Chain R b l
⊢ destutter' R a (b :: l) = a :: b :: l
state_after: no goals
tactic: rw [l.destutter'_cons_pos h, hb hc]
Theorem: Grp.SurjectiveOfEpiAuxs.fromCoset_eq_of_mem_range
File: Mathlib/Algebra/Category/Grp/EpiMono.lean

Proof steps:
state_before: A B : Grp
f : A ⟶ B
b : ↑B
hb : b ∈ MonoidHom.range f
⊢ fromCoset ⟨b • ↑(MonoidHom.range f), ⋯⟩ = fromCoset ⟨↑(MonoidHom.range f), ⋯⟩
state_after: case e_a.e_val
A B : Grp
f : A ⟶ B
b : ↑B
hb : b ∈ MonoidHom.range f
⊢ b • ↑(MonoidHom.range f) = ↑(MonoidHom.range f)
tactic: congr
state_before: case e_a.e_val
A B : Grp
f : A ⟶ B
b : ↑B
hb : b ∈ MonoidHom.range f
⊢ b • ↑(MonoidHom.range f) = ↑(MonoidHom.range f)
state_after: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b✝ • ↑(MonoidHom.range f) = ↑(MonoidHom.range f)
tactic: let b : B.α := b
state_before: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b✝ • ↑(MonoidHom.range f) = ↑(MonoidHom.range f)
state_after: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b • ↑(MonoidHom.range f) = ↑(MonoidHom.range f)
tactic: change b • (f.range : Set B) = f.range
state_before: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b • ↑(MonoidHom.range f) = ↑(MonoidHom.range f)
state_after: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b • ↑(MonoidHom.range f) = 1 • ↑(MonoidHom.range f)
tactic: nth_rw 2 [show (f.range : Set B.α) = (1 : B) • f.range from (one_leftCoset _).symm]
state_before: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b • ↑(MonoidHom.range f) = 1 • ↑(MonoidHom.range f)
state_after: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b⁻¹ ∈ MonoidHom.range f
tactic: rw [leftCoset_eq_iff, mul_one]
state_before: case e_a.e_val
A B : Grp
f : A ⟶ B
b✝ : ↑B
hb : b✝ ∈ MonoidHom.range f
b : ↑B := b✝
⊢ b⁻¹ ∈ MonoidHom.range f
state_after: no goals
tactic: exact Subgroup.inv_mem _ hb
Theorem: ContinuousLinearMap.zero_comp
File: Mathlib/Topology/Algebra/Module/Basic.lean

Proof steps:
state_before: R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝¹⁷ : Semiring R₁
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
M₁ : Type u_4
inst✝¹⁴ : TopologicalSpace M₁
inst✝¹³ : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹² : TopologicalSpace M'₁
inst✝¹¹ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝¹⁰ : TopologicalSpace M₂
inst✝⁹ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁸ : TopologicalSpace M₃
inst✝⁷ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁶ : TopologicalSpace M₄
inst✝⁵ : AddCommMonoid M₄
inst✝⁴ : Module R₁ M₁
inst✝³ : Module R₁ M'₁
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
f : M₁ →SL[σ₁₂] M₂
⊢ comp 0 f = 0
state_after: case h
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝¹⁷ : Semiring R₁
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
M₁ : Type u_4
inst✝¹⁴ : TopologicalSpace M₁
inst✝¹³ : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹² : TopologicalSpace M'₁
inst✝¹¹ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝¹⁰ : TopologicalSpace M₂
inst✝⁹ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁸ : TopologicalSpace M₃
inst✝⁷ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁶ : TopologicalSpace M₄
inst✝⁵ : AddCommMonoid M₄
inst✝⁴ : Module R₁ M₁
inst✝³ : Module R₁ M'₁
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
f : M₁ →SL[σ₁₂] M₂
x✝ : M₁
⊢ (comp 0 f) x✝ = 0 x✝
tactic: ext
state_before: case h
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝¹⁷ : Semiring R₁
inst✝¹⁶ : Semiring R₂
inst✝¹⁵ : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R₁ →+* R₃
M₁ : Type u_4
inst✝¹⁴ : TopologicalSpace M₁
inst✝¹³ : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹² : TopologicalSpace M'₁
inst✝¹¹ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝¹⁰ : TopologicalSpace M₂
inst✝⁹ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁸ : TopologicalSpace M₃
inst✝⁷ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁶ : TopologicalSpace M₄
inst✝⁵ : AddCommMonoid M₄
inst✝⁴ : Module R₁ M₁
inst✝³ : Module R₁ M'₁
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
f : M₁ →SL[σ₁₂] M₂
x✝ : M₁
⊢ (comp 0 f) x✝ = 0 x✝
state_after: no goals
tactic: simp
Theorem: CategoryTheory.Functor.map_injective_iff
File: Mathlib/CategoryTheory/Functor/FullyFaithful.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
E : Type u_1
inst✝¹ : Category.{?u.761, u_1} E
X✝ Y✝ : C
F : C ⥤ D
inst✝ : F.Faithful
X Y : C
f g : X ⟶ Y
h : f = g
⊢ F.map f = F.map g
state_after: no goals
tactic: rw [h]
Theorem: IsCoprime.pow_right
File: Mathlib/RingTheory/Coprime/Lemmas.lean

Proof steps:
state_before: R : Type u
I : Type v
inst✝ : CommSemiring R
x y z : R
s : I → R
t : Finset I
m n : ℕ
H : IsCoprime x y
⊢ IsCoprime x (y ^ n)
state_after: R : Type u
I : Type v
inst✝ : CommSemiring R
x y z : R
s : I → R
t : Finset I
m n : ℕ
H : IsCoprime x y
⊢ IsCoprime x (∏ _x ∈ range n, y)
tactic: rw [← Finset.card_range n, ← Finset.prod_const]
state_before: R : Type u
I : Type v
inst✝ : CommSemiring R
x y z : R
s : I → R
t : Finset I
m n : ℕ
H : IsCoprime x y
⊢ IsCoprime x (∏ _x ∈ range n, y)
state_after: no goals
tactic: exact IsCoprime.prod_right fun _ _ ↦ H
Theorem: Metric.uniformity_edist
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

Proof steps:
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
⊢ 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
state_after: no goals
tactic: simp only [PseudoMetricSpace.uniformity_dist, dist_nndist, edist_nndist,
    Metric.uniformity_edist_aux]
Theorem: arg_expMapCircle
File: Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean

Proof steps:
state_before: x : ℝ
h₁ : -π < x
h₂ : x ≤ π
⊢ (↑(expMapCircle x)).arg = x
state_after: no goals
tactic: rw [expMapCircle_apply, exp_mul_I, arg_cos_add_sin_mul_I ⟨h₁, h₂⟩]
Theorem: tendsto_riemannZeta_sub_one_div
File: Mathlib/NumberTheory/Harmonic/ZetaAsymp.lean

Proof steps:
state_before: ⊢ Tendsto (fun s => riemannZeta s - 1 / (s - 1)) (𝓝[≠] 1) (𝓝 ↑γ)
state_after: f : ℂ → ℂ := fun s => riemannZeta s - 1 / (s - 1)
⊢ Tendsto (fun s => riemannZeta s - 1 / (s - 1)) (𝓝[≠] 1) (𝓝 ↑γ)
tactic: let f (s : ℂ) := riemannZeta s - 1 / (s - 1)
state_before: f : ℂ → ℂ := fun s => riemannZeta s - 1 / (s - 1)
⊢ ∃ C, Tendsto f (𝓝[≠] 1) (𝓝 C)
state_after: case refine_1
f : ℂ → ℂ := fun s => riemannZeta s - 1 / (s - 1)
⊢ ∀ᶠ (z : ℂ) in 𝓝[≠] 1, DifferentiableAt ℂ f z

case refine_2
f : ℂ → ℂ := fun s => riemannZeta s - 1 / (s - 1)
⊢ (fun z => f z - f 1) =o[𝓝[≠] 1] fun z => (z - 1)⁻¹
tactic: refine ⟨_, Complex.tendsto_limUnder_of_differentiable_on_punctured_nhds_of_isLittleO ?_ ?_⟩
Theorem: SetTheory.PGame.neg_fuzzy_zero_iff
File: Mathlib/SetTheory/Game/PGame.lean

Proof steps:
state_before: xl xr : Type u
x : PGame
⊢ -x ‖ 0 ↔ x ‖ 0
state_after: no goals
tactic: rw [neg_fuzzy_iff, neg_zero]
Theorem: Substring.ValidFor.foldl
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

Proof steps:
state_before: α : Type u_1
l m r : List Char
f : α → Char → α
init : α
⊢ Substring.foldl f init
      { str := { data := l ++ m ++ r }, startPos := { byteIdx := utf8Len l },
        stopPos := { byteIdx := utf8Len l + utf8Len m } } =
    List.foldl f init m
state_after: no goals
tactic: simp [-List.append_assoc, Substring.foldl, foldlAux_of_valid]