Definitions/Def_MvFormalGroup_CartierModuleIntVerschiebung.lean
Integral Verschiebung on Cartier modules of formal group laws
Fix a prime p and a commutative ring R. The tautological Witt vector xTaut p R over R[X_0,X_1,\dots] has n-th coefficient the variable X_n; frobPoly p R n is the n-th coefficient of its Witt-vector Frobenius, and frobPolyFam p R is the family of these polynomials viewed as power series in the X_m. It is identified with the image of WittVector.frobeniusPoly p n under \mathbb{Z}\to R, equals X_n^p when R has characteristic p (so that the family then coincides with frobFam), and satisfies: weighted homogeneity of degree p^{n+1} for the weights X_m\mapsto p^m (a fact also proved for WittVector.frobeniusPoly itself), vanishing constant coefficients, substitutability (HasSubst), and compatibility with the Witt addition polynomials. The last three constitute isEndo_frobPolyFam, i.e. the family is an endomorphism of the formal Witt group \widehat W over R in the sense of the predicate IsEndo. Substitution identities for this family are recorded against the Verschiebung family (giving multiplication by p), the multiplication families mulFam for a Witt vector, the Teichmüller families teichFam, and the curve family X\mapsto(X,0,0,\dots) (giving X^p in degree 0 and 0 afterwards); an auxiliary family curvePoly realises the curve family by polynomials, with \mathrm{mk} of it the Teichmüller representative of X.
For a commutative d-dimensional formal group law \Phi over R, verschiebungInt is the additive endomorphism of the Cartier module CartierModule p Φ given by precomposition with this endomorphism of \widehat W, f\mapsto f\circ F, defined over an arbitrary base. Its properties, all proved here: it agrees with verschiebung when R has characteristic p; F(Vf)=p\cdot f, also written as the action of p\in W(R); the semilinearities w\cdot Vf=V(\sigma(w)\cdot f) and \langle a\rangle Vf=V(\langle a^p\rangle f), with the Teichmüller variant; commutation with the maps induced by homomorphisms of laws and with the action of endomorphisms of \Phi; additivity in n\bullet; a formula for iterates; \mathrm{curve}(Vf)_j is \mathrm{curve}(f)_j with t replaced by t^p; and \mathrm{tangent}(Vf)=0. Two examples specialise F\circ V and the tangent vanishing to the linear curves addLinear.
Relation to Mathlib
The Witt-vector lemmas supplement Mathlib's API (WittVector.frobenius, frobeniusPoly, teichmuller, IsPoly) with the weighted homogeneity of the Frobenius polynomials and the identity F(\tau(a))=\tau(a^p); the multivariate formal group laws and their Cartier modules are the project's own structures.
Where it is used
The operator defined here is the Cartier operator V acting on \mathrm{Hom}(\widehat W,\Phi) over an arbitrary commutative base, whereas the earlier operator on this Cartier module was available only when pR=0. It is the form needed when working with formal groups over rings in which p is nilpotent but not zero, as in the Cartier-theoretic treatment of Drinfeld's period morphism.
References
- J.-F. Boutot and H. Carayol, Uniformisation p-adique des courbes de Shimura: théorèmes de Čerednik et de Drinfeld, Astérisque 196–197 (1991), 45–158
- M. Hazewinkel, Formal Groups and Applications, Academic Press, 1978
- T. Zink, Cartiertheorie kommutativer formaler Gruppen, Teubner-Texte zur Mathematik 68, Teubner, 1984
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 442 lines
- 48 declarations
- used in the statements of 130 theorems and imported by 134 proofs
- imports 4 definition modules
Source file: Definitions/Def_MvFormalGroup_CartierModuleIntVerschiebung.lean
Imports
Declarations
- theorem
WittVector.teichmuller_coeff_zero_isPoly - theorem
WittVector.teichmuller_coeff_zero_pow_isPoly - theorem
WittVector.frobenius_teichmuller_eq - theorem
WittVector.isWeightedHomogeneous_frobeniusPoly - def
MvFormalGroup.WittLaw.xTaut - def
MvFormalGroup.WittLaw.frobPoly - def
MvFormalGroup.WittLaw.frobPolyFam - theorem
MvFormalGroup.WittLaw.xTaut_coeff - theorem
MvFormalGroup.WittLaw.frobPolyFam_apply - theorem
MvFormalGroup.WittLaw.aeval_X_intCast - theorem
MvFormalGroup.WittLaw.frobPoly_eq_map - theorem
MvFormalGroup.WittLaw.aeval_frobPoly - theorem
MvFormalGroup.WittLaw.frobPoly_charP - theorem
MvFormalGroup.WittLaw.frobPolyFam_eq_frobFam - theorem
MvFormalGroup.WittLaw.isWeightedHomogeneous_frobPoly - theorem
MvFormalGroup.WittLaw.weight_eq_of_coeff_frobPolyFam_ne_zero - theorem
MvFormalGroup.WittLaw.constantCoeff_frobPolyFam - theorem
MvFormalGroup.WittLaw.constantCoeff_frobPoly - theorem
MvFormalGroup.WittLaw.hasSubst_frobPolyFam - theorem
MvFormalGroup.WittLaw.pairFam_frobPolyFam - theorem
MvFormalGroup.WittLaw.subst_addFam_frobPolyFam - theorem
MvFormalGroup.WittLaw.isEndo_frobPolyFam - theorem
MvFormalGroup.WittLaw.mk_frobPoly - theorem
MvFormalGroup.WittLaw.subst_verFam_frobPolyFam - theorem
MvFormalGroup.WittLaw.subst_mulFam_frobPolyFam - theorem
MvFormalGroup.WittLaw.subst_teichFam_frobPolyFam - def
MvFormalGroup.WittLaw.curvePoly - theorem
MvFormalGroup.WittLaw.coe_curvePoly - theorem
MvFormalGroup.WittLaw.mk_curvePoly - theorem
MvFormalGroup.WittLaw.subst_curveFam_frobPolyFam - def
MvFormalGroup.CartierModule.verschiebungInt - theorem
MvFormalGroup.CartierModule.verschiebungInt_eq_precomp - theorem
MvFormalGroup.CartierModule.toPowerSeries_verschiebungInt - theorem
MvFormalGroup.CartierModule.verschiebungInt_eq_verschiebung - theorem
MvFormalGroup.CartierModule.verschiebungInt_apply_eq_verschiebung - theorem
MvFormalGroup.CartierModule.frobenius_verschiebungInt - theorem
MvFormalGroup.CartierModule.frobenius_verschiebungInt_eq_smul - theorem
MvFormalGroup.CartierModule.smul_verschiebungInt - theorem
MvFormalGroup.CartierModule.homothety_verschiebungInt - theorem
MvFormalGroup.CartierModule.teichmuller_smul_verschiebungInt - theorem
MvFormalGroup.CartierModule.map_verschiebungInt - theorem
MvFormalGroup.CartierModule.endAct_verschiebungInt - theorem
MvFormalGroup.CartierModule.verschiebungInt_nsmul - theorem
MvFormalGroup.CartierModule.toPowerSeries_verschiebungInt_iterate - theorem
MvFormalGroup.CartierModule.curve_verschiebungInt - theorem
MvFormalGroup.CartierModule.tangent_verschiebungInt - theorem
MvFormalGroup.CartierModule.Examples.frobenius_verschiebungInt_addLinear - theorem
MvFormalGroup.CartierModule.Examples.tangent_verschiebungInt_addLinear
Source
import Mathlib import Definitions.Def_MvFormalGroup_NegV2 import Definitions.Def_MvFormalGroup_CartierModule import Definitions.Def_MvFormalGroup_CartierModuleHomothety import Definitions.Def_MvFormalGroup_CartierModuleWittAction set_option autoImplicit false noncomputable section universe u namespace WittVector open MvPolynomial variable (p : ℕ) [hp : Fact p.Prime] theorem teichmuller_coeff_zero_isPoly : WittVector.IsPoly p fun (S : Type u) (_ : CommRing S) (x : WittVector p S) => WittVector.teichmuller p (x.coeff 0) := by refine ⟨⟨fun n => if n = 0 then X 0 else 0, ?_⟩⟩ intro S _ x funext n cases n with | zero => simp [WittVector.teichmuller_coeff_zero] | succ n => simp [WittVector.teichmuller_coeff_pos p _ _ (Nat.succ_pos n)] theorem teichmuller_coeff_zero_pow_isPoly : WittVector.IsPoly p fun (S : Type u) (_ : CommRing S) (x : WittVector p S) => WittVector.teichmuller p (x.coeff 0 ^ p) := by refine ⟨⟨fun n => if n = 0 then X 0 ^ p else 0, ?_⟩⟩ intro S _ x funext n cases n with | zero => rw [WittVector.teichmuller_coeff_zero] simp | succ n => rw [WittVector.teichmuller_coeff_pos p _ _ (Nat.succ_pos n)] simp theorem frobenius_teichmuller_eq {A : Type u} [CommRing A] (a : A) : WittVector.frobenius (WittVector.teichmuller p a) = WittVector.teichmuller p (a ^ p) := by have hf : WittVector.IsPoly p fun (S : Type u) (_ : CommRing S) (x : WittVector p S) => WittVector.frobenius (WittVector.teichmuller p (x.coeff 0)) := @WittVector.IsPoly.comp p _ _ (WittVector.frobenius_isPoly p) (teichmuller_coeff_zero_isPoly p) have key := WittVector.IsPoly.ext hf (teichmuller_coeff_zero_pow_isPoly p) (fun S _ x n => by simp only [WittVector.ghostComponent_frobenius, WittVector.ghostComponent_teichmuller] rw [← pow_mul, ← pow_succ']) A (WittVector.teichmuller p a) simpa only [WittVector.teichmuller_coeff_zero] using key theorem isWeightedHomogeneous_frobeniusPoly (n : ℕ) : IsWeightedHomogeneous (fun m : ℕ => p ^ m) (WittVector.frobeniusPoly p n) (p ^ (n + 1)) := by have hW : ∀ N : ℕ, IsWeightedHomogeneous (fun m : ℕ => p ^ m) (wittPolynomial p ℤ N) (p ^ N) := by intro N rw [wittPolynomial_eq_sum_C_mul_X_pow] refine IsWeightedHomogeneous.sum _ _ _ fun j hj => ?_ have hj' : j ≤ N := Nat.lt_succ_iff.mp (Finset.mem_range.mp hj) have hX := (isWeightedHomogeneous_X (R := ℤ) (fun m : ℕ => p ^ m) j).pow (p ^ (N - j)) have hdeg : (p ^ (N - j)) • (fun m : ℕ => p ^ m) j = p ^ N := by show p ^ (N - j) * p ^ j = p ^ N rw [← pow_add, Nat.sub_add_cancel hj'] rw [hdeg] at hX exact hX.C_mul _ induction n using Nat.strong_induction_on with | _ n ih => have key := WittVector.bind₁_frobeniusPoly_wittPolynomial p n rw [wittPolynomial_eq_sum_C_mul_X_pow, map_sum, Finset.sum_range_succ, Nat.sub_self, pow_zero, pow_one] at key simp only [map_mul, MvPolynomial.bind₁_C_right, map_pow, MvPolynomial.bind₁_X_right] at key have hsum : IsWeightedHomogeneous (fun m : ℕ => p ^ m) (∑ i ∈ Finset.range n, C (p : ℤ) ^ i * WittVector.frobeniusPoly p i ^ p ^ (n - i)) (p ^ (n + 1)) := by refine IsWeightedHomogeneous.sum _ _ _ fun i hi => ?_ have hi' : i < n := Finset.mem_range.mp hi have h1 := (ih i hi').pow (p ^ (n - i)) have hdeg : (p ^ (n - i)) • p ^ (i + 1) = p ^ (n + 1) := by rw [smul_eq_mul, ← pow_add] congr 1 omega rw [hdeg] at h1 rw [← map_pow] exact h1.C_mul _ intro d hd by_contra hne have hcoeff : MvPolynomial.coeff d (C (p : ℤ) ^ n * WittVector.frobeniusPoly p n) = 0 := by have := congrArg (MvPolynomial.coeff d) key rw [MvPolynomial.coeff_add] at this have hR : MvPolynomial.coeff d (wittPolynomial p ℤ (n + 1)) = 0 := (hW (n + 1)).coeff_eq_zero d hne have hS : MvPolynomial.coeff d (∑ i ∈ Finset.range n, C (p : ℤ) ^ i * WittVector.frobeniusPoly p i ^ p ^ (n - i)) = 0 := hsum.coeff_eq_zero d hne rw [hR, hS, zero_add] at this exact this rw [← map_pow, MvPolynomial.coeff_C_mul] at hcoeff rcases mul_eq_zero.mp hcoeff with h | h · exact absurd h (pow_ne_zero _ (Int.natCast_ne_zero.mpr hp.out.ne_zero)) · exact hd h end WittVector namespace MvFormalGroup open MvPowerSeries WittLaw namespace WittLaw variable (p : ℕ) [hp : Fact p.Prime] (R : Type u) [CommRing R] def xTaut : WittVector p (MvPolynomial ℕ R) := WittVector.mk p (MvPolynomial.X : ℕ → MvPolynomial ℕ R) def frobPoly (n : ℕ) : MvPolynomial ℕ R := (WittVector.frobenius (xTaut p R)).coeff n def frobPolyFam : ℕ → MvPowerSeries ℕ R := fun n => (frobPoly p R n : MvPowerSeries ℕ R) variable {p R} omit hp in @[simp] theorem xTaut_coeff (m : ℕ) : (xTaut p R).coeff m = MvPolynomial.X m := rfl @[simp] theorem frobPolyFam_apply (n : ℕ) : frobPolyFam p R n = (frobPoly p R n : MvPowerSeries ℕ R) := rfl theorem aeval_X_intCast {σ : Type*} (S : Type*) [CommRing S] (φ : MvPolynomial σ ℤ) : MvPolynomial.aeval (MvPolynomial.X : σ → MvPolynomial σ S) φ = MvPolynomial.map (Int.castRingHom S) φ := by refine RingHom.congr_fun (?_ : (MvPolynomial.aeval (MvPolynomial.X : σ → MvPolynomial σ S)).toRingHom = MvPolynomial.map (Int.castRingHom S)) φ refine MvPolynomial.ringHom_ext (fun r => ?_) (fun i => ?_) · exact RingHom.congr_fun (RingHom.ext_int ((MvPolynomial.aeval (MvPolynomial.X : σ → MvPolynomial σ S)).toRingHom.comp (MvPolynomial.C : ℤ →+* MvPolynomial σ ℤ)) ((MvPolynomial.map (Int.castRingHom S)).comp (MvPolynomial.C : ℤ →+* MvPolynomial σ ℤ))) r · simp theorem frobPoly_eq_map (n : ℕ) : frobPoly p R n = MvPolynomial.map (Int.castRingHom R) (WittVector.frobeniusPoly p n) := by rw [frobPoly, WittVector.coeff_frobenius, ← aeval_X_intCast] rfl theorem aeval_frobPoly {τ : Type} (y : ℕ → MvPolynomial τ R) (n : ℕ) : MvPolynomial.aeval y (frobPoly p R n) = (WittVector.frobenius (WittVector.mk p y)).coeff n := by have h := WittVector.IsPoly.map (WittVector.frobenius_isPoly p) (MvPolynomial.aeval y : MvPolynomial ℕ R →ₐ[R] MvPolynomial τ R).toRingHom (xTaut p R) have hx : WittVector.map (MvPolynomial.aeval y : MvPolynomial ℕ R →ₐ[R] MvPolynomial τ R).toRingHom (xTaut p R) = WittVector.mk p y := by refine WittVector.ext fun m => ?_ rw [WittVector.map_coeff, xTaut_coeff, WittVector.coeff_mk] exact MvPolynomial.aeval_X y m rw [hx] at h rw [← h, WittVector.map_coeff] rfl theorem frobPoly_charP [CharP R p] (n : ℕ) : frobPoly p R n = MvPolynomial.X n ^ p := by rw [frobPoly, WittVector.coeff_frobenius_charP, xTaut_coeff] theorem frobPolyFam_eq_frobFam [CharP R p] : frobPolyFam p R = frobFam p R := by funext n rw [frobPolyFam_apply, frobPoly_charP, MvPolynomial.coe_pow, MvPolynomial.coe_X, frobFam_apply] theorem isWeightedHomogeneous_frobPoly (n : ℕ) : MvPolynomial.IsWeightedHomogeneous (fun m : ℕ => p ^ m) (frobPoly p R n) (p ^ (n + 1)) := by rw [frobPoly_eq_map] intro d hd rw [MvPolynomial.coeff_map] at hd have hd' : MvPolynomial.coeff d (WittVector.frobeniusPoly p n) ≠ 0 := fun h => hd (by rw [h, map_zero]) exact WittVector.isWeightedHomogeneous_frobeniusPoly p n hd' theorem weight_eq_of_coeff_frobPolyFam_ne_zero {n : ℕ} {e : ℕ →₀ ℕ} (h : coeff e (frobPolyFam p R n) ≠ 0) : Finsupp.weight (fun m : ℕ => p ^ m) e = p ^ (n + 1) := by rw [frobPolyFam_apply, MvPolynomial.coeff_coe] at h exact isWeightedHomogeneous_frobPoly n h theorem constantCoeff_frobPolyFam (n : ℕ) : (frobPolyFam p R n).constantCoeff = 0 := by by_contra h have h' : coeff (0 : ℕ →₀ ℕ) (frobPolyFam p R n) ≠ 0 := by rwa [coeff_zero_eq_constantCoeff_apply] have hw := weight_eq_of_coeff_frobPolyFam_ne_zero h' rw [map_zero] at hw exact absurd hw.symm (pow_ne_zero _ hp.out.ne_zero) theorem constantCoeff_frobPoly (n : ℕ) : MvPolynomial.constantCoeff (frobPoly p R n) = 0 := by have h := constantCoeff_frobPolyFam (p := p) (R := R) n rwa [frobPolyFam_apply, ← coeff_zero_eq_constantCoeff_apply, MvPolynomial.coeff_coe, ← MvPolynomial.constantCoeff_eq] at h theorem hasSubst_frobPolyFam : HasSubst (frobPolyFam p R) := by refine ⟨fun n => by rw [constantCoeff_frobPolyFam]; exact IsNilpotent.zero, fun e => ?_⟩ refine (Set.finite_lt_nat (Finsupp.weight (fun m : ℕ => p ^ m) e)).subset fun n hn => ?_ have hw := weight_eq_of_coeff_frobPolyFam_ne_zero hn show n < Finsupp.weight (fun m : ℕ => p ^ m) e rw [hw] exact (Nat.lt_pow_self hp.out.one_lt).trans (Nat.pow_lt_pow_right hp.out.one_lt n.lt_succ_self) theorem pairFam_frobPolyFam : pairFam (frobPolyFam p R) = fun im : Fin 2 × ℕ => (((WittVector.frobenius (xVec (p := p) R im.1)).coeff im.2 : MvPolynomial (Fin 2 × ℕ) R) : MvPowerSeries (Fin 2 × ℕ) R) := by funext ⟨i, m⟩ rw [pairFam_apply, frobPolyFam_apply, xVec, ← aeval_frobPoly, coe_aeval] congr 1 funext k exact (MvPolynomial.coe_X _).symm theorem subst_addFam_frobPolyFam (n : ℕ) : subst (addFam p R) (frobPolyFam p R n) = (((WittVector.frobenius (xVec (p := p) R 0 + xVec R 1)).coeff n : MvPolynomial (Fin 2 × ℕ) R) : MvPowerSeries (Fin 2 × ℕ) R) := by have h : addFam p R = fun i => (addPolyR (p := p) R i : MvPowerSeries (Fin 2 × ℕ) R) := rfl rw [h, frobPolyFam_apply, ← coe_aeval, aeval_frobPoly, xVec_add] theorem isEndo_frobPolyFam : IsEndo p (frobPolyFam p R) := by refine ⟨hasSubst_frobPolyFam, constantCoeff_frobPolyFam, fun n => ?_⟩ have hR : subst (pairFam (frobPolyFam p R)) (addFam p R n) = (((WittVector.frobenius (xVec (p := p) R 0) + WittVector.frobenius (xVec (p := p) R 1)).coeff n : MvPolynomial (Fin 2 × ℕ) R) : MvPowerSeries (Fin 2 × ℕ) R) := by have key := coe_peval (R := R) (WittVector.wittAdd p n) (fun i m => (WittVector.frobenius (xVec (p := p) R i)).coeff m) rw [WittVector.add_coeff, pairFam_frobPolyFam, ← coe_addPolyR, addPolyR] refine key.trans ?_ congr 2 funext i fin_cases i <;> rfl rw [subst_addFam_frobPolyFam, hR, map_add] theorem mk_frobPoly : WittVector.mk p (frobPoly p R) = WittVector.frobenius (xTaut p R) := WittVector.mk_coeff_eq _ theorem subst_verFam_frobPolyFam (n : ℕ) : subst (verFam R) (frobPolyFam p R n) = nsmulFam p R p n := by have hv : (verFam R) = fun m => (verPoly R m : MvPowerSeries ℕ R) := funext fun m => (coe_verPoly m).symm have hV : WittVector.mk p (verPoly R) = WittVector.verschiebung (xTaut p R) := by refine WittVector.ext fun m => ?_ cases m with | zero => rw [WittVector.coeff_mk, WittVector.verschiebung_coeff_zero]; rfl | succ m => rw [WittVector.coeff_mk, WittVector.verschiebung_coeff_succ]; rfl rw [frobPolyFam_apply, hv, ← coe_aeval, aeval_frobPoly, hV, WittVector.frobenius_verschiebung, mul_comm, ← nsmul_eq_mul, WittVector.nsmul_coeff, nsmulFam] congr 1 have hunc : Function.uncurry ![(xTaut p R).coeff] = fun im : Fin 1 × ℕ => (MvPolynomial.X im.2 : MvPolynomial ℕ R) := by funext ⟨i, m⟩ fin_cases i; rfl show MvPolynomial.aeval (Function.uncurry ![(xTaut p R).coeff]) (WittVector.wittNSMul p p n) = _ rw [hunc, show (fun im : Fin 1 × ℕ => (MvPolynomial.X im.2 : MvPolynomial ℕ R)) = (MvPolynomial.X : ℕ → MvPolynomial ℕ R) ∘ Prod.snd from rfl, ← MvPolynomial.aeval_rename, aeval_X_intCast] theorem subst_mulFam_frobPolyFam (w : WittVector p R) (n : ℕ) : subst (mulFam p w) (frobPolyFam p R n) = subst (frobPolyFam p R) (mulFam p (WittVector.frobenius w) n) := by have hL : subst (mulFam p w) (frobPolyFam p R n) = (((WittVector.frobenius (cVec p w * xTaut p R)).coeff n : MvPolynomial ℕ R) : MvPowerSeries ℕ R) := by have hm : mulFam p w = fun m => (mulPoly p w m : MvPowerSeries ℕ R) := rfl rw [hm, frobPolyFam_apply, ← coe_aeval, aeval_frobPoly] congr 3 have hRt : subst (frobPolyFam p R) (mulFam p (WittVector.frobenius w) n) = (((cVec p (WittVector.frobenius w) * WittVector.frobenius (xTaut p R)).coeff n : MvPolynomial ℕ R) : MvPowerSeries ℕ R) := by have hf : frobPolyFam p R = fun m => (frobPoly p R m : MvPowerSeries ℕ R) := rfl rw [hf, mulFam_apply, ← coe_aeval, aeval_mulPoly, mk_frobPoly] rw [hL, hRt, map_mul, frobenius_cVec] theorem subst_teichFam_frobPolyFam (a : R) (n : ℕ) : subst (teichFam p a) (frobPolyFam p R n) = subst (frobPolyFam p R) (teichFam p (a ^ p) n) := by rw [← mulFam_teichmuller, ← mulFam_teichmuller, ← WittVector.frobenius_teichmuller_eq] exact subst_mulFam_frobPolyFam _ n def curvePoly (R : Type u) [CommRing R] : ℕ → MvPolynomial Unit R | 0 => MvPolynomial.X () | _ + 1 => 0 omit hp in theorem coe_curvePoly (n : ℕ) : ((curvePoly R n : MvPolynomial Unit R) : MvPowerSeries Unit R) = CartierModule.curveFam R n := by cases n with | zero => exact MvPolynomial.coe_X _ | succ n => exact MvPolynomial.coe_zero theorem mk_curvePoly : WittVector.mk p (curvePoly R) = WittVector.teichmuller p (MvPolynomial.X () : MvPolynomial Unit R) := by refine WittVector.ext fun m => ?_ cases m with | zero => rw [WittVector.coeff_mk, WittVector.teichmuller_coeff_zero]; rfl | succ m => rw [WittVector.coeff_mk, WittVector.teichmuller_coeff_pos p _ _ (Nat.succ_pos m)] rfl theorem subst_curveFam_frobPolyFam (n : ℕ) : subst (CartierModule.curveFam R) (frobPolyFam p R n) = Nat.casesOn n ((PowerSeries.X : PowerSeries R) ^ p) fun _ => 0 := by have hc : CartierModule.curveFam R = fun m => ((curvePoly R m : MvPolynomial Unit R) : MvPowerSeries Unit R) := funext fun m => (coe_curvePoly m).symm rw [hc, frobPolyFam_apply, ← coe_aeval, aeval_frobPoly, mk_curvePoly, WittVector.frobenius_teichmuller_eq] cases n with | zero => rw [WittVector.teichmuller_coeff_zero, MvPolynomial.coe_pow, MvPolynomial.coe_X] rfl | succ m => rw [WittVector.teichmuller_coeff_pos p _ _ (Nat.succ_pos m), MvPolynomial.coe_zero] end WittLaw namespace CartierModule variable {p : ℕ} [hp : Fact p.Prime] {d d' : ℕ} {R : Type u} [CommRing R] variable {Φ : MvFormalGroup d R} {Φ' : MvFormalGroup d' R} def verschiebungInt [Φ.IsComm] : CartierModule p Φ →+ CartierModule p Φ := precomp WittLaw.isEndo_frobPolyFam theorem verschiebungInt_eq_precomp [Φ.IsComm] : (verschiebungInt : CartierModule p Φ →+ CartierModule p Φ) = precomp WittLaw.isEndo_frobPolyFam := rfl @[simp] theorem toPowerSeries_verschiebungInt [Φ.IsComm] (f : CartierModule p Φ) : (verschiebungInt f).toPowerSeries = fun j => subst (WittLaw.frobPolyFam p R) (f.toPowerSeries j) := rfl theorem verschiebungInt_eq_verschiebung [Φ.IsComm] [CharP R p] : (verschiebungInt : CartierModule p Φ →+ CartierModule p Φ) = verschiebung := by refine AddMonoidHom.ext fun f => CartierModule.ext (funext fun j => ?_) rw [toPowerSeries_verschiebungInt, toPowerSeries_verschiebung, WittLaw.frobPolyFam_eq_frobFam] theorem verschiebungInt_apply_eq_verschiebung [Φ.IsComm] [CharP R p] (f : CartierModule p Φ) : verschiebungInt f = verschiebung f := by rw [verschiebungInt_eq_verschiebung] theorem frobenius_verschiebungInt [Φ.IsComm] (f : CartierModule p Φ) : frobenius (verschiebungInt f) = (p : ℕ) • f := by apply CartierModule.ext funext j rw [verschiebungInt, frobenius, precomp_precomp, ← subst_nsmulFam] congr 1 funext k exact WittLaw.subst_verFam_frobPolyFam k theorem frobenius_verschiebungInt_eq_smul [Φ.IsComm] (f : CartierModule p Φ) : frobenius (verschiebungInt f) = (p : WittVector p R) • f := by rw [frobenius_verschiebungInt, natCast_smul_eq_nsmul'] theorem smul_verschiebungInt [Φ.IsComm] (w : WittVector p R) (f : CartierModule p Φ) : w • verschiebungInt f = verschiebungInt (WittVector.frobenius w • f) := by apply CartierModule.ext funext j show (precomp _ (precomp _ f)).toPowerSeries j = (precomp _ (precomp _ f)).toPowerSeries j rw [precomp_precomp, precomp_precomp] congr 1 funext n exact WittLaw.subst_mulFam_frobPolyFam w n theorem homothety_verschiebungInt [Φ.IsComm] (a : R) (f : CartierModule p Φ) : homothety a (verschiebungInt f) = verschiebungInt (homothety (a ^ p) f) := by apply CartierModule.ext funext j show (precomp _ (precomp _ f)).toPowerSeries j = (precomp _ (precomp _ f)).toPowerSeries j rw [precomp_precomp, precomp_precomp] congr 1 funext n exact WittLaw.subst_teichFam_frobPolyFam a n theorem teichmuller_smul_verschiebungInt [Φ.IsComm] (a : R) (f : CartierModule p Φ) : WittVector.teichmuller p a • verschiebungInt f = verschiebungInt (WittVector.teichmuller p (a ^ p) • f) := by rw [teichmuller_smul, teichmuller_smul, homothety_verschiebungInt] theorem map_verschiebungInt [Φ.IsComm] [Φ'.IsComm] (φ : Φ.Hom Φ') (f : CartierModule p Φ) : map φ (verschiebungInt f) = verschiebungInt (map φ f) := map_precomp φ _ f theorem endAct_verschiebungInt [Φ.IsComm] (φ : MvFormalGroup.End Φ) (f : CartierModule p Φ) : endAct φ (verschiebungInt f) = verschiebungInt (endAct φ f) := map_precomp φ _ f theorem verschiebungInt_nsmul [Φ.IsComm] (n : ℕ) (f : CartierModule p Φ) : verschiebungInt (n • f) = n • verschiebungInt f := map_nsmul _ _ _ theorem toPowerSeries_verschiebungInt_iterate [Φ.IsComm] (f : CartierModule p Φ) (N : ℕ) (j : Fin d) : ((⇑(verschiebungInt (p := p) (Φ := Φ)))^[N] f).toPowerSeries j = (fun g : MvPowerSeries ℕ R => subst (WittLaw.frobPolyFam p R) g)^[N] (f.toPowerSeries j) := by induction N with | zero => rfl | succ N ih => rw [Function.iterate_succ_apply', Function.iterate_succ_apply'] show subst _ (((⇑(verschiebungInt (p := p) (Φ := Φ)))^[N] f).toPowerSeries j) = _ rw [ih] theorem curve_verschiebungInt [Φ.IsComm] (f : CartierModule p Φ) (j : Fin d) : curve (verschiebungInt f) j = PowerSeries.expand p hp.out.ne_zero (curve f j) := by show subst (curveFam R) (subst (WittLaw.frobPolyFam p R) (f.toPowerSeries j)) = MvPowerSeries.expand p hp.out.ne_zero (subst (curveFam R) (f.toPowerSeries j)) rw [MvPowerSeries.expand, substAlgHom_apply, subst_comp_subst_apply WittLaw.hasSubst_frobPolyFam hasSubst_curveFam, subst_comp_subst_apply hasSubst_curveFam (HasSubst.X_pow hp.out.ne_zero)] congr 1 funext n rw [WittLaw.subst_curveFam_frobPolyFam] cases n with | zero => show (PowerSeries.X : PowerSeries R) ^ p = subst (fun s : Unit => (X s : MvPowerSeries Unit R) ^ p) PowerSeries.X rw [PowerSeries.X, subst_X (HasSubst.X_pow hp.out.ne_zero)] | succ m => show (0 : PowerSeries R) = subst (fun s : Unit => (X s : MvPowerSeries Unit R) ^ p) (0 : PowerSeries R) rw [← coe_substAlgHom (HasSubst.X_pow hp.out.ne_zero), map_zero] theorem tangent_verschiebungInt [Φ.IsComm] (f : CartierModule p Φ) : tangent (verschiebungInt f) = 0 := by funext j rw [← coeff_one_curve, curve_verschiebungInt, PowerSeries.coeff_expand, if_neg] · rfl · intro h exact hp.out.one_lt.ne' (Nat.dvd_one.mp h) namespace Examples theorem frobenius_verschiebungInt_addLinear (v : Fin d → R) : frobenius (verschiebungInt (addLinear p v)) = (p : ℕ) • addLinear p v := frobenius_verschiebungInt _ theorem tangent_verschiebungInt_addLinear (v : Fin d → R) : tangent (verschiebungInt (addLinear p v)) = 0 := tangent_verschiebungInt _ end Examples end CartierModule end MvFormalGroup end
Statements phrased using this module (130)
- Existence of a canonical L-map for formal mathcal O_D-modules
CerednikDrinfeld.FormalODModule.exists_isCanonicalLMap_toGradedCartierModuleData73 below · depth 32 - Homogeneous V-basis for a special formal mathcal O_D-module with free Lie lines
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_of_isSpecial_of_free8 below · depth 32 - Splitting of the Cartier module into graded pieces 0 and 1
CerednikDrinfeld.FormalODModule.isCompl_gradedPiece_zero_one_of_isNilpotent5 below · depth 32 - V-adic completeness and separatedness of the Cartier module
MvFormalGroup.CartierModule.existsUnique_forall_eq_sum_range_verschiebungInt_iterate_add0 below · depth 32 - Isomorphisms of formal mathcal O_D-modules induce graded Cartier isomorphisms
CerednikDrinfeld.FormalODModule.Hom.bijective_map_and_forall_map_eq_of_isIso0 below · depth 33 - Frobenius-fixed scalars act through W(j)∘θ on Cartier modules
CerednikDrinfeld.FormalODModule.endAct_actEnd_eq_map_smul_of_frobenius_eq_of_isNilpotent3 below · depth 33 - Structure constants of a homogeneous V-basis, with a₀₀a₀₁=p
CerednikDrinfeld.FormalODModule.exists_hasStructureConstants_mul_eq_of_isHomogeneousVBasis18 below · depth 33 - Formal mathcal O_D-modules lift to the universal p-torsion-free base
CerednikDrinfeld.FormalODModule.exists_liftRing_isHomogeneousVBasis_hasStructureConstants_liftConstants_and_isIso_of_isHausdorff59 below · depth 33 - Base change of the graded Cartier datum of X
CerednikDrinfeld.FormalODModule.isBaseChangeAlong_toGradedCartierModuleData_baseChange18 below · depth 33 - Homogeneous V-basis splits the Cartier module into graded pieces
CerednikDrinfeld.FormalODModule.isCompl_gradedPiece_zero_one_of_isHomogeneousVBasis21 below · depth 33 - Homogeneous V-basis makes the graded Cartier datum special
CerednikDrinfeld.FormalODModule.isSpecialCartierModule_toGradedCartierModuleData19 below · depth 33 - Tangent vectors of a homogeneous V-basis grade LieX
CerednikDrinfeld.FormalODModule.IsHomogeneousVBasis.tangent_mem_and_existsUnique_smul_of_isNilpotent0 below · depth 34 - Matching homogeneous V-bases give an isomorphism of formal mathcal O_D-modules
CerednikDrinfeld.FormalODModule.exists_hom_isIso_forall_map_eq_of_hasStructureConstants37 below · depth 34 - Prescribed structure constants are realised by a formal mathcal O_D-module
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_and_hasStructureConstants_of_mul_eq31 below · depth 34 - Lifting a formal mathcal O_D-module by lifting its structure constants
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_hasStructureConstants_and_isIso_map_of_forall_apply_eq59 below · depth 34 - Zariski-local homogeneous V-bases for special formal 𝒪_D-modules
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_map_of_isSpecial_of_isNilpotent29 below · depth 34 - Transport of homogeneous V-bases and structure constants along an isomorphism
CerednikDrinfeld.FormalODModule.isHomogeneousVBasis_map_and_hasStructureConstants_map_of_hom_of_isIso0 below · depth 34 - Abstract homogeneous V-basis is a law-level V-basis
CerednikDrinfeld.FormalODModule.isHomogeneousVBasis_of_toGradedCartierModuleData_of_algebra_padicInt20 below · depth 34 - Base change of the graded pieces of Lie
CerednikDrinfeld.FormalODModule.lieZero_lieOne_map_eq_span_image0 below · depth 34 - Order-zero structure constants give the tangent action of varpi
CerednikDrinfeld.FormalODModule.linearPart_varpi_mulVec_tangent_eq_smul_of_hasStructureConstants0 below · depth 34 - Frobenius twist of the labelling: N, pieces, η, canonicity
CerednikDrinfeld.FormalODModule.nMap_id_bijective_and_nPiece_and_eta_and_isCanonicalLMap_comp_frobenius1 below · depth 34 - Classes modulo VM have equal tangent vectors
CerednikDrinfeld.FormalODModule.tangent_eq_of_mkQ_eq0 below · depth 34 - Every special graded Cartier datum comes from a formal 𝒪_D-module
CerednikDrinfeld.GradedCartierModuleData.exists_formalODModule_bijective_of_isSpecialCartierModule_of_torsionFree51 below · depth 34 - First-order obstruction to structure constants at a smooth point
CerednikDrinfeld.SpecialFormalODModule.exists_forall_not_hasStructureConstants_add_smul_eps_of_not_and19 below · depth 34 - Faithfulness of the Cartier module functor over ℤₚ-algebras
MvFormalGroup.CartierModule.eq_of_forall_map_eq_of_algebra_padicInt7 below · depth 34 - Unique finite V-expansion along a tangent basis
MvFormalGroup.CartierModule.existsUnique_eq_sum_verschiebungInt_iterate_homothety_add17 below · depth 34 - V-reducedness of the Cartier module over a ℤₚ-algebra
MvFormalGroup.CartierModule.tangent_eq_zero_iff_exists_verschiebungInt_eq15 below · depth 34 - Surjectivity of the tangent map of a Cartier module
MvFormalGroup.CartierModule.tangent_surjective_of_algebra_padicInt2 below · depth 34 - Equal Pi-structure constants force an isomorphism of Cartier modules
CerednikDrinfeld.FormalODModule.exists_addMonoidHom_bijective_map_eq_of_hasStructureConstants28 below · depth 35 - Digit shape of a homogeneous V-basis over k[ε]
CerednikDrinfeld.FormalODModule.exists_eq_sum_verschiebungInt_iterate_homothety_baseChange_of_baseChangeEq_eq11 below · depth 35 - Local freeness of the Lie eigenlines of a special formal mathcal O_D-module
CerednikDrinfeld.FormalODModule.exists_free_lieZero_map_and_free_lieOne_map_of_isSpecial1 below · depth 35 - Frobenius lands in VM when a_{0,i_0}=0
CerednikDrinfeld.FormalODModule.exists_frobenius_eq_verschiebungInt_of_hasStructureConstants_of_apply_zero_eq_zero0 below · depth 35 - Cartier-module isomorphisms come from formal mathcal O_D-module isomorphisms
CerednikDrinfeld.FormalODModule.exists_hom_isIso_forall_map_eq_of_bijective28 below · depth 35 - Universal formal mathcal O_D-module with homogeneous V-basis
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_and_hasStructureConstants_liftVar30 below · depth 35 - Existence of a homogeneous V-basis for special formal 𝒪_D-modules
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_of_isSpecial_of_free_of_isNilpotent25 below · depth 35 - First-order structure constants of a reshaped V-basis over k[ε]
CerednikDrinfeld.FormalODModule.hasStructureConstants_dualNumber_apply_eq_of_eq_sum_verschiebungInt_iterate_homothety3 below · depth 35 - Canonicity of L-maps under the σ-shift of the grading
CerednikDrinfeld.FormalODModule.isCanonicalLMap_iff_isCanonicalLMap_comp_of_comp_frobenius0 below · depth 35 - Homogeneous V-basis implies the formal mathcal O_D-module is special
CerednikDrinfeld.FormalODModule.isSpecial_of_isHomogeneousVBasis0 below · depth 35 - Exactly one vanishing order-zero structure constant at a smooth point
CerednikDrinfeld.SpecialFormalODModule.exists_apply_zero_eq_zero_and_ne_zero_of_not_and1 below · depth 35 - Zero tangent vector implies being a Verschiebung value
MvFormalGroup.CartierModule.exists_verschiebungInt_eq_of_tangent_eq_zero_of_algebra_padicInt14 below · depth 35 - Cartier module over a ℤₚ-algebra is reduced
MvFormalGroup.CartierModule.verschiebungInt_injective_and_tangent_surjective_and_ker_and_complete_of_algebra_padicInt19 below · depth 35 - Injectivity of Verschiebung over a ℤₚ-algebra
MvFormalGroup.CartierModule.verschiebungInt_injective_of_algebra_padicInt1 below · depth 35 - Universal digits forcing the relation p fᵢ=[p]fᵢ+sum_k V^k(d_{k,i}f)
CerednikDrinfeld.CartierLift.exists_digits_forall_smul_eq_teichmuller_smul_add_sum_verschiebungInt3 below · depth 36 - Graded finite V-adic expansion in a homogeneous V-basis
CerednikDrinfeld.FormalODModule.existsUnique_eq_sum_verschiebung_iterate_homothety_add_of_mem_gradedPiece9 below · depth 36 - Universal structure constants for Frobenius in a homogeneous V-basis
CerednikDrinfeld.FormalODModule.exists_forall_hasStructureConstants_frobenius_eq_sum4 below · depth 36 - Low-weight coefficients vanish for big-Witt homomorphisms
MvFormalGroup.BigWittLaw.coeff_eq_zero_of_coeff_subst_pow_eq_zero0 below · depth 36 - Cartier's first theorem, ω-curve form
MvFormalGroup.BigWittLaw.exists_hom_subst_pow_eq1 below · depth 36 - Frobenius family mathbf Fₙ is additive for the big Witt law
MvFormalGroup.BigWittLaw.subst_addFam_frobFam0 below · depth 36 - Additivity of `projFam` and splitting of Artin–Hasse
MvFormalGroup.BigWittLaw.subst_addFam_projFam_and_subst_artinHasse_projFam2 below · depth 36 - Artin–Hasse coordinates intertwine the big Witt and Witt Frobenii
MvFormalGroup.BigWittLaw.subst_artinHasse_frobFam1 below · depth 36 - Artin–Hasse projector kills non-p-power Frobenii, commutes with mathbf Fₚ
MvFormalGroup.BigWittLaw.subst_artinHasse_projFam_frobFam1 below · depth 36 - Difference of two big Witt homomorphisms agreeing to order n
MvFormalGroup.BigWittLaw.subst_elim_negSeries_hom_and_coeff_eq_zero0 below · depth 36 - Frobenius mathbf Fₙ of the big Witt law on ω-curves
MvFormalGroup.BigWittLaw.subst_pow_subst_frobFam0 below · depth 36 - The ω-curve of f∘π is the standard curve of f
MvFormalGroup.BigWittLaw.subst_pow_subst_projFam0 below · depth 36 - Cartier module elements are determined by their curves
MvFormalGroup.CartierModule.curve_injective_of_algebra_padicInt0 below · depth 36 - Cartier modules: maps determined by a V-basis
MvFormalGroup.CartierModule.existsUnique_addMonoidHom_apply_eq_of_frobenius_expansion25 below · depth 36 - Unique finite V-adic expansion in characteristic p
MvFormalGroup.CartierModule.existsUnique_eq_sum_verschiebungInt_iterate_homothety_add_of_charP2 below · depth 36 - Weight-adic convergence of sums in the Cartier module
MvFormalGroup.CartierModule.exists_forall_coeff_sub_sum_eq_zero0 below · depth 36 - Cartier module maps commuting with F, V, ⟨ a⟩ are induced
MvFormalGroup.CartierModule.exists_hom_forall_map_eq_of_algebra_padicInt22 below · depth 36 - Cartier presentation: a homomorphism matching prescribed curves
MvFormalGroup.CartierModule.exists_hom_forall_map_eq_of_forall_frobenius_eq_sum_verschiebungInt_iterate_smul3 below · depth 36 - Graded Frobenius expansion yields a ℤ_{p²}-action on Φ
MvFormalGroup.CartierModule.exists_zp2Action_of_graded_frobenius_expansion9 below · depth 36 - The varpi-relation passes to varpi f, and varpi g ≡ p f
MvFormalGroup.CartierModule.varpiTuple_rel_and_sum_eq_of_rel0 below · depth 36 - Arbitrary structure constants arise from a Cartier-module V-basis
MvFormalGroup.exists_cartierModule_vBasis_of_frobenius_expansion13 below · depth 36 - Normalising tangents of a V-basis by coordinate change
MvFormalGroup.exists_hom_comp_eq_id_tangent_map_eq_of_isUnit_det0 below · depth 36 - Cartier presentation: relations to every order over arbitrary base
MvFormalGroup.CartierModule.exists_forall_le_order_coeff_sub_and_frobIntPt_iterate_of_forall_le_order_presPi1 below · depth 37 - Homomorphism of formal groups from matching V-adic expansions
MvFormalGroup.CartierModule.exists_hom_forall_map_eq_of_forall_frobenius_eq_sum_verschiebungInt_iterate_homothety_add4 below · depth 37 - Universal Teichmüller-digit normal form in Cartier modules
MvFormalGroup.CartierModule.exists_sum_verschiebungInt_iterate_smul_eq_sum_homothety_teichmuellerDigit_add0 below · depth 37 - Twisting a graded F-expansion by Frobenius-exchanged Witt scalars
MvFormalGroup.CartierModule.frobenius_smul_eq_of_graded_frobenius_expansion_of_frobenius_eq0 below · depth 37 - Base change of a V-basis with structure constants
MvFormalGroup.CartierModule.isUnit_det_tangent_and_frobenius_expansion_baseChange0 below · depth 37 - Universal p-typical law with variables as structure constants
MvFormalGroup.exists_cartierModule_vBasis_mvPolynomial_X12 below · depth 37 - Homogeneous V-basis for special formal mathcal O_D-modules over a field
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_of_isSpecial_field9 below · depth 38 - Tangent line of η_{i_0} over κ[ε] and its period equation
CerednikDrinfeld.FormalODModule.exists_tangent_eq_smul_and_forall_fst_snd_eq_of_mem_etaPiece_of_hasStructureConstants_dualNumber32 below · depth 38 - Homomorphisms from X.F determined on a homogeneous V-basis
CerednikDrinfeld.FormalODModule.hom_eq_of_forall_map_apply_eq_of_isHomogeneousVBasis9 below · depth 38 - Tangent variation on η_{i_0} is no rescaling outside windows
CerednikDrinfeld.FormalODModule.not_exists_forall_period_variation_eq_mul_of_mem_etaPiece_of_hasStructureConstants_dualNumber159 below · depth 38 - First-order versality of a structure-constant line at a smooth point
CerednikDrinfeld.SpecialFormalODModule.exists_isHomogeneousVBasis_hasStructureConstants_add_mul_smul_eps_of_forall_not_hasStructureConstants_of_not_and125 below · depth 38 - Unrealisable first-order variation of three structure constants
CerednikDrinfeld.SpecialFormalODModule.forall_not_hasStructureConstants_add_ite_smul_eps_of_forall_ne_add_smul17 below · depth 38 - Presentation map kills Cartier relation points up to remainder
MvFormalGroup.CartierModule.presPi_verPt_sub_sum_wittSMulPt_frobIntPt_eq_presPi_frobIntPt_iterate0 below · depth 38 - V-basis with variable structure constants from a functional-equation logarithm
MvFormalGroup.exists_cartierModule_vBasis_mvPolynomial_X_of_log7 below · depth 38 - Commutative law with functional-equation logarithm over ℚₚ[V]
MvFormalGroup.exists_isComm_log_mvPolynomial_padic1 below · depth 38 - Functional-equation integrality for the universal p-typical law
MvFormalGroup.exists_map_padicInt_eq_of_log0 below · depth 38 - Commutativity of a formal group law descends along injective base change
MvFormalGroup.isComm_of_isComm_map_of_injective0 below · depth 38 - Digit relations for a Pi=V invariant over dual numbers
CerednikDrinfeld.FormalODModule.exists_digits_tangent_eq_and_fst_snd_eq_of_varpiEnd_eq_verschiebungInt_of_hasStructureConstants_dualNumber25 below · depth 39 - Two η_{i_0}-elements with 𝔽ₚ-independent tangent parts over κ[ε]
CerednikDrinfeld.FormalODModule.exists_mem_etaPiece_tangent_eq_smul_forall_dvd_of_isAlgClosed_dualNumber154 below · depth 39 - Descent of a Cartier element with ghost logarithm
MvFormalGroup.CartierModule.exists_baseChange_eq_of_coeff_subst_eq_ghost_of_functionalEquation1 below · depth 39 - Injectivity of Verschiebung when p is nilpotent
MvFormalGroup.CartierModule.verschiebungInt_injective_of_isNilpotent0 below · depth 39 - Ghost read-out of Verschiebung, Frobenius and Teichmüller substitutions
MvFormalGroup.WittLaw.coeff_subst_verFam_frobPolyFam_teichFam_of_coeff_eq_ghost0 below · depth 39 - Special formal mathcal O_D-module of height 4 over the edge chart
CerednikDrinfeld.FormalODModule.exists_isHomogeneousVBasis_hasStructureConstants_edgeRingConstants_isSpecial_hasHeight_of_isAlgClosed101 below · depth 40 - Two η-elements at a critical index with 𝔽ₚ-independent tangents
CerednikDrinfeld.FormalODModule.exists_nMk_mem_etaPiece_tangent_eq_smul_forall_dvd_of_isAlgClosed66 below · depth 40 - Explicit height-4 edge isogeny between special formal mathcal O_D-modules
CerednikDrinfeld.FormalODModule.exists_hom_map_eq_sub_verschiebungInt_and_isIsogenyOfHeight_of_hasStructureConstants_edgeConstants64 below · depth 41 - Normalised node isogeny onto the edge family's node fibre
CerednikDrinfeld.FormalODModule.exists_isIsogenyOfHeight_map_node_rigidNum_single_eq199 below · depth 41 - Cartier quadruples at geometric points of the edge family
CerednikDrinfeld.FormalODModule.forall_isCartierQuadruple_map_line_eq_of_rigidNum_single_eq_of_edge_isogeny346 below · depth 41 - Height four from the edge structure constants
CerednikDrinfeld.FormalODModule.hasHeight_four_of_hasStructureConstants_edgeRingConstants_of_isAlgClosed92 below · depth 41 - Base change of Cartier modules along a surjection is surjective
MvFormalGroup.CartierModule.baseChange_surjective_of_surjective18 below · depth 41 - Closed Witt form of the edge structure constants
CerednikDrinfeld.FormalODModule.endAct_varpiEnd_eq_teichmuller_sub_smul_add_verschiebungInt_of_hasStructureConstants_edgeConstants4 below · depth 42 - Edge structure constants force nilpotent coordinates modulo [p]
CerednikDrinfeld.FormalODModule.exists_X_pow_mem_span_act_of_hasStructureConstants_edgeConstants48 below · depth 42 - Explicit homomorphism of special formal modules from Witt edge relations
CerednikDrinfeld.FormalODModule.exists_hom_map_eq_sub_verschiebungInt_of_endAct_varpiEnd_eq_teichmuller33 below · depth 42 - Cartier quadruple of the edge family at a node point
CerednikDrinfeld.FormalODModule.exists_isCartierQuadruple_map_line_eq_of_edge_isogeny_of_apply_xi_eq_zero_of_apply_eta_eq_zero331 below · depth 42 - Geometric fibre of the edge family on the η-branch
CerednikDrinfeld.FormalODModule.exists_isCartierQuadruple_map_line_eq_of_edge_isogeny_of_apply_xi_eq_zero_of_apply_eta_ne_zero319 below · depth 42 - Cartier quadruple and Deligne lines at a point with y(ξ)≠ 0
CerednikDrinfeld.FormalODModule.exists_isCartierQuadruple_map_line_eq_of_edge_isogeny_of_apply_xi_ne_zero320 below · depth 42 - Degree p⁴ for [p] on the edge-family formal 𝒪_D-module
CerednikDrinfeld.FormalODModule.finrank_kerAlgebra_map_act_eq_pow_four_of_hasStructureConstants_edgeRingConstants_of_isAlgClosed90 below · depth 42 - Explicit edge homomorphism is an isogeny of height 4
CerednikDrinfeld.FormalODModule.isIsogenyOfHeight_four_of_map_eq_sub_verschiebungInt_edgeRingCharP61 below · depth 42 - Node determinant det A = u p^{2m} for rigidified data
CerednikDrinfeld.SpecialFormal.Rigidified.exists_det_eq_mul_pow_of_rigidNum_eq_sum_smul_map_node140 below · depth 42 - Integral p-adic matrix for the rigidification numerator at a node
CerednikDrinfeld.SpecialFormal.Rigidified.exists_rigidNum_eq_sum_smul_of_isIsogenyOfHeight_map_node123 below · depth 42 - Height and rigidification numerator under composition with a central endomorphism
CerednikDrinfeld.SpecialFormal.Rigidified.isIsogenyOfHeight_comp_and_rigidNum_comp_eq_rigidNum_mulVec_of_centralizer22 below · depth 42 - Node witnesses: mathcal O_D-linearity and graded reductions
CerednikDrinfeld.SpecialFormal.Rigidified.isODHom_and_isGradedSbar_and_isGradedPhiS_map_node6 below · depth 42 - Nilpotent coordinates on X[p] for a pure edge branch
CerednikDrinfeld.FormalODModule.exists_X_pow_mem_span_act_of_hasStructureConstants_edgeConstants_zero47 below · depth 43 - Edge-family Cartier module is free of rank 4 on γ, Vγ
CerednikDrinfeld.FormalODModule.exists_basis_cartierModule_eq_of_hasStructureConstants_edgeConstants25 below · depth 43 - Dual edge homomorphism ρᵈagger: X→ Y on Cartier modules
CerednikDrinfeld.FormalODModule.exists_hom_map_eq_add_verschiebungInt_of_endAct_varpiEnd_eq_teichmuller34 below · depth 43 - Transporting homogeneous V-bases with Pi = V
CerednikDrinfeld.FormalODModule.exists_hom_map_eq_of_endAct_varpiEnd_eq_verschiebungInt33 below · depth 43 - Node case: Cartier quadruple with node Deligne lines
CerednikDrinfeld.FormalODModule.forall_isCartierQuadruple_map_node_line_eq_of_rigidNum_single_eq309 below · depth 43 - Edge structure constants force height four
CerednikDrinfeld.FormalODModule.hasHeight_four_of_hasStructureConstants_edgeConstants_of_perfectRing89 below · depth 43 - Stalk kernels at an η-branch point of the edge family
CerednikDrinfeld.FormalODModule.ker_eq_span_of_lattice_eq_of_isCartierQuadruple_map_edge_of_apply_xi_eq_zero_of_apply_eta_ne_zero120 below · depth 43 - Kernels of u₀ and u₁ at a ξ-point
CerednikDrinfeld.FormalODModule.ker_eq_span_of_lattice_eq_of_isCartierQuadruple_map_edge_of_apply_xi_ne_zero121 below · depth 43 - η-branch: both Drinfeld lattices equal p⁻¹ diag(p,1) ℤₚ²
CerednikDrinfeld.FormalODModule.lattice_eq_of_isCartierQuadruple_map_edge_of_apply_xi_eq_zero_of_apply_eta_ne_zero89 below · depth 43 - Lattices of a Cartier quadruple at a ξ-point
CerednikDrinfeld.FormalODModule.lattice_eq_of_isCartierQuadruple_map_edge_of_apply_xi_ne_zero90 below · depth 43 - Admissibility of a composed rigidification over the edge-chart ring
CerednikDrinfeld.SpecialFormal.Rigidified.isAdmissible_mk_edgeRingCharP_comp_of_isIsogenyOfHeight23 below · depth 43 - Degree-one η-sections with tangent ratio -y(η)
CerednikDrinfeld.FormalODModule.exists_isEtaSection_one_tangent_eq_neg_mul_of_edge_isogeny_of_apply_xi_eq_zero_of_apply_eta_ne_zero114 below · depth 44 - Degree-one eta-sections on the ξ-branch of the edge family
CerednikDrinfeld.FormalODModule.exists_isEtaSection_one_tangent_eq_neg_mul_of_edge_isogeny_of_apply_xi_ne_zero115 below · depth 44 - Degree-zero η-sections on the η-branch: tangent ratio -y(η)
CerednikDrinfeld.FormalODModule.exists_isEtaSection_zero_tangent_eq_neg_mul_of_edge_isogeny_of_apply_xi_eq_zero_of_apply_eta_ne_zero115 below · depth 44 - Degree-zero η-sections of the edge family where y(ξ)≠ 0
CerednikDrinfeld.FormalODModule.exists_isEtaSection_zero_tangent_eq_neg_mul_of_edge_isogeny_of_apply_xi_ne_zero115 below · depth 44 - Height 4 from a rank-4 Cartier module and nilpotent [p]-coordinates
CerednikDrinfeld.FormalODModule.hasHeight_four_of_basis_cartierModule_of_X_pow_mem_span38 below · depth 44 - Node stalks of a Cartier quadruple: lattices and kernel lines
CerednikDrinfeld.FormalODModule.lattice_eq_and_ker_eq_span_of_isCartierQuadruple_map_node_of_rigidNum_single_eq97 below · depth 44 - Rigidification numerator of the edge family at an arbitrary base point
CerednikDrinfeld.FormalODModule.smul_rigidNum_map_single_eq_smul_baseChange_of_rigidNum_single_eq_of_edge_isogeny0 below · depth 44 - Cartier curves with Fγ=Vγ descend to a one-dimensional law
MvFormalGroup.CartierModule.exists_hom_map_eq_of_frobenius_eq_verschiebungInt41 below · depth 44 - Rank of the Cartier module equals the height
CerednikDrinfeld.FormalODModule.eq_four_of_basis_cartierModule_of_finrank_eq_pow26 below · depth 45 - Node kernels of a Cartier quadruple are coordinate lines
CerednikDrinfeld.FormalODModule.ker_eq_span_of_lattice_eq_of_isCartierQuadruple_map_node_of_rigidNum_single_eq94 below · depth 45 - Node lattices of the Cartier quadruple of the normalised node triple
CerednikDrinfeld.FormalODModule.lattice_eq_of_isCartierQuadruple_map_node_of_rigidNum_single_eq91 below · depth 45 - Degree-one η-sections at the node of the standard edge
CerednikDrinfeld.FormalODModule.exists_isEtaSection_one_tangent_eq_neg_mul_map_node_of_rigidNum_single_eq90 below · depth 46 - Degree-zero η-sections at the node of the standard edge
CerednikDrinfeld.FormalODModule.exists_isEtaSection_zero_tangent_eq_neg_mul_map_node_of_rigidNum_single_eq90 below · depth 46 - Node normalisation of the rigidification numerator propagates under base change
CerednikDrinfeld.FormalODModule.smul_rigidNum_map_node_single_eq_smul_baseChange_of_rigidNum_single_eq0 below · depth 46