ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: CompactExhaustion.mem_diff_shiftr_find
File: Mathlib/Topology/Compactness/SigmaCompact.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
ι : Type u_3
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t : Set X
inst✝ : SigmaCompactSpace X
K : CompactExhaustion X
x : X
⊢ ¬K.shiftr.find x ≤ K.find x
state_after: no goals
tactic: simp only [find_shiftr, not_le, Nat.lt_succ_self]
Theorem: Cardinal.exists_eq_of_iSup_eq_of_not_isLimit
File: Mathlib/SetTheory/Cardinal/Basic.lean

Proof steps:
state_before: α β ι : Type u
hι : Nonempty ι
f : ι → Cardinal.{v}
hf : BddAbove (range f)
ω : Cardinal.{v}
hω : ¬ω.IsLimit
h : ⨆ i, f i = ω
e : ¬ω ≠ 0
⊢ f hι.some = ω
state_after: case refl
α β ι : Type u
hι : Nonempty ι
f : ι → Cardinal.{v}
hf : BddAbove (range f)
hω : ¬IsLimit 0
h : ⨆ i, f i = 0
e : ¬0 ≠ 0
⊢ f hι.some = 0
tactic: cases not_not.mp e
state_before: case refl
α β ι : Type u
hι : Nonempty ι
f : ι → Cardinal.{v}
hf : BddAbove (range f)
hω : ¬IsLimit 0
h : ⨆ i, f i = 0
e : ¬0 ≠ 0
⊢ f hι.some = 0
state_after: case refl
α β ι : Type u
hι : Nonempty ι
f : ι → Cardinal.{v}
hf : BddAbove (range f)
hω : ¬IsLimit 0
h : ⨆ i, f i ≤ 0
e : ¬0 ≠ 0
⊢ f hι.some ≤ 0
tactic: rw [← le_zero_iff] at h ⊢
state_before: case refl
α β ι : Type u
hι : Nonempty ι
f : ι → Cardinal.{v}
hf : BddAbove (range f)
hω : ¬IsLimit 0
h : ⨆ i, f i ≤ 0
e : ¬0 ≠ 0
⊢ f hι.some ≤ 0
state_after: no goals
tactic: exact (le_ciSup hf _).trans h
Theorem: CategoryTheory.ShortComplex.exact_iff_kernel_ι_comp_cokernel_π_zero
File: Mathlib/Algebra/Homology/ShortComplex/Exact.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_3, u_1} C
inst✝⁵ : Category.{?u.16591, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝² : S.HasHomology
inst✝¹ : HasKernel S.g
inst✝ : HasCokernel S.f
⊢ S.Exact ↔ kernel.ι S.g ≫ cokernel.π S.f = 0
state_after: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_3, u_1} C
inst✝⁵ : Category.{?u.16591, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝² : S.HasHomology
inst✝¹ : HasKernel S.g
inst✝ : HasCokernel S.f
this : HasCokernel (kernel.lift S.g S.f ⋯)
⊢ S.Exact ↔ kernel.ι S.g ≫ cokernel.π S.f = 0
tactic: haveI := HasLeftHomology.hasCokernel S
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_3, u_1} C
inst✝⁵ : Category.{?u.16591, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝² : S.HasHomology
inst✝¹ : HasKernel S.g
inst✝ : HasCokernel S.f
this : HasCokernel (kernel.lift S.g S.f ⋯)
⊢ S.Exact ↔ kernel.ι S.g ≫ cokernel.π S.f = 0
state_after: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_3, u_1} C
inst✝⁵ : Category.{?u.16591, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝² : S.HasHomology
inst✝¹ : HasKernel S.g
inst✝ : HasCokernel S.f
this✝ : HasCokernel (kernel.lift S.g S.f ⋯)
this : HasKernel (cokernel.desc S.f S.g ⋯)
⊢ S.Exact ↔ kernel.ι S.g ≫ cokernel.π S.f = 0
tactic: haveI := HasRightHomology.hasKernel S
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_3, u_1} C
inst✝⁵ : Category.{?u.16591, u_2} D
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝² : S.HasHomology
inst✝¹ : HasKernel S.g
inst✝ : HasCokernel S.f
this✝ : HasCokernel (kernel.lift S.g S.f ⋯)
this : HasKernel (cokernel.desc S.f S.g ⋯)
⊢ S.Exact ↔ kernel.ι S.g ≫ cokernel.π S.f = 0
state_after: no goals
tactic: exact S.exact_iff_i_p_zero (LeftHomologyData.ofHasKernelOfHasCokernel S)
    (RightHomologyData.ofHasCokernelOfHasKernel S)
