Skip to content

Commit f516ea2

Browse files
committed
chore: remove redundant integrality condition in IsSeparable (#8862)
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
1 parent 8a9d4f0 commit f516ea2

File tree

4 files changed

+22
-25
lines changed

4 files changed

+22
-25
lines changed

Mathlib/FieldTheory/Fixed.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ instance normal : Normal (FixedPoints.subfield G F) F :=
288288
#align fixed_points.normal FixedPoints.normal
289289

290290
instance separable : IsSeparable (FixedPoints.subfield G F) F :=
291-
isIntegral G F, fun x => by
291+
fun x => by
292292
cases nonempty_fintype G
293293
-- this was a plain rw when we were using unbundled subrings
294294
erw [← minpoly_eq_minpoly, ← Polynomial.separable_map (FixedPoints.subfield G F).subtype,

Mathlib/FieldTheory/IsAlgClosed/Basic.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,7 @@ instance (priority := 100) IsAlgClosure.normal (R K : Type*) [Field R] [Field K]
204204

205205
instance (priority := 100) IsAlgClosure.separable (R K : Type*) [Field R] [Field K] [Algebra R K]
206206
[IsAlgClosure R K] [CharZero R] : IsSeparable R K :=
207-
fun _ => (IsAlgClosure.algebraic _).isIntegral, fun _ =>
208-
(minpoly.irreducible (IsAlgClosure.algebraic _).isIntegral).separable⟩
207+
fun _ => (minpoly.irreducible (IsAlgClosure.algebraic _).isIntegral).separable⟩
209208
#align is_alg_closure.separable IsAlgClosure.separable
210209

211210
namespace IsAlgClosed

Mathlib/FieldTheory/IsSepClosed.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ instance isSeparable [Algebra k K] [IsSepClosure k K] : IsSeparable k K :=
193193
IsSepClosure.separable
194194

195195
instance (priority := 100) normal [Algebra k K] [IsSepClosure k K] : Normal k K :=
196-
fun x ↦ (IsSeparable.isIntegral' x).isAlgebraic,
196+
fun x ↦ (IsSeparable.isIntegral k x).isAlgebraic,
197197
fun x ↦ (IsSepClosure.sep_closed k).splits_codomain _ (IsSeparable.separable k x)⟩
198198

199199
end IsSepClosure
@@ -207,7 +207,7 @@ variable {K : Type u} {L : Type v} {M : Type w} [Field K] [Field L] [Algebra K L
207207
closed extension M of K. -/
208208
noncomputable irreducible_def lift : L →ₐ[K] M :=
209209
Classical.choice <| IntermediateField.nonempty_algHom_of_adjoin_splits
210-
(fun x _ ↦ ⟨IsSeparable.isIntegral' x, splits_codomain _ (IsSeparable.separable K x)⟩)
210+
(fun x _ ↦ ⟨IsSeparable.isIntegral K x, splits_codomain _ (IsSeparable.separable K x)⟩)
211211
(IntermediateField.adjoin_univ K L)
212212

213213
end IsSepClosed

Mathlib/FieldTheory/Separable.lean

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -491,38 +491,40 @@ variable (F K : Type*) [CommRing F] [Ring K] [Algebra F K]
491491
-- is separable and normal, so if the definition of separable changes here at some point
492492
-- to allow non-algebraic extensions, then the definition of `IsGalois` must also be changed.
493493
/-- Typeclass for separable field extension: `K` is a separable field extension of `F` iff
494-
the minimal polynomial of every `x : K` is separable.
494+
the minimal polynomial of every `x : K` is separable. This implies that `K/F` is an algebraic
495+
extension, because the minimal polynomial of a non-integral element is 0, which is not
496+
separable.
495497
496498
We define this for general (commutative) rings and only assume `F` and `K` are fields if this
497499
is needed for a proof.
498500
-/
499-
class IsSeparable : Prop where
500-
isIntegral' (x : K) : IsIntegral F x
501+
@[mk_iff isSeparable_def] class IsSeparable : Prop where
501502
separable' (x : K) : (minpoly F x).Separable
502503
#align is_separable IsSeparable
503504

504505
variable (F : Type*) {K : Type*} [CommRing F] [Ring K] [Algebra F K]
505506

506-
theorem IsSeparable.isIntegral [IsSeparable F K] : ∀ x : K, IsIntegral F x :=
507-
IsSeparable.isIntegral'
508-
#align is_separable.is_integral IsSeparable.isIntegral
509-
510507
theorem IsSeparable.separable [IsSeparable F K] : ∀ x : K, (minpoly F x).Separable :=
511508
IsSeparable.separable'
512509
#align is_separable.separable IsSeparable.separable
513510

511+
theorem IsSeparable.isIntegral [IsSeparable F K] : ∀ x : K, IsIntegral F x := fun x ↦ by
512+
cases subsingleton_or_nontrivial F
513+
· haveI := Module.subsingleton F K
514+
exact ⟨1, monic_one, Subsingleton.elim _ _⟩
515+
· exact of_not_not fun h ↦ not_separable_zero (minpoly.eq_zero h ▸ IsSeparable.separable F x)
516+
#align is_separable.is_integral IsSeparable.isIntegral
517+
514518
variable {F K : Type*} [CommRing F] [Ring K] [Algebra F K]
515519

516520
theorem isSeparable_iff : IsSeparable F K ↔ ∀ x : K, IsIntegral F x ∧ (minpoly F x).Separable :=
517-
fun _ x => ⟨IsSeparable.isIntegral F x, IsSeparable.separable F x⟩, fun h =>
518-
fun x => (h x).1, fun x => (h x).2⟩⟩
521+
fun _ x => ⟨IsSeparable.isIntegral F x, IsSeparable.separable F x⟩, fun h => ⟨fun x => (h x).2⟩⟩
519522
#align is_separable_iff isSeparable_iff
520523

521524
end CommRing
522525

523526
instance isSeparable_self (F : Type*) [Field F] : IsSeparable F F :=
524-
fun x => isIntegral_algebraMap,
525-
fun x => by
527+
fun x => by
526528
rw [minpoly.eq_X_sub_C']
527529
exact separable_X_sub_C⟩
528530
#align is_separable_self isSeparable_self
@@ -531,8 +533,7 @@ instance isSeparable_self (F : Type*) [Field F] : IsSeparable F F :=
531533
/-- A finite field extension in characteristic 0 is separable. -/
532534
instance (priority := 100) IsSeparable.of_finite (F K : Type*) [Field F] [Field K] [Algebra F K]
533535
[FiniteDimensional F K] [CharZero F] : IsSeparable F K :=
534-
have : ∀ x : K, IsIntegral F x := fun _x ↦ .of_finite F _
535-
⟨this, fun x => (minpoly.irreducible (this x)).separable⟩
536+
fun x => (minpoly.irreducible <| .of_finite F x).separable⟩
536537
#align is_separable.of_finite IsSeparable.of_finite
537538

538539
section IsSeparableTower
@@ -541,18 +542,15 @@ variable (F K E : Type*) [Field F] [Field K] [Field E] [Algebra F K] [Algebra F
541542
[IsScalarTower F K E]
542543

543544
theorem isSeparable_tower_top_of_isSeparable [IsSeparable F E] : IsSeparable K E :=
544-
fun x ↦ (IsSeparable.isIntegral F x).tower_top, fun x ↦
545-
(IsSeparable.separable F x).map.of_dvd (minpoly.dvd_map_of_isScalarTower _ _ _)⟩
545+
fun x ↦ (IsSeparable.separable F x).map.of_dvd (minpoly.dvd_map_of_isScalarTower _ _ _)⟩
546546
#align is_separable_tower_top_of_is_separable isSeparable_tower_top_of_isSeparable
547547

548548
theorem isSeparable_tower_bot_of_isSeparable [h : IsSeparable F E] : IsSeparable F K :=
549-
isSeparable_iff.2 fun x ↦ by
550-
refine (isSeparable_iff.1 h (algebraMap K E x)).imp .tower_bot_of_field fun hs ↦ ?_
551-
obtain ⟨q, hq⟩ :=
549+
fun x ↦
550+
have ⟨_q, hq⟩ :=
552551
minpoly.dvd F x
553552
((aeval_algebraMap_eq_zero_iff _ _ _).mp (minpoly.aeval F ((algebraMap K E) x)))
554-
rw [hq] at hs
555-
exact hs.of_mul_left
553+
(hq ▸ h.separable (algebraMap K E x)).of_mul_left⟩
556554
#align is_separable_tower_bot_of_is_separable isSeparable_tower_bot_of_isSeparable
557555

558556
variable {E}

0 commit comments

Comments
 (0)