ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: isLUB_of_mem_closure
File: Mathlib/Topology/Order/IsLUB.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : LinearOrder α
inst✝² : LinearOrder β
inst✝¹ : OrderTopology α
inst✝ : OrderTopology β
s : Set α
a : α
hsa : a ∈ upperBounds s
hsf : a ∈ closure s
⊢ IsLUB s a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : LinearOrder α
inst✝² : LinearOrder β
inst✝¹ : OrderTopology α
inst✝ : OrderTopology β
s : Set α
a : α
hsa : a ∈ upperBounds s
hsf : (𝓟 s ⊓ 𝓝 a).NeBot
⊢ IsLUB s a
tactic: rw [mem_closure_iff_clusterPt, ClusterPt, inf_comm] at hsf
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : LinearOrder α
inst✝² : LinearOrder β
inst✝¹ : OrderTopology α
inst✝ : OrderTopology β
s : Set α
a : α
hsa : a ∈ upperBounds s
hsf : (𝓟 s ⊓ 𝓝 a).NeBot
⊢ IsLUB s a
state_after: no goals
tactic: exact isLUB_of_mem_nhds hsa (mem_principal_self s)
Theorem: insert_endpoints_openSegment
File: Mathlib/Analysis/Convex/Segment.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
⊢ insert x (insert y (openSegment 𝕜 x y)) = [x-[𝕜]y]
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
⊢ [x-[𝕜]y] ⊆ insert x (insert y (openSegment 𝕜 x y))
tactic: simp only [subset_antisymm_iff, insert_subset_iff, left_mem_segment, right_mem_segment,
    openSegment_subset_segment, true_and_iff]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
⊢ [x-[𝕜]y] ⊆ insert x (insert y (openSegment 𝕜 x y))
state_after: case intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
⊢ a • x + b • y ∈ insert x (insert y (openSegment 𝕜 x y))
tactic: rintro z ⟨a, b, ha, hb, hab, rfl⟩
state_before: case intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
⊢ a • x + b • y ∈ insert x (insert y (openSegment 𝕜 x y))
state_after: case intro.intro.intro.intro.intro.refine_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
⊢ b = 0 → a • x + b • y = x

case intro.intro.intro.intro.intro.refine_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
hb' : 0 < b
⊢ a = 0 → a • x + b • y = y

case intro.intro.intro.intro.intro.refine_3
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommMonoid E
inst✝ : Module 𝕜 E
s : Set E
x✝ y✝ z x y : E
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
hb' : 0 < b
ha' : 0 < a
⊢ a • x + b • y ∈ openSegment 𝕜 x y
tactic: refine hb.eq_or_gt.imp ?_ fun hb' => ha.eq_or_gt.imp ?_ fun ha' => ?_
Theorem: NNRat.num_divNat_den
File: Mathlib/Data/NNRat/Defs.lean

