Definitions/Def_NeronModelInfra_WeakNeronModel.lean
Index-one local extensions and families of models catching their points
Two notions are introduced. First, IsIndexOneExtension R R', for local rings R, R' with a local R-algebra structure on R': a two-field structure asserting that the ideal generated by the image of the maximal ideal of R is the maximal ideal of R', and that the induced extension of residue fields is formally smooth (Mathlib's Algebra.FormallySmooth), which is the way separability of a not necessarily algebraic residue extension is expressed. It is proved that R \to R is such an extension. Second, ModelFamily R K gK, for a commutative ring R, a field K with an R-algebra structure and a K-scheme g_K \colon A_K \to \operatorname{Spec} K: a family indexed by a type \iota of R-schemes \mathrm{str}\,i \colon X_i \to \operatorname{Spec} R, together with, for each i, a morphism chart i from the generic fibre X_i \times_{\operatorname{Spec} R} \operatorname{Spec} K (realised as pullback.snd (str i) (specGenericFibreInclusion R K)) to A_K commuting with the structure maps to \operatorname{Spec} K, carrying as a further field the assertion that each such chart is an open immersion.
The predicate ModelFamily.CatchesIndexOnePoints (for R local) says: for every discrete valuation ring R' that is a local R-algebra and an index-one extension of R, with fraction field K' made a K-algebra compatibly with R, every K'-point a of A_K over \operatorname{Spec} K arises, for some index i, as an R'-point x of X_i over \operatorname{Spec} R passed to generic fibres and then composed with chart i. The passage to generic fibres is the map pointGenericFibre, sending such an x to the K'-point of X_i \times_{\operatorname{Spec} R} \operatorname{Spec} K determined by \operatorname{Spec} K' \to \operatorname{Spec} R' followed by x and by \operatorname{Spec} K' \to \operatorname{Spec} K; its compositions with the two pullback projections are recorded, as is the commutativity of the square of \operatorname{Spec} maps used to define it. Finally two extreme cases: the one-member family \operatorname{Spec} R catches all index-one points of the identity on \operatorname{Spec} K, while for R a discrete valuation ring with fraction field K the empty family fails to catch them as soon as A_K has a K-point, so the predicate has content. No existence of models is asserted.
Relation to Mathlib
Mathlib has no notion of weak Néron model, of a family of models with charts, or of an extension of ramification index one; these are the project's own, built on Mathlib's schemes, pullbacks, local rings and Algebra.FormallySmooth.
Where it is used
These definitions form the vocabulary layer for Néron and weak Néron models over a discrete valuation ring, used in the reduction theory of the elliptic curves occurring in the Frey curve argument.
References
- S. Bosch, W. Lütkebohmert and M. Raynaud, Néron Models, Ergebnisse der Mathematik und ihrer Grenzgebiete 21, Springer, 1990, §§3.5–3.6
- A. Grothendieck and J. Dieudonné, Éléments de géométrie algébrique IV, première partie, Publ. Math. IHÉS 20 (1964), 0_IV 19.6.1
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 163 lines
- 18 declarations
- used in the statements of 31 theorems and imported by 32 proofs
- imports 1 definition modules
Source file: Definitions/Def_NeronModelInfra_WeakNeronModel.lean
Declarations
- structure
NeronModelInfra.IsIndexOneExtension - field
NeronModelInfra.IsIndexOneExtension.map_maximalIdeal - field
NeronModelInfra.IsIndexOneExtension.formallySmooth_residueField - theorem
NeronModelInfra.IsIndexOneExtension.refl - theorem
NeronModelInfra.specMap_algebraMap_comp_specMap_algebraMap - def
NeronModelInfra.pointGenericFibre - theorem
NeronModelInfra.pointGenericFibre_coe_comp_fst - theorem
NeronModelInfra.pointGenericFibre_coe_comp_snd - structure
NeronModelInfra.ModelFamily - field
NeronModelInfra.ModelFamily.X - field
NeronModelInfra.ModelFamily.str - field
NeronModelInfra.ModelFamily.chart - field
NeronModelInfra.ModelFamily.isOpenImmersion_chart - def
NeronModelInfra.ModelFamily.CatchesIndexOnePoints - def
NeronModelInfra.ModelFamily.trivial - theorem
NeronModelInfra.gate_catchesIndexOnePoints_trivial - def
NeronModelInfra.ModelFamily.empty - theorem
NeronModelInfra.gate_not_catchesIndexOnePoints_empty
Source
import Mathlib import Definitions.Def_AlgebraicGeometry_NeronModelEndomorphismExtension set_option autoImplicit false noncomputable section universe u open CategoryTheory CategoryTheory.Limits AlgebraicGeometry namespace NeronModelInfra structure IsIndexOneExtension (R R' : Type u) [CommRing R] [IsLocalRing R] [CommRing R'] [IsLocalRing R'] [Algebra R R'] [IsLocalHom (algebraMap R R')] : Prop where map_maximalIdeal : Ideal.map (algebraMap R R') (IsLocalRing.maximalIdeal R) = IsLocalRing.maximalIdeal R' formallySmooth_residueField : Algebra.FormallySmooth (IsLocalRing.ResidueField R) (IsLocalRing.ResidueField R') theorem IsIndexOneExtension.refl (R : Type u) [CommRing R] [IsLocalRing R] : IsIndexOneExtension R R where map_maximalIdeal := by rw [Algebra.algebraMap_self, Ideal.map_id] formallySmooth_residueField := by have e : (IsLocalRing.ResidueField.instAlgebra : Algebra (IsLocalRing.ResidueField R) (IsLocalRing.ResidueField R)) = Algebra.id (IsLocalRing.ResidueField R) := by apply Algebra.algebra_ext intro x obtain ⟨x, rfl⟩ := IsLocalRing.residue_surjective x rfl have h : @Algebra.FormallySmooth (IsLocalRing.ResidueField R) (IsLocalRing.ResidueField R) _ _ (Algebra.id (IsLocalRing.ResidueField R)) := inferInstance convert h section PointGenericFibre variable {R : Type u} [CommRing R] {K : Type u} [Field K] [Algebra R K] variable {R' : Type u} [CommRing R'] [Algebra R R'] variable {K' : Type u} [CommRing K'] [Algebra R' K'] [Algebra R K'] [IsScalarTower R R' K'] [Algebra K K'] [IsScalarTower R K K'] theorem specMap_algebraMap_comp_specMap_algebraMap (R K R' K' : Type u) [CommRing R] [Field K] [Algebra R K] [CommRing R'] [Algebra R R'] [CommRing K'] [Algebra R' K'] [Algebra R K'] [IsScalarTower R R' K'] [Algebra K K'] [IsScalarTower R K K'] : Spec.map (CommRingCat.ofHom (algebraMap R' K')) ≫ Spec.map (CommRingCat.ofHom (algebraMap R R')) = Spec.map (CommRingCat.ofHom (algebraMap K K')) ≫ Spec.map (CommRingCat.ofHom (algebraMap R K)) := by rw [← Spec.map_comp, ← Spec.map_comp, ← CommRingCat.ofHom_comp, ← CommRingCat.ofHom_comp, ← IsScalarTower.algebraMap_eq, ← IsScalarTower.algebraMap_eq] variable {X : Scheme.{u}} {f : X ⟶ Spec (CommRingCat.of R)} def pointGenericFibre (x : SchemeHomOver (Spec.map (CommRingCat.ofHom (algebraMap R R'))) f) : SchemeHomOver (Spec.map (CommRingCat.ofHom (algebraMap K K'))) (pullback.snd f (specGenericFibreInclusion R K)) := ⟨pullback.lift (Spec.map (CommRingCat.ofHom (algebraMap R' K')) ≫ x.1) (Spec.map (CommRingCat.ofHom (algebraMap K K'))) (by rw [Category.assoc, x.2, specGenericFibreInclusion_eq, specMap_algebraMap_comp_specMap_algebraMap R K R' K']), pullback.lift_snd _ _ _⟩ @[simp] theorem pointGenericFibre_coe_comp_fst (x : SchemeHomOver (Spec.map (CommRingCat.ofHom (algebraMap R R'))) f) : (pointGenericFibre (K := K) (K' := K') x).1 ≫ pullback.fst f (specGenericFibreInclusion R K) = Spec.map (CommRingCat.ofHom (algebraMap R' K')) ≫ x.1 := pullback.lift_fst _ _ _ @[simp] theorem pointGenericFibre_coe_comp_snd (x : SchemeHomOver (Spec.map (CommRingCat.ofHom (algebraMap R R'))) f) : (pointGenericFibre (K := K) (K' := K') x).1 ≫ pullback.snd f (specGenericFibreInclusion R K) = Spec.map (CommRingCat.ofHom (algebraMap K K')) := pullback.lift_snd _ _ _ end PointGenericFibre structure ModelFamily (R K : Type u) [CommRing R] [Field K] [Algebra R K] {AK : Scheme.{u}} (gK : AK ⟶ Spec (CommRingCat.of K)) where ι : Type u X : ι → Scheme.{u} str : ∀ i, X i ⟶ Spec (CommRingCat.of R) chart : ∀ i, SchemeHomOver (pullback.snd (str i) (specGenericFibreInclusion R K)) gK isOpenImmersion_chart : ∀ i, IsOpenImmersion (chart i).1 attribute [instance] ModelFamily.isOpenImmersion_chart def ModelFamily.CatchesIndexOnePoints {R K : Type u} [CommRing R] [IsLocalRing R] [Field K] [Algebra R K] {AK : Scheme.{u}} {gK : AK ⟶ Spec (CommRingCat.of K)} (M : ModelFamily R K gK) : Prop := ∀ (R' : Type u) [CommRing R'] [IsDomain R'] [IsDiscreteValuationRing R'] [Algebra R R'] [IsLocalHom (algebraMap R R')] (K' : Type u) [Field K'] [Algebra R' K'] [IsFractionRing R' K'] [Algebra R K'] [IsScalarTower R R' K'] [Algebra K K'] [IsScalarTower R K K'], IsIndexOneExtension R R' → ∀ a : SchemeHomOver (Spec.map (CommRingCat.ofHom (algebraMap K K'))) gK, ∃ (i : M.ι) (x : SchemeHomOver (Spec.map (CommRingCat.ofHom (algebraMap R R'))) (M.str i)), schemeHomOverComp (pointGenericFibre x) (M.chart i) = a section Gates variable (R K : Type u) [CommRing R] [IsLocalRing R] [Field K] [Algebra R K] def ModelFamily.trivial : ModelFamily R K (𝟙 (Spec (CommRingCat.of K))) where ι := PUnit X := fun _ => Spec (CommRingCat.of R) str := fun _ => 𝟙 _ chart := fun _ => ⟨pullback.snd (𝟙 _) (specGenericFibreInclusion R K), Category.comp_id _⟩ isOpenImmersion_chart := fun _ => inferInstance theorem gate_catchesIndexOnePoints_trivial : (ModelFamily.trivial R K).CatchesIndexOnePoints := by intro R' _ _ _ _ _ K' _ _ _ _ _ _ _ _ a refine ⟨PUnit.unit, ⟨Spec.map (CommRingCat.ofHom (algebraMap R R')), Category.comp_id _⟩, ?_⟩ exact (subsingleton_schemeHomOver_of_isIso (Spec.map (CommRingCat.ofHom (algebraMap K K'))) (𝟙 (Spec (CommRingCat.of K)))).allEq _ _ def ModelFamily.empty {AK : Scheme.{u}} (gK : AK ⟶ Spec (CommRingCat.of K)) : ModelFamily R K gK where ι := PEmpty X := fun i => i.elim str := fun i => i.elim chart := fun i => i.elim isOpenImmersion_chart := fun i => i.elim theorem gate_not_catchesIndexOnePoints_empty [IsDomain R] [IsDiscreteValuationRing R] [IsFractionRing R K] {AK : Scheme.{u}} (gK : AK ⟶ Spec (CommRingCat.of K)) (a : SchemeHomOver (𝟙 (Spec (CommRingCat.of K))) gK) : ¬ (ModelFamily.empty R K gK).CatchesIndexOnePoints := by intro h have ha : Spec.map (CommRingCat.ofHom (algebraMap K K)) = 𝟙 (Spec (CommRingCat.of K)) := by rw [Algebra.algebraMap_self, CommRingCat.ofHom_id]; exact Spec.map_id _ obtain ⟨i, -, -⟩ := h R K (IsIndexOneExtension.refl R) ⟨a.1, by rw [ha]; exact a.2⟩ exact i.elim end Gates end NeronModelInfra end /-- info: 'NeronModelInfra.IsIndexOneExtension.refl' depends on axioms: [propext, Classical.choice, Quot.sound] -/ #guard_msgs in #print axioms NeronModelInfra.IsIndexOneExtension.refl /-- info: 'NeronModelInfra.gate_catchesIndexOnePoints_trivial' depends on axioms: [propext, Classical.choice, Quot.sound] -/ #guard_msgs in #print axioms NeronModelInfra.gate_catchesIndexOnePoints_trivial /-- info: 'NeronModelInfra.gate_not_catchesIndexOnePoints_empty' depends on axioms: [propext, Classical.choice, Quot.sound] -/ #guard_msgs in #print axioms NeronModelInfra.gate_not_catchesIndexOnePoints_empty
Statements phrased using this module (31)
- Proper K-schemes have finite index-one-catching R-model families
NeronModelInfra.exists_modelFamily_finite_catchesIndexOnePoints_of_isProper1 below · depth 28 - Smooth group model with extending twisted translations (commutative case)
NeronModelInfra.exists_relativeGroupLaw_genericFibre_iso_nhds_twist_extension_of_catchesIndexOnePoints_of_henselianLocalRing_of_isCommutative215 below · depth 28 - Néron smoothening over a discrete valuation ring
NeronModelInfra.exists_smooth_hom_isIso_genericFibre_lift_of_isIndexOneExtension42 below · depth 28 - Uniform bound for Néron's defect of smoothness
NeronModelInfra.exists_forall_smoothnessDefect_le_of_smooth_pullback_snd0 below · depth 29 - One smoothening step lowering the defect of smoothness
NeronModelInfra.exists_hom_isIso_smoothnessDefect_add_one_le_of_smooth_pullback_snd40 below · depth 29 - Translation-extending R-model from a weak Néron model, commutative case
NeronModelInfra.exists_model_forall_nhds_translation_extension_isOpenImmersion_of_catchesIndexOnePoints_of_isCommutative129 below · depth 29 - Permissible stratification of the non-smooth index-one specialisations
NeronModelInfra.exists_antitone_isClosed_forall_indexOne_chart_of_smooth_pullback_snd9 below · depth 30 - Simultaneous dilatation along a descending chain of closed strata
NeronModelInfra.exists_hom_isIso_morphismRestrict_compl_iso_affineDilatation_of_antitone_isClosed6 below · depth 30 - Existence of ω-minimal component data over a discrete valuation ring
NeronModelInfra.exists_minimalComponentData_isOmegaMinimal_of_catchesIndexOnePoints59 below · depth 30 - Translation extension at maximal special points of Z×_R X
NeronModelInfra.forall_nhds_translation_extension_isOpenImmersion_of_isOmegaMinimal_of_openCover_of_isCommutative70 below · depth 30 - Smoothness defect drops under an affine dilatation
NeronModelInfra.smoothnessDefect_affineDilatation_add_one_le_of_isSmoothAt_of_mem_freeLocus21 below · depth 30 - Order comparison along a chart-compatible morphism of ω-readings
NeronModelInfra.ComponentReading.n_le_n_and_isOpenImmersion_of_n_eq_of_specializes45 below · depth 31 - Existence of an ω-reading at a maximal special-fibre point
NeronModelInfra.exists_componentReading_data_of_smooth_of_forall_specializes23 below · depth 31 - Minimal order and formal smoothness at a maximal special point
NeronModelInfra.exists_n_eq_and_formallySmooth_stalk_of_isOmegaMinimal_of_genericFibreRestrict_comp_eq_mul52 below · depth 31 - Neighbourhood extension into a family catching index-one points
NeronModelInfra.exists_nhds_extension_chart_of_catchesIndexOnePoints13 below · depth 31 - Formally smooth birational translation extends to an open immersion
NeronModelInfra.exists_nhds_translation_extension_isOpenImmersion_of_formallySmooth_stalk_of_isOmegaMinimal18 below · depth 31 - Openness of the smooth–free stratum on an affine chart
NeronModelInfra.exists_opens_inter_closure_eq_setOf_isSmoothAt_and_mem_freeLocus6 below · depth 31 - Maximal points of the special fibre of a smooth model over a DVR
NeronModelInfra.finite_maximal_specialFibre_and_existsUnique_specializes_and_exists_opens9 below · depth 31 - Translation by a K-point is birational at η
NeronModelInfra.isFractionRing_stalk_of_genericFibreRestrict_comp_eq_mul_of_pullback_lift6 below · depth 31 - Smoothness and freeness transfer to a basic open sub-chart
NeronModelInfra.isSmoothAt_and_mem_freeLocus_basicOpen_of_isSmoothAt_of_mem_freeLocus0 below · depth 31 - The inclusion I ⊆ J² in Néron's smoothening
NeronModelInfra.le_sq_of_linearIndependent_tmul_D_of_forall_indexOne0 below · depth 31 - Index-one points detect the vanishing ideal of S̄
NeronModelInfra.mem_vanishingIdeal_closure_of_forall_indexOne_algHom1 below · depth 31 - Value of ω at an F-point specialising through y₁
NeronModelInfra.ComponentReading.exists_basis_units_topFormMap_eq_mul_zpow_smul_of_specializes38 below · depth 32 - Stalk birationality along a chart-compatible morphism of readings
NeronModelInfra.ComponentReading.isDomain_and_injective_stalkMap_and_isScalarTower_and_isFractionRing_of_chart_comp_eq4 below · depth 32 - A maximal special point of a glued model comes from one component
NeronModelInfra.MinimalComponentData.exists_ringHom_stalk_chart_comp_eq_pointGenericFibre_of_forall_specializes0 below · depth 32 - Points of a local scheme factor through an affine chart
NeronModelInfra.exists_algHom_comap_maximalIdeal_eq_primeIdealOf_of_apply_closedPoint_mem0 below · depth 32 - Landing a translate in X from a chart on an ω-minimal component
NeronModelInfra.exists_nhds_translation_extension_isOpenImmersion_of_isOpenImmersion_homOfLE_comp_of_isOmegaMinimalRep0 below · depth 32 - Stalk at a generic point of the special fibre: index one
NeronModelInfra.isIndexOneExtension_stalk_of_smooth_of_forall_specializes9 below · depth 32 - Translated point: the chart of τ₀ computes a· x
NeronModelInfra.mul_pointGenericFibre_eq_pointGenericFibre_comp_chart_of_genericFibreRestrict_comp_eq_mul0 below · depth 32 - Local exponent of ω at a closed-fibre point equals T.n
NeronModelInfra.ComponentReading.eq_n_of_forall_topFormMap_eq_mul_zpow_smul16 below · depth 33 - Laurent form of ω at a special point of a reading
NeronModelInfra.ComponentReading.exists_basis_units_int_forall_topFormMap_eq_mul_zpow_smul_of_specializes26 below · depth 33