ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: KuratowskiEmbedding.exists_isometric_embedding
File: Mathlib/Topology/MetricSpace/Kuratowski.lean

Proof steps:
state_before: α✝ : Type u
β : Type v
γ : Type w
f g : ↥(lp (fun i => ℝ) ⊤)
n : ℕ
C : ℝ
inst✝² : MetricSpace α✝
x : ℕ → α✝
a b : α✝
α : Type u
inst✝¹ : MetricSpace α
inst✝ : SeparableSpace α
⊢ ∃ f, Isometry f
state_after: case inl
α✝ : Type u
β : Type v
γ : Type w
f g : ↥(lp (fun i => ℝ) ⊤)
n : ℕ
C : ℝ
inst✝² : MetricSpace α✝
x : ℕ → α✝
a b : α✝
α : Type u
inst✝¹ : MetricSpace α
inst✝ : SeparableSpace α
h : univ = ∅
⊢ ∃ f, Isometry f

case inr
α✝ : Type u
β : Type v
γ : Type w
f g : ↥(lp (fun i => ℝ) ⊤)
n : ℕ
C : ℝ
inst✝² : MetricSpace α✝
x : ℕ → α✝
a b : α✝
α : Type u
inst✝¹ : MetricSpace α
inst✝ : SeparableSpace α
h : univ.Nonempty
⊢ ∃ f, Isometry f
tactic: rcases (univ : Set α).eq_empty_or_nonempty with h | h
Theorem: mem_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
⊢ s ∈ 𝓝ˢ ∅
state_after: no goals
tactic: simp
Theorem: MeasureTheory.Measure.sum_apply_eq_zero
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
m0 : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
f : α → β
inst✝ : Countable ι
μ : ι → Measure α
s : Set α
⊢ (sum μ) s = 0 ↔ ∀ (i : ι), (μ i) s = 0
state_after: no goals
tactic: simp [sum_apply_of_countable]
Theorem: UniqueFactorizationMonoid.exists_prime_factors
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a : α
⊢ a ≠ 0 → ∃ f, (∀ b ∈ f, Prime b) ∧ f.prod ~ᵤ a
state_after: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a : α
⊢ a ≠ 0 → ∃ f, (∀ b ∈ f, Irreducible b) ∧ f.prod ~ᵤ a
tactic: simp_rw [← UniqueFactorizationMonoid.irreducible_iff_prime]
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a : α
⊢ a ≠ 0 → ∃ f, (∀ b ∈ f, Irreducible b) ∧ f.prod ~ᵤ a
state_after: no goals
tactic: apply WfDvdMonoid.exists_factors a
Theorem: Nat.mul_dvd_mul_iff_left
File: Mathlib/Data/Nat/Defs.lean

