Fermat's Last Theorem in Lean 4

← all definition modules

Definitions/Def_ModularCurve_DRModelPackageCrossingFrame.lean

definition module

Branch ideals and crossing points on base-changed Deligne–Rapoport models

Two groups of definitions are made. First, for an arbitrary scheme X and a specialisation \xi \rightsquigarrow x of points of X, the branch ideal branchIdeal is the preimage of the maximal ideal of the local ring \mathcal O_{X,\xi} under the specialisation map of stalks \mathcal O_{X,x} \to \mathcal O_{X,\xi}; it is recorded as a prime ideal of \mathcal O_{X,x}, and mem_branchIdeal_iff restates membership as the condition that the image of the germ in \mathcal O_{X,\xi} lies in the maximal ideal, i.e. that the section vanishes at \xi.

Second, in the setting of a prime p, a package \mathfrak X of data and properties for the two-chart integral model DRModel p of the modular function field with its Igusa j-coordinate, a commutative ring O, an algebraically closed field \kappa of characteristic p and a ring map O \to \kappa, the base change X_O := baseChangeO p O is the fibre product of DRModel.toBase p with \operatorname{Spec} of \mathbb Z \to O, and baseChangeO.toBase is its second projection X_O \to \operatorname{Spec} O. For o \in O, baseGerm is the germ at a point x of X_O of the global section of X_O obtained by pulling o back along this projection. For a point n of the fibre product of the two closed immersions \mathfrak X.compInf \kappa and \mathfrak X.compZero \kappa of the rational model ratModel \kappa into the geometric p-fibre, crossingPt is the image of n in X_O under the first projection followed by compInf \kappa and then the base-change map X_\kappa \to X_O. Finally ξinf and ξzero are the images in X_O of the generic point of ratModel \kappa under compInf \kappa, respectively compZero \kappa, followed by that base-change map.

Relation to Mathlib

Mathlib supplies the specialisation morphism of stalks stalkSpecializes; the prime ideal attached to a specialisation is introduced here. The remaining declarations are abbreviations naming particular fibre products, germs and images attached to the project's Deligne–Rapoport model package.

Where it is used

These names fix the objects used in the local analysis of the base-changed Deligne–Rapoport model at a crossing point of its geometric fibre in characteristic p: the two branches through such a point are recorded by the branch ideals at the generic points \xi_\infty, \xi_0 of the two components, and the image of p in the local ring is recorded by baseGerm. This local structure underlies the study of the p-fibre of X_0(p) used in the level-lowering part of the argument.

References

  1. P. Deligne and M. Rapoport, Les schémas de modules de courbes elliptiques, in: Modular Functions of One Variable II, Lecture Notes in Mathematics 349, Springer, 1973, 143–316
  2. B. Mazur, Modular curves and the Eisenstein ideal, Publications Mathématiques de l'IHÉS 47 (1977), 33–186

References are suggested automatically and have not been individually verified.

English text generated automatically from the Lean source; the Lean statement is authoritative.

Source file: Definitions/Def_ModularCurve_DRModelPackageCrossingFrame.lean

Imports

Imported by

Declarations

Source

import Mathlib
import Definitions.Def_ModularCurve_DRResolvedModelPackageV4

set_option autoImplicit false

open CategoryTheory CategoryTheory.Limits AlgebraicGeometry ModularCurve

noncomputable section

universe u

namespace AlgebraicGeometry.Scheme

def branchIdeal {X : Scheme.{u}} {ξ x : X} (h : ξ ⤳ x) : Ideal (X.presheaf.stalk x) :=
  Ideal.comap (X.presheaf.stalkSpecializes h).hom (IsLocalRing.maximalIdeal (X.presheaf.stalk ξ))

instance branchIdeal_isPrime {X : Scheme.{u}} {ξ x : X} (h : ξ ⤳ x) : (branchIdeal h).IsPrime :=
  Ideal.comap_isPrime _ _

theorem mem_branchIdeal_iff {X : Scheme.{u}} {ξ x : X} (h : ξ ⤳ x) (a : X.presheaf.stalk x) :
    a ∈ branchIdeal h ↔ (X.presheaf.stalkSpecializes h).hom a ∈ IsLocalRing.maximalIdeal (X.presheaf.stalk ξ) :=
  Iff.rfl

end AlgebraicGeometry.Scheme

namespace ModularCurve.DRModelPackage

variable {p : ℕ} [Fact p.Prime] (𝔛 : DRModelPackage p)
  (O : Type) [CommRing O] (κ : Type) [Field κ] [CharP κ p] [IsAlgClosed κ] (toκ : O →+* κ)

abbrev baseChangeO (p : ℕ) [Fact p.Prime] (O : Type) [CommRing O] : Scheme.{0} :=
  pullback (DRModel.toBase p) (Spec.map (CommRingCat.ofHom (algebraMap ℤ O)))

abbrev baseChangeO.toBase (p : ℕ) [Fact p.Prime] (O : Type) [CommRing O] :
    baseChangeO p O ⟶ Spec (CommRingCat.of O) :=
  pullback.snd _ _

abbrev crossingPt (n : ↥(pullback (𝔛.compInf κ) (𝔛.compZero κ))) : ↥(baseChangeO p O) :=
  (pullback.fst (𝔛.compInf κ) (𝔛.compZero κ) ≫ 𝔛.compInf κ ≫ DRModel.baseChangeMap toκ).base n

abbrev baseGerm (x : ↥(baseChangeO p O)) (o : O) : (baseChangeO p O).presheaf.stalk x :=
  (baseChangeO p O).presheaf.germ ⊤ x trivial
    ((baseChangeO.toBase p O).appTop ((Scheme.ΓSpecIso (CommRingCat.of O)).inv o))

abbrev ξinf : ↥(baseChangeO p O) :=
  letI := (𝔛.ratModel κ).isIntegral
  (𝔛.compInf κ ≫ DRModel.baseChangeMap toκ).base (genericPoint (𝔛.ratModel κ).C)

abbrev ξzero : ↥(baseChangeO p O) :=
  letI := (𝔛.ratModel κ).isIntegral
  (𝔛.compZero κ ≫ DRModel.baseChangeMap toκ).base (genericPoint (𝔛.ratModel κ).C)

end ModularCurve.DRModelPackage

end

Statements phrased using this module (22)