ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Stonean.pullback.hom_ext
File: Mathlib/Topology/Category/Stonean/Limits.lean

Proof steps:
state_before: X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
hfst : a ≫ fst f hi = b ≫ fst f hi
⊢ a = b
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
hfst : a ≫ fst f hi = b ≫ fst f hi
z : (forget Stonean).obj W
⊢ a z = b z
tactic: ext z
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
hfst : a ≫ fst f hi = b ≫ fst f hi
z : (forget Stonean).obj W
⊢ a z = b z
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ a z = b z
tactic: apply_fun (fun q => q z) at hfst
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ a z = b z
state_after: case w.a
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ ↑(a z) = ↑(b z)
tactic: apply Subtype.ext
state_before: case w.a
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ ↑(a z) = ↑(b z)
state_after: no goals
tactic: exact hfst
Theorem: ENNReal.coe_toNNReal_le_self
File: Mathlib/Data/ENNReal/Basic.lean

Proof steps:
state_before: α : Type u_1
a b c d : ℝ≥0∞
r✝ p q r : ℝ≥0
⊢ ↑(↑r).toNNReal ≤ ↑r
state_after: no goals
tactic: rw [toNNReal_coe]
Theorem: Composition.toCompositionAsSet_length
File: Mathlib/Combinatorics/Enumerative/Composition.lean

Proof steps:
state_before: n : ℕ
c : Composition n
⊢ c.toCompositionAsSet.length = c.length
state_after: no goals
tactic: simp [Composition.toCompositionAsSet, CompositionAsSet.length, c.card_boundaries_eq_succ_length]
Theorem: CochainComplex.mappingCone.inr_snd
File: Mathlib/Algebra/Homology/HomotopyCategory/MappingCone.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{?u.37511, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
⊢ (Cochain.ofHom (inr φ)).comp (snd φ) ⋯ = Cochain.ofHom (𝟙 G)
state_after: no goals
tactic: aesop_cat
Theorem: Polynomial.prod_multiset_X_sub_C_of_monic_of_roots_card_eq
File: Mathlib/Algebra/Polynomial/Roots.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
hp : p.Monic
hroots : Multiset.card p.roots = p.natDegree
⊢ (Multiset.map (fun a => X - C a) p.roots).prod = p
state_after: case h.e'_2
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
hp : p.Monic
hroots : Multiset.card p.roots = p.natDegree
⊢ (Multiset.map (fun a => X - C a) p.roots).prod = C p.leadingCoeff * (Multiset.map (fun a => X - C a) p.roots).prod
tactic: convert C_leadingCoeff_mul_prod_multiset_X_sub_C hroots
state_before: case h.e'_2
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
hp : p.Monic
hroots : Multiset.card p.roots = p.natDegree
⊢ (Multiset.map (fun a => X - C a) p.roots).prod = C p.leadingCoeff * (Multiset.map (fun a => X - C a) p.roots).prod
state_after: no goals
tactic: rw [hp.leadingCoeff, C_1, one_mul]
Theorem: CategoryTheory.NatTrans.CommShift.shift_app
File: Mathlib/CategoryTheory/Shift/CommShift.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
E : Type u_3
J : Type u_4
inst✝¹⁵ : Category.{u_7, u_1} C
inst✝¹⁴ : Category.{u_6, u_2} D
inst✝¹³ : Category.{?u.106857, u_3} E
inst✝¹² : Category.{?u.106861, u_4} J
F₁ F₂ F₃ : C ⥤ D
τ : F₁ ⟶ F₂
τ' : F₂ ⟶ F₃
e : F₁ ≅ F₂
G G' : D ⥤ E
τ'' : G ⟶ G'
H : E ⥤ J
A : Type u_5
inst✝¹¹ : AddMonoid A
inst✝¹⁰ : HasShift C A
inst✝⁹ : HasShift D A
inst✝⁸ : HasShift E A
inst✝⁷ : HasShift J A
inst✝⁶ : F₁.CommShift A
inst✝⁵ : F₂.CommShift A
inst✝⁴ : F₃.CommShift A
inst✝³ : G.CommShift A
inst✝² : G'.CommShift A
inst✝¹ : H.CommShift A
inst✝ : CommShift τ A
a : A
X : C
⊢ (shiftFunctor D a).map (τ.app X) =
    (F₁.commShiftIso a).inv.app X ≫ τ.app ((shiftFunctor C a).obj X) ≫ (F₂.commShiftIso a).hom.app X
state_after: no goals
tactic: rw [← comm_app, Iso.inv_hom_id_app_assoc]
Theorem: Setoid.rel_iff_exists_classes
File: Mathlib/Data/Setoid/Partition.lean

Proof steps:
state_before: α : Type u_1
r : Setoid α
x y : α
x✝ : ∃ c ∈ r.classes, x ∈ c ∧ y ∈ c
c : Set α
z : α
hz : c = {x | r.Rel x z}
hx : x ∈ c
hy : y ∈ c
⊢ r.Rel x y
state_after: α : Type u_1
r : Setoid α
x y : α
x✝ : ∃ c ∈ r.classes, x ∈ c ∧ y ∈ c
z : α
hx : x ∈ {x | r.Rel x z}
hy : y ∈ {x | r.Rel x z}
⊢ r.Rel x y
tactic: subst c
state_before: α : Type u_1
r : Setoid α
x y : α
x✝ : ∃ c ∈ r.classes, x ∈ c ∧ y ∈ c
z : α
hx : x ∈ {x | r.Rel x z}
hy : y ∈ {x | r.Rel x z}
⊢ r.Rel x y
state_after: no goals
tactic: exact r.trans' hx (r.symm' hy)
Theorem: CategoryTheory.Subgroupoid.IsNormal.conj'
File: Mathlib/CategoryTheory/Groupoid/Subgroupoid.lean