Proof steps:
state_before: a b c d✝ m n k : ℕ
p q : ℕ → Prop
ha : 0 < a
d : ℕ
⊢ a * c = a * b * d ↔ c = b * d
state_after: no goals
tactic: rw [Nat.mul_assoc, Nat.mul_right_inj $ ne_of_gt ha]
Theorem: map_nhds_induced_of_surjective
File: Mathlib/Topology/Order.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type u_1
f✝ : α → β
ι : Sort u_2
T : TopologicalSpace α
f : β → α
hf : Surjective f
a : β
⊢ map f (𝓝 a) = 𝓝 (f a)
state_after: no goals
tactic: rw [nhds_induced, map_comap_of_surjective hf]
Theorem: CategoryTheory.PreGaloisCategory.has_decomp_connected_components'
File: Mathlib/CategoryTheory/Galois/Decomposition.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{u₂, u₁} C
inst✝ : GaloisCategory C
X : C
⊢ ∃ ι, ∃ (x : Finite ι), ∃ f x, ∀ (i : ι), IsConnected (f i)
state_after: case intro.intro.intro.intro.intro
C : Type u₁
inst✝¹ : Category.{u₂, u₁} C
inst✝ : GaloisCategory C
X : C
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
hf : Finite ι
⊢ ∃ ι, ∃ (x : Finite ι), ∃ f x, ∀ (i : ι), IsConnected (f i)
tactic: obtain ⟨ι, f, g, hl, hc, hf⟩ := has_decomp_connected_components X
state_before: case intro.intro.intro.intro.intro
C : Type u₁
inst✝¹ : Category.{u₂, u₁} C
inst✝ : GaloisCategory C
X : C
ι : Type
f : ι → C
g : (i : ι) → f i ⟶ X
hl : IsColimit (Cofan.mk X g)
hc : ∀ (i : ι), IsConnected (f i)
hf : Finite ι
⊢ ∃ ι, ∃ (x : Finite ι), ∃ f x, ∀ (i : ι), IsConnected (f i)
state_after: no goals
tactic: exact ⟨ι, hf, f, colimit.isoColimitCocone ⟨Cofan.mk X g, hl⟩, hc⟩
Theorem: Int.map_round
File: Mathlib/Algebra/Order/Floor.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝⁵ : LinearOrderedField α
inst✝⁴ : LinearOrderedField β
inst✝³ : FloorRing α
inst✝² : FloorRing β
inst✝¹ : FunLike F α β
inst✝ : RingHomClass F α β
a✝ : α
b : β
f : F
hf : StrictMono ⇑f
a : α
⊢ round (f a) = round a
state_after: F : Type u_1
α : Type u_2
β : Type u_3
inst✝⁵ : LinearOrderedField α
inst✝⁴ : LinearOrderedField β
inst✝³ : FloorRing α
inst✝² : FloorRing β
inst✝¹ : FunLike F α β
inst✝ : RingHomClass F α β
a✝ : α
b : β
f : F
hf : StrictMono ⇑f
a : α
H : f 2 = 2
⊢ round (f a) = round a
tactic: have H : f 2 = 2 := map_natCast f 2
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝⁵ : LinearOrderedField α
inst✝⁴ : LinearOrderedField β
inst✝³ : FloorRing α
inst✝² : FloorRing β
inst✝¹ : FunLike F α β
inst✝ : RingHomClass F α β
a✝ : α
b : β
f : F
hf : StrictMono ⇑f
a : α
H : f 2 = 2
⊢ round (f a) = round a
state_after: no goals
tactic: simp_rw [round_eq, ← map_floor _ hf, map_add, one_div, map_inv₀, H]
Theorem: Matroid.Restriction.finitary
File: Mathlib/Data/Matroid/Restrict.lean

