ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Finset.erase_biUnion
File: Mathlib/Data/Finset/Union.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
f : α → Finset β
s : Finset α
b : β
⊢ (s.biUnion f).erase b = s.biUnion fun x => (f x).erase b
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
f : α → Finset β
s : Finset α
b a : β
⊢ a ∈ (s.biUnion f).erase b ↔ a ∈ s.biUnion fun x => (f x).erase b
tactic: ext a
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
f : α → Finset β
s : Finset α
b a : β
⊢ a ∈ (s.biUnion f).erase b ↔ a ∈ s.biUnion fun x => (f x).erase b
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
f : α → Finset β
s : Finset α
b a : β
⊢ (¬a = b ∧ ∃ a_1 ∈ s, a ∈ f a_1) ↔ ∃ a_1 ∈ s, ¬a = b ∧ a ∈ f a_1
tactic: simp only [mem_biUnion, not_exists, not_and, mem_erase, ne_eq]
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
s✝ s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
f : α → Finset β
s : Finset α
b a : β
⊢ (¬a = b ∧ ∃ a_1 ∈ s, a ∈ f a_1) ↔ ∃ a_1 ∈ s, ¬a = b ∧ a ∈ f a_1
state_after: no goals
tactic: tauto
Theorem: norm_pos_iff'''
File: Mathlib/Analysis/Normed/Group/Basic.lean

Proof steps:
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝⁴ : SeminormedGroup E
inst✝³ : SeminormedGroup F
inst✝² : SeminormedGroup G
s : Set E
a✝ a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
inst✝¹ : FunLike 𝓕 E F
inst✝ : T0Space E
a : E
⊢ 0 < ‖a‖ ↔ a ≠ 1
state_after: no goals
tactic: rw [← not_le, norm_le_zero_iff''']
Theorem: LieDerivation.ad_isIdealMorphism
File: Mathlib/Algebra/Lie/Derivation/AdjointAction.lean

Proof steps:
state_before: R : Type u_1
L : Type u_2
inst✝² : CommRing R
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
⊢ (ad R L).IsIdealMorphism
state_after: R : Type u_1
L : Type u_2
inst✝² : CommRing R
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
⊢ ∀ (x : LieDerivation R L L) (y : L), ∃ z, (ad R L) (x y) = (ad R L) z
tactic: simp_rw [LieHom.isIdealMorphism_iff, lie_der_ad_eq_ad_der]
state_before: R : Type u_1
L : Type u_2
inst✝² : CommRing R
inst✝¹ : LieRing L
inst✝ : LieAlgebra R L
⊢ ∀ (x : LieDerivation R L L) (y : L), ∃ z, (ad R L) (x y) = (ad R L) z
state_after: no goals
tactic: tauto
Theorem: Num.castNum_ldiff
File: Mathlib/Data/Num/Lemmas.lean

Proof steps:
state_before: α : Type u_1
⊢ ∀ (m n : Num), ↑(m.ldiff n) = (↑m).ldiff ↑n
state_after: no goals
tactic: apply castNum_eq_bitwise PosNum.ldiff <;> intros <;> (try cases_type* Bool) <;> rfl
Theorem: CategoryTheory.Functor.isSplitEpi_iff
File: Mathlib/CategoryTheory/Functor/EpiMono.lean

Proof steps:
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
F : C ⥤ D
X Y : C
f : X ⟶ Y
inst✝¹ : F.Full
inst✝ : F.Faithful
⊢ IsSplitEpi (F.map f) ↔ IsSplitEpi f
state_after: case mp
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
F : C ⥤ D
X Y : C
f : X ⟶ Y
inst✝¹ : F.Full
inst✝ : F.Faithful
⊢ IsSplitEpi (F.map f) → IsSplitEpi f

case mpr
C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
F : C ⥤ D
X Y : C
f : X ⟶ Y
inst✝¹ : F.Full
inst✝ : F.Faithful
⊢ IsSplitEpi f → IsSplitEpi (F.map f)
tactic: constructor
Theorem: Ordinal.one_add_omega
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
⊢ 1 + ω = ω
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
⊢ 1 + ω ≤ ω
tactic: refine le_antisymm ?_ (le_add_left _ _)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
⊢ 1 + ω ≤ ω
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
⊢ type (Sum.Lex EmptyRelation fun x x_1 => x < x_1) ≤ type fun x x_1 => x < x_1
tactic: rw [omega, ← lift_one.{0}, ← lift_add, lift_le, ← type_unit, ← type_sum_lex]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
⊢ type (Sum.Lex EmptyRelation fun x x_1 => x < x_1) ≤ type fun x x_1 => x < x_1
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
⊢ Unit ⊕ ℕ → ℕ

