@@ -76,22 +76,36 @@ theorem inertiaDeg'_eq [q.LiesOver p] [q.IsPrime] [p.IsPrime]
7676 subst this
7777 exact inertiaDeg'_def q R
7878
79- theorem inertiaDeg_eq_inertiaDeg' [q.LiesOver p] [p.IsMaximal] [q.IsMaximal] :
80- p.inertiaDeg q = q.inertiaDeg' R := by
79+ theorem inertiaDeg'_eq_of_isFractionRing [q.LiesOver p] [p.IsPrime] [q.IsPrime]
80+ (K L : Type *) [Field K] [Field L]
81+ [Algebra (R ⧸ p) K] [IsFractionRing (R ⧸ p) K]
82+ [Algebra (S ⧸ q) L] [IsFractionRing (S ⧸ q) L]
83+ [Algebra R K] [IsScalarTower R (R ⧸ p) K]
84+ [Algebra S L] [IsScalarTower S (S ⧸ q) L]
85+ [Algebra R L] [IsScalarTower R S L]
86+ [Algebra K L] [IsScalarTower R K L] :
87+ q.inertiaDeg' R = Module.finrank K L := by
88+ let := Localization.AtPrime.algebraOfLiesOver p q
89+ rw [inertiaDeg'_eq p q]
90+ apply Algebra.finrank_eq_of_equiv_equiv
91+ (IsFractionRing.algEquivOfAlgEquiv (R := R) (A := R ⧸ p) (K := p.ResidueField) (L := K) .refl)
92+ (IsFractionRing.algEquivOfAlgEquiv (R := S) (A := S ⧸ q) (K := q.ResidueField) (L := L) .refl)
93+ apply IsFractionRing.ringHom_ext (A := R ⧸ p)
94+ intro x
95+ obtain ⟨x, rfl⟩ := Ideal.Quotient.mk_surjective x
96+ simp [← IsScalarTower.algebraMap_apply R p.ResidueField q.ResidueField,
97+ IsScalarTower.algebraMap_apply R S q.ResidueField,
98+ ← IsScalarTower.algebraMap_apply R K L, ← IsScalarTower.algebraMap_apply R S L]
99+
100+ theorem inertiaDeg'_eq_of_isMaximal [q.LiesOver p] [p.IsMaximal] [q.IsMaximal] :
101+ q.inertiaDeg' R = Module.finrank (R ⧸ p) (S ⧸ q) := by
81102 let : Field (R ⧸ p) := Quotient.field p
82103 let : Field (S ⧸ q) := Quotient.field q
83- let := Localization.AtPrime.algebraOfLiesOver p q
84- rw [inertiaDeg'_eq p q, inertiaDeg_algebraMap]
85- let f := (algebraMap (S ⧸ q) q.ResidueField).comp (algebraMap (R ⧸ p) (S ⧸ q))
86- let g := (algebraMap p.ResidueField q.ResidueField).comp (algebraMap (R ⧸ p) p.ResidueField)
87- have h : f = g := by ext; simp [f, g, ← IsScalarTower.algebraMap_apply]
88- let : Algebra (R ⧸ p) q.ResidueField := f.toAlgebra
89- have : IsScalarTower (R ⧸ p) (S ⧸ q) q.ResidueField := IsScalarTower.of_algebraMap_eq' rfl
90- have : IsScalarTower (R ⧸ p) p.ResidueField q.ResidueField := IsScalarTower.of_algebraMap_eq' h
91- rw [← mul_one (Module.finrank (R ⧸ p) (S ⧸ q)),
92- ← Module.finrank_of_bijective_algebraMap (bijective_algebraMap_quotient_residueField q),
93- Module.finrank_mul_finrank, ← Module.finrank_mul_finrank (R ⧸ p) p.ResidueField q.ResidueField,
94- Module.finrank_of_bijective_algebraMap (bijective_algebraMap_quotient_residueField p), one_mul]
104+ exact inertiaDeg'_eq_of_isFractionRing p q (R ⧸ p) (S ⧸ q)
105+
106+ theorem inertiaDeg_eq_inertiaDeg' [q.LiesOver p] [p.IsMaximal] [q.IsMaximal] :
107+ p.inertiaDeg q = q.inertiaDeg' R := by
108+ rw [inertiaDeg_algebraMap, inertiaDeg'_eq_of_isMaximal p q]
95109
96110theorem inertiaDeg'_tower [r.LiesOver q] :
97111 r.inertiaDeg' R = q.inertiaDeg' R * r.inertiaDeg' S := by
@@ -105,6 +119,24 @@ theorem inertiaDeg'_tower [r.LiesOver q] :
105119 apply Module.finrank_mul_finrank
106120 · rw [inertiaDeg'_of_not_isPrime r R hr, inertiaDeg'_of_not_isPrime r S hr, mul_zero]
107121
122+ theorem inertiaDeg'_below_dvd [r.LiesOver q] :
123+ q.inertiaDeg' R ∣ r.inertiaDeg' R := by
124+ use r.inertiaDeg' S
125+ rw [← inertiaDeg'_tower]
126+
127+ theorem inertiaDeg'_above_dvd [r.LiesOver q] :
128+ r.inertiaDeg' S ∣ r.inertiaDeg' R := by
129+ use q.inertiaDeg' R
130+ rw [mul_comm, ← inertiaDeg'_tower]
131+
132+ theorem inertiaDeg'_below_le [r.IsPrime] [r.LiesOver q] [Module.Finite R T] :
133+ q.inertiaDeg' R ≤ r.inertiaDeg' R :=
134+ Nat.le_of_dvd (r.inertiaDeg'_pos R) (q.inertiaDeg'_below_dvd r)
135+
136+ theorem inertiaDeg'_above_le [r.IsPrime] [r.LiesOver q] [Module.Finite R T] :
137+ r.inertiaDeg' S ≤ r.inertiaDeg' R :=
138+ Nat.le_of_dvd (r.inertiaDeg'_pos R) (q.inertiaDeg'_above_dvd r)
139+
108140variable (R) in
109141open Pointwise in
110142@[simp]
0 commit comments