Proof steps:
state_before: p q✝ : ℚ≥0
n₁ n₂ d₁ d₂ d : ℕ
q : ℚ≥0
⊢ ↑(divNat q.num q.den) = ↑q
state_after: p q✝ : ℚ≥0
n₁ n₂ d₁ d₂ d : ℕ
q : ℚ≥0
⊢ ↑(divNat q.num q.den) = mkRat (↑q).num (↑q).den
tactic: rw [← (q : ℚ).mkRat_num_den']
state_before: p q✝ : ℚ≥0
n₁ n₂ d₁ d₂ d : ℕ
q : ℚ≥0
⊢ ↑(divNat q.num q.den) = mkRat (↑q).num (↑q).den
state_after: no goals
tactic: simp [num_coe, den_coe]
Theorem: DihedralGroup.card_commute_odd
File: Mathlib/GroupTheory/SpecificGroups/Dihedral.lean

Proof steps:
state_before: n : ℕ
hn : Odd n
⊢ Nat.card { p // Commute p.1 p.2 } = n * (n + 3)
state_after: n : ℕ
hn : Odd n
hn' : NeZero n
⊢ Nat.card { p // Commute p.1 p.2 } = n * (n + 3)
tactic: have hn' : NeZero n := ⟨hn.pos.ne'⟩
state_before: n : ℕ
hn : Odd n
hn' : NeZero n
⊢ Nat.card { p // Commute p.1 p.2 } = n * (n + 3)
state_after: n : ℕ
hn : Odd n
hn' : NeZero n
⊢ n + (n + (n + n * n)) = n * (n + 3)
tactic: simp_rw [Nat.card_congr (OddCommuteEquiv hn), Nat.card_sum, Nat.card_prod, Nat.card_zmod]
state_before: n : ℕ
hn : Odd n
hn' : NeZero n
⊢ n + (n + (n + n * n)) = n * (n + 3)
state_after: no goals
tactic: ring
Theorem: Ordinal.cof_succ
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

Proof steps:
state_before: α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
⊢ (succ o).cof = 1
state_after: case a
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
⊢ (succ o).cof ≤ 1

case a
α : Type u_1
r : α → α → Prop
o : Ordinal.{u_2}
⊢ 1 ≤ (succ o).cof
tactic: apply le_antisymm
Theorem: pow_two
File: Mathlib/Algebra/Group/Defs.lean

Proof steps:
state_before: G : Type u_1
M : Type u_2
inst✝ : Monoid M
a✝ b c : M
m n : ℕ
a : M
⊢ a ^ 2 = a * a
state_after: no goals
tactic: rw [pow_succ, pow_one]
Theorem: IsSelfAdjoint.neg_algebraMap_norm_le_self
File: Mathlib/Analysis/CstarAlgebra/ContinuousFunctionalCalculus/Order.lean

Proof steps:
state_before: A : Type u_1
inst✝⁷ : NormedRing A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : CompleteSpace A
inst✝³ : NormedAlgebra ℂ A
inst✝² : StarModule ℂ A
inst✝¹ : PartialOrder A
inst✝ : StarOrderedRing A
a : A
ha : autoParam (IsSelfAdjoint a) _auto✝
⊢ -(algebraMap ℝ A) ‖a‖ ≤ a
state_after: A : Type u_1
inst✝⁷ : NormedRing A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : CompleteSpace A
inst✝³ : NormedAlgebra ℂ A
inst✝² : StarModule ℂ A
inst✝¹ : PartialOrder A
inst✝ : StarOrderedRing A
a : A
ha : autoParam (IsSelfAdjoint a) _auto✝
this : -a ≤ (algebraMap ℝ A) ‖a‖
⊢ -(algebraMap ℝ A) ‖a‖ ≤ a
tactic: have : - a ≤ algebraMap ℝ A ‖a‖ := by
    rw [← norm_neg]
    exact IsSelfAdjoint.le_algebraMap_norm_self (neg ha)
state_before: A : Type u_1
inst✝⁷ : NormedRing A
inst✝⁶ : StarRing A
inst✝⁵ : CstarRing A
inst✝⁴ : CompleteSpace A
inst✝³ : NormedAlgebra ℂ A
inst✝² : StarModule ℂ A
inst✝¹ : PartialOrder A
inst✝ : StarOrderedRing A
a : A
ha : autoParam (IsSelfAdjoint a) _auto✝
this : -a ≤ (algebraMap ℝ A) ‖a‖
⊢ -(algebraMap ℝ A) ‖a‖ ≤ a
state_after: no goals
tactic: exact neg_le.mp this
Theorem: Equiv.hasSum_iff
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
e : γ ≃ β
⊢ ∀ x ∉ Set.range ⇑e, f x = 1
state_after: no goals
tactic: simp
Theorem: mabs_zpow
File: Mathlib/Algebra/Order/Ring/Abs.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedCommGroup α
a✝ b : α
n : ℤ
a : α
⊢ mabs (a ^ n) = mabs a ^ |n|
state_after: case inl
α : Type u_1
inst✝ : LinearOrderedCommGroup α
a✝ b : α
n : ℤ
a : α
n0 : 0 ≤ n
⊢ mabs (a ^ n) = mabs a ^ |n|

case inr
α : Type u_1
inst✝ : LinearOrderedCommGroup α
a✝ b : α
n : ℤ
a : α
n0 : n ≤ 0
⊢ mabs (a ^ n) = mabs a ^ |n|
tactic: obtain n0 | n0 := le_total 0 n
Theorem: CategoryTheory.Equivalence.changeInverse_counitIso_hom_app
File: Mathlib/CategoryTheory/Equivalence.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
e : C ≌ D
G : D ⥤ C
iso : e.inverse ≅ G
X : C
⊢ e.functor.map ((e.unitIso ≪≫ isoWhiskerLeft e.functor iso).hom.app X) ≫
      (isoWhiskerRight iso.symm e.functor ≪≫ e.counitIso).hom.app (e.functor.obj X) =
    𝟙 (e.functor.obj X)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
E : Type u₃
inst✝ : Category.{v₃, u₃} E
e : C ≌ D
G : D ⥤ C
iso : e.inverse ≅ G
X : C
⊢ e.functor.map (e.unitIso.hom.app X ≫ iso.hom.app (e.functor.obj X)) ≫
      e.functor.map (iso.inv.app (e.functor.obj X)) ≫ e.counitIso.hom.app (e.functor.obj X) =
    𝟙 (e.functor.obj X)
tactic: dsimp
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
e : C ≌ D
G : D ⥤ C
iso : e.inverse ≅ G
X : C
⊢ e.functor.map (e.unitIso.hom.app X ≫ iso.hom.app (e.functor.obj X)) ≫
      e.functor.map (iso.inv.app (e.functor.obj X)) ≫ e.counitIso.hom.app (e.functor.obj X) =
    𝟙 (e.functor.obj X)
state_after: no goals
tactic: rw [← map_comp_assoc, assoc, iso.hom_inv_id_app, comp_id, functor_unit_comp]
Theorem: Subalgebra.iSupLift_mk
File: Mathlib/Algebra/Algebra/Subalgebra/Directed.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
S : Subalgebra R A
ι : Type u_4
inst✝ : Nonempty ι
K : ι → Subalgebra R A
dir : Directed (fun x x_1 => x ≤ x_1) K
f : (i : ι) → ↥(K i) →ₐ[R] B
hf : ∀ (i j : ι) (h : K i ≤ K j), f i = (f j).comp (inclusion h)
T : Subalgebra R A
hT : T = iSup K
i : ι
x : ↥(K i)
hx : ↑x ∈ T
⊢ (iSupLift K dir f hf T hT) ⟨↑x, hx⟩ = (f i) x
state_after: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
S : Subalgebra R A
ι : Type u_4
inst✝ : Nonempty ι
K : ι → Subalgebra R A
dir : Directed (fun x x_1 => x ≤ x_1) K
f : (i : ι) → ↥(K i) →ₐ[R] B
hf : ∀ (i j : ι) (h : K i ≤ K j), f i = (f j).comp (inclusion h)
T : Subalgebra R A
hT : T = iSup K
i : ι
x : ↥(K i)
hx : ↑x ∈ T
⊢ Set.iUnionLift (fun i => ↑(K i)) (fun i x => (f i) x) ⋯ ↑T ⋯ ⟨↑x, hx⟩ = (f i) x
tactic: dsimp [iSupLift, inclusion]
state_before: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁵ : CommSemiring R
inst✝⁴ : Semiring A
inst✝³ : Algebra R A
inst✝² : Semiring B
inst✝¹ : Algebra R B
S : Subalgebra R A
ι : Type u_4
inst✝ : Nonempty ι
K : ι → Subalgebra R A
dir : Directed (fun x x_1 => x ≤ x_1) K
f : (i : ι) → ↥(K i) →ₐ[R] B
hf : ∀ (i j : ι) (h : K i ≤ K j), f i = (f j).comp (inclusion h)
T : Subalgebra R A
hT : T = iSup K
i : ι
x : ↥(K i)
hx : ↑x ∈ T
⊢ Set.iUnionLift (fun i => ↑(K i)) (fun i x => (f i) x) ⋯ ↑T ⋯ ⟨↑x, hx⟩ = (f i) x
state_after: no goals
tactic: rw [Set.iUnionLift_mk]
Theorem: HasLineDerivAt.congr_of_eventuallyEq
File: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ : E → F
f' : F
s t : Set E
x v : E
L : E →L[𝕜] F
h : HasLineDerivAt 𝕜 f f' x v
h₁ : f₁ =ᶠ[𝓝 x] f
⊢ HasLineDerivAt 𝕜 f₁ f' x v
state_after: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ : E → F
f' : F
s t : Set E
x v : E
L : E →L[𝕜] F
h : HasLineDerivAt 𝕜 f f' x v
h₁ : f₁ =ᶠ[𝓝 x] f
⊢ (fun t => f₁ (x + t • v)) =ᶠ[𝓝 0] fun t => f (x + t • v)
tactic: apply HasDerivAt.congr_of_eventuallyEq h
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ : E → F
f' : F
s t : Set E
x v : E
L : E →L[𝕜] F
h : HasLineDerivAt 𝕜 f f' x v
h₁ : f₁ =ᶠ[𝓝 x] f
⊢ (fun t => f₁ (x + t • v)) =ᶠ[𝓝 0] fun t => f (x + t • v)
state_after: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F✝ : Type u_2
inst✝³ : NormedAddCommGroup F✝
inst✝² : NormedSpace 𝕜 F✝
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ : E → F✝
f' : F✝
s t : Set E
x v : E
L : E →L[𝕜] F✝
h : HasLineDerivAt 𝕜 f f' x v
h₁ : f₁ =ᶠ[𝓝 x] f
F : 𝕜 → E := fun t => x + t • v
⊢ (fun t => f₁ (x + t • v)) =ᶠ[𝓝 0] fun t => f (x + t • v)
tactic: let F := fun (t : 𝕜) ↦ x + t • v
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F✝ : Type u_2
inst✝³ : NormedAddCommGroup F✝
inst✝² : NormedSpace 𝕜 F✝
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ : E → F✝
f' : F✝
s t : Set E
x v : E
L : E →L[𝕜] F✝
h : HasLineDerivAt 𝕜 f f' x v
h₁ : f₁ =ᶠ[𝓝 x] f
F : 𝕜 → E := fun t => x + t • v
⊢ (fun t => f₁ (x + t • v)) =ᶠ[𝓝 0] fun t => f (x + t • v)
state_after: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F✝ : Type u_2
inst✝³ : NormedAddCommGroup F✝
inst✝² : NormedSpace 𝕜 F✝
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ : E → F✝
f' : F✝
s t : Set E
x v : E
L : E →L[𝕜] F✝
h : HasLineDerivAt 𝕜 f f' x v
F : 𝕜 → E := fun t => x + t • v
h₁ : f₁ =ᶠ[𝓝 (F 0)] f
⊢ (fun t => f₁ (x + t • v)) =ᶠ[𝓝 0] fun t => f (x + t • v)
tactic: rw [show x = F 0 by simp [F]] at h₁
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F✝ : Type u_2
inst✝³ : NormedAddCommGroup F✝
inst✝² : NormedSpace 𝕜 F✝
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ : E → F✝
f' : F✝
s t : Set E
x v : E
L : E →L[𝕜] F✝
h : HasLineDerivAt 𝕜 f f' x v
F : 𝕜 → E := fun t => x + t • v
h₁ : f₁ =ᶠ[𝓝 (F 0)] f
⊢ (fun t => f₁ (x + t • v)) =ᶠ[𝓝 0] fun t => f (x + t • v)
state_after: no goals
tactic: exact (Continuous.continuousAt (by fun_prop)).preimage_mem_nhds h₁
Theorem: MvPolynomial.degreeOf_coeff_finSuccEquiv
File: Mathlib/Algebra/MvPolynomial/Equiv.lean

Proof steps:
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
p : MvPolynomial (Fin (n + 1)) R
j : Fin n
i : ℕ
⊢ degreeOf j (((finSuccEquiv R n) p).coeff i) ≤ degreeOf j.succ p
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
p : MvPolynomial (Fin (n + 1)) R
j : Fin n
i : ℕ
⊢ ∀ b ∈ (((finSuccEquiv R n) p).coeff i).support, b j ≤ p.support.sup fun m => m j.succ
tactic: rw [degreeOf_eq_sup, degreeOf_eq_sup, Finset.sup_le_iff]
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
p : MvPolynomial (Fin (n + 1)) R
j : Fin n
i : ℕ
⊢ ∀ b ∈ (((finSuccEquiv R n) p).coeff i).support, b j ≤ p.support.sup fun m => m j.succ
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
p : MvPolynomial (Fin (n + 1)) R
j : Fin n
i : ℕ
m : Fin n →₀ ℕ
hm : m ∈ (((finSuccEquiv R n) p).coeff i).support
⊢ m j ≤ p.support.sup fun m => m j.succ
tactic: intro m hm
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
p : MvPolynomial (Fin (n + 1)) R
j : Fin n
i : ℕ
m : Fin n →₀ ℕ
hm : m ∈ (((finSuccEquiv R n) p).coeff i).support
⊢ m j ≤ p.support.sup fun m => m j.succ
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
p : MvPolynomial (Fin (n + 1)) R
j : Fin n
i : ℕ
m : Fin n →₀ ℕ
hm : m ∈ (((finSuccEquiv R n) p).coeff i).support
⊢ (cons i m) j.succ ≤ p.support.sup fun m => m j.succ
tactic: rw [← Finsupp.cons_succ j i m]
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
p : MvPolynomial (Fin (n + 1)) R
j : Fin n
i : ℕ
m : Fin n →₀ ℕ
hm : m ∈ (((finSuccEquiv R n) p).coeff i).support
⊢ (cons i m) j.succ ≤ p.support.sup fun m => m j.succ
state_after: no goals
tactic: exact Finset.le_sup
    (f := fun (g : Fin (Nat.succ n) →₀ ℕ) => g (Fin.succ j))
    (support_coeff_finSuccEquiv.1 hm)
Theorem: Multiset.prod_map_neg
File: Mathlib/Algebra/BigOperators/Ring/Multiset.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : HasDistribNeg α
s : Multiset α
⊢ ∀ (a : List α), (map Neg.neg ⟦a⟧).prod = (-1) ^ card ⟦a⟧ * prod ⟦a⟧
state_after: no goals
tactic: simp
Theorem: NonUnitalCommRing.toNonUnitalRing_injective
File: Mathlib/Algebra/Ring/Ext.lean

Proof steps:
state_before: R : Type u
⊢ Function.Injective (@toNonUnitalRing R)
state_after: case mk.mk
R : Type u
toNonUnitalRing✝¹ : NonUnitalRing R
mul_comm✝¹ : ∀ (a b : R), a * b = b * a
toNonUnitalRing✝ : NonUnitalRing R
mul_comm✝ : ∀ (a b : R), a * b = b * a
a✝ : toNonUnitalRing = toNonUnitalRing
⊢ mk mul_comm✝¹ = mk mul_comm✝
tactic: rintro ⟨⟩ ⟨⟩ _
state_before: case mk.mk
R : Type u
toNonUnitalRing✝¹ : NonUnitalRing R
mul_comm✝¹ : ∀ (a b : R), a * b = b * a
toNonUnitalRing✝ : NonUnitalRing R
mul_comm✝ : ∀ (a b : R), a * b = b * a
a✝ : toNonUnitalRing = toNonUnitalRing
⊢ mk mul_comm✝¹ = mk mul_comm✝
state_after: no goals
tactic: congr
Theorem: CategoryTheory.StrongEpi.of_arrow_iso
File: Mathlib/CategoryTheory/Limits/Shapes/StrongEpi.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
⊢ Epi g
state_after: C : Type u
inst✝ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
⊢ Epi (e.inv.left ≫ f ≫ e.hom.right)
tactic: rw [Arrow.iso_w' e]
state_before: C : Type u
inst✝ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
⊢ Epi (e.inv.left ≫ f ≫ e.hom.right)
state_after: C : Type u
inst✝ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
this : Epi (f ≫ e.hom.right)
⊢ Epi (e.inv.left ≫ f ≫ e.hom.right)
tactic: haveI := epi_comp f e.hom.right
state_before: C : Type u
inst✝ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
this : Epi (f ≫ e.hom.right)
⊢ Epi (e.inv.left ≫ f ≫ e.hom.right)
state_after: no goals
tactic: apply epi_comp
state_before: C : Type u
inst✝ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
X Y : C
z : X ⟶ Y
⊢ ∀ [inst : Mono z], HasLiftingProperty g z
state_after: C : Type u
inst✝¹ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
X Y : C
z : X ⟶ Y
inst✝ : Mono z
⊢ HasLiftingProperty g z
tactic: intro
state_before: C : Type u
inst✝¹ : Category.{v, u} C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
h : StrongEpi f
X Y : C
z : X ⟶ Y
inst✝ : Mono z
⊢ HasLiftingProperty g z
state_after: no goals
tactic: apply HasLiftingProperty.of_arrow_iso_left e z
Theorem: Multiset.ndunion_le
File: Mathlib/Data/Multiset/FinsetOps.lean

Proof steps:
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ s t u : Multiset α
⊢ ndunion 0 t ≤ u ↔ 0 ⊆ u ∧ t ≤ u
state_after: no goals
tactic: simp [zero_ndunion]
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ s t u : Multiset α
x✝¹ : α
x✝ : Multiset α
h : x✝.ndunion t ≤ u ↔ x✝ ⊆ u ∧ t ≤ u
⊢ (x✝¹ ::ₘ x✝).ndunion t ≤ u ↔ x✝¹ ::ₘ x✝ ⊆ u ∧ t ≤ u
state_after: no goals
tactic: simp only [cons_ndunion, mem_ndunion, ndinsert_le, and_comm, cons_subset, and_left_comm, h,
        and_assoc]
Theorem: Multiset.range_succ
File: Mathlib/Data/Multiset/Range.lean

Proof steps:
state_before: n : ℕ
⊢ range n.succ = n ::ₘ range n
state_after: n : ℕ
⊢ ↑[n] + ↑(List.range n) = n ::ₘ range n
tactic: rw [range, List.range_succ, ← coe_add, add_comm]
state_before: n : ℕ
⊢ ↑[n] + ↑(List.range n) = n ::ₘ range n
state_after: no goals
tactic: rfl
Theorem: map_symmDiff'
File: Mathlib/Order/Hom/Lattice.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
inst✝³ : BooleanAlgebra α
inst✝² : BooleanAlgebra β
inst✝¹ : FunLike F α β
inst✝ : BoundedLatticeHomClass F α β
f : F
a b : α
⊢ f (a ∆ b) = f a ∆ f b
state_after: no goals
tactic: rw [symmDiff, symmDiff, map_sup, map_sdiff', map_sdiff']
Theorem: AddConstMapClass.map_add_nsmul
File: Mathlib/Algebra/AddConstMap/Basic.lean

Proof steps:
state_before: F : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : FunLike F G H
a : G
b : H
inst✝² : AddMonoid G
inst✝¹ : AddMonoid H
inst✝ : AddConstMapClass F G H a b
f : F
x : G
n : ℕ
⊢ f (x + n • a) = f x + n • b
state_after: no goals
tactic: simpa using (AddConstMapClass.semiconj f).iterate_right n x
Theorem: Function.invFun_eq
File: Mathlib/Logic/Function/Basic.lean

Proof steps:
state_before: α : Sort u_1
β : Sort u_2
inst✝ : Nonempty α
f : α → β
a : α
b : β
h : ∃ a, f a = b
⊢ f (invFun f b) = b
state_after: no goals
tactic: simp only [invFun, dif_pos h, h.choose_spec]
Theorem: AddSubgroup.int_mul_mem
File: Mathlib/Algebra/Ring/Subring/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : Ring T
G : AddSubgroup R
k : ℤ
g : R
h : g ∈ G
⊢ ↑k * g ∈ G
state_after: case h.e'_4
R : Type u
S : Type v
T : Type w
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : Ring T
G : AddSubgroup R
k : ℤ
g : R
h : g ∈ G
⊢ ↑k * g = k • g
tactic: convert AddSubgroup.zsmul_mem G h k using 1
state_before: case h.e'_4
R : Type u
S : Type v
T : Type w
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : Ring T
G : AddSubgroup R
k : ℤ
g : R
h : g ∈ G
⊢ ↑k * g = k • g
state_after: no goals
tactic: simp
Theorem: isSemisimpleModule_of_isSemisimpleModule_submodule'
File: Mathlib/RingTheory/SimpleModule.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
p : ι → Submodule R M
hp : ∀ (i : ι), IsSemisimpleModule R ↥(p i)
hp' : ⨆ i, p i = ⊤
⊢ ⨆ i ∈ Set.univ, p i = ⊤
state_after: no goals
tactic: simpa
Theorem: Multiset.map_univ_coe
File: Mathlib/Data/Multiset/Fintype.lean

Proof steps:
state_before: α : Type u_1
inst✝ : DecidableEq α
m✝ m : Multiset α
⊢ map (fun x => x.fst) Finset.univ.val = m
state_after: α : Type u_1
inst✝ : DecidableEq α
m✝ m : Multiset α
this : map Prod.fst m.toEnumFinset.val = m
⊢ map (fun x => x.fst) Finset.univ.val = m
tactic: have := m.map_toEnumFinset_fst
state_before: α : Type u_1
inst✝ : DecidableEq α
m✝ m : Multiset α
this : map Prod.fst m.toEnumFinset.val = m
⊢ map (fun x => x.fst) Finset.univ.val = m
state_after: α : Type u_1
inst✝ : DecidableEq α
m✝ m : Multiset α
this : map Prod.fst (Finset.map m.coeEmbedding Finset.univ).val = m
⊢ map (fun x => x.fst) Finset.univ.val = m
tactic: rw [← m.map_univ_coeEmbedding] at this
state_before: α : Type u_1
inst✝ : DecidableEq α
m✝ m : Multiset α
this : map Prod.fst (Finset.map m.coeEmbedding Finset.univ).val = m
⊢ map (fun x => x.fst) Finset.univ.val = m
state_after: no goals
tactic: simpa only [Finset.map_val, Multiset.coeEmbedding_apply, Multiset.map_map,
    Function.comp_apply] using this
Theorem: RingHom.fieldRange_eq_map
File: Mathlib/Algebra/Field/Subfield.lean

Proof steps:
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
g : L →+* M
f : K →+* L
⊢ f.fieldRange = Subfield.map f ⊤
state_after: case h
K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
g : L →+* M
f : K →+* L
x✝ : L
⊢ x✝ ∈ f.fieldRange ↔ x✝ ∈ Subfield.map f ⊤
tactic: ext
state_before: case h
K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
g : L →+* M
f : K →+* L
x✝ : L
⊢ x✝ ∈ f.fieldRange ↔ x✝ ∈ Subfield.map f ⊤
state_after: no goals
tactic: simp