The local ring at a normalization prime is canonically unchanged by first localizing the base at the contracted prime and transporting the normalization prime. No separately chosen prime or comparison equality is used.
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
namespace EtaleFundamentalGroups
universe uA uK uL
variable {A : Type uA} {K : Type uK} {L : Type uL}
variable [CommRing A] [IsDomain A]
variable [Field K] [Field L]
variable [Algebra A K] [IsFractionRing A K]
variable [Algebra K L] [Algebra A L] [IsScalarTower A K L]def integralClosurePrimeLocalizationAlgEquiv
(P : Ideal A) [P.IsPrime]
(Q : Ideal (integralClosure A L)) [Q.IsPrime] [Q.LiesOver P] :
letI := localizationAtPrimeToExtensionAlgebra (K := K) (L := L) P
letI := localizationAtPrimeToExtension_isScalarTower
(K := K) (L := L) P
letI : Algebra (Localization.AtPrime P) (Localization.AtPrime Q) :=
Localization.AtPrime.algebraOfLiesOver P Q
let q := localizedNormalizationPrime (K := K) (L := L) P Q
letI : q.IsMaximal :=
localizedNormalizationPrime_isMaximal (K := K) (L := L) P Q
Localization.AtPrime Q ≃ₐ[Localization.AtPrime P]
Localization.AtPrime q := by
let V := Localization.AtPrime P
let C := integralClosure A L
letI := localizationAtPrimeToExtensionAlgebra (K := K) (L := L) P
letI : IsScalarTower A V L :=
localizationAtPrimeToExtension_isScalarTower (K := K) (L := L) P
let Cp := integralClosure V L
letI := integralClosureLocalizationAlgebra (L := L) P
let M := Algebra.algebraMapSubmonoid C P.primeCompl
letI : IsLocalization M Cp :=
isLocalization_integralClosure_localizationAtPrime
(K := K) (L := L) P
let q := localizedNormalizationPrime (K := K) (L := L) P Q
letI : q.IsMaximal :=
localizedNormalizationPrime_isMaximal (K := K) (L := L) P Q
let Dglobal := Localization.AtPrime Q
let Dlocal := Localization.AtPrime q
letI : Algebra V Dglobal :=
Localization.AtPrime.algebraOfLiesOver P Q
have hdisj : Disjoint (M : Set C) (Q : Set C) := by
exact Set.disjoint_image_left.mpr
(Set.disjoint_compl_left_iff_subset.mpr
(show Q.under A ≤ P by rw [Q.over_def P]))
have hunder : q.under C = Q := by
change (Q.map (algebraMap C Cp)).under C = Q
exact IsLocalization.under_map_of_isPrime_disjoint M Cp inferInstance hdisj
letI : IsLocalization Q.primeCompl Dlocal := by
have hloc :=
IsLocalization.isLocalization_isLocalization_atPrime_isLocalization
M Dlocal q
have hsub : (q.under C).primeCompl = Q.primeCompl := by
ext x
change (x ∉ q.under C) ↔ x ∉ Q
rw [hunder]
exact hsub ▸ hloc
let e : Dglobal ≃ₐ[C] Dlocal :=
IsLocalization.algEquiv Q.primeCompl Dglobal Dlocal
refine
{ toRingEquiv := e.toRingEquiv
commutes' := fun z ↦ ?_ }
apply DFunLike.congr_fun (f :=
e.toRingHom.comp (algebraMap V Dglobal))
(g := algebraMap V Dlocal) ?_ z
apply IsLocalization.ringHom_ext P.primeCompl
ext a
simp only [RingHom.comp_apply]
rw [← IsScalarTower.algebraMap_apply A V Dglobal,
← IsScalarTower.algebraMap_apply A V Dlocal]
exact e.commutes (algebraMap A C a)