Source context 5 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open scoped TensorProduct
namespace EtaleFundamentalGroups.Kummer
open Polynomial
universe uA uK uLtheorem
localization_integralClosure_genericTensorFieldComponent_etale_of_awayMap
{A : Type uA} {C : Type uL} {D : Type uA}
{F : Type uK} {E : Type uL} {K : Type uA}
[CommRing A] [IsDomain A]
[CommRing C] [IsDomain C] [Algebra A C] [FaithfulSMul A C]
[Module.Finite A C]
(f : A) (hf : f ≠ 0)
[Field F] [Algebra A F] [IsFractionRing A F]
[Field E] [Algebra C E] [IsFractionRing C E]
[Algebra A E] [IsScalarTower A C E]
[Algebra F E] [IsScalarTower A F E]
[CommRing D] [IsDomain D] [IsIntegrallyClosed D] [Algebra A D]
[Field K] [Algebra D K] [IsFractionRing D K]
[Algebra A K] [IsScalarTower A D K]
[Algebra F K] [IsScalarTower A F K]
(hAway : (Localization.awayMap (algebraMap A C) f).Etale)
(q : Ideal D) [q.IsPrime]
(hdisj : Disjoint
((Submonoid.powers (algebraMap A D f) : Submonoid D) : Set D)
(q : Set D))
(m : Ideal (K ⊗[F] E)) [m.IsMaximal] :
let M := GenericTensorFieldComponent m
letI : Algebra D M :=
genericTensorFieldComponentLeftScalarAlgebra (R := D) m
letI : SMul D M :=
(genericTensorFieldComponentLeftScalarAlgebra (R := D) m).toSMul
letI : IsScalarTower D K M :=
IsScalarTower.of_algebraMap_eq fun _ ↦ rfl
let Q := Localization.AtPrime q
letI : Algebra Q K :=
localizationAtPrimeToFractionFieldAlgebra (K := K) q
letI : IsFractionRing Q K :=
localizationAtPrimeToFractionField_isFractionRing (K := K) q
letI : Algebra Q M :=
localizationAtPrimeToExtensionAlgebra (K := K) (L := M) q
letI : SMul Q M :=
(localizationAtPrimeToExtensionAlgebra (K := K) (L := M) q).toSMul
letI : IsScalarTower Q K M :=
localizationAtPrimeToFractionFieldToExtension_isScalarTower
(K := K) (L := M) q
letI : IsScalarTower D Q M :=
localizationAtPrimeToExtension_isScalarTower (K := K) (L := M) q
letI := integralClosureLocalizationAlgebra (L := M) q
Algebra.Etale Q
(Localization (Algebra.algebraMapSubmonoid
(integralClosure D M) q.primeCompl)) := by
let S := Localization.Away f
let fC : C := algebraMap A C f
let T := Localization.Away fC
have hfC : fC ≠ 0 := by
simpa [fC] using (FaithfulSMul.algebraMap_injective A C).ne hf
let mapST : S →+* T := Localization.awayMap (algebraMap A C) f
let : Algebra S T := mapST.toAlgebra
let : IsScalarTower A C T := by
apply IsScalarTower.of_algebraMap_eq
intro x
rfl
let : IsScalarTower A S T := by
apply IsScalarTower.of_algebraMap_eq
intro x
change algebraMap A T x = mapST (algebraMap A S x)
rw [IsScalarTower.algebraMap_apply A C T]
simp [mapST, S, T, fC, IsLocalization.Away.map]
let : Module.Finite S T :=
Module.Finite.of_isLocalization A C (Submonoid.powers f)
let : Algebra.Etale S T := hAway.toAlgebra
let : IsDomain S := IsLocalization.Away.isDomain S hf
let : IsDomain T := IsLocalization.Away.isDomain T hfC
let : Algebra S F :=
localizationAwayToExtensionAlgebra
(A := A) (K := F) (L := F) f hf
let : IsScalarTower A S F :=
localizationAwayToExtension_isScalarTower
(A := A) (K := F) (L := F) f hf
let : IsFractionRing S F :=
IsFractionRing.isFractionRing_of_isDomain_of_isLocalization
(Submonoid.powers f) S F
let : Algebra T E :=
localizationAwayToExtensionAlgebra
(A := C) (K := E) (L := E) fC hfC
let : IsScalarTower C T E :=
localizationAwayToExtension_isScalarTower
(A := C) (K := E) (L := E) fC hfC
let : IsFractionRing T E :=
IsFractionRing.isFractionRing_of_isDomain_of_isLocalization
(Submonoid.powers fC) T E
let : Algebra S E :=
((algebraMap T E).comp (algebraMap S T)).toAlgebra
let : IsScalarTower S T E := IsScalarTower.of_algebraMap_eq' rfl
let : IsScalarTower S F E := by
apply IsScalarTower.of_algebraMap_eq
intro x
have hmaps :
(algebraMap F E).comp (algebraMap S F) = algebraMap S E := by
apply IsLocalization.ringHom_ext (Submonoid.powers f)
ext a
change algebraMap F E (algebraMap S F (algebraMap A S a)) =
algebraMap T E (mapST (algebraMap A S a))
calc
algebraMap F E (algebraMap S F (algebraMap A S a)) =
algebraMap F E (algebraMap A F a) := by
rw [← IsScalarTower.algebraMap_apply A S F]
_ = algebraMap A E a :=
(IsScalarTower.algebraMap_apply A F E a).symm
_ = algebraMap C E (algebraMap A C a) :=
IsScalarTower.algebraMap_apply A C E a
_ = algebraMap T E (algebraMap C T (algebraMap A C a)) :=
IsScalarTower.algebraMap_apply C T E (algebraMap A C a)
_ = algebraMap T E (mapST (algebraMap A S a)) := by
congr 1
calc
algebraMap C T (algebraMap A C a) = algebraMap A T a :=
(IsScalarTower.algebraMap_apply A C T a).symm
_ = algebraMap S T (algebraMap A S a) :=
IsScalarTower.algebraMap_apply A S T a
_ = mapST (algebraMap A S a) := rfl
exact (DFunLike.congr_fun hmaps x).symm
exact
localization_integralClosure_genericTensorFieldComponent_etale_of_base_away
(A := A) (C := C) (D := D) (F := F) (E := E) (K := K)
f q hdisj m