Theorem: ZMod.nonsquare_iff_jacobiSym_eq_neg_one
File: Mathlib/NumberTheory/LegendreSymbol/JacobiSymbol.lean

Proof steps:
state_before: a : ℤ
p : ℕ
inst✝ : Fact (Nat.Prime p)
⊢ J(a | p) = -1 ↔ ¬IsSquare ↑a
state_after: a : ℤ
p : ℕ
inst✝ : Fact (Nat.Prime p)
⊢ legendreSym p a = -1 ↔ ¬IsSquare ↑a
tactic: rw [← legendreSym.to_jacobiSym]
state_before: a : ℤ
p : ℕ
inst✝ : Fact (Nat.Prime p)
⊢ legendreSym p a = -1 ↔ ¬IsSquare ↑a
state_after: no goals
tactic: exact legendreSym.eq_neg_one_iff p
Theorem: Ordinal.principal_one_iff
File: Mathlib/SetTheory/Ordinal/Principal.lean

Proof steps:
state_before: op : Ordinal.{u_1} → Ordinal.{u_1} → Ordinal.{u_1}
⊢ Principal op 1 ↔ op 0 0 = 0
state_after: case refine_1
op : Ordinal.{u_1} → Ordinal.{u_1} → Ordinal.{u_1}
h : Principal op 1
⊢ op 0 0 = 0

case refine_2
op : Ordinal.{u_1} → Ordinal.{u_1} → Ordinal.{u_1}
h : op 0 0 = 0
a b : Ordinal.{u_1}
ha : a < 1
hb : b < 1
⊢ op a b < 1
tactic: refine ⟨fun h => ?_, fun h a b ha hb => ?_⟩
Theorem: LaurentPolynomial.degree_C_mul_T
File: Mathlib/Algebra/Polynomial/Laurent.lean

Proof steps:
state_before: R : Type u_1
inst✝ : Semiring R
n : ℤ
a : R
a0 : a ≠ 0
⊢ (C a * T n).degree = ↑n
state_after: R : Type u_1
inst✝ : Semiring R
n : ℤ
a : R
a0 : a ≠ 0
⊢ (C a * T n).support.max = ↑n
tactic: rw [degree]
state_before: R : Type u_1
inst✝ : Semiring R
n : ℤ
a : R
a0 : a ≠ 0
⊢ (C a * T n).support.max = ↑n
state_after: R : Type u_1
inst✝ : Semiring R
n : ℤ
a : R
a0 : a ≠ 0
this : (C a * T n).support = {n}
⊢ (C a * T n).support.max = ↑n
tactic: have : Finsupp.support (C a * T n) = {n} := by
    refine support_eq_singleton.mpr ?_
    rw [← single_eq_C_mul_T]
    simp only [single_eq_same, a0, Ne, not_false_iff, eq_self_iff_true, and_self_iff]
state_before: R : Type u_1
inst✝ : Semiring R
n : ℤ
a : R
a0 : a ≠ 0
this : (C a * T n).support = {n}
⊢ (C a * T n).support.max = ↑n
state_after: R : Type u_1
inst✝ : Semiring R
n : ℤ
a : R
a0 : a ≠ 0
this : (C a * T n).support = {n}
⊢ {n}.max = ↑n
tactic: rw [this]
state_before: R : Type u_1
inst✝ : Semiring R
n : ℤ
a : R
a0 : a ≠ 0
this : (C a * T n).support = {n}
⊢ {n}.max = ↑n
state_after: no goals
tactic: exact Finset.max_singleton
Theorem: Polynomial.derivative_bernoulli
File: Mathlib/NumberTheory/BernoulliPolynomials.lean

