Definitions/Def_MvFormalGroup_BasicV2.lean
Multidimensional formal group laws, homomorphisms, base change, height
For a natural number g and a commutative ring R, MvFormalGroup g R is the structure of g-dimensional formal group laws: a family F_i, i \in \mathrm{Fin}\,g, of power series in the variable set \mathrm{Fin}\,g \oplus \mathrm{Fin}\,g (left block the first argument, right block the second), together with three proofs carried as fields: each F_i has zero constant coefficient; the coefficient of the degree-one monomial in the left-block variable j, and likewise in the right-block variable j, is \delta_{ij} (so F(X,Y) \equiv X+Y modulo degree 2); and associativity, stated as an equality in the three-block ring on \mathrm{Fin}\,g \oplus (\mathrm{Fin}\,g \oplus \mathrm{Fin}\,g) between the substitution of (F_j(X,Y))_j into the left block of F_i with Z in the right block, and the substitution of X into the left block with (F_j(Y,Z))_j in the right block. The class IsComm adds the single requirement that interchanging the two blocks of variables fixes each F_i.
Hom F G, for F of dimension g and G of dimension h, is the structure of an h-tuple of power series in \mathrm{Fin}\,g variables with zero constant coefficients, subject to \varphi_i(F(X,Y)) = G_i(\varphi(X),\varphi(Y)), again written with substitutions; Hom.id is the tuple of coordinates, Hom.comp composes by substituting the inner family into the outer series, and End F is the type synonym Hom F F. map f F is base change along a ring homomorphism f : R \to S, applying f to all coefficients. nthSeries is the [n]-series, defined by [0] = 0 and [n+1](X) = F([n](X), X) componentwise, with the two defining equations recorded. linearPart of a tuple \varphi of h series in g variables is the h \times g matrix of coefficients of the degree-one monomials. For a field K of characteristic p, FiniteHeight p F is the predicate that the quotient of K[[X_1,\dots,X_g]] by the ideal generated by the g components of [p](X) is finite-dimensional over K. Finally addMv g R is the additive law F_i = X_i + Y_i, with its commutativity instance; auxiliary lemmas record that families with vanishing constant coefficients are substitutable and that substitution is additive on X_s + X_t.
Relation to Mathlib
The multidimensional structure, its homomorphisms, the [n]-series, the linear part and the finite-height predicate are the project's own; they are phrased entirely in terms of Mathlib's substitution calculus for multivariate power series (subst, HasSubst, hasSubst_of_constantCoeff_zero, MvPowerSeries.map) and Mathlib's FiniteDimensional.
Where it is used
This module supplies the vocabulary of formal group laws used in the local analysis at p, where formal groups attached to elliptic curves and p-divisible towers are studied over complete local base rings; it is imported throughout that part of the development.
References
- M. Hazewinkel, Formal Groups and Applications, Pure and Applied Mathematics 78, Academic Press, 1978
- A. Fröhlich, Formal Groups, Lecture Notes in Mathematics 74, Springer, 1968
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 427 lines
- 30 declarations
- used in the statements of 91 theorems and imported by 90 proofs
- imports 0 definition modules
Source file: Definitions/Def_MvFormalGroup_BasicV2.lean
Imports
- only Mathlib
Declarations
- structure
MvFormalGroup - field
MvFormalGroup.toPowerSeries - field
MvFormalGroup.constantCoeff_eq_zero - field
MvFormalGroup.coeff_single_inl - field
MvFormalGroup.coeff_single_inr - field
MvFormalGroup.assoc - field
MvFormalGroup.subst - field
MvFormalGroup.subst - class
MvFormalGroup.IsComm - field
MvFormalGroup.IsComm.comm - field
MvFormalGroup.IsComm.subst - theorem
MvFormalGroup.hasSubst_toPowerSeries - theorem
MvFormalGroup.subst_X_add_X - structure
MvFormalGroup.Hom - field
MvFormalGroup.Hom.toPowerSeries - field
MvFormalGroup.Hom.constantCoeff_eq_zero - field
MvFormalGroup.Hom.subst_eq - field
MvFormalGroup.Hom.subst - theorem
MvFormalGroup.Hom.hasSubst_toPowerSeries - def
MvFormalGroup.Hom.id - def
MvFormalGroup.Hom.comp - def
MvFormalGroup.End - def
MvFormalGroup.map - def
MvFormalGroup.nthSeries - theorem
MvFormalGroup.nthSeries_zero - theorem
MvFormalGroup.nthSeries_succ - def
MvFormalGroup.linearPart - def
MvFormalGroup.FiniteHeight - def
MvFormalGroup.addMv
Source
import Mathlib.RingTheory.MvPowerSeries.Substitution ↗ import Mathlib.LinearAlgebra.Matrix.Defs ↗ import Mathlib.LinearAlgebra.FiniteDimensional.Defs ↗ import Mathlib.RingTheory.Ideal.Span ↗ import Mathlib.RingTheory.Ideal.Quotient.Operations ↗ import Mathlib.Algebra.CharP.Defs ↗ set_option autoImplicit false noncomputable section open MvPowerSeries @[ext] structure MvFormalGroup (g : ℕ) (R : Type*) [CommRing R] where toPowerSeries : Fin g → MvPowerSeries (Fin g ⊕ Fin g) R constantCoeff_eq_zero : ∀ i, (toPowerSeries i).constantCoeff = 0 coeff_single_inl : ∀ i j, (toPowerSeries i).coeff (Finsupp.single (Sum.inl j) 1) = if i = j then 1 else 0 coeff_single_inr : ∀ i j, (toPowerSeries i).coeff (Finsupp.single (Sum.inr j) 1) = if i = j then 1 else 0 assoc : ∀ i, subst (Sum.elim (fun j => subst (Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inl l))) (toPowerSeries j)) fun j => X (Sum.inr (Sum.inr j))) (toPowerSeries i) = subst (Sum.elim (fun j => (X (Sum.inl j) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun j => subst (Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inr l))) (toPowerSeries j)) (toPowerSeries i) namespace MvFormalGroup variable {g h k : ℕ} {R : Type*} [CommRing R] {S : Type*} [CommRing S] class IsComm (F : MvFormalGroup g R) : Prop where comm : ∀ i, subst (Sum.elim (fun j => (X (Sum.inr j) : MvPowerSeries (Fin g ⊕ Fin g) R)) fun j => X (Sum.inl j)) (F.toPowerSeries i) = F.toPowerSeries i theorem hasSubst_toPowerSeries (F : MvFormalGroup g R) : HasSubst F.toPowerSeries := hasSubst_of_constantCoeff_zero F.constantCoeff_eq_zero theorem subst_X_add_X {σ τ : Type*} [Finite σ] {a : σ → MvPowerSeries τ R} (ha : ∀ s, (a s).constantCoeff = 0) (s t : σ) : subst a (X s + X t : MvPowerSeries σ R) = a s + a t := by have h := hasSubst_of_constantCoeff_zero ha rw [subst_add h, subst_X h, subst_X h] @[ext] structure Hom (F : MvFormalGroup g R) (G : MvFormalGroup h R) where toPowerSeries : Fin h → MvPowerSeries (Fin g) R constantCoeff_eq_zero : ∀ i, (toPowerSeries i).constantCoeff = 0 subst_eq : ∀ i, subst F.toPowerSeries (toPowerSeries i) = subst (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (toPowerSeries j)) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (toPowerSeries j)) (G.toPowerSeries i) namespace Hom theorem hasSubst_toPowerSeries {F : MvFormalGroup g R} {G : MvFormalGroup h R} (φ : Hom F G) : HasSubst φ.toPowerSeries := hasSubst_of_constantCoeff_zero φ.constantCoeff_eq_zero def id (F : MvFormalGroup g R) : Hom F F where toPowerSeries := fun i => X i constantCoeff_eq_zero := fun i => constantCoeff_X i subst_eq := by intro i show subst F.toPowerSeries (X i) = subst (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (X j)) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (X j)) (F.toPowerSeries i) have h2 : HasSubst (fun l : Fin g => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) := hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _ have h3 : HasSubst (fun l : Fin g => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) := hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _ have hl : (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (X j : MvPowerSeries (Fin g) R)) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (X j : MvPowerSeries (Fin g) R)) = fun s => (X s : MvPowerSeries (Fin g ⊕ Fin g) R) := by funext s rcases s with j | j · simp [subst_X h2] · simp [subst_X h3] rw [subst_X F.hasSubst_toPowerSeries, hl, subst_self] rfl def comp {F : MvFormalGroup g R} {G : MvFormalGroup h R} {H : MvFormalGroup k R} (ψ : Hom G H) (φ : Hom F G) : Hom F H where toPowerSeries := fun i => subst φ.toPowerSeries (ψ.toPowerSeries i) constantCoeff_eq_zero := fun i => constantCoeff_subst_eq_zero φ.hasSubst_toPowerSeries φ.constantCoeff_eq_zero (ψ.constantCoeff_eq_zero i) subst_eq := by intro i show subst F.toPowerSeries (subst φ.toPowerSeries (ψ.toPowerSeries i)) = subst (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (subst φ.toPowerSeries (ψ.toPowerSeries j))) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (subst φ.toPowerSeries (ψ.toPowerSeries j))) (H.toPowerSeries i) have hAφ : HasSubst (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)) := by apply hasSubst_of_constantCoeff_zero rintro (j | j) <;> exact constantCoeff_subst_eq_zero (hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _) (fun l => constantCoeff_X _) (φ.constantCoeff_eq_zero j) have hAψ : HasSubst (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin h ⊕ Fin h) R)) (ψ.toPowerSeries j)) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin h ⊕ Fin h) R)) (ψ.toPowerSeries j)) := by apply hasSubst_of_constantCoeff_zero rintro (j | j) <;> exact constantCoeff_subst_eq_zero (hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _) (fun l => constantCoeff_X _) (ψ.constantCoeff_eq_zero j) rw [subst_comp_subst_apply φ.hasSubst_toPowerSeries F.hasSubst_toPowerSeries] have heq1 : (fun s => subst F.toPowerSeries (φ.toPowerSeries s)) = fun s => subst (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)) (G.toPowerSeries s) := funext fun s => φ.subst_eq s rw [heq1, ← subst_comp_subst_apply G.hasSubst_toPowerSeries hAφ, ψ.subst_eq i, subst_comp_subst_apply hAψ hAφ] have heq2 : (fun s => subst (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)) (Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin h ⊕ Fin h) R)) (ψ.toPowerSeries j)) (fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin h ⊕ Fin h) R)) (ψ.toPowerSeries j)) s)) = Sum.elim (fun j => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (subst φ.toPowerSeries (ψ.toPowerSeries j))) fun j => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (subst φ.toPowerSeries (ψ.toPowerSeries j)) := by funext s rcases s with j | j · show subst (Sum.elim (fun j' => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) fun j' => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) (subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin h ⊕ Fin h) R)) (ψ.toPowerSeries j)) = subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (subst φ.toPowerSeries (ψ.toPowerSeries j)) rw [subst_comp_subst_apply (hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _) hAφ, subst_comp_subst_apply φ.hasSubst_toPowerSeries (hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _)] have hfam : (fun s : Fin h => subst (Sum.elim (fun j' => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) fun j' => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) (X (Sum.inl s) : MvPowerSeries (Fin h ⊕ Fin h) R)) = fun s => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries s) := by funext l simp only [subst_X hAφ, Sum.elim_inl] rw [hfam] · show subst (Sum.elim (fun j' => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) fun j' => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) (subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin h ⊕ Fin h) R)) (ψ.toPowerSeries j)) = subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (subst φ.toPowerSeries (ψ.toPowerSeries j)) rw [subst_comp_subst_apply (hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _) hAφ, subst_comp_subst_apply φ.hasSubst_toPowerSeries (hasSubst_of_constantCoeff_zero fun l => constantCoeff_X _)] have hfam : (fun s : Fin h => subst (Sum.elim (fun j' => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) fun j' => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) (X (Sum.inr s) : MvPowerSeries (Fin h ⊕ Fin h) R)) = fun s => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries s) := by funext l simp only [subst_X hAφ, Sum.elim_inr] rw [hfam] rw [heq2] end Hom def End (F : MvFormalGroup g R) := Hom F F def map (f : R →+* S) (F : MvFormalGroup g R) : MvFormalGroup g S where toPowerSeries := fun i => MvPowerSeries.map f (F.toPowerSeries i) constantCoeff_eq_zero := by intro i rw [constantCoeff_map, F.constantCoeff_eq_zero, map_zero] coeff_single_inl := by intro i j rw [coeff_map, F.coeff_single_inl] split <;> simp coeff_single_inr := by intro i j rw [coeff_map, F.coeff_single_inr] split <;> simp assoc := by intro i have hzB : ∀ s : Fin g ⊕ Fin g, ((Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inl l))) s).constantCoeff = 0 := by rintro (l | l) <;> simp [constantCoeff_X] have hzC : ∀ s : Fin g ⊕ Fin g, ((Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inr l))) s).constantCoeff = 0 := by rintro (l | l) <;> simp [constantCoeff_X] have hB := hasSubst_of_constantCoeff_zero hzB have hC := hasSubst_of_constantCoeff_zero hzC have hA : HasSubst (Sum.elim (fun j => subst (Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inl l))) (F.toPowerSeries j)) fun j => X (Sum.inr (Sum.inr j))) := by apply hasSubst_of_constantCoeff_zero rintro (j | j) · exact constantCoeff_subst_eq_zero hB hzB (F.constantCoeff_eq_zero j) · exact constantCoeff_X _ have hA' : HasSubst (Sum.elim (fun j => (X (Sum.inl j) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun j => subst (Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inr l))) (F.toPowerSeries j)) := by apply hasSubst_of_constantCoeff_zero rintro (j | j) · exact constantCoeff_X _ · exact constantCoeff_subst_eq_zero hC hzC (F.constantCoeff_eq_zero j) have key := congrArg (MvPowerSeries.map f) (F.assoc i) rw [map_subst hA, map_subst hA'] at key have hBmap : (fun s => MvPowerSeries.map f ((Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inl l))) s)) = Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) S)) fun l => X (Sum.inr (Sum.inl l)) := by funext s rcases s with l | l <;> simp [map_X] have hCmap : (fun s => MvPowerSeries.map f ((Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inr l))) s)) = Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) S)) fun l => X (Sum.inr (Sum.inr l)) := by funext s rcases s with l | l <;> simp [map_X] have hAmap : (fun s => MvPowerSeries.map f ((Sum.elim (fun j => subst (Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inl l))) (F.toPowerSeries j)) fun j => X (Sum.inr (Sum.inr j))) s)) = Sum.elim (fun j => subst (Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) S)) fun l => X (Sum.inr (Sum.inl l))) (MvPowerSeries.map f (F.toPowerSeries j))) fun j => X (Sum.inr (Sum.inr j)) := by funext s rcases s with j | j · show MvPowerSeries.map f (subst (Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inl l))) (F.toPowerSeries j)) = subst (Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) S)) fun l => X (Sum.inr (Sum.inl l))) (MvPowerSeries.map f (F.toPowerSeries j)) rw [map_subst hB, hBmap] · simp [map_X] have hA'map : (fun s => MvPowerSeries.map f ((Sum.elim (fun j => (X (Sum.inl j) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun j => subst (Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inr l))) (F.toPowerSeries j)) s)) = Sum.elim (fun j => (X (Sum.inl j) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) S)) fun j => subst (Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) S)) fun l => X (Sum.inr (Sum.inr l))) (MvPowerSeries.map f (F.toPowerSeries j)) := by funext s rcases s with j | j · simp [map_X] · show MvPowerSeries.map f (subst (Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inr l))) (F.toPowerSeries j)) = subst (Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) S)) fun l => X (Sum.inr (Sum.inr l))) (MvPowerSeries.map f (F.toPowerSeries j)) rw [map_subst hC, hCmap] rw [hAmap, hA'map] at key exact key def nthSeries (F : MvFormalGroup g R) : ℕ → Fin g → MvPowerSeries (Fin g) R | 0 => fun _ => 0 | n + 1 => fun i => subst (Sum.elim (nthSeries F n) fun j => X j) (F.toPowerSeries i) @[simp] theorem nthSeries_zero (F : MvFormalGroup g R) : F.nthSeries 0 = fun _ => 0 := rfl theorem nthSeries_succ (F : MvFormalGroup g R) (n : ℕ) : F.nthSeries (n + 1) = fun i => subst (Sum.elim (F.nthSeries n) fun j => X j) (F.toPowerSeries i) := rfl def linearPart (φ : Fin h → MvPowerSeries (Fin g) R) : Matrix (Fin h) (Fin g) R := Matrix.of fun i j => (φ i).coeff (Finsupp.single j 1) def FiniteHeight (p : ℕ) {K : Type*} [Field K] [CharP K p] (F : MvFormalGroup g K) : Prop := FiniteDimensional K (MvPowerSeries (Fin g) K ⧸ Ideal.span (Set.range (F.nthSeries p))) def addMv (g : ℕ) (R : Type*) [CommRing R] : MvFormalGroup g R where toPowerSeries := fun i => X (Sum.inl i) + X (Sum.inr i) constantCoeff_eq_zero := by intro i show ((X (Sum.inl i) + X (Sum.inr i) : MvPowerSeries (Fin g ⊕ Fin g) R)).constantCoeff = 0 rw [map_add, constantCoeff_X, constantCoeff_X, add_zero] coeff_single_inl := by intro i j show ((X (Sum.inl i) + X (Sum.inr i) : MvPowerSeries (Fin g ⊕ Fin g) R)).coeff (Finsupp.single (Sum.inl j) 1) = if i = j then 1 else 0 rw [map_add, coeff_index_single_X, coeff_index_single_X] by_cases hij : i = j · simp [hij] · simp [hij, Ne.symm hij] coeff_single_inr := by intro i j show ((X (Sum.inl i) + X (Sum.inr i) : MvPowerSeries (Fin g ⊕ Fin g) R)).coeff (Finsupp.single (Sum.inr j) 1) = if i = j then 1 else 0 rw [map_add, coeff_index_single_X, coeff_index_single_X] by_cases hij : i = j · simp [hij] · simp [hij, Ne.symm hij] assoc := by intro i have hzB : ∀ s : Fin g ⊕ Fin g, ((Sum.elim (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inl l))) s).constantCoeff = 0 := by rintro (l | l) <;> simp [constantCoeff_X] have hzC : ∀ s : Fin g ⊕ Fin g, ((Sum.elim (fun l => (X (Sum.inr (Sum.inl l)) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun l => X (Sum.inr (Sum.inr l))) s).constantCoeff = 0 := by rintro (l | l) <;> simp [constantCoeff_X] simp only [subst_X_add_X hzB, subst_X_add_X hzC, Sum.elim_inl, Sum.elim_inr] have hzA : ∀ s : Fin g ⊕ Fin g, ((Sum.elim (fun j => (X (Sum.inl j) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R) + X (Sum.inr (Sum.inl j))) fun j => X (Sum.inr (Sum.inr j))) s).constantCoeff = 0 := by rintro (j | j) <;> simp [constantCoeff_X] have hzA' : ∀ s : Fin g ⊕ Fin g, ((Sum.elim (fun j => (X (Sum.inl j) : MvPowerSeries (Fin g ⊕ (Fin g ⊕ Fin g)) R)) fun j => X (Sum.inr (Sum.inl j)) + X (Sum.inr (Sum.inr j))) s).constantCoeff = 0 := by rintro (j | j) <;> simp [constantCoeff_X] rw [subst_X_add_X hzA, subst_X_add_X hzA'] simp only [Sum.elim_inl, Sum.elim_inr] exact add_assoc _ _ _ instance (g : ℕ) (R : Type*) [CommRing R] : IsComm (addMv g R) where comm := by intro i have hz : ∀ s : Fin g ⊕ Fin g, ((Sum.elim (fun j => (X (Sum.inr j) : MvPowerSeries (Fin g ⊕ Fin g) R)) fun j => X (Sum.inl j)) s).constantCoeff = 0 := by rintro (j | j) <;> simp [constantCoeff_X] show subst (Sum.elim (fun j => (X (Sum.inr j) : MvPowerSeries (Fin g ⊕ Fin g) R)) fun j => X (Sum.inl j)) (X (Sum.inl i) + X (Sum.inr i)) = X (Sum.inl i) + X (Sum.inr i) rw [subst_X_add_X hz] simp only [Sum.elim_inl, Sum.elim_inr] exact add_comm _ _ end MvFormalGroup
Statements phrased using this module (91)
- Fontaine's lifting criterion for maps from F[p^v]
Deformation.exists_algHom_baseChange_eq_of_forall_map_mem_fontaineKer_of_mvFormalGroup40 below · depth 21 - Integral rescaled exponential under a local Cartier dual
MvFormalGroup.exists_rescaledExp_tendsto_zero_of_isLocalRing_cartierDual25 below · depth 21 - Existence of a rescaled logarithm over p-adically complete rings
MvFormalGroup.exists_rescaledLog_of_isAdicComplete2 below · depth 21 - Connected component of a level as formal group p^v-torsion
PDivisibleGroup.exists_connectedComponent_mvFormalGroup_of_isLocalRing_cartierDual77 below · depth 21 - Rescaled-logarithm Witt vectors lie in `wittHom` and `fontaineKer`
Deformation.exists_wittVector_ghostComponent_truncate_map_mem_wittHom_fontaineKer_of_mvFormalGroup37 below · depth 22 - Integral logarithm criterion for p^v-torsion congruence
MvFormalGroup.Points.exists_nsmul_eq_zero_and_sub_mem_iff_of_rescaledLog0 below · depth 22 - Box truncations of the logarithm lie in p^vY at w'
MvFormalGroup.eventually_aeval_boxTrunc_mem_of_forall_adicEval_scaledLogTrunc_mem0 below · depth 22 - Integral rescaled exponential for unipotent p^v-torsion, case p=2
MvFormalGroup.exists_rescaledExp_tendsto_zero_of_isLocalRing_cartierDual_of_eq_two22 below · depth 22 - Rescaled exponential with p-adically vanishing coefficients, p odd
MvFormalGroup.exists_rescaledExp_tendsto_zero_of_ne_two2 below · depth 22 - Integrality of the rescaled logarithm of a commutative formal group
MvFormalGroup.natCast_mul_coeff_add_single_mem_span_pow_degree_of_subst_rescale_eq_add0 below · depth 22 - Connected part of a unipotent p-divisible tower as a formal group
PDivisibleGroup.exists_mvFormalGroup_connectedComponent_tower_of_isLocalRing_cartierDual76 below · depth 22 - Scaled truncations of the logarithm land in p^N R
Deformation.map_scaledLogTrunc_mem_span_pow_of_mvFormalGroup1 below · depth 23 - Truncated logarithm covectors are additive modulo p
Deformation.truncate_map_mem_wittHom_of_forall_coeff_ghostComponent_eq_logCovector35 below · depth 23 - Mod p congruence between iterated-law and [p] coefficients
MvFormalGroup.coeff_iterate_sum_single_sub_coeff_nthSeries_single_mem_span0 below · depth 23 - Mixed quadratic coefficients of F and its rescaled logarithm
MvFormalGroup.coeff_mul_natCast_add_two_mul_coeff_rescaledLog_eq_zero0 below · depth 23 - Rescaled logarithm modulo p: degree ≥ 3 and mixed quadratic coefficients
MvFormalGroup.coeff_rescaledLog_mem_span_of_three_le_degree1 below · depth 23 - Sub-unit slope bound for the logarithm under nilpotent Hasse–Witt
MvFormalGroup.exists_coeff_mem_span_pow_sub_log_of_isNilpotent_hasseWitt4 below · depth 23 - Formal inverse function theorem over a commutative ring
MvFormalGroup.exists_subst_eq_X_of_linearPart_eq_one0 below · depth 23 - Nilpotence of the Hasse–Witt matrix of [p]_F
MvFormalGroup.isNilpotent_hasseWittMatrix_nthSeries_of_isLocalRing_cartierDual11 below · depth 23 - Denominators of the formal exponential divide m!
MvFormalGroup.prod_factorial_mul_coeff_mem_span_pow_of_subst_eq_X0 below · depth 23 - Restrictedness of the formal inverse via a polynomial inverse mod p
MvPowerSeries.eventually_coeff_mem_span_pow_of_subst_eq_X_of_exists_polynomial_inverse_mod0 below · depth 23 - Formal group law from coordinates on a Hopf-algebra tower
PDivisibleGroup.exists_mvFormalGroup_comul_eq_adicEval_of_specialFibre_coordinates5 below · depth 23 - Kernel of the formal coordinates is the [p^v]-series ideal
PDivisibleGroup.ker_eq_span_range_nthSeries_of_comul_eq_adicEval8 below · depth 23 - Far Witt components of the logarithm covector lie in pR
Deformation.map_coeff_mem_span_of_forall_coeff_ghostComponent_eq_logCovector26 below · depth 24 - Algebra maps into J-adically complete rings are adic evaluation
MvFormalGroup.algHom_apply_eq_adicEval_of_forall_apply_X_mem_radical0 below · depth 24 - Additivity defect of the truncated logarithm covector
MvFormalGroup.coeff_map_subst_sub_map_sub_map_mem_of_forall_coeff_ghostComponent_eq_logCovector9 below · depth 24 - Top-window stability of truncated logarithm covectors
MvFormalGroup.coeff_sub_coeff_mem_of_forall_coeff_ghostComponent_eq_logCovector_of_le8 below · depth 24 - Hasse–Witt relation for point derivations on the Cartier dual
MvFormalGroup.exists_cartierDual_derivation_pow_eq_sum_hasseWitt_smul9 below · depth 24 - Nilpotent Hasse–Witt matrix kills low-degree coefficients of [p^A]_F
MvFormalGroup.exists_forall_coeff_nthSeries_pow_mem_span_of_isNilpotent_hasseWitt2 below · depth 24 - Cocommutativity from a commutative formal group law
MvFormalGroup.isCocomm_of_comul_eq_adicEval_toPowerSeries1 below · depth 24 - Power series presentation from special-fibre coordinates
MvPowerSeries.exists_algHom_adicEval_forall_comp_eq_of_specialFibre_coordinates2 below · depth 24 - Unique split coordinates of a continuous point of Fontaine's functor
Deformation.HondaSystem.existsUnique_coords_of_mem_fontaineFunctor_of_splitCoordinates70 below · depth 25 - Existence in Fontaine's functor with prescribed split coordinates
Deformation.HondaSystem.exists_mem_fontaineFunctor_of_coords_of_splitCoordinates61 below · depth 25 - Lifted formal group law and its extension cocycle
Deformation.HondaSystem.exists_mvFormalGroup_cocycle_of_splitCoordinates66 below · depth 25 - Fontaine's lifting theorem from split coordinates and a cocycle
Deformation.HondaSystem.exists_pDivisibleTower_bijective_map_mem_fontaineHodge_of_splitCoordinates_of_cocycle35 below · depth 25 - Existence of lawful split coordinates in normal form
Deformation.HondaSystem.exists_splitCoordinates_lawful_normalForm111 below · depth 25 - Uniqueness of a point derivation from its values on coordinates
MvFormalGroup.cartierDual_eq_of_forall_apply_tmul_eq_of_map_mul0 below · depth 25 - Convolution powers of a point derivation as iterated invariant derivatives
MvFormalGroup.cartierDual_pow_apply_tmul_eq_algebraMap_constantCoeff_iterate3 below · depth 25 - Far Witt components of the logarithm lie in (p)+(X)^E
MvFormalGroup.coeff_mem_span_sup_pow_of_forall_coeff_ghostComponent_eq_logCovector_of_slope7 below · depth 25 - Multiplication by p^ν when the Hasse–Witt matrix is ν-nilpotent
MvFormalGroup.coeff_nthSeries_pow_eq_zero_of_hasseWitt_pow_eq_zero_zmodp1 below · depth 25 - Iterated invariant derivation at the origin as a multilinear coefficient
MvFormalGroup.coeff_subst_iterate_sum_single_eq_constantCoeff_invariantDerivation_iterate0 below · depth 25 - Vanishing of the counit on formal group coordinates
MvFormalGroup.counit_apply_eq_zero_of_comul_eq_adicEval0 below · depth 25 - Coordinate point derivations in the Cartier dual of 𝔽ₚ ⊗ R
MvFormalGroup.exists_cartierDual_apply_tmul_eq_and_map_mul_of_ker_eq_span_nthSeries3 below · depth 25 - Additivity defect of a scaled logarithm truncation
MvFormalGroup.lt_degree_and_natCast_mul_coeff_subst_sub_sub_mem_of_scaledLogTrunc2 below · depth 25 - Fontaine's unique lifting of logarithm-type coordinates
Deformation.FontaineLift.existsUnique_sub_mem_and_wSeries_adicEval_eq_of_isUnit_linearPart9 below · depth 26 - Convergence of Fontaine's w-series at nilpotent points
Deformation.FontaineLift.isPadicLimit_wPartialSum_adicEval0 below · depth 26 - Reduction of Φ modulo p equals Φ₀
Deformation.HondaSystem.SplitCoordinates.map_eq_phi0_of_forall_exists_convMul_apply_kappa_X0 below · depth 26 - Naturality of the Fontaine functor in the test algebra
Deformation.HondaSystem.SplitCoordinates.map_mem_fontaineFunctor_and_described2 below · depth 26 - Special fibre of the twisted tower: Gᶜᵥ⊗ G^eᵥ≅𝔽ₚ⊗ Lᵥ
Deformation.HondaSystem.exists_bijective_tensorProduct_specialFibre_of_cocycle2 below · depth 26 - Coefficientwise lifting of normalised power series to 𝒪
Deformation.HondaSystem.exists_lift_linearPart_map_eq_one_of_coeff_eq0 below · depth 26 - Fontaine's normalised coordinates on the connected factor
Deformation.HondaSystem.exists_mvFormalGroup_basis_coeff_eq_normalForm93 below · depth 26 - Fontaine–Hodge membership at a twisted Tate level
Deformation.HondaSystem.map_apply_basis_mem_fontaineHodge_of_cocycle3 below · depth 26 - Characteristic p: homomorphism with zero differential is a series in Xᵖ
MvFormalGroup.coeff_eq_zero_of_linearPart_eq_zero_of_subst_eq_charP0 below · depth 26 - Natural group laws on p-adic test algebras come from a unique commutative formal group
MvFormalGroup.existsUnique_isComm_and_apply_eq_adicEval_toPowerSeries_of_natural_of_mem_radical1 below · depth 26 - Nilpotent tuples lie in ker[p^v] for large v
MvFormalGroup.exists_algHom_apply_eq_of_isNilpotent_of_ker_eq_span_nthSeries0 below · depth 26 - Twisted tower from a formal group and a 2-cocycle
MvFormalGroup.exists_pDivisibleTower_of_cocycle29 below · depth 26 - Continuity of the w-series in the evaluation point
Deformation.FontaineLift.wSeries_adicEval_sub_wSeries_adicEval_mem_powSub2 below · depth 27 - Newton step for Fontaine's w-series at p=2
Deformation.PLoc.wPartialSum_adicEval_add_sub_sub_algebraMap_mul_add_mem_powSub_two2 below · depth 27 - Newton linearisation of Fontaine's partial w-sums
Deformation.PLoc.wPartialSum_adicEval_add_sub_sub_algebraMap_mul_sum_mem_powSub2 below · depth 27 - Functorial group law on nilpotents is a unique commutative formal group
MvFormalGroup.existsUnique_isComm_and_apply_eq_adicEval_toPowerSeries_of_natural0 below · depth 27 - One level of the cocycle-twisted p-divisible tower
MvFormalGroup.exists_hopfAlgebra_presentation_comul_eq_of_cocycle_of_powerDefect24 below · depth 27 - Linear re-coordinatisation of a formal-group presentation
MvFormalGroup.exists_isComm_comp_substAlgHom_of_isUnit_matrix0 below · depth 27 - Power defects of a symmetric 2-cocycle over a p-divisible tower
MvFormalGroup.exists_powerDefect_map_comul_eq_adicEval_of_cocycle1 below · depth 27 - Transition maps for the twisted Tate tower of height h+hₑ
MvFormalGroup.exists_transition_ker_eq_torsionIdeal_of_presentation_of_powerDefect4 below · depth 27 - Formal group coordinates on a connected p-divisible tower over 𝔽ₚ
PDivisibleGroup.exists_mvFormalGroup_ker_eq_span_nthSeries_jointly_injective_surjective_of_isLocalRing_zmodp58 below · depth 27 - Formal coordinates separate endomorphisms of a formal group
GoodReductionJacobian.RelativeGroupLaw.IsFormalCoordinates.eq_of_forall_apply_nilEval_eq0 below · depth 28 - First-order Taylor expansion for adic evaluation of power series
MvFormalGroup.adicEval_add_sub_adicEval_sub_sum_mul_mem_span_sq0 below · depth 28 - Fibres of [p^v]_Φ are free of rank p^{vh}
MvFormalGroup.free_and_finrank_quotient_span_nthSeries_sub_C_eq_pow_of_nontrivial21 below · depth 28 - Formal coordinates separate tuples of series over B/I
GoodReductionJacobian.RelativeGroupLaw.IsFormalCoordinates.funext_of_forall_apply_nilEval_eq_of_constantCoeff_eq_zero0 below · depth 29 - Descent of kernel-invariant power series along an isogeny over a field
MvFormalGroup.exists_eq_subst_of_subst_toPowerSeries_sub_mem_span_of_X_pow_mem_span_of_field10 below · depth 29 - Freeness of 𝒪[[X]] under [p^v]_Φ-substitution
MvFormalGroup.exists_forall_existsUnique_eq_sum_subst_nthSeries_mul_of_finrank_eq_pow18 below · depth 29 - Yoneda lemma for formal affine space on nilpotent ideals
MvPowerSeries.existsUnique_apply_eq_adicEval_of_natural_of_isNilpotent0 below · depth 29 - Degree of an isogeny of commutative formal groups is a power of p
MvFormalGroup.Hom.exists_finrank_quotient_span_range_map_eq_prime_pow_of_isComm16 below · depth 30 - Natural additive maps on nilpotent points come from a unique homomorphism
MvFormalGroup.existsUnique_hom_apply_eq_adicEval_of_natural_of_isNilpotent0 below · depth 30 - Finite freeness of rank p^{vh} of 𝒪[[X]]/([p^v]_F)
MvFormalGroup.finite_free_finrank_quotient_span_nthSeries_of_finrank_eq_pow11 below · depth 30 - Rank of [p^v]_F is p^{vh} for a formal group of height h
MvFormalGroup.finrank_quotient_span_nthSeries_pow_eq_pow6 below · depth 30 - Factoring an isogeny of formal groups through Frobenius
MvFormalGroup.Hom.exists_comp_eq_and_comp_eq_X_pow_and_finrank_eq_pow_mul13 below · depth 31 - Yoneda: natural group laws on nilpotent ideals are formal group laws
MvFormalGroup.existsUnique_isComm_and_apply_eq_adicEval_of_natural_of_isNilpotent0 below · depth 31 - Normal form of a formal group homomorphism in characteristic p
MvFormalGroup.Hom.exists_subst_eq_X_and_coeff_subst_eq_zero_of_not_dvd3 below · depth 32 - Finite p-power codimension of the [p]-series forces characteristic p
MvFormalGroup.charP_of_finrank_quotient_span_nthSeries_eq_pow3 below · depth 32 - Rigidity of homomorphisms of formal groups modulo a nilpotent ideal
MvFormalGroup.Hom.eq_of_map_eq_of_ker_pow_eq_bot_of_finrank_eq_pow8 below · depth 33 - Injectivity of substitution along an isogeny, and descent
MvFormalGroup.subst_injective_and_exists_eq_subst_of_subst_toPowerSeries_sub_mem_span_of_X_pow_mem_span23 below · depth 33 - Descent of translation-invariant power series along a formal isogeny
MvFormalGroup.exists_eq_subst_of_subst_toPowerSeries_sub_mem_span_of_X_pow_mem_span19 below · depth 34 - Descent along an isogeny of formal groups: local Noetherian base
MvFormalGroup.exists_eq_subst_of_subst_toPowerSeries_sub_mem_span_of_X_pow_mem_span_of_isLocalRing15 below · depth 35 - Unique descent of F[m]-invariant power series along [m]_F
MvFormalGroup.existsUnique_eq_subst_nthSeries_of_sub_mem_span6 below · depth 36 - Spanning first-order deformations of a formal group of height h
MvFormalGroup.exists_deformations_dualNumber_span_of_finrank_quotient_span_nthSeries_eq_pow34 below · depth 36 - Hopf algebra structure on the n-torsion of a formal group
MvFormalGroup.exists_hopfAlgebra_ker_eq_span_nthSeries_comul_eq_adicEval_of_isAdicComplete3 below · depth 36 - Tate's inequality dim_k P(𝒪(F[p])) + n ≤ h
MvFormalGroup.finrank_primitives_add_le_of_ker_eq_span_nthSeries_of_finrank_eq_pow23 below · depth 36 - Frobenius on the Cartier dual is dual to Verschiebung
MvFormalGroup.cartierDual_pow_apply_eq_finsum_coeff_subst_mul_apply_pow0 below · depth 37 - Truncated formal group law as a finite Hopf algebra, nilpotent case
MvFormalGroup.exists_hopfAlgebra_surjective_ker_eq_span_nthSeries_comul_eq_adicEval_bot_of_isNilpotent1 below · depth 38 - Degree of a formal group isogeny is a power of p
MvFormalGroup.Hom.exists_finrank_quotient_span_range_eq_pow_of_finite14 below · depth 45