Proof steps:
state_before: α : Type u_1
M✝ : Matroid α
R I J X Y : Set α
N M : Matroid α
inst✝ : M.Finitary
h : N ≤r M
⊢ N.Finitary
state_after: case intro.intro
α : Type u_1
M✝ : Matroid α
R✝ I J X Y : Set α
M : Matroid α
inst✝ : M.Finitary
R : Set α
⊢ (M ↾ R).Finitary
tactic: obtain ⟨R, -, rfl⟩ := h
state_before: case intro.intro
α : Type u_1
M✝ : Matroid α
R✝ I J X Y : Set α
M : Matroid α
inst✝ : M.Finitary
R : Set α
⊢ (M ↾ R).Finitary
state_after: no goals
tactic: infer_instance
Theorem: Finset.prod_univ_sum
File: Mathlib/Algebra/BigOperators/Ring.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
κ : ι → Type u_5
s s₁ s₂ : Finset ι
i : ι
a : α
f✝ g : ι → α
inst✝² : CommSemiring α
inst✝¹ : DecidableEq ι
inst✝ : Fintype ι
t : (i : ι) → Finset (κ i)
f : (i : ι) → κ i → α
⊢ ∏ i : ι, ∑ j ∈ t i, f i j = ∑ x ∈ piFinset t, ∏ i : ι, f i (x i)
state_after: no goals
tactic: simp only [prod_attach_univ, prod_sum, Finset.sum_univ_pi]
Theorem: norm_algebraMap
File: Mathlib/Analysis/Normed/Module/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
F : Type u_4
α : Type u_5
inst✝² : NormedField 𝕜
inst✝¹ : SeminormedRing 𝕜'
inst✝ : NormedAlgebra 𝕜 𝕜'
x : 𝕜
⊢ ‖(algebraMap 𝕜 𝕜') x‖ = ‖x‖ * ‖1‖
state_after: 𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
F : Type u_4
α : Type u_5
inst✝² : NormedField 𝕜
inst✝¹ : SeminormedRing 𝕜'
inst✝ : NormedAlgebra 𝕜 𝕜'
x : 𝕜
⊢ ‖x • 1‖ = ‖x‖ * ‖1‖
tactic: rw [Algebra.algebraMap_eq_smul_one]
state_before: 𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
F : Type u_4
α : Type u_5
inst✝² : NormedField 𝕜
inst✝¹ : SeminormedRing 𝕜'
inst✝ : NormedAlgebra 𝕜 𝕜'
x : 𝕜
⊢ ‖x • 1‖ = ‖x‖ * ‖1‖
state_after: no goals
tactic: exact norm_smul _ _
Theorem: Multiset.cons_ndinter_of_mem
File: Mathlib/Data/Multiset/FinsetOps.lean

Proof steps:
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
h : a ∈ t
⊢ (a ::ₘ s).ndinter t = a ::ₘ s.ndinter t
state_after: no goals
tactic: simp [ndinter, h]
Theorem: summable_div_const_iff
File: Mathlib/Topology/Algebra/InfiniteSum/Ring.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
R : Type u_3
α : Type u_4
inst✝² : DivisionSemiring α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSemiring α
f g : ι → α
a a₁ a₂ : α
h : a ≠ 0
⊢ (Summable fun i => f i / a) ↔ Summable f
state_after: no goals
tactic: simpa only [div_eq_mul_inv] using summable_mul_right_iff (inv_ne_zero h)
Theorem: MvPowerSeries.zero_inv
File: Mathlib/RingTheory/MvPowerSeries/Inverse.lean

Proof steps:
state_before: σ : Type u_1
R : Type u_2
k : Type u_3
inst✝ : Field k
⊢ 0⁻¹ = 0
state_after: no goals
tactic: rw [inv_eq_zero, constantCoeff_zero]
Theorem: FirstOrder.Language.Term.relabel_id
File: Mathlib/ModelTheory/Syntax.lean

Proof steps:
state_before: L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
t : L.Term α
⊢ relabel id t = t
state_after: case var
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
a✝ : α
⊢ relabel id (var a✝) = var a✝

case func
L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
l✝ : ℕ
_f✝ : L.Functions l✝
_ts✝ : Fin l✝ → L.Term α
ih : ∀ (a : Fin l✝), relabel id (_ts✝ a) = _ts✝ a
⊢ relabel id (func _f✝ _ts✝) = func _f✝ _ts✝
tactic: induction' t with _ _ _ _ ih
Theorem: Set.IsWF.min_mul
File: Mathlib/Data/Finset/MulAntidiagonal.lean

Proof steps:
state_before: α : Type u_1
s t : Set α
inst✝ : LinearOrderedCancelCommMonoid α
hs : s.IsWF
ht : t.IsWF
hsn : s.Nonempty
htn : t.Nonempty
⊢ ⋯.min ⋯ = hs.min hsn * ht.min htn
state_after: α : Type u_1
s t : Set α
inst✝ : LinearOrderedCancelCommMonoid α
hs : s.IsWF
ht : t.IsWF
hsn : s.Nonempty
htn : t.Nonempty
⊢ hs.min hsn * ht.min htn ≤ ⋯.min ⋯
tactic: refine le_antisymm (IsWF.min_le _ _ (mem_mul.2 ⟨_, hs.min_mem _, _, ht.min_mem _, rfl⟩)) ?_
state_before: α : Type u_1
s t : Set α
inst✝ : LinearOrderedCancelCommMonoid α
hs : s.IsWF
ht : t.IsWF
hsn : s.Nonempty
htn : t.Nonempty
⊢ hs.min hsn * ht.min htn ≤ ⋯.min ⋯
state_after: α : Type u_1
s t : Set α
inst✝ : LinearOrderedCancelCommMonoid α
hs : s.IsWF
ht : t.IsWF
hsn : s.Nonempty
htn : t.Nonempty
⊢ ∀ b ∈ s * t, hs.min hsn * ht.min htn ≤ b
tactic: rw [IsWF.le_min_iff]
state_before: α : Type u_1
s t : Set α
inst✝ : LinearOrderedCancelCommMonoid α
hs : s.IsWF
ht : t.IsWF
hsn : s.Nonempty
htn : t.Nonempty
⊢ ∀ b ∈ s * t, hs.min hsn * ht.min htn ≤ b
state_after: case intro.intro.intro.intro
α : Type u_1
s t : Set α
inst✝ : LinearOrderedCancelCommMonoid α
hs : s.IsWF
ht : t.IsWF
hsn : s.Nonempty
htn : t.Nonempty
x : α
hx : x ∈ s
y : α
hy : y ∈ t
⊢ hs.min hsn * ht.min htn ≤ (fun x x_1 => x * x_1) x y
tactic: rintro _ ⟨x, hx, y, hy, rfl⟩
state_before: case intro.intro.intro.intro
α : Type u_1
s t : Set α
inst✝ : LinearOrderedCancelCommMonoid α
hs : s.IsWF
ht : t.IsWF
hsn : s.Nonempty
htn : t.Nonempty
x : α
hx : x ∈ s
y : α
hy : y ∈ t
⊢ hs.min hsn * ht.min htn ≤ (fun x x_1 => x * x_1) x y
state_after: no goals
tactic: exact mul_le_mul' (hs.min_le _ hx) (ht.min_le _ hy)
Theorem: mul_inv_lt_iff_lt_mul
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⁻¹ < c ↔ a < c * b
state_after: no goals
tactic: rw [← mul_lt_mul_iff_right b, inv_mul_cancel_right]
Theorem: Polynomial.coeff_monomial_succ
File: Mathlib/Algebra/Polynomial/Basic.lean

Proof steps:
state_before: R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ ((monomial (n + 1)) a).coeff 0 = 0
state_after: no goals
tactic: simp [coeff_monomial]
Theorem: Finset.map_swap_product
File: Mathlib/Data/Finset/Prod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s' : Finset α
t✝ t' : Finset β
a : α
b : β
s : Finset α
t : Finset β
⊢ ↑(map { toFun := Prod.swap, inj' := ⋯ } (t ×ˢ s)) = ↑(s ×ˢ t)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s' : Finset α
t✝ t' : Finset β
a : α
b : β
s : Finset α
t : Finset β
⊢ ⇑{ toFun := Prod.swap, inj' := ⋯ } '' ↑t ×ˢ ↑s = ↑s ×ˢ ↑t
tactic: push_cast
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s' : Finset α
t✝ t' : Finset β
a : α
b : β
s : Finset α
t : Finset β
⊢ ⇑{ toFun := Prod.swap, inj' := ⋯ } '' ↑t ×ˢ ↑s = ↑s ×ˢ ↑t
state_after: no goals
tactic: exact Set.image_swap_prod _ _
Theorem: TwoSidedIdeal.mem_sup
File: Mathlib/RingTheory/TwoSidedIdeal/Lattice.lean

Proof steps:
state_before: R : Type u_1
inst✝ : NonUnitalNonAssocRing R
I J : TwoSidedIdeal R
x : R
⊢ x ∈ I ⊔ J ↔ ∃ y ∈ I, ∃ z ∈ J, y + z = x
state_after: case mp
R : Type u_1
inst✝ : NonUnitalNonAssocRing R
I J : TwoSidedIdeal R
x : R
⊢ x ∈ I ⊔ J → ∃ y ∈ I, ∃ z ∈ J, y + z = x

case mpr
R : Type u_1
inst✝ : NonUnitalNonAssocRing R
I J : TwoSidedIdeal R
x : R
⊢ (∃ y ∈ I, ∃ z ∈ J, y + z = x) → x ∈ I ⊔ J
tactic: constructor
Theorem: Subgroup.index_comap
File: Mathlib/GroupTheory/Index.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
H K L : Subgroup G
f : G' →* G
⊢ comap f H = comap f.rangeRestrict (H.subgroupOf f.range)
state_after: no goals
tactic: rfl
Theorem: legendreSym.at_neg_one
File: Mathlib/NumberTheory/LegendreSymbol/Basic.lean

Proof steps:
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
hp : p ≠ 2
⊢ legendreSym p (-1) = χ₄ ↑p
state_after: no goals
tactic: simp only [legendreSym, card p, quadraticChar_neg_one ((ringChar_zmod_n p).substr hp),
    Int.cast_neg, Int.cast_one]
Theorem: MeasureTheory.Measure.bind_dirac
File: Mathlib/MeasureTheory/Measure/GiryMonad.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
f : α → Measure β
hf : Measurable f
a : α
⊢ (dirac a).bind f = f a
state_after: case h
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
f : α → Measure β
hf : Measurable f
a : α
s : Set β
hs : MeasurableSet s
⊢ ((dirac a).bind f) s = (f a) s
tactic: ext1 s hs
state_before: case h
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
f : α → Measure β
hf : Measurable f
a : α
s : Set β
hs : MeasurableSet s
⊢ ((dirac a).bind f) s = (f a) s
state_after: case h
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
f : α → Measure β
hf : Measurable f
a : α
s : Set β
hs : MeasurableSet s
⊢ ((fun μ => μ s) ∘ f) a = (f a) s
tactic: erw [bind_apply hs hf, lintegral_dirac' a ((measurable_coe hs).comp hf)]
state_before: case h
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
f : α → Measure β
hf : Measurable f
a : α
s : Set β
hs : MeasurableSet s
⊢ ((fun μ => μ s) ∘ f) a = (f a) s
state_after: no goals
tactic: rfl
Theorem: Batteries.TransCmp.compareOfLessAndEq
File: .lake/packages/batteries/Batteries/Classes/Order.lean

Proof steps:
state_before: α : Type u_1
inst✝² : LT α
inst✝¹ : DecidableRel LT.lt
inst✝ : DecidableEq α
lt_irrefl : ∀ (x : α), ¬x < x
lt_trans : ∀ {x y z : α}, x < y → y < z → x < z
lt_antisymm : ∀ {x y : α}, ¬x < y → ¬y < x → x = y
this : OrientedCmp fun x x_1 => compareOfLessAndEq x x_1
⊢ TransCmp fun x x_1 => compareOfLessAndEq x x_1
state_after: α : Type u_1
inst✝² : LT α
inst✝¹ : DecidableRel LT.lt
inst✝ : DecidableEq α
lt_irrefl : ∀ (x : α), ¬x < x
lt_trans : ∀ {x y z : α}, x < y → y < z → x < z
lt_antisymm : ∀ {x y : α}, ¬x < y → ¬y < x → x = y
this : OrientedCmp fun x x_1 => compareOfLessAndEq x x_1
x y z : α
yx : compareOfLessAndEq x y ≠ Ordering.gt
zy : compareOfLessAndEq y z ≠ Ordering.gt
⊢ compareOfLessAndEq x z ≠ Ordering.gt
tactic: refine { this with le_trans := fun {x y z} yx zy => ?_ }
state_before: α : Type u_1
inst✝² : LT α
inst✝¹ : DecidableRel LT.lt
inst✝ : DecidableEq α
lt_irrefl : ∀ (x : α), ¬x < x
lt_trans : ∀ {x y z : α}, x < y → y < z → x < z
lt_antisymm : ∀ {x y : α}, ¬x < y → ¬y < x → x = y
this : OrientedCmp fun x x_1 => compareOfLessAndEq x x_1
x y z : α
yx : compareOfLessAndEq x y ≠ Ordering.gt
zy : compareOfLessAndEq y z ≠ Ordering.gt
⊢ compareOfLessAndEq x z ≠ Ordering.gt
state_after: α : Type u_1
inst✝² : LT α
inst✝¹ : DecidableRel LT.lt
inst✝ : DecidableEq α
lt_irrefl : ∀ (x : α), ¬x < x
lt_trans : ∀ {x y z : α}, x < y → y < z → x < z
lt_antisymm : ∀ {x y : α}, ¬x < y → ¬y < x → x = y
this : OrientedCmp fun x x_1 => compareOfLessAndEq x x_1
x y z : α
yx : ¬y < x
zy : ¬z < y
⊢ ¬z < x
tactic: rw [Ne, this.cmp_eq_gt, compareOfLessAndEq_eq_lt] at yx zy ⊢
state_before: α : Type u_1
inst✝² : LT α
inst✝¹ : DecidableRel LT.lt
inst✝ : DecidableEq α
lt_irrefl : ∀ (x : α), ¬x < x
lt_trans : ∀ {x y z : α}, x < y → y < z → x < z
lt_antisymm : ∀ {x y : α}, ¬x < y → ¬y < x → x = y
this : OrientedCmp fun x x_1 => compareOfLessAndEq x x_1
x y z : α
yx : ¬y < x
zy : ¬z < y
⊢ ¬z < x
state_after: α : Type u_1
inst✝² : LT α
inst✝¹ : DecidableRel LT.lt
inst✝ : DecidableEq α
lt_irrefl : ∀ (x : α), ¬x < x
lt_trans : ∀ {x y z : α}, x < y → y < z → x < z
lt_antisymm : ∀ {x y : α}, ¬x < y → ¬y < x → x = y
this : OrientedCmp fun x x_1 => compareOfLessAndEq x x_1
x y z : α
yx : ¬y < x
zy : ¬z < y
zx : z < x
⊢ False
tactic: intro zx
state_before: α : Type u_1
inst✝² : LT α
inst✝¹ : DecidableRel LT.lt
inst✝ : DecidableEq α
lt_irrefl : ∀ (x : α), ¬x < x
lt_trans : ∀ {x y z : α}, x < y → y < z → x < z
lt_antisymm : ∀ {x y : α}, ¬x < y → ¬y < x → x = y
this : OrientedCmp fun x x_1 => compareOfLessAndEq x x_1
x y z : α
yx : ¬y < x
zy : ¬z < y
zx : z < x
⊢ False
state_after: no goals
tactic: if xy : x < y then exact zy (lt_trans zx xy)
  else exact zy (lt_antisymm yx xy ▸ zx)
Theorem: LinearMap.IsSymmetric.orthogonalComplement_iSup_eigenspaces_eq_bot'
File: Mathlib/Analysis/InnerProductSpace/Spectrum.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
hT : T.IsSymmetric
inst✝ : FiniteDimensional 𝕜 E
⊢ (⨆ μ, eigenspace T ↑μ)ᗮ = ⊥
state_after: no goals
tactic: rw [iSup_ne_bot_subtype, hT.orthogonalComplement_iSup_eigenspaces_eq_bot]
Theorem: Set.univ_pi_piecewise
File: Mathlib/Data/Set/Function.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Sort u_4
π : α✝ → Type u_5
δ : α✝ → Sort u_6
s✝ : Set α✝
f g : (i : α✝) → δ i
inst✝¹ : (j : α✝) → Decidable (j ∈ s✝)
ι : Type u_7
α : ι → Type u_8
s : Set ι
t t' : (i : ι) → Set (α i)
inst✝ : (x : ι) → Decidable (x ∈ s)
⊢ univ.pi (s.piecewise t t') = s.pi t ∩ sᶜ.pi t'
state_after: no goals
tactic: simp [compl_eq_univ_diff]
Theorem: one_le_mabs
File: Mathlib/Algebra/Order/Group/Unbundled/Abs.lean

Proof steps:
state_before: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ mabs a
state_after: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ mabs a ^ 2
tactic: apply pow_two_semiclosed _
state_before: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ mabs a ^ 2
state_after: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ (a ⊔ a⁻¹) * a⁻¹ ⊔ a ^ 2 ⊔ 1
tactic: rw [mabs, pow_two, mul_sup,  sup_mul, ← pow_two, mul_left_inv, sup_comm, ← sup_assoc]
state_before: α : Type u_1
inst✝³ : Lattice α
inst✝² : Group α
a✝ b : α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ 1 ≤ (a ⊔ a⁻¹) * a⁻¹ ⊔ a ^ 2 ⊔ 1
state_after: no goals
tactic: apply le_sup_right
Theorem: MonoidHom.ext_mnat
File: Mathlib/Data/Nat/Cast/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Monoid α
inst✝ : AddMonoid β
f g : Multiplicative ℕ →* α
h : f (ofAdd 1) = g (ofAdd 1)
n : Multiplicative ℕ
⊢ f n = g n
state_after: no goals
tactic: rw [f.apply_mnat, g.apply_mnat, h]
Theorem: Submodule.prodEquivOfIsCompl_symm_apply_fst_eq_zero
File: Mathlib/LinearAlgebra/Projection.lean

Proof steps:
state_before: R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
h : IsCompl p q
x : E
⊢ ((p.prodEquivOfIsCompl q h).symm x).1 = 0 ↔ x ∈ q
state_after: R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
h : IsCompl p q
x : E
⊢ ((p.prodEquivOfIsCompl q h).symm x).1 = 0 ↔ (p.prodEquivOfIsCompl q h) ((p.prodEquivOfIsCompl q h).symm x) ∈ q
tactic: conv_rhs => rw [← (prodEquivOfIsCompl p q h).apply_symm_apply x]
state_before: R : Type u_1
inst✝⁹ : Ring R
E : Type u_2
inst✝⁸ : AddCommGroup E
inst✝⁷ : Module R E
F : Type u_3
inst✝⁶ : AddCommGroup F
inst✝⁵ : Module R F
G : Type u_4
inst✝⁴ : AddCommGroup G
inst✝³ : Module R G
p q : Submodule R E
S : Type u_5
inst✝² : Semiring S
M : Type u_6
inst✝¹ : AddCommMonoid M
inst✝ : Module S M
m : Submodule S M
h : IsCompl p q
x : E
⊢ ((p.prodEquivOfIsCompl q h).symm x).1 = 0 ↔ (p.prodEquivOfIsCompl q h) ((p.prodEquivOfIsCompl q h).symm x) ∈ q
state_after: no goals
tactic: rw [coe_prodEquivOfIsCompl', Submodule.add_mem_iff_left _ (Submodule.coe_mem _),
    mem_right_iff_eq_zero_of_disjoint h.disjoint]
Theorem: CategoryTheory.ShortComplex.exact_kernel
File: Mathlib/CategoryTheory/Abelian/Exact.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : Abelian C
S : ShortComplex C
X Y : C
f : X ⟶ Y
⊢ kernel.ι f ≫ f = 0
state_after: no goals
tactic: simp
Theorem: Set.image_sub_const_Icc
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ (fun x => x - a) '' Icc b c = Icc (b - a) (c - a)
state_after: no goals
tactic: simp [sub_eq_neg_add]
Theorem: Associated.prod
File: Mathlib/Algebra/BigOperators/Associated.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
M : Type u_5
inst✝ : CommMonoid M
ι : Type u_6
s : Finset ι
f g : ι → M
h : ∀ i ∈ s, f i ~ᵤ g i
⊢ ∏ i ∈ s, f i ~ᵤ ∏ i ∈ s, g i
state_after: no goals
tactic: induction s using Finset.induction with
  | empty =>
    simp only [Finset.prod_empty]
    rfl
  | @insert j s hjs IH =>
    classical
    convert_to (∏ i ∈ insert j s, f i) ~ᵤ (∏ i ∈ insert j s, g i)
    rw [Finset.prod_insert hjs, Finset.prod_insert hjs]
    exact Associated.mul_mul (h j (Finset.mem_insert_self j s))
      (IH (fun i hi ↦ h i (Finset.mem_insert_of_mem hi)))
Theorem: CategoryTheory.CosimplicialObject.δ_comp_δ
File: Mathlib/AlgebraicTopology/SimplicialObject.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X : CosimplicialObject C
n : ℕ
i j : Fin (n + 2)
H : i ≤ j
⊢ X.δ i ≫ X.δ j.succ = X.δ j ≫ X.δ i.castSucc
state_after: C : Type u
inst✝ : Category.{v, u} C
X : CosimplicialObject C
n : ℕ
i j : Fin (n + 2)
H : i ≤ j
⊢ X.map (SimplexCategory.δ i) ≫ X.map (SimplexCategory.δ j.succ) =
    X.map (SimplexCategory.δ j) ≫ X.map (SimplexCategory.δ i.castSucc)
tactic: dsimp [δ]
state_before: C : Type u
inst✝ : Category.{v, u} C
X : CosimplicialObject C
n : ℕ
i j : Fin (n + 2)
H : i ≤ j
⊢ X.map (SimplexCategory.δ i) ≫ X.map (SimplexCategory.δ j.succ) =
    X.map (SimplexCategory.δ j) ≫ X.map (SimplexCategory.δ i.castSucc)
state_after: no goals
tactic: simp only [← X.map_comp, SimplexCategory.δ_comp_δ H]
Theorem: PartialEquiv.EqOnSource.source_inter_preimage_eq
File: Mathlib/Logic/Equiv/PartialEquiv.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
e✝ : PartialEquiv α β
e'✝ : PartialEquiv β γ
e e' : PartialEquiv α β
he : e ≈ e'
s : Set β
⊢ e.source ∩ ↑e ⁻¹' s = e'.source ∩ ↑e' ⁻¹' s
state_after: no goals
tactic: rw [he.eqOn.inter_preimage_eq, source_eq he]
Theorem: CategoryTheory.epi_of_epi_fac
File: Mathlib/CategoryTheory/Category/Basic.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h : X ⟶ Z
inst✝ : Epi h
w : f ≫ g = h
⊢ Epi g
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : Epi (f ≫ g)
⊢ Epi g
tactic: subst h
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : Epi (f ≫ g)
⊢ Epi g
state_after: no goals
tactic: exact epi_of_epi f g