Definitions/Def_MvFormalGroup_CartierModuleBaseChange.lean
Base change of Cartier modules along ring homomorphisms
Throughout, p is a prime, R, S, T are commutative rings, and \Phi, \Phi' (over R), \Psi, \Psi' (over S) are multivariate formal group laws of dimensions d, d'. The module first records that coefficientwise application of a ring homomorphism respects the symmetry condition IsComm (whose content is that each component of the law is invariant under interchanging the two blocks of variables): isComm_map and the corresponding instance give (F.map f).IsComm from F.IsComm, and map_map_ringHom, map_ringHom_id' give (\Phi.\mathrm{map}\,f).\mathrm{map}\,g=\Phi.\mathrm{map}(g\circ f) and \Phi.\mathrm{map}\,\mathrm{id}=\Phi.
A group of lemmas in the WittLaw namespace states that the standard substitution families have integral coefficients, so that MvPowerSeries.map f carries addFam, verFam, frobFam, curveFam to themselves, teichFam p a to teichFam p (f a) and the Witt-multiplication family mulFam p w to mulFam p (WittVector.map f w) (with the corresponding statement map_mulPoly for the polynomials).
The central definition is base change of Cartier modules. An element of CartierModule p Φ is a family of d power series in countably many variables with vanishing constant coefficients satisfying the substitution identity with respect to addFam. Given f\colon R\to S and an identification h\colon \Phi.\mathrm{map}\,f=\Psi, baseChangeEqFun f h m is the element of CartierModule p Ψ whose components are the images of those of m under MvPowerSeries.map f; for commutative laws, baseChangeEq f h packages this as an additive map CartierModule p Φ →+ CartierModule p Ψ, and baseChange f is the case \Psi=\Phi.\mathrm{map}\,f with the identification given by reflexivity.
The remaining results describe this map: the components are literally the mapped series; two identifications yield the same components; it is the identity along RingHom.id, composes along g\circ f, and is injective when f is; it commutes with precomposition by families corresponding under f, hence with frobenius, with verschiebung when both R and S have characteristic p, with their iterates, with homothety a (becoming homothety (f a)), with the Witt-vector action (w\bullet m becoming WittVector.map f w acting) and with nsmul; it commutes with post-composition by homomorphisms or endomorphisms of laws whose coefficients correspond under f; and \mathrm{tangent}(m_S)=f\circ\mathrm{tangent}(m), \mathrm{curve}(m_S)_j=\mathrm{PowerSeries.map}\,f(\mathrm{curve}(m)_j). A final example computes base change on the linear curves addLinear p v of the additive law, giving addLinear p (f ∘ v).
Relation to Mathlib
Mathlib supplies the ambient machinery used here (multivariate power series with substitution, WittVector and WittVector.map, the Witt multiplication polynomials), but multivariate formal group laws, their homomorphisms and the Cartier modules CartierModule p Φ with their Frobenius, Verschiebung, homothety and Witt-vector operators are the project's own notions; base change of these is defined here.
Where it is used
These definitions make the Cartier module of a commutative formal group law functorial in the base ring, so that the same presentation \mathrm{Hom}(\widehat W,\Phi) can be used simultaneously over a ring and over its quotients, subrings and extensions, as required when formal groups are compared over varying bases.
References
- P. Cartier, Modules associés à un groupe formel commutatif. Courbes typiques, C. R. Acad. Sci. Paris 265 (1967), 129–132
- M. Lazard, Commutative Formal Groups, Lecture Notes in Mathematics 443, Springer, 1975
- M. Hazewinkel, Formal Groups and Applications, Academic Press, 1978
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 361 lines
- 39 declarations
- used in the statements of 93 theorems and imported by 107 proofs
- imports 4 definition modules
Source file: Definitions/Def_MvFormalGroup_CartierModuleBaseChange.lean
Imports
Declarations
- theorem
MvFormalGroup.isComm_map - instance
MvFormalGroup.instIsCommMapRingHom - theorem
MvFormalGroup.toPowerSeries_map_ringHom - theorem
MvFormalGroup.map_map_ringHom - theorem
MvFormalGroup.map_ringHom_id' - theorem
MvFormalGroup.WittLaw.constantCoeff_map_family - theorem
MvFormalGroup.WittLaw.coe_mvPolynomial_map - theorem
MvFormalGroup.WittLaw.map_addFam - theorem
MvFormalGroup.WittLaw.map_verFam - theorem
MvFormalGroup.WittLaw.map_frobFam - theorem
MvFormalGroup.WittLaw.map_teichFam - theorem
MvFormalGroup.WittLaw.map_mulPoly - theorem
MvFormalGroup.WittLaw.map_mulFam - theorem
MvFormalGroup.CartierModule.map_curveFam - theorem
MvFormalGroup.CartierModule.map_blkX - def
MvFormalGroup.CartierModule.baseChangeEqFun - theorem
MvFormalGroup.CartierModule.toPowerSeries_baseChangeEqFun - theorem
MvFormalGroup.CartierModule.map_sumElim - def
MvFormalGroup.CartierModule.baseChangeEq - theorem
MvFormalGroup.CartierModule.toPowerSeries_baseChangeEq - theorem
MvFormalGroup.CartierModule.baseChangeEq_apply - abbrev
MvFormalGroup.CartierModule.baseChange - theorem
MvFormalGroup.CartierModule.baseChangeEq_id - theorem
MvFormalGroup.CartierModule.baseChangeEq_baseChangeEq - theorem
MvFormalGroup.CartierModule.toPowerSeries_baseChangeEq_eq - theorem
MvFormalGroup.CartierModule.baseChangeEq_injective - theorem
MvFormalGroup.CartierModule.baseChangeEq_precomp - theorem
MvFormalGroup.CartierModule.baseChangeEq_frobenius - theorem
MvFormalGroup.CartierModule.baseChangeEq_verschiebung - theorem
MvFormalGroup.CartierModule.baseChangeEq_verschiebung_iterate - theorem
MvFormalGroup.CartierModule.baseChangeEq_frobenius_iterate - theorem
MvFormalGroup.CartierModule.baseChangeEq_homothety - theorem
MvFormalGroup.CartierModule.baseChangeEq_smul_witt - theorem
MvFormalGroup.CartierModule.baseChangeEq_nsmul - theorem
MvFormalGroup.CartierModule.baseChangeEq_map - theorem
MvFormalGroup.CartierModule.baseChangeEq_endAct - theorem
MvFormalGroup.CartierModule.tangent_baseChangeEq - theorem
MvFormalGroup.CartierModule.curve_baseChangeEq - theorem
MvFormalGroup.CartierModule.Examples.baseChange_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 v w open MvPowerSeries namespace MvFormalGroup variable {p : ℕ} [hp : Fact p.Prime] {d d' : ℕ} variable {R : Type u} [CommRing R] {S : Type v} [CommRing S] {T : Type w} [CommRing T] omit hp in theorem isComm_map (F : MvFormalGroup d R) [F.IsComm] (f : R →+* S) : (F.map f).IsComm := by constructor intro i have key := congrArg (MvPowerSeries.map f) (MvFormalGroup.IsComm.comm (F := F) i) have hS : HasSubst (Sum.elim (fun j => (X (Sum.inr j) : MvPowerSeries (Fin d ⊕ Fin d) R)) fun j => X (Sum.inl j)) := by apply hasSubst_of_constantCoeff_zero rintro (j | j) <;> exact constantCoeff_X _ rw [map_subst hS] at key have hfam : (fun s => MvPowerSeries.map f (Sum.elim (fun j => (X (Sum.inr j) : MvPowerSeries (Fin d ⊕ Fin d) R)) (fun j => X (Sum.inl j)) s)) = Sum.elim (fun j => (X (Sum.inr j) : MvPowerSeries (Fin d ⊕ Fin d) S)) fun j => X (Sum.inl j) := by funext s rcases s with j | j <;> simp [map_X] rw [hfam] at key exact key instance instIsCommMapRingHom (F : MvFormalGroup d R) [F.IsComm] (f : R →+* S) : (F.map f).IsComm := isComm_map F f omit hp in @[simp] theorem toPowerSeries_map_ringHom (F : MvFormalGroup d R) (f : R →+* S) (i : Fin d) : (F.map f).toPowerSeries i = MvPowerSeries.map f (F.toPowerSeries i) := rfl omit hp in theorem map_map_ringHom (F : MvFormalGroup d R) (f : R →+* S) (g : S →+* T) : (F.map f).map g = F.map (g.comp f) := by refine MvFormalGroup.ext (funext fun i => ?_) show MvPowerSeries.map g (MvPowerSeries.map f (F.toPowerSeries i)) = MvPowerSeries.map (g.comp f) _ rw [MvPowerSeries.map_comp] rfl omit hp in theorem map_ringHom_id' (F : MvFormalGroup d R) : F.map (RingHom.id R) = F := by refine MvFormalGroup.ext (funext fun i => ?_) show MvPowerSeries.map (RingHom.id R) (F.toPowerSeries i) = _ rw [MvPowerSeries.map_id] rfl namespace WittLaw omit hp in theorem constantCoeff_map_family {σ τ : Type*} {a : σ → MvPowerSeries τ R} (ha : ∀ s, (a s).constantCoeff = 0) (f : R →+* S) (s : σ) : (MvPowerSeries.map f (a s)).constantCoeff = 0 := by rw [constantCoeff_map, ha s, map_zero] omit hp in theorem coe_mvPolynomial_map {σ : Type*} (f : R →+* S) (P : MvPolynomial σ R) : ((MvPolynomial.map f P : MvPolynomial σ S) : MvPowerSeries σ S) = MvPowerSeries.map f (P : MvPowerSeries σ R) := by ext n rw [MvPolynomial.coeff_coe, MvPolynomial.coeff_map, coeff_map, MvPolynomial.coeff_coe] theorem map_addFam (f : R →+* S) (n : ℕ) : MvPowerSeries.map f (addFam p R n) = addFam p S n := by rw [addFam, addFam, ← coe_mvPolynomial_map, MvPolynomial.map_map] congr 2 ext x <;> simp omit hp in theorem map_verFam (f : R →+* S) (n : ℕ) : MvPowerSeries.map f (verFam R n) = verFam S n := by cases n with | zero => exact map_zero _ | succ n => exact map_X f n omit hp in theorem map_frobFam (f : R →+* S) (n : ℕ) : MvPowerSeries.map f (frobFam p R n) = frobFam p S n := by show MvPowerSeries.map f (X n ^ p) = X n ^ p rw [map_pow, map_X] omit hp in theorem map_teichFam (f : R →+* S) (a : R) (n : ℕ) : MvPowerSeries.map f (teichFam p a n) = teichFam p (f a) n := by rw [teichFam_apply, teichFam_apply, smul_eq_C_mul, smul_eq_C_mul, map_mul, map_C, map_X, map_pow] theorem map_mulPoly (f : R →+* S) (w : WittVector p R) (n : ℕ) : MvPolynomial.map f (mulPoly p w n) = mulPoly p (WittVector.map f w) n := by rw [mulPoly_eq_peval, mulPoly_eq_peval, WittVector.map_peval (MvPolynomial.map f) (WittVector.wittMul p n)] congr 1 funext i m fin_cases i · show MvPolynomial.map f (MvPolynomial.C (w.coeff m)) = MvPolynomial.C ((WittVector.map f w).coeff m) rw [MvPolynomial.map_C, WittVector.map_coeff] · show MvPolynomial.map f (MvPolynomial.X m) = MvPolynomial.X m rw [MvPolynomial.map_X] theorem map_mulFam (f : R →+* S) (w : WittVector p R) (n : ℕ) : MvPowerSeries.map f (mulFam p w n) = mulFam p (WittVector.map f w) n := by rw [mulFam_apply, mulFam_apply, ← coe_mvPolynomial_map, map_mulPoly] end WittLaw namespace CartierModule open WittLaw variable {Φ : MvFormalGroup d R} {Φ' : MvFormalGroup d' R} variable {Ψ : MvFormalGroup d S} {Ψ' : MvFormalGroup d' S} omit hp in theorem map_curveFam (f : R →+* S) (n : ℕ) : MvPowerSeries.map f (curveFam R n) = curveFam S n := by cases n with | zero => exact map_X f () | succ n => exact map_zero _ omit hp in theorem map_blkX (f : R →+* S) (i : Fin 2) : (fun m => MvPowerSeries.map f ((fun m => (X (i, m) : MvPowerSeries (Fin 2 × ℕ) R)) m)) = fun m => (X (i, m) : MvPowerSeries (Fin 2 × ℕ) S) := by funext m exact map_X f (i, m) def baseChangeEqFun (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) : CartierModule p Ψ where toPowerSeries := fun j => MvPowerSeries.map f (m.toPowerSeries j) constantCoeff_eq_zero := fun j => constantCoeff_map_family m.constantCoeff_eq_zero f j subst_eq := by intro j subst h have hm := m.constantCoeff_eq_zero have hm' : ∀ l, (MvPowerSeries.map f (m.toPowerSeries l)).constantCoeff = 0 := constantCoeff_map_family hm f have key := congrArg (MvPowerSeries.map f) (m.subst_addFam j) have hE : HasSubst (Sum.elim (inBlk 0 m.toPowerSeries) (inBlk 1 m.toPowerSeries)) := by apply hasSubst_of_constantCoeff_zero rintro (l | l) · exact constantCoeff_inBlk 0 hm l · exact constantCoeff_inBlk 1 hm l rw [map_subst (hasSubst_addFam p R), map_subst hE] at key have hA : (fun n => MvPowerSeries.map f (addFam p R n)) = addFam p S := funext (map_addFam f) rw [hA] at key have hblk : ∀ (i : Fin 2) (l : Fin d), MvPowerSeries.map f (inBlk i m.toPowerSeries l) = inBlk i (fun l => MvPowerSeries.map f (m.toPowerSeries l)) l := by intro i l rw [inBlk_apply, inBlk_apply, map_subst (hasSubst_blk i)] congr 1 funext n exact map_X f (i, n) have hfam : (fun s => MvPowerSeries.map f (Sum.elim (inBlk 0 m.toPowerSeries) (inBlk 1 m.toPowerSeries) s)) = Sum.elim (inBlk 0 fun l => MvPowerSeries.map f (m.toPowerSeries l)) (inBlk 1 fun l => MvPowerSeries.map f (m.toPowerSeries l)) := by funext s rcases s with l | l · exact hblk 0 l · exact hblk 1 l rw [hfam] at key exact key @[simp] theorem toPowerSeries_baseChangeEqFun (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) (j : Fin d) : (baseChangeEqFun f h m).toPowerSeries j = MvPowerSeries.map f (m.toPowerSeries j) := rfl theorem map_sumElim (f : R →+* S) {σ : Type*} (a b : Fin d → MvPowerSeries σ R) : (fun s => MvPowerSeries.map f (Sum.elim a b s)) = Sum.elim (fun l => MvPowerSeries.map f (a l)) fun l => MvPowerSeries.map f (b l) := by funext s rcases s with l | l <;> rfl def baseChangeEq [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) : CartierModule p Φ →+ CartierModule p Ψ where toFun := baseChangeEqFun f h map_zero' := CartierModule.ext (funext fun j => by show MvPowerSeries.map f 0 = 0 exact map_zero _) map_add' m m' := CartierModule.ext (funext fun j => by show MvPowerSeries.map f (subst (Sum.elim m.toPowerSeries m'.toPowerSeries) (Φ.toPowerSeries j)) = subst (Sum.elim (fun l => MvPowerSeries.map f (m.toPowerSeries l)) fun l => MvPowerSeries.map f (m'.toPowerSeries l)) (Ψ.toPowerSeries j) have hS : HasSubst (Sum.elim m.toPowerSeries m'.toPowerSeries) := by apply hasSubst_of_constantCoeff_zero rintro (l | l) · exact m.constantCoeff_eq_zero l · exact m'.constantCoeff_eq_zero l rw [map_subst hS, map_sumElim, ← h] rfl) @[simp] theorem toPowerSeries_baseChangeEq [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) (j : Fin d) : (baseChangeEq f h m).toPowerSeries j = MvPowerSeries.map f (m.toPowerSeries j) := rfl theorem baseChangeEq_apply [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) : baseChangeEq f h m = baseChangeEqFun f h m := rfl abbrev baseChange [Φ.IsComm] (f : R →+* S) : CartierModule p Φ →+ CartierModule p (Φ.map f) := baseChangeEq f rfl theorem baseChangeEq_id [Φ.IsComm] (h : Φ.map (RingHom.id R) = Φ) (m : CartierModule p Φ) : baseChangeEq (RingHom.id R) h m = m := CartierModule.ext (funext fun j => by show MvPowerSeries.map (RingHom.id R) (m.toPowerSeries j) = _ rw [MvPowerSeries.map_id] rfl) theorem baseChangeEq_baseChangeEq [Φ.IsComm] [Ψ.IsComm] {Χ : MvFormalGroup d T} [Χ.IsComm] (f : R →+* S) (g : S →+* T) (h : Φ.map f = Ψ) (h' : Ψ.map g = Χ) (h'' : Φ.map (g.comp f) = Χ) (m : CartierModule p Φ) : baseChangeEq g h' (baseChangeEq f h m) = baseChangeEq (g.comp f) h'' m := CartierModule.ext (funext fun j => by show MvPowerSeries.map g (MvPowerSeries.map f (m.toPowerSeries j)) = MvPowerSeries.map (g.comp f) (m.toPowerSeries j) rw [MvPowerSeries.map_comp] rfl) theorem toPowerSeries_baseChangeEq_eq [Φ.IsComm] [Ψ.IsComm] {Ψ₁ : MvFormalGroup d S} [Ψ₁.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (h₁ : Φ.map f = Ψ₁) (m : CartierModule p Φ) : (baseChangeEq f h m).toPowerSeries = (baseChangeEq f h₁ m).toPowerSeries := rfl theorem baseChangeEq_injective [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (hf : Function.Injective f) : Function.Injective (baseChangeEq (p := p) f h) := by intro m m' hmm refine CartierModule.ext (funext fun j => ?_) have hj := congrArg (fun x : CartierModule p Ψ => x.toPowerSeries j) hmm simp only [toPowerSeries_baseChangeEq] at hj ext e apply hf rw [← coeff_map, ← coeff_map, hj] theorem baseChangeEq_precomp [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) {u : ℕ → MvPowerSeries ℕ R} {u' : ℕ → MvPowerSeries ℕ S} (hu : IsEndo p u) (hu' : IsEndo p u') (huu' : ∀ n, MvPowerSeries.map f (u n) = u' n) (m : CartierModule p Φ) : baseChangeEq f h (precomp hu m) = precomp hu' (baseChangeEq f h m) := CartierModule.ext (funext fun j => by show MvPowerSeries.map f (subst u (m.toPowerSeries j)) = subst u' (MvPowerSeries.map f (m.toPowerSeries j)) rw [map_subst hu.hasSubst] congr 1 exact funext huu') theorem baseChangeEq_frobenius [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) : baseChangeEq f h (frobenius m) = frobenius (baseChangeEq f h m) := baseChangeEq_precomp f h isEndo_verFam isEndo_verFam (map_verFam f) m theorem baseChangeEq_verschiebung [Φ.IsComm] [Ψ.IsComm] [CharP R p] [CharP S p] (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) : baseChangeEq f h (verschiebung m) = verschiebung (baseChangeEq f h m) := baseChangeEq_precomp f h isEndo_frobFam isEndo_frobFam (map_frobFam f) m theorem baseChangeEq_verschiebung_iterate [Φ.IsComm] [Ψ.IsComm] [CharP R p] [CharP S p] (f : R →+* S) (h : Φ.map f = Ψ) (n : ℕ) (m : CartierModule p Φ) : baseChangeEq f h ((⇑(verschiebung (p := p) (Φ := Φ)))^[n] m) = (⇑(verschiebung (p := p) (Φ := Ψ)))^[n] (baseChangeEq f h m) := by induction n generalizing m with | zero => rfl | succ n ih => rw [Function.iterate_succ_apply, Function.iterate_succ_apply, ← baseChangeEq_verschiebung, ih] theorem baseChangeEq_frobenius_iterate [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (n : ℕ) (m : CartierModule p Φ) : baseChangeEq f h ((⇑(frobenius (p := p) (Φ := Φ)))^[n] m) = (⇑(frobenius (p := p) (Φ := Ψ)))^[n] (baseChangeEq f h m) := by induction n generalizing m with | zero => rfl | succ n ih => rw [Function.iterate_succ_apply, Function.iterate_succ_apply, ← baseChangeEq_frobenius, ih] theorem baseChangeEq_homothety [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (a : R) (m : CartierModule p Φ) : baseChangeEq f h (homothety a m) = homothety (f a) (baseChangeEq f h m) := baseChangeEq_precomp f h (isEndo_teichFam a) (isEndo_teichFam (f a)) (map_teichFam f a) m theorem baseChangeEq_smul_witt [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (w : WittVector p R) (m : CartierModule p Φ) : baseChangeEq f h (w • m) = (WittVector.map f w) • (baseChangeEq f h m) := by rw [smul_eq_precomp, smul_eq_precomp] exact baseChangeEq_precomp f h (isEndo_mulFam w) (isEndo_mulFam _) (map_mulFam f w) m theorem baseChangeEq_nsmul [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (n : ℕ) (m : CartierModule p Φ) : baseChangeEq f h (n • m) = n • baseChangeEq f h m := map_nsmul _ _ _ theorem baseChangeEq_map [Φ.IsComm] [Ψ.IsComm] [Φ'.IsComm] [Ψ'.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (h' : Φ'.map f = Ψ') {φ : Φ.Hom Φ'} {ψ : Ψ.Hom Ψ'} (hφψ : ∀ i, ψ.toPowerSeries i = MvPowerSeries.map f (φ.toPowerSeries i)) (m : CartierModule p Φ) : baseChangeEq f h' (map φ m) = map ψ (baseChangeEq f h m) := CartierModule.ext (funext fun i => by show MvPowerSeries.map f (subst m.toPowerSeries (φ.toPowerSeries i)) = subst (fun l => MvPowerSeries.map f (m.toPowerSeries l)) (ψ.toPowerSeries i) rw [map_subst m.hasSubst_toPowerSeries, hφψ i]) theorem baseChangeEq_endAct [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) {φ : MvFormalGroup.End Φ} {ψ : MvFormalGroup.End Ψ} (hφψ : ∀ i, ψ.toPowerSeries i = MvPowerSeries.map f (φ.toPowerSeries i)) (m : CartierModule p Φ) : baseChangeEq f h (endAct φ m) = endAct ψ (baseChangeEq f h m) := baseChangeEq_map f h h hφψ m theorem tangent_baseChangeEq [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) : tangent (baseChangeEq f h m) = fun j => f (tangent m j) := by funext j show coeff (Finsupp.single 0 1) (MvPowerSeries.map f (m.toPowerSeries j)) = f (coeff (Finsupp.single 0 1) (m.toPowerSeries j)) rw [coeff_map] theorem curve_baseChangeEq [Φ.IsComm] [Ψ.IsComm] (f : R →+* S) (h : Φ.map f = Ψ) (m : CartierModule p Φ) (j : Fin d) : curve (baseChangeEq f h m) j = PowerSeries.map f (curve m j) := by rw [curve_apply, curve_apply] show subst (curveFam S) (MvPowerSeries.map f (m.toPowerSeries j)) = MvPowerSeries.map f (subst (curveFam R) (m.toPowerSeries j)) rw [map_subst hasSubst_curveFam] congr 1 funext n exact (map_curveFam f n).symm namespace Examples theorem baseChange_addLinear (f : R →+* S) (v : Fin d → R) (h : (addMv d R).map f = addMv d S) : baseChangeEq f h (addLinear p v) = addLinear p (fun j => f (v j)) := by refine CartierModule.ext (funext fun j => ?_) show MvPowerSeries.map f (v j • (X 0 : MvPowerSeries ℕ R)) = f (v j) • (X 0 : MvPowerSeries ℕ S) rw [smul_eq_C_mul, smul_eq_C_mul, map_mul, map_C, map_X] end Examples end CartierModule end MvFormalGroup end
Statements phrased using this module (93)
- 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 - 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 - Frobenius-fixed W(k)-basis at a critical index
CerednikDrinfeld.SpecialFormalODModule.exists_fin_two_mem_invariants_forall_existsUnique_eq_sum_smul_of_isCritical34 below · depth 33 - Each index critical or Pi-bijective over a field
CerednikDrinfeld.SpecialFormalODModule.isCritical_or_isPiBijective_of_field9 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 - Critical index, mathbb Zₚ-basis and order embedding of End_{mathcal O_D}Φ
CerednikDrinfeld.SpecialFormalODModule.exists_isCritical_and_exists_basis_injective_endMatrixQ_and_exists_pow_smul_of_isAlgClosed61 below · depth 34 - Invariant frame yields ℤₚ-basis and injective endomorphism matrix
CerednikDrinfeld.FormalODModule.CritChart.exists_basis_coe_eq_and_injective_endMatrix_of_forall_existsUnique_of_isCompl9 below · depth 35 - 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 - 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 - 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 - Base change of a V-basis with structure constants
MvFormalGroup.CartierModule.isUnit_det_tangent_and_frobenius_expansion_baseChange0 below · depth 37 - Critical index criterion on the Lie algebra for special formal mathcal O_D-modules
CerednikDrinfeld.FormalODModule.CritChart.isCritical_iff_le_ker_lieVarpi_of_isSpecial11 below · depth 38 - Critical index and its invariants under algebraically closed base change
CerednikDrinfeld.FormalODModule.CritChart.isCritical_map_and_surjOn_baseChange_invariants_of_isAlgClosed44 below · depth 38 - 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 - 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 - Rigidity of η along a square-zero thickening, graded form
CerednikDrinfeld.FormalODModule.nMap_bijOn_etaPiece_of_eq_baseChangeEq_of_surjective_of_mul_eq_zero82 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 - 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 - Base change of Cartier modules along a surjection is surjective
MvFormalGroup.CartierModule.baseChange_surjective_of_surjective18 below · depth 41 - Cartier modules are exact along a Milnor square of base rings
MvFormalGroup.CartierModule.exists_baseChangeEq_eq_and_of_baseChangeEq_eq_of_milnor0 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 - 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 - 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 - 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 - 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 - 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