The canonical function-field normalization of a connected punctured cover is finite etale once its stalk maps over the closed complement are formally etale.
Source context 6 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open CategoryTheory Limits
open CategoryTheory.PreGaloisCategory
namespace AlgebraicGeometry.FiniteEtale
universe u
variable (R : Type u) [CommRing R] [IsDomain R] [IsIntegrallyClosed R]
[IsLocalRing R] [IsNoetherianRing R]
[IsIntegral (Scheme.puncturedSpectrum R)]theorem
connectedPuncturedCoverGenericNormalization_isFiniteEtale_of_boundary_stalkMap_formallyEtale
(hpos : (1 : WithBot ℕ∞) ≤ ringKrullDim R)
(W : FiniteEtale (Scheme.puncturedSpectrum R)) [IsConnected W]
(hboundary :
let j := Scheme.puncturedSpectrumInclusion R
let z := (connectedCoverGenericComposite W ≫ j).fromNormalization
∀ y : (connectedCoverGenericComposite W ≫ j).normalization,
z y ∉ Scheme.puncturedSpectrumOpen R →
(z.stalkMap y).hom.FormallyEtale) :
IsFiniteEtale
(connectedCoverGenericComposite W ≫
Scheme.puncturedSpectrumInclusion R).fromNormalization := by
let X := Spec (.of R)
let U := Scheme.puncturedSpectrum R
let j : U ⟶ X := Scheme.puncturedSpectrumInclusion R
let : Nonempty U :=
Scheme.puncturedSpectrum_nonempty_of_one_le_ringKrullDim R hpos
let : IsOpenImmersion j := by
dsimp only [j, Scheme.puncturedSpectrumInclusion]
infer_instance
let : IsIntegral U := isIntegral_of_isOpenImmersion j
let : IsNormalIntegral U := inferInstance
let : IsLocallyNoetherian U := inferInstance
let : QuasiCompact j := inferInstance
let : QuasiSeparated j := inferInstance
let z : (connectedCoverGenericComposite W ≫ j).normalization ⟶ X :=
(connectedCoverGenericComposite W ≫ j).fromNormalization
let : IsFinite z :=
connectedPuncturedCoverGenericNormalization_isFinite R hpos W
have hrestrictFiniteEtale : IsFiniteEtale (z ∣_ j.opensRange) := by
change IsFiniteEtale
((connectedCoverGenericComposite W ≫ j).fromNormalization ∣_ j.opensRange)
exact connectedCoverGenericNormalization_restrictOpensRange_isFiniteEtale j W
have hrestrict : Etale (z ∣_ j.opensRange) :=
hrestrictFiniteEtale.toEtale
apply
(open _root_.EtaleFundamentalGroups in
isFiniteEtale_of_isFinite_of_restrict_etale_of_boundary_stalkMap_formallyEtale
z j.opensRange hrestrict)
simpa only [z, j, Scheme.puncturedSpectrumInclusion,
Scheme.Opens.opensRange_ι] using hboundary