Proof steps:
state_before: C : Type u
inst✝ : Groupoid C
S✝ S : Subgroupoid C
Sn : S.IsNormal
c✝ d✝ : C
p : d✝ ⟶ c✝
γ : c✝ ⟶ c✝
hs : γ ∈ S.arrows c✝ c✝
⊢ p ≫ γ ≫ Groupoid.inv p ∈ S.arrows d✝ d✝
state_after: case h.e'_4.h.e'_6
C : Type u
inst✝ : Groupoid C
S✝ S : Subgroupoid C
Sn : S.IsNormal
c✝ d✝ : C
p : d✝ ⟶ c✝
γ : c✝ ⟶ c✝
hs : γ ∈ S.arrows c✝ c✝
⊢ p = Groupoid.inv (Groupoid.inv p)
tactic: convert Sn.conj (Groupoid.inv p) hs
state_before: case h.e'_4.h.e'_6
C : Type u
inst✝ : Groupoid C
S✝ S : Subgroupoid C
Sn : S.IsNormal
c✝ d✝ : C
p : d✝ ⟶ c✝
γ : c✝ ⟶ c✝
hs : γ ∈ S.arrows c✝ c✝
⊢ p = Groupoid.inv (Groupoid.inv p)
state_after: no goals
tactic: simp
Theorem: Real.isTheta_exp_comp_exp_comp
File: Mathlib/Analysis/SpecialFunctions/Exp.lean

Proof steps:
state_before: α : Type u_1
x y z : ℝ
l : Filter α
f g : α → ℝ
⊢ ((fun x => rexp (f x)) =Θ[l] fun x => rexp (g x)) ↔ IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun x => |f x - g x|
state_after: no goals
tactic: simp only [isBoundedUnder_le_abs, ← isBoundedUnder_le_neg, neg_sub, IsTheta,
    isBigO_exp_comp_exp_comp, Pi.sub_def]
Theorem: LieModuleHom.coe_mk
File: Mathlib/Algebra/Lie/Basic.lean