case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
⊢ ∀ (a b : Unit ⊕ ℕ), Sum.Lex EmptyRelation (fun x x_1 => x < x_1) a b → ?refine_1 a < ?refine_1 b
tactic: refine ⟨RelEmbedding.collapse (RelEmbedding.ofMonotone ?_ ?_)⟩
Theorem: Submodule.Quotient.equiv_refl
File: Mathlib/LinearAlgebra/Quotient.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
r : R
x y : M
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
p p' P Q : Submodule R M
hf : map (↑(LinearEquiv.refl R M)) P = Q
⊢ P = Q
state_after: no goals
tactic: simpa using hf
Theorem: Matrix.zpow_neg_natCast
File: Mathlib/LinearAlgebra/Matrix/ZPow.lean

Proof steps:
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
n : ℕ
⊢ A ^ (-↑n) = (A ^ n)⁻¹
state_after: case zero
n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
⊢ A ^ (-↑0) = (A ^ 0)⁻¹

case succ
n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
n✝ : ℕ
⊢ A ^ (-↑(n✝ + 1)) = (A ^ (n✝ + 1))⁻¹
tactic: cases n
Theorem: Orientation.two_zsmul_oangle_neg_self_right
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

Proof steps:
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
⊢ 2 • o.oangle x (-x) = 0
state_after: no goals
tactic: by_cases hx : x = 0 <;> simp [hx]
Theorem: IsOpen.ae_eq_empty_iff_eq
File: Mathlib/MeasureTheory/Measure/OpenPos.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
m : MeasurableSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
μ ν : Measure X
inst✝ : μ.IsOpenPosMeasure
s U F : Set X
x : X
hU : IsOpen U
⊢ U =ᶠ[ae μ] ∅ ↔ U = ∅
state_after: no goals
tactic: rw [ae_eq_empty, hU.measure_zero_iff_eq_empty]
Theorem: MultilinearMap.map_smul_univ
File: Mathlib/LinearAlgebra/Multilinear/Basic.lean

