Zulip Chat Archive
Stream: mathlib4
Topic: Zariski's main theorem
Andrew Yang (Dec 08 2025 at 19:46):
I am here to advertise that #32534 contains a sorry free proof of Zariski's main theorem for affine morphisms, Which says that:
/--
**Zariski's main theorem** for affine morphisms.
Recall that any qcqs morphism `f : X ⟶ Y` factors through the relative normalization via
`f.toNormalization : X ⟶ f.normalization` (a dominant morphism) and
`f.fromNormalization : f.normalization ⟶ Y` (an integral morphism).
Let `f : X ⟶ Y` be an affine morphism locally of finite type.
then there exists `U : f.normalization.Opens`, such that
1. `f.toNormalization ∣_ U` is an isomorphism
2. `f.toNormalization ⁻¹ᵁ U` is the quasi-finite locus of `f`
The full version for non-affine morphisms is much harder.
-/
@[stacks 03GT]
lemma Scheme.Hom.exists_isIso_morphismRestrict_toNormalization
{X Y : Scheme} (f : X ⟶ Y) [LocallyOfFiniteType f] [IsAffineHom f] :
∃ U : f.normalization.Opens, IsIso (f.toNormalization ∣_ U) ∧
(f.toNormalization ⁻¹ᵁ U).1 = f.quasiFiniteLocus
And I would love to see this in mathlib sooner rather than later. Here is a list of prerequisite PRs that are currently open for review, a fair chunk of them are also interesting in and of themselves.
#32530: API aboutIsDiscrete(topology)#32528: Going-down for integrally closed domains- #32429:
IsIntegrallyClosed R[X] #32375: More API forIdeal.ResidueField#32536: IfA/IisR-finite andIis fg and nilpotent then so isA.#32537: Strongly transcendental elements#32596: localization commutes with integral closure#32595: "Relative Spec for𝒪ₓ-algebras" (algebraic geometry)
Andrew Yang (Dec 12 2025 at 10:01):
I am back with more advertisements, about applications of Zariski's main theorem:
- etale algebras are locally standard etale
- etale lifting property of henselian local rings
- unramified + flat => etale (technically doesn't need ZMT but is part of the branch anyways)
- classification of finite etale algebras over henselian local rings, which in turn imply the classification of unramified extensions of local fields. This was my main motivation and it somehow took ages.
import Mathlib.CFT.Junk
import Mathlib.CFT.Nonsense
import Mathlib.CFT.SeparableResidueStruct
open IsLocalRing
local notation "𝓀[" R "]" => ResidueField R
local notation "𝓂[" R "]" => maximalIdeal R
/-! Let `R` be a complete DVR. -/
variable {R : Type} [CommRing R] [IsDomain R] [IsDiscreteValuationRing R] [IsAdicComplete 𝓂[R] R]
/-! ## Essentially surjective
Each finite separable extension over `𝓀[R]` comes from some finite unramified extension. -/
example {K : Type} [Field K] [Algebra 𝓀[R] K]
[FiniteDimensional 𝓀[R] K] [Algebra.IsSeparable 𝓀[R] K] :
∃ (S : Type) (_ : CommRing S) (_ : IsDomain S) (_ : IsDiscreteValuationRing S)
(_ : Algebra R S) (_ : FaithfulSMul R S) (_ : Module.Finite R S)
(_ : Algebra.Unramified R S), Nonempty (𝓀[S] ≃ₐ[𝓀[R]] K) := by
obtain ⟨𝓟, ⟨e⟩⟩ := SeparableResidueStruct.exists_of_isSeparable (R := R) (K := K)
exact ⟨𝓟.Ring, inferInstance, inferInstance, inferInstance, inferInstance, inferInstance,
inferInstance, inferInstance, ⟨e⟩⟩
variable {A B : Type*} [CommRing A] [CommRing B] [Algebra R A] [Algebra R B]
[IsDomain A] [IsDiscreteValuationRing A]
[FaithfulSMul R A] [Module.Finite R A] [Algebra.Unramified R A]
[IsDomain B] [IsDiscreteValuationRing B]
[FaithfulSMul R B] [Module.Finite R B] [Algebra.Unramified R B]
/-! ## Full
Every map between residue fields lifts to a map between the unramified extension. -/
example (f : 𝓀[A] →ₐ[𝓀[R]] 𝓀[B]) :
∃ (g : A →ₐ[R] B), ResidueField.map g.toRingHom = f.toRingHom :=
⟨_, (HenselianLocalRing.exist_residueFieldMap_eq_of_etale f).choose_spec.choose_spec⟩
/-! ## Faithful
Maps between unramified extensions are equal if they are equal on the residue field. -/
example (f₁ f₂ : 𝓀[A] →ₐ[𝓀[R]] 𝓀[B])
(H : ResidueField.map f₁.toRingHom = ResidueField.map f₂.toRingHom) : f₁ = f₂ :=
HenselianLocalRing.eq_of_residueFieldMap_eq _ _ H
/-! ## Reflects isos
Unramified extensions with isomorphic residue fields are isomorphic. -/
example (e : 𝓀[A] ≃ₐ[𝓀[R]] 𝓀[B]) :
∃ (g : A ≃ₐ[R] B), ResidueField.map g.toRingHom = e.toRingHom :=
⟨_, (HenselianLocalRing.exist_algEquiv_residueFieldMap_eq_of_etale e).choose_spec.choose_spec⟩
All of them are sorry free and could be in mathlib today if you click the big shiny merge button :wink:
(terms and conditions may apply)
But if you rather review the prerequisites instead, here are the new PRs
#32540: properties onAlgebra.TensorProduct.map.#32529: etale locus- #32665: quasi-finite algebras
- #32617: field extension over perfect fields are smooth
Half of the PRs last time are also still open for review.
Joël Riou (Dec 12 2025 at 10:20):
I have merged #32540 and delegated #32529. I would let others (who know the Algebra/RingTheory hierarchy better than I know) look at the two other prerequisites, but this looks great!
Andrew Yang (Dec 13 2025 at 01:18):
Thanks a lot for the reviews! The new batch of PRs just arrived, all ready for review, and I believe we are two or three PRs away from the proof of Zariski's main theorem after they are reviewed.
- #32823: construct etale neighborhood that isolates point in fiber
- #32823: relative normalization of schemes (algebraic geometry)
- #32811: the statement of Zariski's main theorem
- #32809: residue field of I[X]
- #32806: base change of ideal with flat quotients
- #32803: more-linear version of tensorKaehlerEquiv
- #32802: more ergonomic version of jacobi criterion for smoothness
- #32837: noetherian model for etale algebras
Last updated: Dec 20 2025 at 21:32 UTC