Proof steps:
state_before: R : Type u
L : Type v
M : Type w
N : Type w₁
P : Type w₂
inst✝¹⁴ : CommRing R
inst✝¹³ : LieRing L
inst✝¹² : LieAlgebra R L
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : AddCommGroup N
inst✝⁹ : AddCommGroup P
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieRingModule L N
inst✝³ : LieRingModule L P
inst✝² : LieModule R L M
inst✝¹ : LieModule R L N
inst✝ : LieModule R L P
f : M →ₗ[R] N
h : ∀ {x : L} {m : M}, f.toFun ⁅x, m⁆ = ⁅x, f.toFun m⁆
⊢ ⇑{ toLinearMap := f, map_lie' := h } = ⇑f
state_after: no goals
tactic: rfl
Theorem: DiscreteTopology.preimage_of_continuous_injective
File: Mathlib/Topology/Constructions.lean

Proof steps:
state_before: X✝ : Type u
Y✝ : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace X✝
inst✝⁴ : TopologicalSpace Y✝
inst✝³ : TopologicalSpace Z
p : X✝ → Prop
X : Type u_5
Y : Type u_6
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s : Set Y
inst✝ : DiscreteTopology ↑s
f : X → Y
hc : Continuous f
hinj : Injective f
⊢ MapsTo f (f ⁻¹' s) s
state_after: no goals
tactic: exact fun _ x ↦ x
Theorem: Fin.rev_lt_iff
File: Mathlib/Data/Fin/Basic.lean

Proof steps:
state_before: n m : ℕ
i j : Fin n
⊢ i.rev < j ↔ j.rev < i
state_after: no goals
tactic: rw [← rev_lt_rev, rev_rev]
Theorem: Ordinal.nfp_zero_mul
File: Mathlib/SetTheory/Ordinal/FixedPoint.lean

Proof steps:
state_before: ⊢ nfp (HMul.hMul 0) = id
state_after: ⊢ (fun a => sup fun n => (HMul.hMul 0)^[n] a) = id
tactic: rw [← sup_iterate_eq_nfp]
state_before: a : Ordinal.{u_1}
n : ℕ
⊢ (HMul.hMul 0)^[n] a ≤ id a
state_after: case zero
a : Ordinal.{u_1}
⊢ (HMul.hMul 0)^[0] a ≤ id a

case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ (HMul.hMul 0)^[n + 1] a ≤ id a
tactic: induction' n with n _
state_before: case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ (HMul.hMul 0)^[n + 1] a ≤ id a
state_after: case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ (HMul.hMul 0 ∘ (HMul.hMul 0)^[n]) a ≤ id a
tactic: rw [Function.iterate_succ']
state_before: case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ (HMul.hMul 0 ∘ (HMul.hMul 0)^[n]) a ≤ id a
state_after: case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ 0 * (HMul.hMul 0)^[n] a ≤ a
tactic: change 0 * _ ≤ a
state_before: case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ 0 * (HMul.hMul 0)^[n] a ≤ a
state_after: case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ 0 ≤ a
tactic: rw [zero_mul]
state_before: case succ
a : Ordinal.{u_1}
n : ℕ
a✝ : (HMul.hMul 0)^[n] a ≤ id a
⊢ 0 ≤ a
state_after: no goals
tactic: exact Ordinal.zero_le a
Theorem: Set.image2_iInter_subset_right
File: Mathlib/Data/Set/Lattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
f : α → β → γ
s✝ : Set α
t✝ : Set β
s : Set α
t : ι → Set β
⊢ image2 f s (⋂ i, t i) ⊆ ⋂ i, image2 f s (t i)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
f : α → β → γ
s✝ : Set α
t✝ : Set β
s : Set α
t : ι → Set β
⊢ ∀ x ∈ s, ∀ (y : β), (∀ (i : ι), y ∈ t i) → ∀ (i : ι), f x y ∈ image2 f s (t i)
tactic: simp_rw [image2_subset_iff, mem_iInter]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
f : α → β → γ
s✝ : Set α
t✝ : Set β
s : Set α
t : ι → Set β
⊢ ∀ x ∈ s, ∀ (y : β), (∀ (i : ι), y ∈ t i) → ∀ (i : ι), f x y ∈ image2 f s (t i)
state_after: no goals
tactic: exact fun x hx y hy i => mem_image2_of_mem hx (hy _)
Theorem: Ordinal.blsub_lt_ord_lift
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

Proof steps:
state_before: α : Type u_1
r : α → α → Prop
o : Ordinal.{u}
f : (a : Ordinal.{u}) → a < o → Ordinal.{max u v}
c : Ordinal.{max u v}
ho : Cardinal.lift.{v, u} o.card < c.cof
hf : ∀ (i : Ordinal.{u}) (hi : i < o), f i hi < c
h : o.blsub f = c
⊢ c.cof ≤ Cardinal.lift.{v, u} o.card
state_after: no goals
tactic: simpa [← iSup_ord, hf, h] using cof_blsub_le_lift.{u, v} f
Theorem: max_assoc
File: Mathlib/Init/Order/LinearOrder.lean

Proof steps:
state_before: α : Type u
inst✝ : LinearOrder α
a b c : α
⊢ max (max a b) c = max a (max b c)
state_after: case h₁
α : Type u
inst✝ : LinearOrder α
a b c : α
⊢ a ≤ max (max a b) c

case h₂
α : Type u
inst✝ : LinearOrder α
a b c : α
⊢ max b c ≤ max (max a b) c

case h₃
α : Type u
inst✝ : LinearOrder α
a b c : α
⊢ ∀ {d : α}, a ≤ d → max b c ≤ d → max (max a b) c ≤ d
tactic: apply eq_max
Theorem: List.prod_isUnit
File: Mathlib/Algebra/BigOperators/Group/List.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l l₁ l₂ : List M
a : M
x✝ : ∀ m ∈ [], IsUnit m
⊢ IsUnit [].prod
state_after: no goals
tactic: simp
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l l₁ l₂ : List M
a h : M
t : List M
u : ∀ m ∈ h :: t, IsUnit m
⊢ IsUnit (h :: t).prod
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l l₁ l₂ : List M
a h : M
t : List M
u : ∀ m ∈ h :: t, IsUnit m
⊢ IsUnit (h * t.prod)
tactic: simp only [List.prod_cons]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l l₁ l₂ : List M
a h : M
t : List M
u : ∀ m ∈ h :: t, IsUnit m
⊢ IsUnit (h * t.prod)
state_after: no goals
tactic: exact IsUnit.mul (u h (mem_cons_self h t)) (prod_isUnit fun m mt => u m (mem_cons_of_mem h mt))
Theorem: Complex.mul_I_im
File: Mathlib/Data/Complex/Basic.lean

Proof steps:
state_before: z : ℂ
⊢ (z * I).im = z.re
state_after: no goals
tactic: simp
Theorem: MeasureTheory.SimpleFunc.pair_preimage_singleton
File: Mathlib/MeasureTheory/Function/SimpleFunc.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : MeasurableSpace α
f : α →ₛ β
g : α →ₛ γ
b : β
c : γ
⊢ ↑(f.pair g) ⁻¹' {(b, c)} = ↑f ⁻¹' {b} ∩ ↑g ⁻¹' {c}
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : MeasurableSpace α
f : α →ₛ β
g : α →ₛ γ
b : β
c : γ
⊢ ↑(f.pair g) ⁻¹' {b} ×ˢ {c} = ↑f ⁻¹' {b} ∩ ↑g ⁻¹' {c}
tactic: rw [← singleton_prod_singleton]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : MeasurableSpace α
f : α →ₛ β
g : α →ₛ γ
b : β
c : γ
⊢ ↑(f.pair g) ⁻¹' {b} ×ˢ {c} = ↑f ⁻¹' {b} ∩ ↑g ⁻¹' {c}
state_after: no goals
tactic: exact pair_preimage _ _ _ _
Theorem: isPreconnected_sphere
File: Mathlib/Analysis/NormedSpace/Connected.lean

Proof steps:
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
h : 1 < Module.rank ℝ E
x : E
r : ℝ
⊢ IsPreconnected (sphere x r)
state_after: case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
h : 1 < Module.rank ℝ E
x : E
r : ℝ
hr : 0 ≤ r
⊢ IsPreconnected (sphere x r)

case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
h : 1 < Module.rank ℝ E
x : E
r : ℝ
hr : r < 0
⊢ IsPreconnected (sphere x r)
tactic: rcases le_or_lt 0 r with hr|hr
Theorem: convexIndependent_set_iff_not_mem_convexHull_diff
File: Mathlib/Analysis/Convex/Independent.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
ι : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t s : Set E
⊢ ConvexIndependent 𝕜 Subtype.val ↔ ∀ x ∈ s, x ∉ (convexHull 𝕜) (s \ {x})
state_after: 𝕜 : Type u_1
E : Type u_2
ι : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t s : Set E
⊢ (∀ t ⊆ s, s ∩ (convexHull 𝕜) t ⊆ t) ↔ ∀ x ∈ s, x ∉ (convexHull 𝕜) (s \ {x})
tactic: rw [convexIndependent_set_iff_inter_convexHull_subset]
state_before: 𝕜 : Type u_1
E : Type u_2
ι : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t s : Set E
⊢ (∀ t ⊆ s, s ∩ (convexHull 𝕜) t ⊆ t) ↔ ∀ x ∈ s, x ∉ (convexHull 𝕜) (s \ {x})
state_after: case mp
𝕜 : Type u_1
E : Type u_2
ι : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t s : Set E
⊢ (∀ t ⊆ s, s ∩ (convexHull 𝕜) t ⊆ t) → ∀ x ∈ s, x ∉ (convexHull 𝕜) (s \ {x})

case mpr
𝕜 : Type u_1
E : Type u_2
ι : Type u_3
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t s : Set E
⊢ (∀ x ∈ s, x ∉ (convexHull 𝕜) (s \ {x})) → ∀ t ⊆ s, s ∩ (convexHull 𝕜) t ⊆ t
tactic: constructor
Theorem: Real.volume_Ioc
File: Mathlib/MeasureTheory/Measure/Lebesgue/Basic.lean

Proof steps:
state_before: ι : Type u_1
inst✝ : Fintype ι
a b : ℝ
⊢ volume (Ioc a b) = ofReal (b - a)
state_after: no goals
tactic: simp [volume_val]
Theorem: Multiset.map_replicate
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
f : α → β
k : ℕ
a : α
⊢ map f (replicate k a) = replicate k (f a)
state_after: no goals
tactic: simp only [← coe_replicate, map_coe, List.map_replicate]
Theorem: ZMod.valMinAbs_natCast_eq_self
File: Mathlib/Data/ZMod/Basic.lean

Proof steps:
state_before: m n✝ n a : ℕ
inst✝ : NeZero n
⊢ (↑a).valMinAbs = ↑a ↔ a ≤ n / 2
state_after: m n✝ n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ a ≤ n / 2
tactic: refine ⟨fun ha => ?_, valMinAbs_natCast_of_le_half⟩
state_before: m n✝ n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ a ≤ n / 2
state_after: m n✝ n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ (↑a).valMinAbs.natAbs ≤ n / 2
tactic: rw [← Int.natAbs_ofNat a, ← ha]
state_before: m n✝ n a : ℕ
inst✝ : NeZero n
ha : (↑a).valMinAbs = ↑a
⊢ (↑a).valMinAbs.natAbs ≤ n / 2
state_after: no goals
tactic: exact natAbs_valMinAbs_le a
Theorem: PosNum.pred_to_nat
File: Mathlib/Data/Num/Lemmas.lean

Proof steps:
state_before: n : PosNum
h : 1 < n
⊢ ↑n.pred = (↑n).pred
state_after: n : PosNum
h : 1 < n
⊢ ↑(Num.casesOn n.pred' 1 id) = (↑n).pred
tactic: unfold pred
state_before: n : PosNum
h : 1 < n
⊢ ↑(Num.casesOn n.pred' 1 id) = (↑n).pred
state_after: case zero
n : PosNum
h : 1 < n
e : n.pred' = zero
⊢ ↑(Num.casesOn zero 1 id) = (↑n).pred

case pos
n : PosNum
h : 1 < n
a✝ : PosNum
e : n.pred' = pos a✝
⊢ ↑(Num.casesOn (pos a✝) 1 id) = (↑n).pred
tactic: cases e : pred' n
Theorem: Nat.gcd_mul_right_add_left
File: Mathlib/Data/Nat/GCD/Basic.lean

Proof steps:
state_before: m n k : ℕ
⊢ (k * n + m).gcd n = m.gcd n
state_after: no goals
tactic: rw [gcd_comm, gcd_mul_right_add_right, gcd_comm]
Theorem: toAddUnits_val_apply
File: Mathlib/Algebra/Group/Units/Equiv.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M : Type u_6
N : Type u_7
P : Type u_8
Q : Type u_9
G✝ : Type u_10
H : Type u_11
G : Type u_12
inst✝ : Group G
x : Gˣ
⊢ toUnits ↑x = x
state_after: no goals
tactic: simp_rw [MulEquiv.apply_eq_iff_symm_apply, toUnits_symm_apply]
Theorem: List.IsRotated.cyclicPermutations
File: Mathlib/Data/List/Rotate.lean

Proof steps:
state_before: α : Type u
l✝ l'✝ l l' : List α
h : l ~r l'
⊢ l.cyclicPermutations ~r l'.cyclicPermutations
state_after: case intro
α : Type u
l✝ l' l : List α
k : ℕ
⊢ l.cyclicPermutations ~r (l.rotate k).cyclicPermutations
tactic: obtain ⟨k, rfl⟩ := h
state_before: case intro
α : Type u
l✝ l' l : List α
k : ℕ
⊢ l.cyclicPermutations ~r (l.rotate k).cyclicPermutations
state_after: no goals
tactic: exact ⟨k, by simp⟩
Theorem: OrthonormalBasis.repr_injective
File: Mathlib/Analysis/InnerProductSpace/PiL2.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : _root_.RCLike 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
f g : OrthonormalBasis ι 𝕜 E
h : f.repr = g.repr
⊢ f = g
state_after: case ofRepr
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : _root_.RCLike 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
g : OrthonormalBasis ι 𝕜 E
repr✝ : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
h : { repr := repr✝ }.repr = g.repr
⊢ { repr := repr✝ } = g
tactic: cases f
state_before: case ofRepr
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : _root_.RCLike 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
g : OrthonormalBasis ι 𝕜 E
repr✝ : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
h : { repr := repr✝ }.repr = g.repr
⊢ { repr := repr✝ } = g
state_after: case ofRepr.ofRepr
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : _root_.RCLike 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
repr✝¹ repr✝ : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
h : { repr := repr✝¹ }.repr = { repr := repr✝ }.repr
⊢ { repr := repr✝¹ } = { repr := repr✝ }
tactic: cases g
state_before: case ofRepr.ofRepr
ι : Type u_1
ι' : Type u_2
𝕜 : Type u_3
inst✝⁹ : _root_.RCLike 𝕜
E : Type u_4
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : InnerProductSpace 𝕜 E
E' : Type u_5
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : InnerProductSpace 𝕜 E'
F : Type u_6
inst✝⁴ : NormedAddCommGroup F
inst✝³ : InnerProductSpace ℝ F
F' : Type u_7
inst✝² : NormedAddCommGroup F'
inst✝¹ : InnerProductSpace ℝ F'
inst✝ : Fintype ι
repr✝¹ repr✝ : E ≃ₗᵢ[𝕜] EuclideanSpace 𝕜 ι
h : { repr := repr✝¹ }.repr = { repr := repr✝ }.repr
⊢ { repr := repr✝¹ } = { repr := repr✝ }
state_after: no goals
tactic: congr
Theorem: RatFunc.mk_smul
File: Mathlib/FieldTheory/RatFunc/Basic.lean

Proof steps:
state_before: K : Type u
inst✝⁴ : CommRing K
R : Type u_1
inst✝³ : IsDomain K
inst✝² : Monoid R
inst✝¹ : DistribMulAction R K[X]
inst✝ : IsScalarTower R K[X] K[X]
c : R
p q : K[X]
⊢ RatFunc.mk (c • p) q = c • RatFunc.mk p q
state_after: K : Type u
inst✝⁴ : CommRing K
R : Type u_1
inst✝³ : IsDomain K
inst✝² : Monoid R
inst✝¹ : DistribMulAction R K[X]
inst✝ : IsScalarTower R K[X] K[X]
c : R
p q : K[X]
this : SMulZeroClass R (FractionRing K[X]) := inferInstance
⊢ RatFunc.mk (c • p) q = c • RatFunc.mk p q
tactic: letI : SMulZeroClass R (FractionRing K[X]) := inferInstance
state_before: K : Type u
inst✝⁴ : CommRing K
R : Type u_1
inst✝³ : IsDomain K
inst✝² : Monoid R
inst✝¹ : DistribMulAction R K[X]
inst✝ : IsScalarTower R K[X] K[X]
c : R
p q : K[X]
this : SMulZeroClass R (FractionRing K[X]) := inferInstance
⊢ RatFunc.mk (c • p) q = c • RatFunc.mk p q
state_after: case pos
K : Type u
inst✝⁴ : CommRing K
R : Type u_1
inst✝³ : IsDomain K
inst✝² : Monoid R
inst✝¹ : DistribMulAction R K[X]
inst✝ : IsScalarTower R K[X] K[X]
c : R
p q : K[X]
this : SMulZeroClass R (FractionRing K[X]) := inferInstance
hq : q = 0
⊢ RatFunc.mk (c • p) q = c • RatFunc.mk p q

case neg
K : Type u
inst✝⁴ : CommRing K
R : Type u_1
inst✝³ : IsDomain K
inst✝² : Monoid R
inst✝¹ : DistribMulAction R K[X]
inst✝ : IsScalarTower R K[X] K[X]
c : R
p q : K[X]
this : SMulZeroClass R (FractionRing K[X]) := inferInstance
hq : ¬q = 0
⊢ RatFunc.mk (c • p) q = c • RatFunc.mk p q
tactic: by_cases hq : q = 0
Theorem: upperSemicontinuous_iff_isClosed_preimage
File: Mathlib/Topology/Semicontinuous.lean

Proof steps:
state_before: α : Type u_1
inst✝² : TopologicalSpace α
β : Type u_2
inst✝¹ : Preorder β
f✝ g : α → β
x : α
s t : Set α
y z : β
γ : Type u_3
inst✝ : LinearOrder γ
f : α → γ
⊢ UpperSemicontinuous f ↔ ∀ (y : γ), IsClosed (f ⁻¹' Ici y)
state_after: α : Type u_1
inst✝² : TopologicalSpace α
β : Type u_2
inst✝¹ : Preorder β
f✝ g : α → β
x : α
s t : Set α
y z : β
γ : Type u_3
inst✝ : LinearOrder γ
f : α → γ
⊢ (∀ (y : γ), IsOpen (f ⁻¹' Iio y)) ↔ ∀ (y : γ), IsClosed (f ⁻¹' Ici y)
tactic: rw [upperSemicontinuous_iff_isOpen_preimage]
state_before: α : Type u_1
inst✝² : TopologicalSpace α
β : Type u_2
inst✝¹ : Preorder β
f✝ g : α → β
x : α
s t : Set α
y z : β
γ : Type u_3
inst✝ : LinearOrder γ
f : α → γ
⊢ (∀ (y : γ), IsOpen (f ⁻¹' Iio y)) ↔ ∀ (y : γ), IsClosed (f ⁻¹' Ici y)
state_after: no goals
tactic: simp only [← isOpen_compl_iff, ← preimage_compl, compl_Ici]
Theorem: CharP.addOrderOf_one
File: Mathlib/GroupTheory/OrderOfElement.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
R : Type u_6
inst✝¹ : NonAssocRing R
inst✝ : Fintype R
p n : ℕ
⊢ ↑n = 0 ↔ addOrderOf 1 ∣ n
state_after: no goals
tactic: rw [← Nat.smul_one_eq_cast, addOrderOf_dvd_iff_nsmul_eq_zero]