Proof steps:
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : CommSemiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : Fin n.succ) → AddCommMonoid (M i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : (i : Fin n.succ) → Module R (M i)
inst✝² : (i : ι) → Module R (M₁ i)
inst✝¹ : Module R M₂
f f' : MultilinearMap R M₁ M₂
inst✝ : Fintype ι
c : ι → R
m : (i : ι) → M₁ i
⊢ (f fun i => c i • m i) = (∏ i : ι, c i) • f m
state_after: no goals
tactic: classical simpa using map_piecewise_smul f c m Finset.univ
Theorem: Int.ceil_intCast
File: Mathlib/Algebra/Order/Floor.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
z✝ : ℤ
a✝ : α
z a : ℤ
⊢ ⌈↑z⌉ ≤ a ↔ z ≤ a
state_after: no goals
tactic: rw [ceil_le, Int.cast_le]
Theorem: MeasureTheory.Measure.haar.addIndex_empty
File: Mathlib/MeasureTheory/Measure/Haar/Basic.lean

Proof steps:
state_before: G : Type u_1
inst✝ : Group G
V : Set G
⊢ index ∅ V = 0
state_after: G : Type u_1
inst✝ : Group G
V : Set G
⊢ 0 ∈ Finset.card '' {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V} ∨
    Finset.card '' {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V} = ∅
tactic: simp only [index, Nat.sInf_eq_zero]
state_before: G : Type u_1
inst✝ : Group G
V : Set G
⊢ 0 ∈ Finset.card '' {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V} ∨
    Finset.card '' {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V} = ∅
state_after: case h
G : Type u_1
inst✝ : Group G
V : Set G
⊢ 0 ∈ Finset.card '' {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V}
tactic: left
state_before: case h
G : Type u_1
inst✝ : Group G
V : Set G
⊢ 0 ∈ Finset.card '' {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V}
state_after: case h
G : Type u_1
inst✝ : Group G
V : Set G
⊢ ∅ ∈ {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V} ∧ ∅.card = 0
tactic: use ∅
state_before: case h
G : Type u_1
inst✝ : Group G
V : Set G
⊢ ∅ ∈ {t | ∅ ⊆ ⋃ g ∈ t, (fun h => g * h) ⁻¹' V} ∧ ∅.card = 0
state_after: no goals
tactic: simp only [Finset.card_empty, empty_subset, mem_setOf_eq, eq_self_iff_true, and_self_iff]
Theorem: Finset.add_sum_Ioc_eq_sum_Icc
File: Mathlib/Algebra/BigOperators/Intervals.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
inst✝² : PartialOrder α
inst✝¹ : CommMonoid M
f : α → M
a b : α
inst✝ : LocallyFiniteOrder α
h : a ≤ b
⊢ f a * ∏ x ∈ Ioc a b, f x = ∏ x ∈ Icc a b, f x
state_after: no goals
tactic: rw [Icc_eq_cons_Ioc h, prod_cons]
Theorem: Set.image_update_uIcc_right
File: Mathlib/Order/Interval/Set/Pi.lean

Proof steps:
state_before: ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Lattice (α i)
inst✝ : DecidableEq ι
f : (i : ι) → α i
i : ι
b : α i
⊢ update f i '' uIcc (f i) b = uIcc f (update f i b)
state_after: no goals
tactic: simpa using image_update_uIcc f i (f i) b
Theorem: FiniteDimensional.proper_rclike
File: Mathlib/Analysis/RCLike/Lemmas.lean

Proof steps:
state_before: K : Type u_1
E : Type u_2
inst✝³ : RCLike K
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace K E
inst✝ : FiniteDimensional K E
⊢ ProperSpace E
state_after: K : Type u_1
E : Type u_2
inst✝³ : RCLike K
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace K E
inst✝ : FiniteDimensional K E
this : NormedSpace ℝ E := RestrictScalars.normedSpace ℝ K E
⊢ ProperSpace E
tactic: letI : NormedSpace ℝ E := RestrictScalars.normedSpace ℝ K E
state_before: K : Type u_1
E : Type u_2
inst✝³ : RCLike K
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace K E
inst✝ : FiniteDimensional K E
this : NormedSpace ℝ E := RestrictScalars.normedSpace ℝ K E
⊢ ProperSpace E
state_after: K : Type u_1
E : Type u_2
inst✝³ : RCLike K
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace K E
inst✝ : FiniteDimensional K E
this✝ : NormedSpace ℝ E := RestrictScalars.normedSpace ℝ K E
this : FiniteDimensional ℝ E := trans ℝ K E
⊢ ProperSpace E
tactic: letI : FiniteDimensional ℝ E := FiniteDimensional.trans ℝ K E
state_before: K : Type u_1
E : Type u_2
inst✝³ : RCLike K
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace K E
inst✝ : FiniteDimensional K E
this✝ : NormedSpace ℝ E := RestrictScalars.normedSpace ℝ K E
this : FiniteDimensional ℝ E := trans ℝ K E
⊢ ProperSpace E
state_after: no goals
tactic: infer_instance
Theorem: CategoryTheory.NatTrans.removeRightOp_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.rightOp ⟶ G.rightOp
X Y : Cᵒᵖ
f : X ⟶ Y
⊢ (G.map f ≫ (fun X => (α.app (unop X)).unop) Y).op = ((fun X => (α.app (unop X)).unop) X ≫ F.map f).op
state_after: no goals
tactic: simpa only [Functor.rightOp_map] using (α.naturality f.unop).symm
Theorem: AlgebraicGeometry.isLocallyNoetherian_of_affine_cover
File: Mathlib/AlgebraicGeometry/Noetherian.lean

Proof steps:
state_before: X : Scheme
ι : Sort u_1
S : ι → ↑X.affineOpens
hS : ⨆ i, ↑(S i) = ⊤
hS' : ∀ (i : ι), IsNoetherianRing ↑Γ(X, ↑(S i))
⊢ IsLocallyNoetherian X
state_after: X : Scheme
ι : Sort u_1
S : ι → ↑X.affineOpens
hS : ⨆ i, ↑(S i) = ⊤
hS' : ∀ (i : ι), IsNoetherianRing ↑Γ(X, ↑(S i))
U : ↑X.affineOpens
⊢ IsNoetherianRing ↑Γ(X, ↑U)
tactic: refine ⟨fun U => ?_⟩
state_before: X : Scheme
ι : Sort u_1
S : ι → ↑X.affineOpens
hS : ⨆ i, ↑(S i) = ⊤
hS' : ∀ (i : ι), IsNoetherianRing ↑Γ(X, ↑(S i))
U : ↑X.affineOpens
⊢ IsNoetherianRing ↑Γ(X, ↑U)
state_after: no goals
tactic: induction U using of_affine_open_cover S hS with
  | basicOpen U f hN =>
    have := U.prop.isLocalization_basicOpen f
    exact IsLocalization.isNoetherianRing (.powers f) Γ(X, X.basicOpen f) hN
  | openCover U s _ hN =>
    apply isNoetherianRing_of_away s ‹_›
    intro ⟨f, hf⟩
    have : IsNoetherianRing Γ(X, X.basicOpen f) := hN ⟨f, hf⟩
    have := U.prop.isLocalization_basicOpen f
    have hEq := IsLocalization.algEquiv (.powers f) (Localization.Away f) Γ(X, X.basicOpen f)
    exact isNoetherianRing_of_ringEquiv Γ(X, X.basicOpen f) hEq.symm.toRingEquiv
  | hU => exact hS' _
Theorem: IsCyclotomicExtension.Rat.cyclotomicRing_isIntegralClosure_of_prime
File: Mathlib/NumberTheory/Cyclotomic/Rat.lean

Proof steps:
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
⊢ IsIntegralClosure (CyclotomicRing p ℤ ℚ) ℤ (CyclotomicField p ℚ)
state_after: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
⊢ IsIntegralClosure (CyclotomicRing (p ^ 1) ℤ ℚ) ℤ (CyclotomicField (p ^ 1) ℚ)
tactic: rw [← pow_one p]
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
⊢ IsIntegralClosure (CyclotomicRing (p ^ 1) ℤ ℚ) ℤ (CyclotomicField (p ^ 1) ℚ)
state_after: no goals
tactic: exact cyclotomicRing_isIntegralClosure_of_prime_pow
Theorem: Nat.primeFactorsList_add_two
File: Mathlib/Data/Nat/Factors.lean

Proof steps:
state_before: n : ℕ
⊢ (n + 2).primeFactorsList = (n + 2).minFac :: ((n + 2) / (n + 2).minFac).primeFactorsList
state_after: no goals
tactic: rw [primeFactorsList]
Theorem: LinearMap.detAux_def'
File: Mathlib/LinearAlgebra/Determinant.lean

Proof steps:
state_before: R : Type u_1
inst✝⁹ : CommRing R
M : Type u_2
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
M' : Type u_3
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
ι : Type u_4
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
e : Basis ι R M
A : Type u_5
inst✝² : CommRing A
inst✝¹ : Module A M
κ : Type u_6
inst✝ : Fintype κ
b : Basis ι A M
f : M →ₗ[A] M
⊢ (detAux (Trunc.mk b)) f = ((toMatrix b b) f).det
state_after: R : Type u_1
inst✝⁹ : CommRing R
M : Type u_2
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
M' : Type u_3
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
ι : Type u_4
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
e : Basis ι R M
A : Type u_5
inst✝² : CommRing A
inst✝¹ : Module A M
κ : Type u_6
inst✝ : Fintype κ
b : Basis ι A M
f : M →ₗ[A] M
⊢ (Trunc.lift (fun b => detMonoidHom.comp ↑(toMatrixAlgEquiv b)) ⋯ (Trunc.mk b)) f = ((toMatrix b b) f).det
tactic: rw [detAux]
state_before: R : Type u_1
inst✝⁹ : CommRing R
M : Type u_2
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
M' : Type u_3
inst✝⁶ : AddCommGroup M'
inst✝⁵ : Module R M'
ι : Type u_4
inst✝⁴ : DecidableEq ι
inst✝³ : Fintype ι
e : Basis ι R M
A : Type u_5
inst✝² : CommRing A
inst✝¹ : Module A M
κ : Type u_6
inst✝ : Fintype κ
b : Basis ι A M
f : M →ₗ[A] M
⊢ (Trunc.lift (fun b => detMonoidHom.comp ↑(toMatrixAlgEquiv b)) ⋯ (Trunc.mk b)) f = ((toMatrix b b) f).det
state_after: no goals
tactic: rfl
Theorem: Polynomial.natDegree_list_prod_le
File: Mathlib/Algebra/Polynomial/BigOperators.lean

Proof steps:
state_before: R : Type u
ι : Type w
s : Finset ι
S : Type u_1
inst✝ : Semiring S
l : List S[X]
⊢ l.prod.natDegree ≤ (List.map natDegree l).sum
state_after: case nil
R : Type u
ι : Type w
s : Finset ι
S : Type u_1
inst✝ : Semiring S
⊢ [].prod.natDegree ≤ (List.map natDegree []).sum

case cons
R : Type u
ι : Type w
s : Finset ι
S : Type u_1
inst✝ : Semiring S
hd : S[X]
tl : List S[X]
IH : tl.prod.natDegree ≤ (List.map natDegree tl).sum
⊢ (hd :: tl).prod.natDegree ≤ (List.map natDegree (hd :: tl)).sum
tactic: induction' l with hd tl IH
Theorem: Set.mem_iUnion₂
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
x : γ
s : (i : ι) → κ i → Set γ
⊢ x ∈ ⋃ i, ⋃ j, s i j ↔ ∃ i j, x ∈ s i j
state_after: no goals
tactic: simp_rw [mem_iUnion]
Theorem: Set.ite_inter_inter
File: Mathlib/Data/Set/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ s₁' s₂' : Set α
⊢ t.ite (s₁ ∩ s₂) (s₁' ∩ s₂') = t.ite s₁ s₁' ∩ t.ite s₂ s₂'
state_after: case h
α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ s₁' s₂' : Set α
x : α
⊢ x ∈ t.ite (s₁ ∩ s₂) (s₁' ∩ s₂') ↔ x ∈ t.ite s₁ s₁' ∩ t.ite s₂ s₂'
tactic: ext x
state_before: case h
α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ s₁' s₂' : Set α
x : α
⊢ x ∈ t.ite (s₁ ∩ s₂) (s₁' ∩ s₂') ↔ x ∈ t.ite s₁ s₁' ∩ t.ite s₂ s₂'
state_after: case h
α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ s₁' s₂' : Set α
x : α
⊢ (x ∈ s₁ ∧ x ∈ s₂) ∧ x ∈ t ∨ (x ∈ s₁' ∧ x ∈ s₂') ∧ x ∉ t ↔
    (x ∈ s₁ ∧ x ∈ t ∨ x ∈ s₁' ∧ x ∉ t) ∧ (x ∈ s₂ ∧ x ∈ t ∨ x ∈ s₂' ∧ x ∉ t)
tactic: simp only [Set.ite, Set.mem_inter_iff, Set.mem_diff, Set.mem_union]
state_before: case h
α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁✝ s₂✝ t✝ t₁ t₂ u t s₁ s₂ s₁' s₂' : Set α
x : α
⊢ (x ∈ s₁ ∧ x ∈ s₂) ∧ x ∈ t ∨ (x ∈ s₁' ∧ x ∈ s₂') ∧ x ∉ t ↔
    (x ∈ s₁ ∧ x ∈ t ∨ x ∈ s₁' ∧ x ∉ t) ∧ (x ∈ s₂ ∧ x ∈ t ∨ x ∈ s₂' ∧ x ∉ t)
state_after: no goals
tactic: tauto
Theorem: Polynomial.eval_mul_X_pow
File: Mathlib/Algebra/Polynomial/Eval.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
k : ℕ
⊢ eval x (p * X ^ k) = eval x p * x ^ k
state_after: case zero
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
⊢ eval x (p * X ^ 0) = eval x p * x ^ 0

case succ
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
k : ℕ
ih : eval x (p * X ^ k) = eval x p * x ^ k
⊢ eval x (p * X ^ (k + 1)) = eval x p * x ^ (k + 1)
tactic: induction' k with k ih
Theorem: tendsto_inv_nhdsWithin_Ici_inv
File: Mathlib/Topology/Algebra/Group/Basic.lean

Proof steps:
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝⁶ : TopologicalSpace G
inst✝⁵ : Group G
inst✝⁴ : TopologicalGroup G
inst✝³ : TopologicalSpace α
f : α → G
s : Set α
x : α
inst✝² : TopologicalSpace H
inst✝¹ : OrderedCommGroup H
inst✝ : ContinuousInv H
a : H
⊢ Tendsto Inv.inv (𝓝[≥] a⁻¹) (𝓝[≤] a)
state_after: no goals
tactic: simpa only [inv_inv] using @tendsto_inv_nhdsWithin_Ici _ _ _ _ a⁻¹
Theorem: Finset.forall_mem_not_eq
File: Mathlib/Data/Finset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s : Finset α
a : α
⊢ (∀ b ∈ s, ¬a = b) ↔ a ∉ s
state_after: no goals
tactic: aesop
Theorem: add_neg_le_iff_le_add
File: Mathlib/Algebra/Order/Group/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LE α
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b c : α
⊢ a * b⁻¹ * b ≤ c * b ↔ a ≤ c * b
state_after: no goals
tactic: rw [inv_mul_cancel_right]
Theorem: frontier_eq_closure_inter_closure
File: Mathlib/Topology/Basic.lean

Proof steps:
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
⊢ frontier s = closure s ∩ closure sᶜ
state_after: no goals
tactic: rw [closure_compl, frontier, diff_eq]
Theorem: Equiv.pow_addLeft
File: Mathlib/GroupTheory/Perm/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
inst✝ : AddGroup α
a b : α
n : ℕ
⊢ Equiv.addLeft a ^ n = Equiv.addLeft (n • a)
state_after: case H
α : Type u
β : Type v
inst✝ : AddGroup α
a b : α
n : ℕ
x✝ : α
⊢ (Equiv.addLeft a ^ n) x✝ = (Equiv.addLeft (n • a)) x✝
tactic: ext
state_before: case H
α : Type u
β : Type v
inst✝ : AddGroup α
a b : α
n : ℕ
x✝ : α
⊢ (Equiv.addLeft a ^ n) x✝ = (Equiv.addLeft (n • a)) x✝
state_after: no goals
tactic: simp [Perm.coe_pow]
Theorem: AlgebraicGeometry.isBasis_affine_open
File: Mathlib/AlgebraicGeometry/AffineScheme.lean

Proof steps:
state_before: X : Scheme
⊢ Opens.IsBasis X.affineOpens
state_after: X : Scheme
⊢ ∀ {U : Opens ↑↑X.toPresheafedSpace} {x : ↑↑X.toPresheafedSpace}, x ∈ U → ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
tactic: rw [Opens.isBasis_iff_nbhd]
state_before: X : Scheme
⊢ ∀ {U : Opens ↑↑X.toPresheafedSpace} {x : ↑↑X.toPresheafedSpace}, x ∈ U → ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
state_after: X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
tactic: rintro U x (hU : x ∈ (U : Set X))
state_before: X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
state_after: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
tactic: obtain ⟨S, hS, hxS, hSU⟩ := X.affineBasisCover_is_basis.exists_subset_of_mem_open hU U.isOpen
state_before: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
state_after: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ { carrier := S, is_open' := ⋯ } ∈ X.affineOpens
tactic: refine ⟨⟨S, X.affineBasisCover_is_basis.isOpen hS⟩, ?_, hxS, hSU⟩
state_before: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ { carrier := S, is_open' := ⋯ } ∈ X.affineOpens
state_after: case intro.intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
i : X.affineBasisCover.J
hxS : x ∈ Set.range ⇑(X.affineBasisCover.map i).val.base
hSU : Set.range ⇑(X.affineBasisCover.map i).val.base ⊆ ↑U
⊢ { carrier := Set.range ⇑(X.affineBasisCover.map i).val.base, is_open' := ⋯ } ∈ X.affineOpens
tactic: rcases hS with ⟨i, rfl⟩
state_before: case intro.intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
i : X.affineBasisCover.J
hxS : x ∈ Set.range ⇑(X.affineBasisCover.map i).val.base
hSU : Set.range ⇑(X.affineBasisCover.map i).val.base ⊆ ↑U
⊢ { carrier := Set.range ⇑(X.affineBasisCover.map i).val.base, is_open' := ⋯ } ∈ X.affineOpens
state_after: no goals
tactic: exact isAffineOpen_opensRange _