Definitions/Def_CerednikDrinfeld_FormalUpperHalfPlaneCharts.lean
Affine charts of the formal Drinfeld upper half plane
Over a commutative ring \mathcal{O}, the module first sets up a lightweight notion of functor on \mathcal{O}-algebras: AlgFunctor πͺ consists of an assignment B \mapsto F(B) of a type to every commutative \mathcal{O}-algebra B (ranging over Type), a transport map along every \mathcal{O}-algebra homomorphism B \to B', and the two functoriality laws for the identity and for composition as fields. Around it are recorded natural transformations (a family of maps F(B) \to G(B) together with the naturality square as a field), their identity and composition, the product functor B \mapsto F(B) \times G(B), the corepresentable functor B \mapsto \operatorname{Hom}_{\mathcal{O}\text{-alg}}(A,B) attached to an \mathcal{O}-algebra A, and a structure GroupAction expressing an action of a group \Gamma on F by maps F(B) \to F(B) that are unital, multiplicative and compatible with transport. For \pi \in \mathcal{O}, the predicates NatTrans.IsIsoOnNilp Ο and NatTrans.IsMonoOnNilp Ο assert that the component at B is bijective, respectively injective, for every \mathcal{O}-algebra B in which \pi has nilpotent image.
The charts are then defined for \pi \in \mathcal{O} and q \in \mathbb{N}: chartV πͺ q sends B to \{\zeta \in B : \zeta^{q}-\zeta \in B^{\times}\}; chartE πͺ Ο q sends B to the set of pairs (\xi,\eta) \in B^{2} with \xi\eta equal to the image of \pi and \xi^{q-1}-1, \eta^{q-1}-1 both units; chartVUnit πͺ q imposes on \zeta additionally that \zeta be a unit, and chartVUnitIncl is the natural transformation forgetting that extra condition. Two arithmetic lemmas are proved: if 1 \le q and \zeta^{q}-\zeta is a unit then so is \zeta^{q-1}-1 (by the factorisation \zeta^q-\zeta = \zeta(\zeta^{q-1}-1)), and (ab)^{n+1}-1 is a unit whenever a is nilpotent. They feed vertexToEdge: for 2 \le q and an \mathcal{O}-algebra B in which the image of \pi is nilpotent, the map \zeta \mapsto (\zeta, \pi\zeta^{-1}) from chartVUnit to chartE at B; vertexToEdge_natural states its compatibility with any \mathcal{O}-algebra map f : B \to B' between two such algebras, so that it is a natural transformation over the \pi-nilpotent algebras, where it is defined. Finally, for a prime r, padicChartV and padicChartE are the instances with \mathcal{O} = \mathbb{Z}_{r}, \pi = r, q = r, and SpecialFibreVertexChartShape r is the Prop asserting that for every field \mathbb{F} that is a \mathbb{Z}_{r}-algebra of characteristic r and every \zeta \in \mathbb{F}, \zeta^{r}-\zeta is a unit if and only if \zeta avoids the images of all a \in \mathbb{Z}/r.
Relation to Mathlib
The constructions here are independent of Mathlib's category-theory library: AlgFunctor, its natural transformations, products, corepresentable objects and group actions form the project's own hand-rolled notion of a functor from commutative \mathcal{O}-algebras to types, and the chart functors are project-specific.
Where it is used
These are the two affine charts of the formal model of Drinfeld's p-adic upper half plane β the formal affine line with the q rational residue discs removed, and the formal node \xi\eta = \pi with the rational points of the two branches removed β glued along the map \zeta \mapsto (\zeta,\pi\zeta^{-1}) on algebras where \pi is nilpotent. They underlie the ΔerednikβDrinfeld description of Shimura curves by quotients indexed by the BruhatβTits tree, which supplies the local geometry used in the level-lowering part of the argument.
References
- J.-F. Boutot and H. Carayol, Uniformisation p-adique des courbes de Shimura: les thΓ©orΓ¨mes de Δerednik et de Drinfeld, AstΓ©risque 196β197 (1991), 45β158, I Β§4
- V. G. Drinfeld, Coverings of p-adic symmetric domains, Functional Analysis and its Applications 10 (1976), 107β115
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 176 lines
- 33 declarations
- used in the statements of 14 theorems and imported by 18 proofs
- imports 2 definition modules
Source file: Definitions/Def_CerednikDrinfeld_FormalUpperHalfPlaneCharts.lean
Declarations
- structure
CerednikDrinfeld.FormalOmega.AlgFunctor - field
CerednikDrinfeld.FormalOmega.AlgFunctor.obj - field
CerednikDrinfeld.FormalOmega.AlgFunctor.map - field
CerednikDrinfeld.FormalOmega.AlgFunctor.map_id - field
CerednikDrinfeld.FormalOmega.AlgFunctor.map_comp - field
CerednikDrinfeld.FormalOmega.AlgFunctor.map - structure
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans - field
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans.app - field
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans.naturality - field
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans.f - def
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans.id - def
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans.comp - def
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans.IsIsoOnNilp - def
CerednikDrinfeld.FormalOmega.AlgFunctor.NatTrans.IsMonoOnNilp - def
CerednikDrinfeld.FormalOmega.AlgFunctor.prod - def
CerednikDrinfeld.FormalOmega.AlgFunctor.corep - structure
CerednikDrinfeld.FormalOmega.AlgFunctor.GroupAction - field
CerednikDrinfeld.FormalOmega.AlgFunctor.GroupAction.act - field
CerednikDrinfeld.FormalOmega.AlgFunctor.GroupAction.act_one - field
CerednikDrinfeld.FormalOmega.AlgFunctor.GroupAction.act_mul - field
CerednikDrinfeld.FormalOmega.AlgFunctor.GroupAction.act_map - field
CerednikDrinfeld.FormalOmega.AlgFunctor.GroupAction.f - def
CerednikDrinfeld.FormalOmega.chartV - def
CerednikDrinfeld.FormalOmega.chartE - def
CerednikDrinfeld.FormalOmega.chartVUnit - def
CerednikDrinfeld.FormalOmega.chartVUnitIncl - theorem
CerednikDrinfeld.FormalOmega.isUnit_pow_pred_sub_one_of_isUnit_pow_sub - theorem
CerednikDrinfeld.FormalOmega.isUnit_pow_succ_sub_one_of_isNilpotent - def
CerednikDrinfeld.FormalOmega.vertexToEdge - theorem
CerednikDrinfeld.FormalOmega.vertexToEdge_natural - abbrev
CerednikDrinfeld.FormalOmega.padicChartV - abbrev
CerednikDrinfeld.FormalOmega.padicChartE - def
CerednikDrinfeld.FormalOmega.SpecialFibreVertexChartShape
Source
import Mathlib import Definitions.Def_LatticeTreeOrbital import Definitions.Def_CerednikDrinfeld_BruhatTitsTree set_option autoImplicit false namespace CerednikDrinfeld namespace FormalOmega structure AlgFunctor (πͺ : Type) [CommRing πͺ] : Type 1 where obj : β (B : Type) [CommRing B] [Algebra πͺ B], Type map : β {B : Type} [CommRing B] [Algebra πͺ B] {B' : Type} [CommRing B'] [Algebra πͺ B'], (B ββ[πͺ] B') β obj B β obj B' map_id : β {B : Type} [CommRing B] [Algebra πͺ B] (x : obj B), map (AlgHom.id πͺ B) x = x map_comp : β {Bβ : Type} [CommRing Bβ] [Algebra πͺ Bβ] {Bβ : Type} [CommRing Bβ] [Algebra πͺ Bβ] {Bβ : Type} [CommRing Bβ] [Algebra πͺ Bβ] (f : Bβ ββ[πͺ] Bβ) (g : Bβ ββ[πͺ] Bβ) (x : obj Bβ), map (g.comp f) x = map g (map f x) namespace AlgFunctor variable {πͺ : Type} [CommRing πͺ] structure NatTrans (F G : AlgFunctor πͺ) : Type 1 where app : β (B : Type) [CommRing B] [Algebra πͺ B], F.obj B β G.obj B naturality : β {B : Type} [CommRing B] [Algebra πͺ B] {B' : Type} [CommRing B'] [Algebra πͺ B'] (f : B ββ[πͺ] B') (x : F.obj B), app B' (F.map f x) = G.map f (app B x) def NatTrans.id (F : AlgFunctor πͺ) : NatTrans F F where app := fun _ _ _ x => x naturality _ _ := rfl def NatTrans.comp {F G H : AlgFunctor πͺ} (Ξ· : NatTrans F G) (ΞΈ : NatTrans G H) : NatTrans F H where app := fun B _ _ x => ΞΈ.app B (Ξ·.app B x) naturality f x := by rw [Ξ·.naturality, ΞΈ.naturality] def NatTrans.IsIsoOnNilp (Ο : πͺ) {F G : AlgFunctor πͺ} (Ξ· : NatTrans F G) : Prop := β (B : Type) [CommRing B] [Algebra πͺ B], IsNilpotent (algebraMap πͺ B Ο) β Function.Bijective (Ξ·.app B) def NatTrans.IsMonoOnNilp (Ο : πͺ) {F G : AlgFunctor πͺ} (Ξ· : NatTrans F G) : Prop := β (B : Type) [CommRing B] [Algebra πͺ B], IsNilpotent (algebraMap πͺ B Ο) β Function.Injective (Ξ·.app B) def prod (F G : AlgFunctor πͺ) : AlgFunctor πͺ where obj B := F.obj B Γ G.obj B map f x := (F.map f x.1, G.map f x.2) map_id x := by rw [F.map_id, G.map_id] map_comp f g x := by rw [F.map_comp, G.map_comp] def corep (A : Type) [CommRing A] [Algebra πͺ A] : AlgFunctor πͺ where obj B := A ββ[πͺ] B map f Ο := f.comp Ο map_id _ := AlgHom.ext fun _ => rfl map_comp _ _ _ := AlgHom.ext fun _ => rfl structure GroupAction (Ξ : Type) [Group Ξ] (F : AlgFunctor πͺ) : Type 1 where act : β (B : Type) [CommRing B] [Algebra πͺ B], Ξ β F.obj B β F.obj B act_one : β (B : Type) [CommRing B] [Algebra πͺ B] (x : F.obj B), act B 1 x = x act_mul : β (B : Type) [CommRing B] [Algebra πͺ B] (g h : Ξ) (x : F.obj B), act B (g * h) x = act B g (act B h x) act_map : β {B : Type} [CommRing B] [Algebra πͺ B] {B' : Type} [CommRing B'] [Algebra πͺ B'] (f : B ββ[πͺ] B') (g : Ξ) (x : F.obj B), F.map f (act B g x) = act B' g (F.map f x) end AlgFunctor section Charts variable (πͺ : Type) [CommRing πͺ] def chartV (q : β) : AlgFunctor πͺ where obj B := { ΞΆ : B // IsUnit (ΞΆ ^ q - ΞΆ) } map f x := β¨f x.1, by have h := x.2.map f rwa [map_sub, map_pow] at hβ© map_id _ := Subtype.ext rfl map_comp _ _ _ := Subtype.ext rfl def chartE (Ο : πͺ) (q : β) : AlgFunctor πͺ where obj B := { p : B Γ B // p.1 * p.2 = algebraMap πͺ B Ο β§ IsUnit (p.1 ^ (q - 1) - 1) β§ IsUnit (p.2 ^ (q - 1) - 1) } map f x := β¨(f x.1.1, f x.1.2), by obtain β¨hβ, hβ, hββ© := x.2 refine β¨?_, ?_, ?_β© Β· rw [β map_mul, hβ, AlgHom.commutes] Β· have h := hβ.map f rwa [map_sub, map_pow, map_one] at h Β· have h := hβ.map f rwa [map_sub, map_pow, map_one] at hβ© map_id _ := Subtype.ext rfl map_comp _ _ _ := Subtype.ext rfl def chartVUnit (q : β) : AlgFunctor πͺ where obj B := { ΞΆ : B // IsUnit (ΞΆ ^ q - ΞΆ) β§ IsUnit ΞΆ } map f x := β¨f x.1, by obtain β¨hβ, hββ© := x.2 refine β¨?_, hβ.map fβ© have h := hβ.map f rwa [map_sub, map_pow] at hβ© map_id _ := Subtype.ext rfl map_comp _ _ _ := Subtype.ext rfl def chartVUnitIncl (q : β) : AlgFunctor.NatTrans (chartVUnit πͺ q) (chartV πͺ q) where app := fun _ _ _ x => β¨x.1, x.2.1β© naturality _ _ := Subtype.ext rfl variable {πͺ} theorem isUnit_pow_pred_sub_one_of_isUnit_pow_sub {B : Type} [CommRing B] {q : β} (hq : 1 β€ q) {ΞΆ : B} (h : IsUnit (ΞΆ ^ q - ΞΆ)) : IsUnit (ΞΆ ^ (q - 1) - 1) := by have hpow : ΞΆ ^ q = ΞΆ ^ (q - 1) * ΞΆ := by rw [β pow_succ, Nat.sub_add_cancel hq] have hfac : ΞΆ ^ q - ΞΆ = ΞΆ * (ΞΆ ^ (q - 1) - 1) := by rw [hpow]; ring rw [hfac] at h exact isUnit_of_mul_isUnit_right h theorem isUnit_pow_succ_sub_one_of_isNilpotent {B : Type} [CommRing B] {a : B} (ha : IsNilpotent a) (b : B) (n : β) : IsUnit ((a * b) ^ (n + 1) - 1) := by have hab : IsNilpotent (a * b) := Commute.isNilpotent_mul_right (Commute.all a b) ha have hpow : IsNilpotent ((a * b) ^ (n + 1)) := by obtain β¨m, hmβ© := hab exact β¨m, by rw [β pow_mul, Nat.mul_comm (n + 1) m, pow_mul, hm, zero_pow (Nat.succ_ne_zero n)]β© exact hpow.isUnit_sub_one noncomputable def vertexToEdge (Ο : πͺ) {q : β} (hq : 2 β€ q) (B : Type) [CommRing B] [Algebra πͺ B] (hB : IsNilpotent (algebraMap πͺ B Ο)) (x : (chartVUnit πͺ q).obj B) : (chartE πͺ Ο q).obj B := β¨(x.1, algebraMap πͺ B Ο * β(x.2.2.unitβ»ΒΉ)), by refine β¨?_, ?_, ?_β© Β· calc x.1 * (algebraMap πͺ B Ο * β(x.2.2.unitβ»ΒΉ)) = algebraMap πͺ B Ο * (x.1 * β(x.2.2.unitβ»ΒΉ)) := by ring _ = algebraMap πͺ B Ο := by rw [IsUnit.mul_val_inv, mul_one] Β· exact isUnit_pow_pred_sub_one_of_isUnit_pow_sub (le_trans (by norm_num) hq) x.2.1 Β· obtain β¨n, hnβ© : β n, q - 1 = n + 1 := β¨q - 2, by omegaβ© rw [hn] exact isUnit_pow_succ_sub_one_of_isNilpotent hB _ nβ© theorem vertexToEdge_natural (Ο : πͺ) {q : β} (hq : 2 β€ q) {B : Type} [CommRing B] [Algebra πͺ B] {B' : Type} [CommRing B'] [Algebra πͺ B'] (hB : IsNilpotent (algebraMap πͺ B Ο)) (hB' : IsNilpotent (algebraMap πͺ B' Ο)) (f : B ββ[πͺ] B') (x : (chartVUnit πͺ q).obj B) : (chartE πͺ Ο q).map f (vertexToEdge Ο hq B hB x) = vertexToEdge Ο hq B' hB' ((chartVUnit πͺ q).map f x) := by apply Subtype.ext refine Prod.ext rfl ?_ show f (algebraMap πͺ B Ο * β(x.2.2.unitβ»ΒΉ)) = algebraMap πͺ B' Ο * β(((chartVUnit πͺ q).map f x).2.2.unitβ»ΒΉ) rw [map_mul, AlgHom.commutes] congr 1 have h1 : f x.1 * f β(x.2.2.unitβ»ΒΉ) = 1 := by rw [β map_mul, IsUnit.mul_val_inv, map_one] have h2 : f x.1 * β(((chartVUnit πͺ q).map f x).2.2.unitβ»ΒΉ) = 1 := by exact IsUnit.mul_val_inv _ exact (IsUnit.mul_right_injective (x.2.2.map f)) (h1.trans h2.symm) end Charts section PadicInstance variable (r : β) [Fact r.Prime] noncomputable abbrev padicChartV : AlgFunctor β€_[r] := chartV β€_[r] r noncomputable abbrev padicChartE : AlgFunctor β€_[r] := chartE β€_[r] (r : β€_[r]) r def SpecialFibreVertexChartShape : Prop := β (π½ : Type) [Field π½] [Algebra β€_[r] π½] [CharP π½ r] (ΞΆ : π½), IsUnit (ΞΆ ^ r - ΞΆ) β β a : ZMod r, (ΞΆ : π½) β (a.cast : π½) end PadicInstance end FormalOmega end CerednikDrinfeld
Statements phrased using this module (14)
- Natural families into a scheme are determined on split coefficient maps
CerednikDrinfeld.FormalOmega.eq_of_natural_of_forall_eq_of_comp_mk_eq_comp_val3 below Β· depth 31 - Rigidified-pair functor over the fine moduli scheme, with unramified strata
CerednikDrinfeld.QM.IsFineModuli.exists_algFunctor_represents_rigidifiedCurve_strata_unramified3,182 below Β· depth 31 - Unique lifting mod Ο from square-zero thickenings
CerednikDrinfeld.FormalOmega.AlgFunctor.existsUnique_lift_quotient_of_forall_existsUnique_lift_of_ker_sq_eq_bot0 below Β· depth 32 - Formal Γ©taleness of the rigidified-curve functor over the fine moduli scheme
CerednikDrinfeld.QM.IsFineModuli.existsUnique_lift_of_sheaf_of_represents_rigidifiedCurve867 below Β· depth 32 - Representability of level-preserving rα΅-isogeny pairs over arbitrary bases
CerednikDrinfeld.QM.IsFineModuli.exists_representsOn_isogenyPair_of_withFullLevel_of_isPullbackVia3,105 below Β· depth 32 - Equal `ptR`-class implies isomorphism up to an r-power shift
CerednikDrinfeld.QM.RigidifiedPairClass.exists_isoVia_corr_of_ptR_eq_of_forall_isIdempotentElem861 below Β· depth 32 - Surjectivity of the rigidified-pair point map `ptR`
CerednikDrinfeld.QM.RigidifiedPairClass.exists_ptR_eq27 below Β· depth 32 - Strata points of rigidified fake elliptic curves
CerednikDrinfeld.QM.RigidifiedPairClass.exists_stratumPoint_of_forall_representsOn_of_isPullback29 below Β· depth 32 - Push-forward preserves the relation on rigidified presented points
CerednikDrinfeld.QM.RigidifiedPairClass.mapCompat_of_ptX_natural26 below Β· depth 32 - Uniform degree relation for correspondences of rigidified fake elliptic curves
CerednikDrinfeld.QM.FakeEllipticCurve.Rigidification.exists_forall_corr_mul_pow_eq_of_forall_isIdempotentElem738 below Β· depth 33 - Zariski gluing of presented stratum points up to r-power correspondence
CerednikDrinfeld.QM.IsFineModuli.exists_strata_point_locally_corr_of_span_eq_top744 below Β· depth 33 - Base change of rigidified pairs; naturality of `ptX`
CerednikDrinfeld.QM.RigidifiedPairClass.exists_pullback_ptX_eq_specMap_comp25 below Β· depth 33 - The rigidified-pair relation is an equivalence relation
CerednikDrinfeld.QM.RigidifiedPairClass.rel_equivalence42 below Β· depth 33 - Zariski-locality of the rigidified-pair relation over the base
CerednikDrinfeld.QM.RigidifiedPairClass.rel_of_forall_rel_map2 below Β· depth 33