@@ -3,9 +3,10 @@ Copyright (c) 2020 Anne Baanen. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Anne Baanen
5
5
-/
6
- import Mathlib.FieldTheory.Tower
7
- import Mathlib.RingTheory.Algebraic
8
- import Mathlib.FieldTheory.Minpoly.Basic
6
+ import Mathlib.Algebra.Field.Subfield
7
+ import Mathlib.Algebra.Polynomial.AlgebraMap
8
+ import Mathlib.RingTheory.LocalRing.Basic
9
+ import Mathlib.RingTheory.IntegralClosure.IsIntegral.Defs
9
10
10
11
/-!
11
12
# Intermediate fields
@@ -36,7 +37,7 @@ intermediate field, field extension
36
37
-/
37
38
38
39
39
- open FiniteDimensional Polynomial
40
+ open Polynomial
40
41
41
42
open Polynomial
42
43
@@ -752,100 +753,4 @@ end Restrict
752
753
753
754
end Tower
754
755
755
- section FiniteDimensional
756
-
757
- variable (F E : IntermediateField K L)
758
-
759
- instance finiteDimensional_left [FiniteDimensional K L] : FiniteDimensional K F :=
760
- left K F L
761
-
762
- instance finiteDimensional_right [FiniteDimensional K L] : FiniteDimensional F L :=
763
- right K F L
764
-
765
- @[simp]
766
- theorem rank_eq_rank_subalgebra : Module.rank K F.toSubalgebra = Module.rank K F :=
767
- rfl
768
-
769
- @[simp]
770
- theorem finrank_eq_finrank_subalgebra : finrank K F.toSubalgebra = finrank K F :=
771
- rfl
772
-
773
- variable {F} {E}
774
-
775
- @[simp]
776
- theorem toSubalgebra_eq_iff : F.toSubalgebra = E.toSubalgebra ↔ F = E := by
777
- rw [SetLike.ext_iff, SetLike.ext'_iff, Set.ext_iff]
778
- rfl
779
-
780
- /-- If `F ≤ E` are two intermediate fields of `L / K` such that `[E : K] ≤ [F : K]` are finite,
781
- then `F = E`. -/
782
- theorem eq_of_le_of_finrank_le [hfin : FiniteDimensional K E] (h_le : F ≤ E)
783
- (h_finrank : finrank K E ≤ finrank K F) : F = E :=
784
- haveI : Module.Finite K E.toSubalgebra := hfin
785
- toSubalgebra_injective <| Subalgebra.eq_of_le_of_finrank_le h_le h_finrank
786
-
787
- /-- If `F ≤ E` are two intermediate fields of `L / K` such that `[F : K] = [E : K]` are finite,
788
- then `F = E`. -/
789
- theorem eq_of_le_of_finrank_eq [FiniteDimensional K E] (h_le : F ≤ E)
790
- (h_finrank : finrank K F = finrank K E) : F = E :=
791
- eq_of_le_of_finrank_le h_le h_finrank.ge
792
-
793
- -- If `F ≤ E` are two intermediate fields of a finite extension `L / K` such that
794
- -- `[L : F] ≤ [L : E]`, then `F = E`. Marked as private since it's a direct corollary of
795
- -- `eq_of_le_of_finrank_le'` (the `FiniteDimensional K L` implies `FiniteDimensional F L`
796
- -- automatically by typeclass resolution).
797
- private theorem eq_of_le_of_finrank_le'' [FiniteDimensional K L] (h_le : F ≤ E)
798
- (h_finrank : finrank F L ≤ finrank E L) : F = E := by
799
- apply eq_of_le_of_finrank_le h_le
800
- have h1 := finrank_mul_finrank K F L
801
- have h2 := finrank_mul_finrank K E L
802
- have h3 : 0 < finrank E L := finrank_pos
803
- nlinarith
804
-
805
- /-- If `F ≤ E` are two intermediate fields of `L / K` such that `[L : F] ≤ [L : E]` are finite,
806
- then `F = E`. -/
807
- theorem eq_of_le_of_finrank_le' [FiniteDimensional F L] (h_le : F ≤ E)
808
- (h_finrank : finrank F L ≤ finrank E L) : F = E := by
809
- refine le_antisymm h_le (fun l hl ↦ ?_)
810
- rwa [← mem_extendScalars (le_refl F), eq_of_le_of_finrank_le''
811
- ((extendScalars_le_extendScalars_iff (le_refl F) h_le).2 h_le) h_finrank, mem_extendScalars]
812
-
813
- /-- If `F ≤ E` are two intermediate fields of `L / K` such that `[L : F] = [L : E]` are finite,
814
- then `F = E`. -/
815
- theorem eq_of_le_of_finrank_eq' [FiniteDimensional F L] (h_le : F ≤ E)
816
- (h_finrank : finrank F L = finrank E L) : F = E :=
817
- eq_of_le_of_finrank_le' h_le h_finrank.le
818
-
819
- end FiniteDimensional
820
-
821
- theorem isAlgebraic_iff {x : S} : IsAlgebraic K x ↔ IsAlgebraic K (x : L) :=
822
- (isAlgebraic_algebraMap_iff (algebraMap S L).injective).symm
823
-
824
- theorem isIntegral_iff {x : S} : IsIntegral K x ↔ IsIntegral K (x : L) := by
825
- rw [← isAlgebraic_iff_isIntegral, isAlgebraic_iff, isAlgebraic_iff_isIntegral]
826
-
827
- theorem minpoly_eq (x : S) : minpoly K x = minpoly K (x : L) :=
828
- (minpoly.algebraMap_eq (algebraMap S L).injective x).symm
829
-
830
756
end IntermediateField
831
-
832
- /-- If `L/K` is algebraic, the `K`-subalgebras of `L` are all fields. -/
833
- def subalgebraEquivIntermediateField [Algebra.IsAlgebraic K L] :
834
- Subalgebra K L ≃o IntermediateField K L where
835
- toFun S := S.toIntermediateField fun x hx => S.inv_mem_of_algebraic
836
- (Algebra.IsAlgebraic.isAlgebraic ((⟨x, hx⟩ : S) : L))
837
- invFun S := S.toSubalgebra
838
- left_inv _ := toSubalgebra_toIntermediateField _ _
839
- right_inv := toIntermediateField_toSubalgebra
840
- map_rel_iff' := Iff.rfl
841
-
842
- @[simp]
843
- theorem mem_subalgebraEquivIntermediateField [Algebra.IsAlgebraic K L] {S : Subalgebra K L}
844
- {x : L} : x ∈ subalgebraEquivIntermediateField S ↔ x ∈ S :=
845
- Iff.rfl
846
-
847
- @[simp]
848
- theorem mem_subalgebraEquivIntermediateField_symm [Algebra.IsAlgebraic K L]
849
- {S : IntermediateField K L} {x : L} :
850
- x ∈ subalgebraEquivIntermediateField.symm S ↔ x ∈ S :=
851
- Iff.rfl
0 commit comments