Proof steps:
state_before: k : ℕ
⊢ derivative (bernoulli k) = ↑k * bernoulli (k - 1)
state_after: no goals
tactic: cases k with
  | zero => rw [Nat.cast_zero, zero_mul, bernoulli_zero, derivative_one]
  | succ k => exact mod_cast derivative_bernoulli_add_one k
Theorem: convexJoin_singleton_right
File: Mathlib/Analysis/Convex/Join.lean

Proof steps:
state_before: ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s✝ t s₁ s₂ t₁ t₂ u : Set E
x y✝ : E
s : Set E
y : E
⊢ convexJoin 𝕜 s {y} = ⋃ x ∈ s, segment 𝕜 x y
state_after: no goals
tactic: simp [convexJoin]
Theorem: Monoid.PushoutI.NormalWord.prod_smul
File: Mathlib/GroupTheory/PushoutI.lean

Proof steps:
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
g : PushoutI φ
w : NormalWord d
⊢ (g • w).prod = g * w.prod
state_after: no goals
tactic: induction g using PushoutI.induction_on generalizing w with
  | of i g => rw [of_smul_eq_smul, prod_summand_smul]
  | base h => rw [base_smul_eq_smul, prod_base_smul]
  | mul x y ihx ihy => rw [mul_smul, ihx, ihy, mul_assoc]
Theorem: Submodule.le_span_singleton_iff
File: Mathlib/LinearAlgebra/Span.lean

Proof steps:
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s✝ t : Set M
s : Submodule R M
v₀ : M
⊢ s ≤ span R {v₀} ↔ ∀ v ∈ s, ∃ r, r • v₀ = v
state_after: no goals
tactic: simp_rw [SetLike.le_def, mem_span_singleton]
Theorem: Set.preimage_const_mul_uIcc
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedField α
a : α
ha : a ≠ 0
b c : α
⊢ (fun x => a * x) ⁻¹' [[b, c]] = [[b / a, c / a]]
state_after: no goals
tactic: simp only [← preimage_mul_const_uIcc ha, mul_comm]
Theorem: LipschitzWith.uniformly_bounded
File: Mathlib/Analysis/Normed/Lp/lpSpace.lean

Proof steps:
state_before: α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ : α
hga₀b : Memℓp (g a₀) ⊤
a : α
⊢ Memℓp (g a) ⊤
state_after: case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
⊢ Memℓp (g a) ⊤
tactic: rcases hga₀b with ⟨M, hM⟩
state_before: case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
⊢ Memℓp (g a) ⊤
state_after: case h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
⊢ ↑K * dist a a₀ + M ∈ upperBounds (Set.range fun i => ‖g a i‖)
tactic: use ↑K * dist a a₀ + M
state_before: case h
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
⊢ ↑K * dist a a₀ + M ∈ upperBounds (Set.range fun i => ‖g a i‖)
state_after: case h.intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝¹ : (i : α) → NormedAddCommGroup (E i)
ι : Type u_3
inst✝ : PseudoMetricSpace α
g : α → ι → ℝ
K : ℝ≥0
hg : ∀ (i : ι), LipschitzWith K fun x => g x i
a₀ a : α
M : ℝ
hM : M ∈ upperBounds (Set.range fun i => ‖g a₀ i‖)
i : ι
⊢ (fun i => ‖g a i‖) i ≤ ↑K * dist a a₀ + M
tactic: rintro - ⟨i, rfl⟩
Theorem: CategoryTheory.NatTrans.removeLeftOp_app
File: Mathlib/CategoryTheory/Opposites.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F G H : C ⥤ Dᵒᵖ
α : F.leftOp ⟶ G.leftOp
X Y : C
f : X ⟶ Y
⊢ (G.map f ≫ (fun X => (α.app (op X)).op) Y).unop = ((fun X => (α.app (op X)).op) X ≫ F.map f).unop
state_after: no goals
tactic: simpa only [Functor.leftOp_map] using (α.naturality f.op).symm
Theorem: CategoryTheory.NonPreadditiveAbelian.comp_sub
File: Mathlib/CategoryTheory/Abelian/NonPreadditive.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : NonPreadditiveAbelian C
X Y Z : C
f : X ⟶ Y
g h : Y ⟶ Z
⊢ f ≫ (g - h) = f ≫ g - f ≫ h
state_after: no goals
tactic: rw [sub_def, ← Category.assoc, prod.comp_lift, sub_def]
Theorem: StrictConvexSpace.of_strictConvex_closed_unit_ball
File: Mathlib/Analysis/Convex/StrictConvexSpace.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : LinearMap.CompatibleSMul E E 𝕜 ℝ
h : StrictConvex 𝕜 (closedBall 0 1)
r : ℝ
hr : 0 < r
⊢ StrictConvex 𝕜 (closedBall 0 r)
state_after: no goals
tactic: simpa only [smul_closedUnitBall_of_nonneg hr.le] using h.smul r
Theorem: Convex.interior_nonempty_iff_affineSpan_eq_top
File: Mathlib/Analysis/NormedSpace/AddTorsorBases.lean

