Definitions/Def_NeronModelInfra_OmegaMinimalComponentData.lean
Readings of a top differential form; ω-minimal component data
Throughout, R is a discrete valuation ring, K an R-algebra which is a field, g_K\colon X_K\to\operatorname{Spec}K a scheme over K, d a natural number and \omega a global section of the d-th determinant module \omega-sheaf gK.topDifferentials d built from the relative Kähler module of g_K.
Two auxiliary results record that the canonical R-algebra structure on a stalk \mathcal O_{Y,y} of an R-scheme f\colon Y\to\operatorname{Spec}R is compatible with f: the composite \operatorname{Spec}\mathcal O_{Y,y}\to Y\xrightarrow{f}\operatorname{Spec}R is \operatorname{Spec} of the structure map R\to\mathcal O_{Y,y}.
A ComponentReading is a bundle of data: a smooth morphism f\colon Y\to\operatorname{Spec}R locally of finite type; a K-morphism e from the generic fibre Y\times_{\operatorname{Spec}R}\operatorname{Spec}K to X_K which is an open immersion; a point y\in Y above the closed point of R that is maximal for specialisation among such points; the assertions that \mathcal O=\mathcal O_{Y,y} is a domain and a discrete valuation ring; an R-algebra structure on \mathcal O satisfying the above compatibility (carried as a field), a K-algebra structure on F=\operatorname{Frac}\mathcal O in a tower over R; a basis b of \Omega_{\mathcal O/R} indexed by \mathrm{Fin}\,d; an affine open U\subseteq X_K, an algebra map \Gamma(X_K,U)\to F in a tower over K whose spectrum composed with U's inclusion is the F-point of X_K obtained from y through e; an element \omega_U\in\bigwedge^d_{\Gamma(X_K,U)} of the Kähler presheaf on U whose image in sections is \omega|_U; and a nonzero a\in F with \omega_U = a\,(db_1\wedge\cdots\wedge db_d) after base change to \bigwedge^d_F\Omega_{F/K}. Its invariant n is the normalised additive order \operatorname{ord}_{\mathcal O}(a)\in\mathbb Z.
MinimalComponentData is a finite non-empty family of readings whose structure morphisms are separated and quasi-compact, whose charts e are isomorphisms, whose marked points are generic in the closed fibre (every point above the closed point is a specialisation of y), and which are pairwise inequivalent: for c\neq c' no R-morphism from a neighbourhood of y_c to Y_{c'} agrees with the charts on generic fibres. Such data is IsOmegaMinimal when each n(C_c) is least among the orders of all readings, and every reading whose order equals one of them admits, on a neighbourhood W of its marked point, an open immersion over R into some Y_c carrying the marked point to y_c and compatible with the two charts into X_K. Supplementary lemmas compute n=1 and n=2 when a is the image of a uniformiser or of its square, and show that the orders of all members of \omega-minimal data coincide.
Relation to Mathlib
Mathlib has no notion of weak Néron model or of \omega-minimality; these structures are the project's own, expressed in terms of Mathlib's discrete valuation rings, height-one-spectrum valuations, Kähler differentials, exterior powers and scheme stalks, together with the project's presheaf-level exterior powers and determinant modules.
Where it is used
These notions set up the component-by-component bookkeeping used to produce weak Néron models of smooth K-group schemes over a discrete valuation ring, the minimality of the order of an invariant top form along a component being the criterion by which candidate models are compared and glued. This is part of the Néron-model infrastructure underlying the elliptic-curve input to the Frey–Serre–Ribet part of the argument.
References
- S. Bosch, W. Lütkebohmert and M. Raynaud, Néron Models, Ergebnisse der Mathematik und ihrer Grenzgebiete (3) 21, Springer, 1990, §4.3
- A. Grothendieck and J. Dieudonné, Éléments de géométrie algébrique IV, Publ. Math. IHÉS 32 (1967)
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 214 lines
- 44 declarations
- used in the statements of 14 theorems and imported by 16 proofs
- imports 4 definition modules
Source file: Definitions/Def_NeronModelInfra_OmegaMinimalComponentData.lean
Imports
Imported by
- no other definition module
Declarations
- theorem
NeronModelInfra.ofHom_stalkAlgebraMap_eq - theorem
NeronModelInfra.fromSpecStalk_comp_eq_specMap_algebraMap_stalkAlgebra - structure
NeronModelInfra.ComponentReading - field
NeronModelInfra.ComponentReading.Y - field
NeronModelInfra.ComponentReading.f - field
NeronModelInfra.ComponentReading.smooth - field
NeronModelInfra.ComponentReading.locallyOfFiniteType - field
NeronModelInfra.ComponentReading.e - field
NeronModelInfra.ComponentReading.isOpenImmersion - field
NeronModelInfra.ComponentReading.y - field
NeronModelInfra.ComponentReading.hy - field
NeronModelInfra.ComponentReading.hmax - field
NeronModelInfra.ComponentReading.isDomain - field
NeronModelInfra.ComponentReading.isDiscreteValuationRing - field
NeronModelInfra.ComponentReading.algebra - field
NeronModelInfra.ComponentReading.halg - field
NeronModelInfra.ComponentReading.algebraK - field
NeronModelInfra.ComponentReading.isScalarTower - field
NeronModelInfra.ComponentReading.b - field
NeronModelInfra.ComponentReading.U - field
NeronModelInfra.ComponentReading.hU - field
NeronModelInfra.ComponentReading.algebraU - field
NeronModelInfra.ComponentReading.isScalarTowerU - field
NeronModelInfra.ComponentReading.hx - field
NeronModelInfra.ComponentReading.schemeHomOverComp - field
NeronModelInfra.ComponentReading.pointGenericFibre - field
NeronModelInfra.ComponentReading.SchemeHomOver - field
NeronModelInfra.ComponentReading.a - field
NeronModelInfra.ComponentReading.ha - field
NeronModelInfra.ComponentReading.ha0 - def
NeronModelInfra.ComponentReading.n - structure
NeronModelInfra.MinimalComponentData - field
NeronModelInfra.MinimalComponentData.finite - field
NeronModelInfra.MinimalComponentData.nonempty - field
NeronModelInfra.MinimalComponentData.C - field
NeronModelInfra.MinimalComponentData.isSeparated - field
NeronModelInfra.MinimalComponentData.quasiCompact - field
NeronModelInfra.MinimalComponentData.isIso - field
NeronModelInfra.MinimalComponentData.hgen - field
NeronModelInfra.MinimalComponentData.inequiv - def
NeronModelInfra.MinimalComponentData.IsOmegaMinimal - theorem
NeronModelInfra.ComponentReading.n_eq_one_of_a_eq_uniformizer - theorem
NeronModelInfra.ComponentReading.n_eq_two_of_a_eq_uniformizer_sq - theorem
NeronModelInfra.MinimalComponentData.IsOmegaMinimal.n_eq
Source
import Mathlib import Definitions.Def_NeronModelInfra_WeakNeronModel import Definitions.Def_AlgebraicGeometry_KaehlerModule import Definitions.Def_NeronModelInfra_TopFormOrder import Definitions.Def_NeronModelInfra_SmoothnessDefect set_option autoImplicit false noncomputable section universe u open CategoryTheory CategoryTheory.Limits Opposite AlgebraicGeometry namespace NeronModelInfra section StalkAlgebra variable {R : Type u} [CommRing R] {Y : Scheme.{u}} (f : Y ⟶ Spec (CommRingCat.of R)) (y : Y) theorem ofHom_stalkAlgebraMap_eq : CommRingCat.ofHom (stalkAlgebraMap f y) = ((Scheme.ΓSpecIso (CommRingCat.of R)).inv ≫ (Spec (CommRingCat.of R)).presheaf.germ ⊤ (f.base y) trivial) ≫ f.stalkMap y := by ext r change stalkAlgebraMap f y r = _ rw [stalkAlgebraMap_apply] simp only [CommRingCat.hom_comp, RingHom.coe_comp, Function.comp_apply] rw [Scheme.Hom.germ_stalkMap_apply] rfl theorem fromSpecStalk_comp_eq_specMap_algebraMap_stalkAlgebra : letI := stalkAlgebra f y Y.fromSpecStalk y ≫ f = Spec.map (CommRingCat.ofHom (algebraMap R (Y.presheaf.stalk y))) := by letI := stalkAlgebra f y change Y.fromSpecStalk y ≫ f = Spec.map (CommRingCat.ofHom (stalkAlgebraMap f y)) rw [ofHom_stalkAlgebraMap_eq, Spec.map_comp, ← Scheme.SpecMap_stalkMap_fromSpecStalk f, Spec.fromSpecStalk_eq] end StalkAlgebra section Reading variable (R K : Type u) [CommRing R] [IsDomain R] [IsDiscreteValuationRing R] [Field K] [Algebra R K] {XK : Scheme.{u}} (gK : XK ⟶ Spec (CommRingCat.of K)) (d : ℕ) (ω : Γ(gK.topDifferentials d, ⊤)) structure ComponentReading where Y : Scheme.{u} f : Y ⟶ Spec (CommRingCat.of R) smooth : Smooth f locallyOfFiniteType : LocallyOfFiniteType f e : SchemeHomOver (pullback.snd f (specGenericFibreInclusion R K)) gK isOpenImmersion : IsOpenImmersion e.1 y : Y hy : f.base y = IsLocalRing.closedPoint R hmax : ∀ y' : Y, y' ⤳ y → f.base y' = IsLocalRing.closedPoint R → y' = y isDomain : IsDomain (Y.presheaf.stalk y) isDiscreteValuationRing : IsDiscreteValuationRing (Y.presheaf.stalk y) algebra : Algebra R (Y.presheaf.stalk y) halg : Y.fromSpecStalk y ≫ f = Spec.map (CommRingCat.ofHom (algebraMap R (Y.presheaf.stalk y))) algebraK : Algebra K (FractionRing (Y.presheaf.stalk y)) isScalarTower : IsScalarTower R K (FractionRing (Y.presheaf.stalk y)) b : Module.Basis (Fin d) (Y.presheaf.stalk y) (Ω[Y.presheaf.stalk y⁄R]) U : XK.Opens hU : IsAffineOpen U algebraU : Algebra Γ(XK, U) (FractionRing (Y.presheaf.stalk y)) isScalarTowerU : letI := gK.sectionsAlgebra U IsScalarTower K Γ(XK, U) (FractionRing (Y.presheaf.stalk y)) hx : Spec.map (CommRingCat.ofHom (algebraMap Γ(XK, U) (FractionRing (Y.presheaf.stalk y)))) ≫ hU.fromSpec = (schemeHomOverComp (pointGenericFibre (K := K) (K' := FractionRing (Y.presheaf.stalk y)) (⟨Y.fromSpecStalk y, halg⟩ : SchemeHomOver (Spec.map (CommRingCat.ofHom (algebraMap R (Y.presheaf.stalk y)))) f)) e).1 ωU : ⋀[Γ(XK, U)]^d (gK.kaehlerPresheaf.obj (op U)) hωU : gK.topToSections d U ωU = (gK.topDifferentials d).presheaf.map (homOfLE le_top).op ω a : FractionRing (Y.presheaf.stalk y) ha : letI := gK.sectionsAlgebra U TopFormOrder.topFormMap K K Γ(XK, U) (FractionRing (Y.presheaf.stalk y)) d ωU = a • TopFormOrder.topFormMap R K (Y.presheaf.stalk y) (FractionRing (Y.presheaf.stalk y)) d (exteriorPower.ιMulti (Y.presheaf.stalk y) d b) ha0 : a ≠ 0 attribute [instance] ComponentReading.smooth ComponentReading.locallyOfFiniteType ComponentReading.isOpenImmersion ComponentReading.isDomain ComponentReading.isDiscreteValuationRing variable {R K gK d ω} def ComponentReading.n (T : ComponentReading R K gK d ω) : ℤ := TopFormOrder.addOrd (T.Y.presheaf.stalk T.y) (FractionRing (T.Y.presheaf.stalk T.y)) T.a end Reading section Minimal variable (R K : Type u) [CommRing R] [IsDomain R] [IsDiscreteValuationRing R] [Field K] [Algebra R K] {XK : Scheme.{u}} (gK : XK ⟶ Spec (CommRingCat.of K)) (d : ℕ) (ω : Γ(gK.topDifferentials d, ⊤)) structure MinimalComponentData where ι : Type u finite : Finite ι nonempty : Nonempty ι C : ι → ComponentReading R K gK d ω isSeparated : ∀ c, IsSeparated (C c).f quasiCompact : ∀ c, QuasiCompact (C c).f isIso : ∀ c, IsIso (C c).e.1 hgen : ∀ c (y' : ↥(C c).Y), (C c).f.base y' = IsLocalRing.closedPoint R → (C c).y ⤳ y' inequiv : ∀ c c', c ≠ c' → ∀ (U : ((C c).Y).Opens), (C c).y ∈ U → ∀ u : SchemeHomOver (U.ι ≫ (C c).f) (C c').f, (genericFibreRestrict R K (C c').f (U.ι ≫ (C c).f) u).1 ≫ (C c').e.1 ≠ (genericFibreRestrict R K (C c).f (U.ι ≫ (C c).f) ⟨U.ι, rfl⟩).1 ≫ (C c).e.1 attribute [instance] MinimalComponentData.finite MinimalComponentData.nonempty variable {R K gK d ω} def MinimalComponentData.IsOmegaMinimal (D : MinimalComponentData R K gK d ω) : Prop := (∀ (c : D.ι) (T : ComponentReading R K gK d ω), (D.C c).n ≤ T.n) ∧ (∀ T : ComponentReading R K gK d ω, (∃ c : D.ι, T.n = (D.C c).n) → ∃ (c : D.ι) (W : T.Y.Opens) (hyW : T.y ∈ W) (ε : SchemeHomOver (W.ι ≫ T.f) (D.C c).f), IsOpenImmersion ε.1 ∧ ε.1.base ⟨T.y, hyW⟩ = (D.C c).y ∧ (genericFibreRestrict R K (D.C c).f (W.ι ≫ T.f) ε).1 ≫ (D.C c).e.1 = (genericFibreRestrict R K T.f (W.ι ≫ T.f) ⟨W.ι, rfl⟩).1 ≫ T.e.1) end Minimal section Gates variable {R K : Type u} [CommRing R] [IsDomain R] [IsDiscreteValuationRing R] [Field K] [Algebra R K] {XK : Scheme.{u}} {gK : XK ⟶ Spec (CommRingCat.of K)} {d : ℕ} {ω : Γ(gK.topDifferentials d, ⊤)} theorem ComponentReading.n_eq_one_of_a_eq_uniformizer (T : ComponentReading R K gK d ω) (ϖ : T.Y.presheaf.stalk T.y) (hϖ : IsLocalRing.maximalIdeal (T.Y.presheaf.stalk T.y) = Ideal.span {ϖ}) (h : T.a = algebraMap (T.Y.presheaf.stalk T.y) (FractionRing (T.Y.presheaf.stalk T.y)) ϖ) : T.n = 1 := by unfold ComponentReading.n rw [h] exact TopFormOrder.addOrd_uniformizer _ _ ϖ hϖ theorem ComponentReading.n_eq_two_of_a_eq_uniformizer_sq (T : ComponentReading R K gK d ω) (ϖ : T.Y.presheaf.stalk T.y) (hϖ : IsLocalRing.maximalIdeal (T.Y.presheaf.stalk T.y) = Ideal.span {ϖ}) (h : T.a = algebraMap (T.Y.presheaf.stalk T.y) (FractionRing (T.Y.presheaf.stalk T.y)) ϖ ^ 2) : T.n = 2 := by unfold ComponentReading.n rw [h] exact TopFormOrder.addOrd_uniformizer_sq _ _ ϖ hϖ theorem MinimalComponentData.IsOmegaMinimal.n_eq (D : MinimalComponentData R K gK d ω) (hD : D.IsOmegaMinimal) (c c' : D.ι) : (D.C c).n = (D.C c').n := le_antisymm (hD.1 c (D.C c')) (hD.1 c' (D.C c)) end Gates end NeronModelInfra end /-- info: 'NeronModelInfra.fromSpecStalk_comp_eq_specMap_algebraMap_stalkAlgebra' depends on axioms: [propext, Classical.choice, Quot.sound] -/ #guard_msgs in #print axioms NeronModelInfra.fromSpecStalk_comp_eq_specMap_algebraMap_stalkAlgebra /-- info: 'NeronModelInfra.ComponentReading.n_eq_one_of_a_eq_uniformizer' depends on axioms: [propext, Classical.choice, Quot.sound] -/ #guard_msgs in #print axioms NeronModelInfra.ComponentReading.n_eq_one_of_a_eq_uniformizer /-- info: 'NeronModelInfra.MinimalComponentData.IsOmegaMinimal.n_eq' depends on axioms: [propext, Classical.choice, Quot.sound] -/ #guard_msgs in #print axioms NeronModelInfra.MinimalComponentData.IsOmegaMinimal.n_eq
Statements phrased using this module (14)
- 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 - 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 - Formally smooth birational translation extends to an open immersion
NeronModelInfra.exists_nhds_translation_extension_isOpenImmersion_of_formallySmooth_stalk_of_isOmegaMinimal18 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 - 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 - 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 - 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