@@ -491,38 +491,40 @@ variable (F K : Type*) [CommRing F] [Ring K] [Algebra F K]
491
491
-- is separable and normal, so if the definition of separable changes here at some point
492
492
-- to allow non-algebraic extensions, then the definition of `IsGalois` must also be changed.
493
493
/-- 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.
495
497
496
498
We define this for general (commutative) rings and only assume `F` and `K` are fields if this
497
499
is needed for a proof.
498
500
-/
499
- class IsSeparable : Prop where
500
- isIntegral' (x : K) : IsIntegral F x
501
+ @[mk_iff isSeparable_def] class IsSeparable : Prop where
501
502
separable' (x : K) : (minpoly F x).Separable
502
503
#align is_separable IsSeparable
503
504
504
505
variable (F : Type *) {K : Type *} [CommRing F] [Ring K] [Algebra F K]
505
506
506
- theorem IsSeparable.isIntegral [IsSeparable F K] : ∀ x : K, IsIntegral F x :=
507
- IsSeparable.isIntegral'
508
- #align is_separable.is_integral IsSeparable.isIntegral
509
-
510
507
theorem IsSeparable.separable [IsSeparable F K] : ∀ x : K, (minpoly F x).Separable :=
511
508
IsSeparable.separable'
512
509
#align is_separable.separable IsSeparable.separable
513
510
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
+
514
518
variable {F K : Type *} [CommRing F] [Ring K] [Algebra F K]
515
519
516
520
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 ⟩⟩
519
522
#align is_separable_iff isSeparable_iff
520
523
521
524
end CommRing
522
525
523
526
instance isSeparable_self (F : Type *) [Field F] : IsSeparable F F :=
524
- ⟨fun x => isIntegral_algebraMap,
525
- fun x => by
527
+ ⟨fun x => by
526
528
rw [minpoly.eq_X_sub_C']
527
529
exact separable_X_sub_C⟩
528
530
#align is_separable_self isSeparable_self
@@ -531,8 +533,7 @@ instance isSeparable_self (F : Type*) [Field F] : IsSeparable F F :=
531
533
/-- A finite field extension in characteristic 0 is separable. -/
532
534
instance (priority := 100 ) IsSeparable.of_finite (F K : Type *) [Field F] [Field K] [Algebra F K]
533
535
[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⟩
536
537
#align is_separable.of_finite IsSeparable.of_finite
537
538
538
539
section IsSeparableTower
@@ -541,18 +542,15 @@ variable (F K E : Type*) [Field F] [Field K] [Field E] [Algebra F K] [Algebra F
541
542
[IsScalarTower F K E]
542
543
543
544
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 _ _ _)⟩
546
546
#align is_separable_tower_top_of_is_separable isSeparable_tower_top_of_isSeparable
547
547
548
548
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⟩ :=
552
551
minpoly.dvd F x
553
552
((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⟩
556
554
#align is_separable_tower_bot_of_is_separable isSeparable_tower_bot_of_isSeparable
557
555
558
556
variable {E}
0 commit comments