Proof steps:
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
hs : Convex ℝ s
⊢ (interior s).Nonempty ↔ affineSpan ℝ s = ⊤
state_after: no goals
tactic: rw [← interior_convexHull_nonempty_iff_affineSpan_eq_top, hs.convexHull_eq]
Theorem: Asymptotics.isTheta_of_norm_eventuallyEq
File: Mathlib/Analysis/Asymptotics/Theta.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
R : Type u_12
R' : Type u_13
𝕜 : Type u_14
𝕜' : Type u_15
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✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
l l' : Filter α
h : (fun x => ‖f x‖) =ᶠ[l] fun x => ‖g x‖
⊢ ∀ᶠ (x : α) in l, ‖f x‖ ≤ 1 * ‖g x‖
state_after: no goals
tactic: simpa only [one_mul] using h.le
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
R : Type u_12
R' : Type u_13
𝕜 : Type u_14
𝕜' : Type u_15
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✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
l l' : Filter α
h : (fun x => ‖f x‖) =ᶠ[l] fun x => ‖g x‖
⊢ ∀ᶠ (x : α) in l, ‖g x‖ ≤ 1 * ‖f x‖
state_after: no goals
tactic: simpa only [one_mul] using h.symm.le
Theorem: CategoryTheory.Limits.IsLimit.hom_ext
File: Mathlib/CategoryTheory/Limits/IsLimit.lean

