Source context 6 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace EtaleFundamentalGroups.Kummer
open Polynomial
open ValuationTheory.DiscreteValuationField
open scoped TensorProduct
universe utheorem
maximalIdeal_fg_iteratedRadical_of_mem_or_eq_one
{A : Type u} [CommRing A] [IsLocalRing A]
(hmax : (IsLocalRing.maximalIdeal A).FG)
{r : ℕ} (n : Fin r → ℕ) (a : Fin r → A)
(hn : ∀ i, 0 < n i)
(hstage : ∀ i,
a i ∈ IsLocalRing.maximalIdeal A ∨ n i = 1) :
let B := iteratedRadical A r n a
letI : IsLocalRing B :=
isLocalRing_iteratedRadical_of_mem_or_eq_one n a hn hstage
(IsLocalRing.maximalIdeal B).FG := by
induction r with
| zero =>
change (IsLocalRing.maximalIdeal A).FG
exact hmax
| succ r ih =>
let T : CommAlgCat.{u} A :=
iteratedRadical A r (Fin.init n) (Fin.init a)
let f : T[X] :=
X ^ n (Fin.last r) - C (algebraMap A T (a (Fin.last r)))
let : IsLocalRing T :=
isLocalRing_iteratedRadical_of_mem_or_eq_one
(Fin.init n) (Fin.init a)
(fun i ↦ hn i.castSucc) (fun i ↦ hstage i.castSucc)
have hmaxT : (IsLocalRing.maximalIdeal T).FG :=
ih (Fin.init n) (Fin.init a)
(fun i ↦ hn i.castSucc) (fun i ↦ hstage i.castSucc)
have hstageLast :
algebraMap A T (a (Fin.last r)) ∈
IsLocalRing.maximalIdeal T ∨
n (Fin.last r) = 1 := by
rcases hstage (Fin.last r) with ha | hOne
· exact Or.inl
(algebraMap_mem_maximalIdeal_iteratedRadical_of_mem_or_eq_one
(Fin.init n) (Fin.init a)
(fun i ↦ hn i.castSucc) (fun i ↦ hstage i.castSucc) ha)
· exact Or.inr hOne
let : IsLocalRing (AdjoinRoot f) :=
isLocalRing_adjoinRoot_X_pow_sub_C_of_mem_or_eq_one
(hn (Fin.last r)) hstageLast
change (IsLocalRing.maximalIdeal (AdjoinRoot f)).FG
rcases hstageLast with haLast | hOne
· rw [maximalIdeal_adjoinRoot_X_pow_sub_C
(hn (Fin.last r)) haLast]
exact Submodule.FG.sup
(hmaxT.map (AdjoinRoot.of f))
(Submodule.fg_span
(Set.finite_singleton (AdjoinRoot.root f)))
· have hf :
f = X ^ 1 - C (algebraMap A T (a (Fin.last r))) := by
simp only [f, hOne]
let e : AdjoinRoot f ≃ₐ[T] T := by
rw [hf]
exact adjoinRootOneAlgEquiv
(algebraMap A T (a (Fin.last r)))
have hmap :
(IsLocalRing.maximalIdeal T).map
e.symm.toRingEquiv.toRingHom =
IsLocalRing.maximalIdeal (AdjoinRoot f) :=
IsLocalRing.map_ringEquiv_maximalIdeal e.symm.toRingEquiv
rw [← hmap]
exact Ideal.FG.map hmaxT e.symm.toRingEquiv.toRingHom