Proof steps:
state_before: J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
h : IsLimit t
W : C
f f' : W ⟶ t.pt
w : ∀ (j : J), f ≫ t.π.app j = f' ≫ t.π.app j
⊢ f = f'
state_after: J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
h : IsLimit t
W : C
f f' : W ⟶ t.pt
w : ∀ (j : J), f ≫ t.π.app j = f' ≫ t.π.app j
⊢ h.lift { pt := W, π := { app := fun b => f ≫ t.π.app b, naturality := ⋯ } } =
    h.lift { pt := W, π := { app := fun b => f' ≫ t.π.app b, naturality := ⋯ } }
tactic: rw [h.hom_lift f, h.hom_lift f']
state_before: J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
h : IsLimit t
W : C
f f' : W ⟶ t.pt
w : ∀ (j : J), f ≫ t.π.app j = f' ≫ t.π.app j
⊢ h.lift { pt := W, π := { app := fun b => f ≫ t.π.app b, naturality := ⋯ } } =
    h.lift { pt := W, π := { app := fun b => f' ≫ t.π.app b, naturality := ⋯ } }
state_after: case h.e_8.h.e_π.e_app
J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
h : IsLimit t
W : C
f f' : W ⟶ t.pt
w : ∀ (j : J), f ≫ t.π.app j = f' ≫ t.π.app j
⊢ (fun b => f ≫ t.π.app b) = fun b => f' ≫ t.π.app b
tactic: congr
state_before: case h.e_8.h.e_π.e_app
J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
h : IsLimit t
W : C
f f' : W ⟶ t.pt
w : ∀ (j : J), f ≫ t.π.app j = f' ≫ t.π.app j
⊢ (fun b => f ≫ t.π.app b) = fun b => f' ≫ t.π.app b
state_after: no goals
tactic: exact funext w
Theorem: CategoryTheory.Functor.rightDerivedNatTrans_comp
File: Mathlib/CategoryTheory/Functor/Derived/RightDerived.lean

Proof steps:
state_before: C : Type u_1
C' : Type ?u.51120
D : Type u_5
D' : Type ?u.51126
H : Type u_3
H' : Type ?u.51132
inst✝⁹ : Category.{u_4, u_1} C
inst✝⁸ : Category.{?u.51140, ?u.51120} C'
inst✝⁷ : Category.{u_6, u_5} D
inst✝⁶ : Category.{?u.51148, ?u.51126} D'
inst✝⁵ : Category.{u_2, u_3} H
inst✝⁴ : Category.{?u.51156, ?u.51132} H'
RF RF' RF'' : D ⥤ H
F F' F'' : C ⥤ H
e : F ≅ F'
L : C ⥤ D
α : F ⟶ L ⋙ RF
α' : F' ⟶ L ⋙ RF'
α'' : F'' ⟶ L ⋙ RF''
α'₂ : F ⟶ L ⋙ RF'
W : MorphismProperty C
inst✝³ : L.IsLocalization W
inst✝² : RF.IsRightDerivedFunctor α W
inst✝¹ : RF'.IsRightDerivedFunctor α' W
inst✝ : RF''.IsRightDerivedFunctor α'' W
τ : F ⟶ F'
τ' : F' ⟶ F''
⊢ α ≫ whiskerLeft L (RF.rightDerivedNatTrans RF' α α' W τ ≫ RF'.rightDerivedNatTrans RF'' α' α'' W τ') =
    α ≫ whiskerLeft L (RF.rightDerivedNatTrans RF'' α α'' W (τ ≫ τ'))
state_after: no goals
tactic: aesop_cat
Theorem: nhdsSet_empty
File: Mathlib/Topology/NhdsSet.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f : Filter X
s t s₁ s₂ t₁ t₂ : Set X
x : X
⊢ 𝓝ˢ ∅ = ⊥
state_after: no goals
tactic: rw [isOpen_empty.nhdsSet_eq, principal_empty]
Theorem: Pi.toLex_update_le_self_iff
File: Mathlib/Order/PiLex.lean

Proof steps:
state_before: ι : Type u_1
β : ι → Type u_2
r : ι → ι → Prop
s : {i : ι} → β i → β i → Prop
inst✝² : LinearOrder ι
inst✝¹ : IsWellOrder ι fun x x_1 => x < x_1
inst✝ : (i : ι) → PartialOrder (β i)
x y : (i : ι) → β i
i : ι
a : β i
⊢ toLex (update x i a) ≤ toLex x ↔ a ≤ x i
state_after: no goals
tactic: simp_rw [le_iff_lt_or_eq, toLex_update_lt_self_iff, toLex_inj, update_eq_self_iff]
Theorem: PythagoreanTriple.coprime_classification
File: Mathlib/NumberTheory/PythagoreanTriples.lean

Proof steps:
state_before: x y z : ℤ
h : PythagoreanTriple x y z
⊢ PythagoreanTriple x y z ∧ x.gcd y = 1 ↔
    ∃ m n,
      (x = m ^ 2 - n ^ 2 ∧ y = 2 * m * n ∨ x = 2 * m * n ∧ y = m ^ 2 - n ^ 2) ∧
        (z = m ^ 2 + n ^ 2 ∨ z = -(m ^ 2 + n ^ 2)) ∧ m.gcd n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0)
state_after: x y z : ℤ
⊢ PythagoreanTriple x y z ∧ x.gcd y = 1 ↔
    ∃ m n,
      (x = m ^ 2 - n ^ 2 ∧ y = 2 * m * n ∨ x = 2 * m * n ∧ y = m ^ 2 - n ^ 2) ∧
        (z = m ^ 2 + n ^ 2 ∨ z = -(m ^ 2 + n ^ 2)) ∧ m.gcd n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0)
tactic: clear h
state_before: x y z : ℤ
⊢ PythagoreanTriple x y z ∧ x.gcd y = 1 ↔
    ∃ m n,
      (x = m ^ 2 - n ^ 2 ∧ y = 2 * m * n ∨ x = 2 * m * n ∧ y = m ^ 2 - n ^ 2) ∧
        (z = m ^ 2 + n ^ 2 ∨ z = -(m ^ 2 + n ^ 2)) ∧ m.gcd n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0)
state_after: case mp
x y z : ℤ
⊢ PythagoreanTriple x y z ∧ x.gcd y = 1 →
    ∃ m n,
      (x = m ^ 2 - n ^ 2 ∧ y = 2 * m * n ∨ x = 2 * m * n ∧ y = m ^ 2 - n ^ 2) ∧
        (z = m ^ 2 + n ^ 2 ∨ z = -(m ^ 2 + n ^ 2)) ∧ m.gcd n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0)

case mpr
x y z : ℤ
⊢ (∃ m n,
      (x = m ^ 2 - n ^ 2 ∧ y = 2 * m * n ∨ x = 2 * m * n ∧ y = m ^ 2 - n ^ 2) ∧
        (z = m ^ 2 + n ^ 2 ∨ z = -(m ^ 2 + n ^ 2)) ∧ m.gcd n = 1 ∧ (m % 2 = 0 ∧ n % 2 = 1 ∨ m % 2 = 1 ∧ n % 2 = 0)) →
    PythagoreanTriple x y z ∧ x.gcd y = 1
tactic: constructor
Theorem: ack_three
File: Mathlib/Computability/Ackermann.lean

Proof steps:
state_before: n : ℕ
⊢ ack 3 n = 2 ^ (n + 3) - 3
state_after: case zero

⊢ ack 3 0 = 2 ^ (0 + 3) - 3

case succ
n : ℕ
IH : ack 3 n = 2 ^ (n + 3) - 3
⊢ ack 3 (n + 1) = 2 ^ (n + 1 + 3) - 3
tactic: induction' n with n IH
Theorem: Int.mem_range_iff
File: Mathlib/Data/Int/Range.lean

Proof steps:
state_before: m n r : ℤ
⊢ r ∈ m.range n ↔ m ≤ r ∧ r < n
state_after: m n r : ℤ
⊢ (∃ a, m + ↑a < n ∧ m + ↑a = r) ↔ m ≤ r ∧ r < n
tactic: simp only [range, List.mem_map, List.mem_range, lt_toNat, lt_sub_iff_add_lt, add_comm]
state_before: m n r : ℤ
⊢ (∃ a, m + ↑a < n ∧ m + ↑a = r) ↔ m ≤ r ∧ r < n
state_after: no goals
tactic: exact ⟨fun ⟨a, ha⟩ => ha.2 ▸ ⟨le_add_of_nonneg_right (Int.natCast_nonneg _), ha.1⟩,
    fun h => ⟨toNat (r - m), by simp [toNat_of_nonneg (sub_nonneg.2 h.1), h.2] ⟩⟩
Theorem: addOrderOf_eq_two_iff
File: Mathlib/GroupTheory/Exponent.lean

Proof steps:
state_before: G : Type u
inst✝ : Monoid G
hG : Monoid.exponent G = 2
x : G
⊢ orderOf x = 2 → x ≠ 1
state_after: G : Type u
inst✝ : Monoid G
hG : Monoid.exponent G = 2
hx : orderOf 1 = 2
⊢ False
tactic: rintro hx rfl
state_before: G : Type u
inst✝ : Monoid G
hG : Monoid.exponent G = 2
hx : orderOf 1 = 2
⊢ False
state_after: no goals
tactic: norm_num at hx
Theorem: AddSubgroup.pi_mem_of_single_mem
File: Mathlib/Algebra/Group/Subgroup/Finite.lean

Proof steps:
state_before: G : Type u_1
inst✝⁴ : Group G
A : Type u_2
inst✝³ : AddGroup A
η : Type u_3
f : η → Type u_4
inst✝² : (i : η) → Group (f i)
inst✝¹ : Finite η
inst✝ : DecidableEq η
H : Subgroup ((i : η) → f i)
x : (i : η) → f i
h : ∀ (i : η), Pi.mulSingle i (x i) ∈ H
⊢ x ∈ H
state_after: case intro
G : Type u_1
inst✝⁴ : Group G
A : Type u_2
inst✝³ : AddGroup A
η : Type u_3
f : η → Type u_4
inst✝² : (i : η) → Group (f i)
inst✝¹ : Finite η
inst✝ : DecidableEq η
H : Subgroup ((i : η) → f i)
x : (i : η) → f i
h : ∀ (i : η), Pi.mulSingle i (x i) ∈ H
val✝ : Fintype η
⊢ x ∈ H
tactic: cases nonempty_fintype η
state_before: case intro
G : Type u_1
inst✝⁴ : Group G
A : Type u_2
inst✝³ : AddGroup A
η : Type u_3
f : η → Type u_4
inst✝² : (i : η) → Group (f i)
inst✝¹ : Finite η
inst✝ : DecidableEq η
H : Subgroup ((i : η) → f i)
x : (i : η) → f i
h : ∀ (i : η), Pi.mulSingle i (x i) ∈ H
val✝ : Fintype η
⊢ x ∈ H
state_after: no goals
tactic: exact pi_mem_of_mulSingle_mem_aux Finset.univ x (by simp) fun i _ => h i
Theorem: Metric.lipschitz_infDist_set
File: Mathlib/Topology/MetricSpace/Closeds.lean

Proof steps:
state_before: α : Type u
inst✝ : MetricSpace α
x : α
s t : NonemptyCompacts α
⊢ infDist x ↑s ≤ infDist x ↑t + dist s t
state_after: α : Type u
inst✝ : MetricSpace α
x : α
s t : NonemptyCompacts α
⊢ infDist x ↑s ≤ infDist x ↑t + dist t s
tactic: rw [dist_comm]
state_before: α : Type u
inst✝ : MetricSpace α
x : α
s t : NonemptyCompacts α
⊢ infDist x ↑s ≤ infDist x ↑t + dist t s
state_after: no goals
tactic: exact infDist_le_infDist_add_hausdorffDist (edist_ne_top t s)
Theorem: CategoryTheory.FunctorToTypes.prod_ext'
File: Mathlib/CategoryTheory/Limits/Shapes/FunctorToTypes.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
F G : C ⥤ Type w
a : C
z w : (F ⨯ G).obj a
h1 : Limits.prod.fst.app a z = Limits.prod.fst.app a w
h2 : Limits.prod.snd.app a z = Limits.prod.snd.app a w
⊢ z = w
state_after: case a
C : Type u
inst✝ : Category.{v, u} C
F G : C ⥤ Type w
a : C
z w : (F ⨯ G).obj a
h1 : Limits.prod.fst.app a z = Limits.prod.fst.app a w
h2 : Limits.prod.snd.app a z = Limits.prod.snd.app a w
⊢ (binaryProductEquiv F G a) z = (binaryProductEquiv F G a) w
tactic: apply Equiv.injective (binaryProductEquiv F G a)
state_before: case a
C : Type u
inst✝ : Category.{v, u} C
F G : C ⥤ Type w
a : C
z w : (F ⨯ G).obj a
h1 : Limits.prod.fst.app a z = Limits.prod.fst.app a w
h2 : Limits.prod.snd.app a z = Limits.prod.snd.app a w
⊢ (binaryProductEquiv F G a) z = (binaryProductEquiv F G a) w
state_after: no goals
tactic: aesop
Theorem: HahnSeries.single_coeff
File: Mathlib/RingTheory/HahnSeries/Basic.lean

Proof steps:
state_before: Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
⊢ ((single a) r).coeff b = if b = a then r else 0
state_after: no goals
tactic: split_ifs with h <;> simp [h]
Theorem: MeasureTheory.Measure.hausdorffMeasure_zero_singleton
File: Mathlib/MeasureTheory/Measure/Hausdorff.lean

Proof steps:
state_before: ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ μH[0] {x} = 1
state_after: case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ μH[0] {x} ≤ 1

case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ 1 ≤ μH[0] {x}
tactic: apply le_antisymm