Definitions/Def_Dieudonne_WittHomColimit.lean
Dieudonné module as colimit of truncated Witt homomorphism groups
Fix a prime p, a commutative ring R and a commutative R-bialgebra A. For n \le m the additive map TruncWitt.shiftLE sends a truncated Witt vector of length n over a commutative ring to one of length m: it is obtained by lifting along the surjection WittVector.truncate n the map x \mapsto truncate m (V^{m-n}x), where V^{k} is the k-fold iterate verschiebungIter k of Mathlib's Verschiebung on W(R); on coefficients it is the shift (\mathrm{shiftLE}\,x)_i = x_{i-(m-n)} for i \ge m-n and 0 otherwise. It is injective, reduces to TruncWitt.shift when m = n+1, is transitive in n \le m \le l, commutes with coefficientwise ring maps, with the p-power map frobeniusFun and with verschiebung; moreover V^{n} = 0 on length-n vectors, and p^{n}\cdot x = 0 when p = 0 in the base.
The subgroup wittHom R p n A of primitive length-n Witt vectors (those x with \Delta_*x = (\mathrm{incl}_L)_*x + (\mathrm{incl}_R)_*x in W_n(A \otimes_R A)) is stable under shiftLE, indeed x is primitive if and only if its shift is, giving wittHomShiftLE and a directed system over (\mathbb{N},\le). DieudonneModule R p A is the direct limit of this system as an abelian group, with structure maps of R p A n, each injective, jointly surjective, with \mathrm{of}\,m \circ \mathrm{shiftLE} = \mathrm{of}\,n; a universal property lift requires compatibility only with the successor maps wittHomShift. Passing to the limit gives endomorphisms verschiebung and, when R has characteristic p, frobenius, with FV = VF = p; these are packaged as a term dieudonneDatum of the project's structure DieudonneDatum with parameter (p : \mathbb{Z}), whose two commutation identities are fields. In characteristic p every element is killed by some p^{n}. A bialgebra map \varphi : A \to B induces map, functorial in \varphi, commuting with F and V, and injective for injective \varphi. Finally, for A the symmetric algebra on R (the additive group), the canonical coordinate gives a primitive length-1 Witt vector whose image in the limit is nonzero when R is nontrivial.
Relation to Mathlib
Mathlib supplies WittVector, TruncatedWittVector, their truncation maps and Verschiebung, and the direct limit AddCommGroup.DirectLimit; the shift maps between different truncation lengths, the primitive subgroups wittHom, and the Dieudonné module itself are the project's own, Mathlib having no Dieudonné theory.
Where it is used
These groups provide the Dieudonné-module functor on commutative affine group schemes used in the study of finite flat group schemes attached to the mod p and p-adic representations occurring in the modularity-lifting part of the argument.
References
- M. Demazure, Lectures on p-divisible groups, Lecture Notes in Mathematics 302, Springer, 1972
- J.-M. Fontaine, Groupes p-divisibles sur les corps locaux, Astérisque 47–48, Société Mathématique de France, 1977
- M. Demazure and P. Gabriel, Groupes algébriques, Tome I, Masson / North-Holland, 1970
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 473 lines
- 69 declarations
- used in the statements of 83 theorems and imported by 88 proofs
- imports 2 definition modules
Source file: Definitions/Def_Dieudonne_WittHomColimit.lean
Declarations
- def
Deformation.TruncWitt.verschiebungIter - theorem
Deformation.TruncWitt.verschiebungIter_apply - def
Deformation.TruncWitt.shiftLE - theorem
Deformation.TruncWitt.shiftLE_truncate - theorem
Deformation.TruncWitt.coeff_shiftLE - theorem
Deformation.TruncWitt.coeff_shiftLE_of_lt - theorem
Deformation.TruncWitt.coeff_shiftLE_add - theorem
Deformation.TruncWitt.shiftLE_refl - theorem
Deformation.TruncWitt.shiftLE_shiftLE - theorem
Deformation.TruncWitt.shiftLE_succ - theorem
Deformation.TruncWitt.shiftLE_injective - theorem
Deformation.TruncWitt.map_shiftLE - theorem
Deformation.TruncWitt.frobeniusFun_shiftLE - theorem
Deformation.TruncWitt.verschiebung_shiftLE - theorem
Deformation.TruncWitt.verschiebung_iterate_eq_zero - theorem
Deformation.TruncWitt.pow_card_nsmul_eq_zero - theorem
Deformation.shiftLE_mem_wittHom - theorem
Deformation.shiftLE_mem_wittHom_iff - def
Deformation.wittHomShiftLE - theorem
Deformation.coe_wittHomShiftLE - theorem
Deformation.wittHomShiftLE_refl - theorem
Deformation.wittHomShiftLE_shiftLE - theorem
Deformation.wittHomShiftLE_succ - theorem
Deformation.wittHomShiftLE_injective - theorem
Deformation.wittHomShiftLE_verschiebung - theorem
Deformation.wittHomShiftLE_frobenius - theorem
Deformation.wittHomMap_shiftLE - theorem
Deformation.wittHomVerschiebung_iterate_eq_zero - theorem
Deformation.pow_nsmul_wittHom_eq_zero - instance
Deformation.wittHomShiftLE_directedSystem - def
Deformation.DieudonneModule - instance
Deformation.DieudonneModule.instAddCommGroup - instance
Deformation.DieudonneModule.instInhabited - def
Deformation.DieudonneModule.of - theorem
Deformation.DieudonneModule.of_shiftLE - theorem
Deformation.DieudonneModule.of_shift - theorem
Deformation.DieudonneModule.induction_on - theorem
Deformation.DieudonneModule.exists_of - theorem
Deformation.DieudonneModule.exists_shiftLE_eq_zero_of_of_eq_zero - theorem
Deformation.DieudonneModule.of_injective - theorem
Deformation.DieudonneModule.of_eq_of_iff - theorem
Deformation.DieudonneModule.compat_shiftLE - def
Deformation.DieudonneModule.lift - theorem
Deformation.DieudonneModule.lift_of - theorem
Deformation.DieudonneModule.hom_ext - def
Deformation.DieudonneModule.verschiebung - theorem
Deformation.DieudonneModule.verschiebung_of - def
Deformation.DieudonneModule.frobenius - theorem
Deformation.DieudonneModule.frobenius_of - theorem
Deformation.DieudonneModule.frobenius_verschiebung - theorem
Deformation.DieudonneModule.verschiebung_frobenius - def
Deformation.DieudonneModule.dieudonneDatum - theorem
Deformation.DieudonneModule.dieudonneDatum_F_apply - theorem
Deformation.DieudonneModule.dieudonneDatum_V_apply - theorem
Deformation.DieudonneModule.pow_nsmul_of - theorem
Deformation.DieudonneModule.exists_pow_nsmul_eq_zero - def
Deformation.DieudonneModule.map - theorem
Deformation.DieudonneModule.map_of - theorem
Deformation.DieudonneModule.map_verschiebung - theorem
Deformation.DieudonneModule.map_frobenius - theorem
Deformation.DieudonneModule.map_id - theorem
Deformation.DieudonneModule.map_comp - theorem
Deformation.DieudonneModule.map_injective - abbrev
Deformation.DieudonneModule.Examples.Ga - def
Deformation.DieudonneModule.Examples.coordinate - theorem
Deformation.DieudonneModule.Examples.coordinate_ne_zero - theorem
Deformation.DieudonneModule.Examples.coeff_zero_add_of_length_one - theorem
Deformation.DieudonneModule.Examples.coordinate_mem_wittHom - theorem
Deformation.DieudonneModule.Examples.of_coordinate_ne_zero
Source
import Mathlib import Definitions.Def_Dieudonne_DatumAndHonda import Definitions.Def_Dieudonne_WittVectorHom set_option autoImplicit false open Function universe u v w namespace Deformation namespace TruncWitt variable {p : ℕ} [hp : Fact p.Prime] {n m l : ℕ} variable {R : Type u} {S : Type v} [CommRing R] [CommRing S] noncomputable def verschiebungIter (k : ℕ) : WittVector p R →+ WittVector p R where toFun x := (WittVector.verschiebung (p := p) (R := R))^[k] x map_zero' := iterate_map_zero _ _ map_add' := iterate_map_add _ _ @[simp] theorem verschiebungIter_apply (k : ℕ) (x : WittVector p R) : verschiebungIter k x = (WittVector.verschiebung (p := p) (R := R))^[k] x := rfl noncomputable def shiftLE (h : n ≤ m) : TruncatedWittVector p n R →+ TruncatedWittVector p m R := AddMonoidHom.liftOfRightInverse (WittVector.truncate n).toAddMonoidHom TruncatedWittVector.out (fun x => TruncatedWittVector.truncateFun_out x) ⟨(WittVector.truncate m).toAddMonoidHom.comp (verschiebungIter (m - n)), fun x hx => by change (WittVector.truncate n) x = 0 at hx rw [← RingHom.mem_ker, WittVector.mem_ker_truncate] at hx change (WittVector.truncate m) ((WittVector.verschiebung (p := p) (R := R))^[m - n] x) = 0 ext ⟨i, hi⟩ simp only [WittVector.coeff_truncate, TruncatedWittVector.coeff_zero] by_cases him : i < m - n · exact WittVector.iterate_verschiebung_coeff_eq_zero x him · obtain ⟨k, rfl⟩ : ∃ k, i = k + (m - n) := ⟨i - (m - n), by omega⟩ rw [WittVector.iterate_verschiebung_coeff] exact hx k (by omega)⟩ @[simp] theorem shiftLE_truncate (h : n ≤ m) (x : WittVector p R) : shiftLE h (WittVector.truncate n x) = WittVector.truncate m ((WittVector.verschiebung (p := p) (R := R))^[m - n] x) := AddMonoidHom.liftOfRightInverse_comp_apply _ _ (fun x => TruncatedWittVector.truncateFun_out x) _ _ theorem coeff_shiftLE (h : n ≤ m) (x : TruncatedWittVector p n R) (i : Fin m) : (shiftLE h x).coeff i = if hi : m - n ≤ (i : ℕ) then x.coeff ⟨i - (m - n), by omega⟩ else 0 := by obtain ⟨x, rfl⟩ := WittVector.truncate_surjective p n R x rw [shiftLE_truncate, WittVector.coeff_truncate] split_ifs with hi · rw [WittVector.coeff_truncate] have hk : (i : ℕ) = (i - (m - n)) + (m - n) := by omega conv_lhs => rw [hk] exact WittVector.iterate_verschiebung_coeff x (m - n) _ · exact WittVector.iterate_verschiebung_coeff_eq_zero x (by omega) theorem coeff_shiftLE_of_lt (h : n ≤ m) (x : TruncatedWittVector p n R) (i : Fin m) (hi : (i : ℕ) < m - n) : (shiftLE h x).coeff i = 0 := by rw [coeff_shiftLE, dif_neg (by omega)] theorem coeff_shiftLE_add (h : n ≤ m) (x : TruncatedWittVector p n R) (i : Fin n) : (shiftLE h x).coeff ⟨i + (m - n), by omega⟩ = x.coeff i := by rw [coeff_shiftLE, dif_pos (by simp)] congr 1 ext simp @[simp] theorem shiftLE_refl (x : TruncatedWittVector p n R) : shiftLE le_rfl x = x := TruncatedWittVector.ext fun i => by rw [coeff_shiftLE, dif_pos (by simp)] congr 1 exact Fin.ext (by simp) theorem shiftLE_shiftLE (h₁ : n ≤ m) (h₂ : m ≤ l) (x : TruncatedWittVector p n R) : shiftLE h₂ (shiftLE h₁ x) = shiftLE (h₁.trans h₂) x := by obtain ⟨x, rfl⟩ := WittVector.truncate_surjective p n R x rw [shiftLE_truncate, shiftLE_truncate, shiftLE_truncate, ← Function.iterate_add_apply] congr 2 omega theorem shiftLE_succ (x : TruncatedWittVector p n R) : shiftLE (Nat.le_succ n) x = shift x := by obtain ⟨x, rfl⟩ := WittVector.truncate_surjective p n R x rw [shiftLE_truncate, shift_truncate, Nat.succ_sub (le_refl n), Nat.sub_self, Function.iterate_one] theorem shiftLE_injective (h : n ≤ m) : Injective (shiftLE (p := p) (R := R) h) := fun x y hxy => TruncatedWittVector.ext fun i => by rw [← coeff_shiftLE_add h x i, ← coeff_shiftLE_add h y i, hxy] theorem map_shiftLE (f : R →+* S) (h : n ≤ m) (x : TruncatedWittVector p n R) : map f (shiftLE h x) = shiftLE h (map f x) := TruncatedWittVector.ext fun i => by simp only [coeff_map, coeff_shiftLE] split_ifs · rfl · exact map_zero f theorem frobeniusFun_shiftLE (h : n ≤ m) (x : TruncatedWittVector p n R) : frobeniusFun (shiftLE h x) = shiftLE h (frobeniusFun x) := TruncatedWittVector.ext fun i => by simp only [coeff_frobeniusFun, coeff_shiftLE] split_ifs · rfl · exact zero_pow hp.out.ne_zero theorem verschiebung_shiftLE (h : n ≤ m) (x : TruncatedWittVector p n R) : verschiebung (shiftLE h x) = shiftLE h (verschiebung x) := by obtain ⟨x, rfl⟩ := WittVector.truncate_surjective p n R x rw [shiftLE_truncate, verschiebung_truncate, verschiebung_truncate, shiftLE_truncate, ← Function.iterate_succ_apply' (f := WittVector.verschiebung), Function.iterate_succ_apply (f := WittVector.verschiebung)] theorem verschiebung_iterate_eq_zero (x : TruncatedWittVector p n R) : (verschiebung (p := p) (R := R))^[n] x = 0 := by obtain ⟨x, rfl⟩ := WittVector.truncate_surjective p n R x have key : ∀ k : ℕ, (verschiebung (p := p) (n := n) (R := R))^[k] (WittVector.truncate n x) = WittVector.truncate n ((WittVector.verschiebung (p := p) (R := R))^[k] x) := by intro k induction k with | zero => rfl | succ k ih => rw [Function.iterate_succ_apply', ih, verschiebung_truncate, ← Function.iterate_succ_apply' (f := WittVector.verschiebung)] rw [key] ext ⟨i, hi⟩ rw [WittVector.coeff_truncate, TruncatedWittVector.coeff_zero] exact WittVector.iterate_verschiebung_coeff_eq_zero x hi theorem pow_card_nsmul_eq_zero (hR : (p : R) = 0) (x : TruncatedWittVector p n R) : p ^ n • x = 0 := by rcases subsingleton_or_charP hR with h | h · exact Subsingleton.elim _ _ · obtain ⟨x, rfl⟩ := WittVector.truncate_surjective p n R x rw [← map_nsmul, nsmul_eq_mul, Nat.cast_pow, mul_comm, ← WittVector.iterate_verschiebung_iterate_frobenius] ext ⟨i, hi⟩ rw [WittVector.coeff_truncate, TruncatedWittVector.coeff_zero] exact WittVector.iterate_verschiebung_coeff_eq_zero _ hi end TruncWitt section WittHom variable {R : Type u} [CommRing R] {p : ℕ} [hp : Fact p.Prime] {n m l : ℕ} variable {A : Type v} [CommRing A] [Bialgebra R A] open TruncWitt theorem shiftLE_mem_wittHom (h : n ≤ m) {x : TruncatedWittVector p n A} (hx : x ∈ wittHom R p n A) : TruncWitt.shiftLE h x ∈ wittHom R p m A := by rw [mem_wittHom_iff] at hx ⊢ rw [map_shiftLE, map_shiftLE, map_shiftLE, hx, map_add] theorem shiftLE_mem_wittHom_iff (h : n ≤ m) (x : TruncatedWittVector p n A) : TruncWitt.shiftLE h x ∈ wittHom R p m A ↔ x ∈ wittHom R p n A := by refine ⟨fun hx => ?_, shiftLE_mem_wittHom h⟩ rw [mem_wittHom_iff] at hx ⊢ rw [map_shiftLE, map_shiftLE, map_shiftLE, ← map_add] at hx exact shiftLE_injective h hx variable (R p A) in noncomputable def wittHomShiftLE (h : n ≤ m) : wittHom R p n A →+ wittHom R p m A where toFun x := ⟨TruncWitt.shiftLE h x, shiftLE_mem_wittHom h x.2⟩ map_zero' := Subtype.ext (by simp) map_add' _ _ := Subtype.ext (by simp) @[simp] theorem coe_wittHomShiftLE (h : n ≤ m) (x : wittHom R p n A) : (wittHomShiftLE R p A h x : TruncatedWittVector p m A) = TruncWitt.shiftLE h x := rfl @[simp] theorem wittHomShiftLE_refl (x : wittHom R p n A) : wittHomShiftLE R p A le_rfl x = x := Subtype.ext (shiftLE_refl _) theorem wittHomShiftLE_shiftLE (h₁ : n ≤ m) (h₂ : m ≤ l) (x : wittHom R p n A) : wittHomShiftLE R p A h₂ (wittHomShiftLE R p A h₁ x) = wittHomShiftLE R p A (h₁.trans h₂) x := Subtype.ext (shiftLE_shiftLE h₁ h₂ _) theorem wittHomShiftLE_succ (x : wittHom R p n A) : wittHomShiftLE R p A (Nat.le_succ n) x = wittHomShift R p n A x := Subtype.ext (shiftLE_succ _) theorem wittHomShiftLE_injective (h : n ≤ m) : Injective (wittHomShiftLE R p A h) := fun _ _ hxy => Subtype.ext (shiftLE_injective h (congrArg Subtype.val hxy)) theorem wittHomShiftLE_verschiebung (h : n ≤ m) (x : wittHom R p n A) : wittHomShiftLE R p A h (wittHomVerschiebung R p n A x) = wittHomVerschiebung R p m A (wittHomShiftLE R p A h x) := Subtype.ext (verschiebung_shiftLE h _).symm theorem wittHomShiftLE_frobenius [CharP R p] (h : n ≤ m) (x : wittHom R p n A) : wittHomShiftLE R p A h (wittHomFrobenius R p n A x) = wittHomFrobenius R p m A (wittHomShiftLE R p A h x) := Subtype.ext (frobeniusFun_shiftLE h _).symm theorem wittHomMap_shiftLE {B : Type w} [CommRing B] [Bialgebra R B] (φ : A →ₐc[R] B) (h : n ≤ m) (x : wittHom R p n A) : wittHomMap p m φ (wittHomShiftLE R p A h x) = wittHomShiftLE R p B h (wittHomMap p n φ x) := Subtype.ext (map_shiftLE _ h _) theorem wittHomVerschiebung_iterate_eq_zero (x : wittHom R p n A) : (wittHomVerschiebung R p n A)^[n] x = 0 := by apply Subtype.ext have : ∀ k : ℕ, (((wittHomVerschiebung R p n A)^[k] x : wittHom R p n A) : TruncatedWittVector p n A) = (TruncWitt.verschiebung (p := p) (R := A))^[k] x := by intro k induction k with | zero => rfl | succ k ih => rw [Function.iterate_succ_apply', Function.iterate_succ_apply', ← ih]; rfl rw [this] exact verschiebung_iterate_eq_zero _ theorem pow_nsmul_wittHom_eq_zero [CharP R p] (x : wittHom R p n A) : p ^ n • x = 0 := Subtype.ext (by rw [AddSubgroupClass.coe_nsmul, ZeroMemClass.coe_zero] exact pow_card_nsmul_eq_zero (natCast_eq_zero_of_algebra R p A) _) instance wittHomShiftLE_directedSystem : DirectedSystem (fun n => ↥(wittHom R p n A)) fun _ _ h => wittHomShiftLE R p A h where map_self _ x := wittHomShiftLE_refl x map_map _ _ _ h₁ h₂ x := wittHomShiftLE_shiftLE h₁ h₂ x end WittHom section Colimit variable (R : Type u) [CommRing R] (p : ℕ) [hp : Fact p.Prime] variable (A : Type v) [CommRing A] [Bialgebra R A] def DieudonneModule : Type v := AddCommGroup.DirectLimit (fun n => ↥(wittHom R p n A)) fun _ _ h => wittHomShiftLE R p A h namespace DieudonneModule noncomputable instance instAddCommGroup : AddCommGroup (DieudonneModule R p A) := inferInstanceAs (AddCommGroup (AddCommGroup.DirectLimit (fun n => ↥(wittHom R p n A)) fun _ _ h => wittHomShiftLE R p A h)) noncomputable instance instInhabited : Inhabited (DieudonneModule R p A) := ⟨0⟩ noncomputable def of (n : ℕ) : wittHom R p n A →+ DieudonneModule R p A := AddCommGroup.DirectLimit.of (fun n => ↥(wittHom R p n A)) (fun _ _ h => wittHomShiftLE R p A h) n variable {R p A} variable {n m : ℕ} @[simp] theorem of_shiftLE (h : n ≤ m) (x : wittHom R p n A) : of R p A m (wittHomShiftLE R p A h x) = of R p A n x := AddCommGroup.DirectLimit.of_f _ _ @[simp] theorem of_shift (x : wittHom R p n A) : of R p A (n + 1) (wittHomShift R p n A x) = of R p A n x := by rw [← wittHomShiftLE_succ, of_shiftLE] @[elab_as_elim] protected theorem induction_on {C : DieudonneModule R p A → Prop} (z : DieudonneModule R p A) (ih : ∀ (n : ℕ) (x : wittHom R p n A), C (of R p A n x)) : C z := AddCommGroup.DirectLimit.induction_on z ih theorem exists_of (z : DieudonneModule R p A) : ∃ (n : ℕ) (x : wittHom R p n A), of R p A n x = z := DieudonneModule.induction_on z fun n x => ⟨n, x, rfl⟩ theorem exists_shiftLE_eq_zero_of_of_eq_zero {x : wittHom R p n A} (hx : of R p A n x = 0) : ∃ (m : ℕ) (h : n ≤ m), wittHomShiftLE R p A h x = 0 := AddCommGroup.DirectLimit.of.zero_exact (f := fun _ _ h => wittHomShiftLE R p A h) n x hx theorem of_injective (n : ℕ) : Injective (of R p A n) := by refine (injective_iff_map_eq_zero _).2 fun x hx => ?_ obtain ⟨m, h, hm⟩ := exists_shiftLE_eq_zero_of_of_eq_zero hx exact wittHomShiftLE_injective h (by rw [hm, map_zero]) theorem of_eq_of_iff (x : wittHom R p n A) (y : wittHom R p m A) : of R p A n x = of R p A m y ↔ wittHomShiftLE R p A (le_max_left n m) x = wittHomShiftLE R p A (le_max_right n m) y := by constructor · intro h apply of_injective (max n m) rwa [of_shiftLE, of_shiftLE] · intro h rw [← of_shiftLE (le_max_left n m) x, h, of_shiftLE] section Lift variable {P : Type w} [AddCommGroup P] theorem compat_shiftLE (g : ∀ n, wittHom R p n A →+ P) (hg : ∀ (n : ℕ) (x : wittHom R p n A), g (n + 1) (wittHomShift R p n A x) = g n x) (h : n ≤ m) (x : wittHom R p n A) : g m (wittHomShiftLE R p A h x) = g n x := by induction h with | refl => rw [wittHomShiftLE_refl] | @step m h ih => rw [← wittHomShiftLE_shiftLE h (Nat.le_succ m), wittHomShiftLE_succ, hg, ih] variable (R p A) in noncomputable def lift (g : ∀ n, wittHom R p n A →+ P) (hg : ∀ (n : ℕ) (x : wittHom R p n A), g (n + 1) (wittHomShift R p n A x) = g n x) : DieudonneModule R p A →+ P := AddCommGroup.DirectLimit.lift (fun n => ↥(wittHom R p n A)) (fun _ _ h => wittHomShiftLE R p A h) P g fun _ _ h x => compat_shiftLE g hg h x @[simp] theorem lift_of (g : ∀ n, wittHom R p n A →+ P) (hg : ∀ (n : ℕ) (x : wittHom R p n A), g (n + 1) (wittHomShift R p n A x) = g n x) (x : wittHom R p n A) : lift R p A g hg (of R p A n x) = g n x := AddCommGroup.DirectLimit.lift_of _ _ _ _ _ theorem hom_ext {f g : DieudonneModule R p A →+ P} (h : ∀ (n : ℕ) (x : wittHom R p n A), f (of R p A n x) = g (of R p A n x)) : f = g := AddMonoidHom.ext fun z => DieudonneModule.induction_on z h end Lift variable (R p A) in noncomputable def verschiebung : DieudonneModule R p A →+ DieudonneModule R p A := lift R p A (fun n => (of R p A n).comp (wittHomVerschiebung R p n A)) fun n x => by rw [AddMonoidHom.comp_apply, AddMonoidHom.comp_apply, ← wittHomShift_verschiebung, of_shift] @[simp] theorem verschiebung_of (x : wittHom R p n A) : verschiebung R p A (of R p A n x) = of R p A n (wittHomVerschiebung R p n A x) := lift_of _ _ _ section CharP variable [CharP R p] variable (R p A) in noncomputable def frobenius : DieudonneModule R p A →+ DieudonneModule R p A := lift R p A (fun n => (of R p A n).comp (wittHomFrobenius R p n A)) fun n x => by rw [AddMonoidHom.comp_apply, AddMonoidHom.comp_apply, ← wittHomShift_frobenius, of_shift] @[simp] theorem frobenius_of (x : wittHom R p n A) : frobenius R p A (of R p A n x) = of R p A n (wittHomFrobenius R p n A x) := lift_of _ _ _ theorem frobenius_verschiebung (z : DieudonneModule R p A) : frobenius R p A (verschiebung R p A z) = (p : ℤ) • z := by induction z using DieudonneModule.induction_on with | ih n x => rw [verschiebung_of, frobenius_of, wittHomFrobenius_verschiebung, map_zsmul] theorem verschiebung_frobenius (z : DieudonneModule R p A) : verschiebung R p A (frobenius R p A z) = (p : ℤ) • z := by induction z using DieudonneModule.induction_on with | ih n x => rw [frobenius_of, verschiebung_of, wittHomVerschiebung_frobenius, map_zsmul] variable (R p A) in noncomputable def dieudonneDatum : DieudonneDatum (p : ℤ) (DieudonneModule R p A) where F := (frobenius R p A).toIntLinearMap V := (verschiebung R p A).toIntLinearMap fv := LinearMap.ext fun z => frobenius_verschiebung z vf := LinearMap.ext fun z => verschiebung_frobenius z @[simp] theorem dieudonneDatum_F_apply (z : DieudonneModule R p A) : (dieudonneDatum R p A).F z = frobenius R p A z := rfl @[simp] theorem dieudonneDatum_V_apply (z : DieudonneModule R p A) : (dieudonneDatum R p A).V z = verschiebung R p A z := rfl theorem pow_nsmul_of (x : wittHom R p n A) : p ^ n • of R p A n x = 0 := by rw [← map_nsmul, pow_nsmul_wittHom_eq_zero, map_zero] theorem exists_pow_nsmul_eq_zero (z : DieudonneModule R p A) : ∃ n : ℕ, p ^ n • z = 0 := by obtain ⟨n, x, rfl⟩ := exists_of z exact ⟨n, pow_nsmul_of x⟩ end CharP section Map variable {B : Type w} [CommRing B] [Bialgebra R B] variable (R p) in noncomputable def map (φ : A →ₐc[R] B) : DieudonneModule R p A →+ DieudonneModule R p B := lift R p A (fun n => (of R p B n).comp (wittHomMap p n φ)) fun n x => by rw [AddMonoidHom.comp_apply, AddMonoidHom.comp_apply, wittHomMap_shift, of_shift] @[simp] theorem map_of (φ : A →ₐc[R] B) (x : wittHom R p n A) : map R p φ (of R p A n x) = of R p B n (wittHomMap p n φ x) := lift_of _ _ _ theorem map_verschiebung (φ : A →ₐc[R] B) (z : DieudonneModule R p A) : map R p φ (verschiebung R p A z) = verschiebung R p B (map R p φ z) := by induction z using DieudonneModule.induction_on with | ih n x => rw [verschiebung_of, map_of, map_of, verschiebung_of, wittHomMap_verschiebung] theorem map_frobenius [CharP R p] (φ : A →ₐc[R] B) (z : DieudonneModule R p A) : map R p φ (frobenius R p A z) = frobenius R p B (map R p φ z) := by induction z using DieudonneModule.induction_on with | ih n x => rw [frobenius_of, map_of, map_of, frobenius_of, wittHomMap_frobenius] theorem map_id (z : DieudonneModule R p A) : map R p (BialgHom.id R A) z = z := by induction z using DieudonneModule.induction_on with | ih n x => rw [map_of] congr 1 exact Subtype.ext (TruncWitt.map_id _) theorem map_comp {C : Type*} [CommRing C] [Bialgebra R C] (φ : A →ₐc[R] B) (ψ : B →ₐc[R] C) (z : DieudonneModule R p A) : map R p (ψ.comp φ) z = map R p ψ (map R p φ z) := by induction z using DieudonneModule.induction_on with | ih n x => rw [map_of, map_of, map_of] congr 1 refine Subtype.ext (TruncatedWittVector.ext fun i => ?_) simp only [coe_wittHomMap, TruncWitt.coeff_map] rfl theorem map_injective {φ : A →ₐc[R] B} (hφ : Injective φ) : Injective (map R p φ) := by refine (injective_iff_map_eq_zero _).2 fun z hz => ?_ obtain ⟨n, x, rfl⟩ := exists_of z rw [map_of] at hz have hx : wittHomMap p n φ x = 0 := of_injective n (by rw [hz, map_zero]) rw [wittHomMap_injective hφ (hx.trans (map_zero _).symm), map_zero] end Map end DieudonneModule end Colimit namespace DieudonneModule.Examples variable (R : Type u) [CommRing R] (p : ℕ) [hp : Fact p.Prime] abbrev Ga : Type u := SymmetricAlgebra R R noncomputable def coordinate : Ga R := SymmetricAlgebra.ι R R 1 theorem coordinate_ne_zero [Nontrivial R] : coordinate R ≠ 0 := by intro h have := congrArg (SymmetricAlgebra.lift (LinearMap.id : R →ₗ[R] R)) h rw [coordinate, SymmetricAlgebra.lift_ι_apply, map_zero, LinearMap.id_apply] at this exact one_ne_zero this theorem coeff_zero_add_of_length_one {S : Type v} [CommRing S] (x y : TruncatedWittVector p 1 S) : (x + y).coeff 0 = x.coeff 0 + y.coeff 0 := by obtain ⟨x, rfl⟩ := WittVector.truncate_surjective p 1 S x obtain ⟨y, rfl⟩ := WittVector.truncate_surjective p 1 S y rw [← map_add, WittVector.coeff_truncate, WittVector.coeff_truncate, WittVector.coeff_truncate] exact WittVector.add_coeff_zero x y theorem coordinate_mem_wittHom : TruncatedWittVector.mk p (fun _ : Fin 1 => coordinate R) ∈ wittHom R p 1 (Ga R) := by rw [mem_wittHom_iff] refine TruncatedWittVector.ext fun i => ?_ obtain rfl : i = 0 := Subsingleton.elim _ _ rw [coeff_zero_add_of_length_one, TruncWitt.coeff_map, TruncWitt.coeff_map, TruncWitt.coeff_map, TruncatedWittVector.coeff_mk] change Coalgebra.comul (R := R) (coordinate R) = _ rw [coordinate, SymmetricAlgebra.comul_ι] rfl theorem of_coordinate_ne_zero [Nontrivial R] : DieudonneModule.of R p (Ga R) 1 ⟨TruncatedWittVector.mk p (fun _ : Fin 1 => coordinate R), coordinate_mem_wittHom R p⟩ ≠ 0 := by intro h have h1 := DieudonneModule.of_injective 1 (h.trans (map_zero _).symm) have h2 := congrArg (fun x : wittHom R p 1 (Ga R) => (x : TruncatedWittVector p 1 (Ga R)).coeff 0) h1 simp only [TruncatedWittVector.coeff_mk, AddSubgroup.coe_zero, TruncatedWittVector.coeff_zero] at h2 exact coordinate_ne_zero R h2 end DieudonneModule.Examples end Deformation
Statements phrased using this module (83)
- Honda system of a unipotent k-vector space scheme over ℤₚ
Deformation.DieudonneModule.exists_hondaSystem_addEquiv_smul_eq_map_of_isLocalRing_cartierDual63 below · depth 17 - Local flat classes inject into Honda self-extensions
ResidualGaloisRep.exists_injective_localFlatClassesAd_selfExt_of_hondaSystem_model428 below · depth 17 - Honda system endomorphisms bounded by local invariants of ad ρ̄
ResidualGaloisRep.finrank_endHonda_le_finrank_invariants_of_hondaSystem_model362 below · depth 17 - Order of the Dieudonné module of a unipotent group scheme
Deformation.DieudonneModule.exists_finrank_eq_pow_and_natCard_eq_pow_of_isLocalRing_cartierDual53 below · depth 18 - Fontaine's theorem: (L(G),M(G_k)) is a Honda system
Deformation.DieudonneModule.exists_hondaSystem_L_eq_fontaineHodge8 below · depth 18 - Geometric point count and Dieudonné module order agree
Deformation.DieudonneModule.exists_natCard_algHom_eq_pow_and_natCard_baseChange_eq_pow_of_isLocalRing_cartierDual63 below · depth 18 - Ring action on a Dieudonné module from convolution-additive bialgebra endomorphisms
Deformation.DieudonneModule.exists_ringHom_addMonoidEnd_apply_eq_map1 below · depth 18 - Fontaine layer: ker M(π) surjects onto M(H_V)
Deformation.DieudonneModule.exists_surjective_ker_map_of_bottomLayer169 below · depth 18 - The Dieudonné module functor sends convolution to addition
Deformation.DieudonneModule.map_apply_eq_add_of_toLinearMap_eq_mul_comp_map_comp_comul0 below · depth 18 - Fontaine full faithfulness for unipotent p-group schemes
Deformation.DieudonneModule.map_baseChange_injective_and_exists_map_baseChange_eq280 below · depth 18 - Exactness of Fontaine's functor along a Hopf-kernel extension
Deformation.DieudonneModule.map_baseChange_surjective_injective_fontaineHodge_of_range_eq_hopfKer57 below · depth 18 - Rank symmetry of F and V under a cyclotomic pairing
Deformation.DieudonneModule.natCard_ker_frobenius_eq_natCard_quot_range_verschiebung_of_cyclotomicPairing161 below · depth 18 - Verschiebung cokernel bound for a local–local model of J₀(N)[𝔪]
ModularCurve.natCard_dieudonneModule_quot_range_verschiebung_le_of_local_local_model_heckeTorsion_jZero2,572 below · depth 18 - Flat classes in H¹(ℚₚ,adρ̄) inject into Honda self-extensions
ResidualGaloisRep.exists_injective_flatClassSet_selfExt_of_hondaSystem_model423 below · depth 18 - Verschiebung is injective on Fontaine's submodule L
Deformation.DieudonneModule.eq_zero_of_mem_fontaineHodge_of_verschiebung_eq_zero0 below · depth 19 - Left exactness of the Dieudonné module functor
Deformation.DieudonneModule.exact_map_hopfKerVal_map1 below · depth 19 - p-torsion of the Dieudonné module lies in L+ker V
Deformation.DieudonneModule.exists_mem_fontaineHodge_add_eq_of_smul_eq_zero2 below · depth 19 - Frobenius on Fontaine's submodule lands in p L
Deformation.DieudonneModule.exists_mem_fontaineHodge_frobenius_eq_smul2 below · depth 19 - Kernel of Frobenius lies in V(L)
Deformation.DieudonneModule.exists_mem_fontaineHodge_verschiebung_eq_of_frobenius_eq_zero2 below · depth 19 - Stabilisation of the Dieudonné module over a perfect field
Deformation.DieudonneModule.exists_surjective_of0 below · depth 19 - Fontaine's submodule is exact along a Hopf-algebra surjection
Deformation.DieudonneModule.fontaineHodge_map_surjective_and_exists_of_mem_range_of_surjective56 below · depth 19 - Full faithfulness of the Dieudonné functor over Fₚ
Deformation.DieudonneModule.map_injective_and_exists_map_eq_of_isLocalRing_cartierDual60 below · depth 19 - Surjectivity of M(π) for surjective π (right exactness)
Deformation.DieudonneModule.map_surjective_of_surjective57 below · depth 19 - Self-dual local–local Dieudonné modules: #ker F=#cokerV
Deformation.DieudonneModule.natCard_ker_frobenius_eq_natCard_quot_range_verschiebung_of_nonempty_bialgEquiv_cartierDual_zmodp67 below · depth 19 - Kernel of Verschiebung on the Dieudonné module is the primitives
Deformation.DieudonneModule.nonempty_ker_verschiebung_addEquiv_primitives1 below · depth 19 - Fontaine's criterion for lifting special-fibre points, residue field mathbf Fₚ
Deformation.exists_algHom_baseChange_eq_of_forall_map_mem_fontaineKer_zmodp279 below · depth 19 - Fontaine–Conrad presentation of a locally flat ad-cocycle
ResidualGaloisRep.exists_fontaineConradPresentation_of_isLocallyFlatCocycleAd206 below · depth 19 - Faithfulness of the Dieudonné module map
Deformation.DieudonneModule.eq_of_map_eq_of_isLocalRing_cartierDual51 below · depth 20 - Fullness of the Dieudonné module functor over 𝔽ₚ
Deformation.DieudonneModule.exists_map_eq_of_isLocalRing_cartierDual56 below · depth 20 - Cokernel of Frobenius counts the Dieudonné module of B
Deformation.DieudonneModule.natCard_quot_range_frobenius_eq_natCard_of_ker_eq_map_frobenius_ker_counit_zmodp50 below · depth 20 - One-coordinate lift into the Fontaine kernel
Deformation.TruncWitt.exists_mem_fontaineKer_truncate_eq_of_frobeniusFun_mem_fontaineKer0 below · depth 20 - Lifting Fontaine-compatible points of unipotent p-divisible groups over ℤₚ
Deformation.exists_algHom_baseChange_eq_of_forall_map_mem_fontaineKer_of_forall_ker_eq_torsionIdeal_zmodp169 below · depth 20 - Fontaine's criterion descends along a bialgebra quotient
Deformation.exists_algHom_baseChange_eq_of_ker_eq_map_ker_counit0 below · depth 20 - Fontaine's membership criterion for truncated Witt covectors
Deformation.mem_wittHom_of_mem_fontaineKer_of_verschiebung_mem_wittHom0 below · depth 20 - Verschiebung cokernel of the Dieudonné module of J₀(N)[p] at 𝔪
ModularCurve.natCard_dieudonneModule_quot_range_verschiebung_sup_range_map_hecke_eq_card_torsionBySet_intLattice_quotient2,510 below · depth 20 - Unipotent Hopf algebras: order p^L and Dieudonné module bound
Deformation.DieudonneModule.exists_finrank_eq_pow_and_natCard_le_pow_of_isLocalRing_cartierDual15 below · depth 21 - Fontaine's submodule surjects along a Hopf algebra quotient
Deformation.DieudonneModule.exists_mem_fontaineHodge_map_eq_of_isLocalRing_cartierDual56 below · depth 21 - Dimension bound for the Witt-coordinate subalgebra of a finite F,V-stable subgroup
Deformation.DieudonneModule.finrank_adjoin_coeff_le_natCard0 below · depth 21 - Exactness of the Dieudonné module functor at a kernel
Deformation.DieudonneModule.map_surjective_and_exact_map_of_ker_eq_map_ker_counit49 below · depth 21 - Verschiebung cokernel counts primitives modulo bialgebra endomorphisms
Deformation.DieudonneModule.natCard_quot_range_verschiebung_sup_iSup_range_map_eq_natCard_primitives_quot_of_pow_eq_one22 below · depth 21 - Fontaine's point criterion passes to extensions of group schemes
Deformation.exists_algHom_baseChange_eq_of_faithfullyFlat_of_ker_eq_map_ker_counit0 below · depth 21 - 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 - Fontaine's fourth step for unipotent groups over mathbf Zₚ
Deformation.exists_pDivisibleTower_ker_eq_map_bijective_baseChange_of_isLocalRing_cartierDual_zmodp275 below · depth 21 - Kernel of Verschiebung equals the primitives, equivariantly
Deformation.DieudonneModule.exists_ker_verschiebung_addEquiv_primitives_apply_of_eq_and_apply_map1 below · depth 22 - Fontaine's fourth step for unipotent groups over 𝒪
Deformation.exists_pDivisibleTower_ker_eq_map_bijective_map_comp_mem_fontaineKer_of_isLocalRing_cartierDual_zmodp274 below · depth 22 - Rescaled-logarithm Witt vectors lie in `wittHom` and `fontaineKer`
Deformation.exists_wittVector_ghostComponent_truncate_map_mem_wittHom_fontaineKer_of_mvFormalGroup37 below · depth 22 - Dieudonné isomorphisms over Fₚ come from bialgebra isomorphisms
Deformation.DieudonneModule.exists_bijective_map_eq_of_addEquiv_of_isLocalRing_cartierDual61 below · depth 23 - Multiplication by n induces n on the Dieudonné module
Deformation.DieudonneModule.exists_coe_eq_nsmulAlgHom_and_map_eq_nsmul0 below · depth 23 - Realising Honda systems by unipotent p-divisible towers
Deformation.HondaSystem.exists_pDivisibleTower_dieudonneModule_of_range_pow_le180 below · depth 23 - Morphisms of Honda systems come from p-divisible towers
Deformation.HondaSystem.exists_towerHom_map_comp_eq_comp_of_map_L_le181 below · depth 23 - Honda system of an isogeny kernel as a cokernel
Deformation.HondaSystem.map_comp_surjective_and_ker_and_fontaineHodge_eq_of_ker_eq_map_ker_counit62 below · depth 23 - 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 - Realising a Dieudonné datum by a p-divisible tower over Fₚ
Deformation.DieudonneDatum.exists_pDivisibleTower_zmod_dieudonneModule_of_range_pow_le71 below · depth 24 - Fontaine lifting of a unipotent p-divisible tower over mathbf Fₚ
Deformation.HondaSystem.exists_pDivisibleTower_bijective_map_mem_fontaineHodge_of_pDivisibleTower_zmod159 below · depth 24 - Far Witt components of the logarithm covector lie in pR
Deformation.map_coeff_mem_span_of_forall_coeff_ghostComponent_eq_logCovector26 below · depth 24 - Finite Dieudonné datum with nilpotent V comes from a Hopf algebra
Deformation.DieudonneDatum.exists_hopfAlgebra_zmod_addEquiv_dieudonneModule_of_isNilpotent69 below · depth 25 - 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 - Points of a unipotent group scheme as F,V-maps of Dieudonné modules
Deformation.DieudonneModule.eval_injective_and_exists_eval_eq_of_isLocalRing_cartierDual58 below · depth 26 - 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 - Fontaine's normalised coordinates on the connected factor
Deformation.HondaSystem.exists_mvFormalGroup_basis_coeff_eq_normalForm93 below · depth 26 - Rank of the connected Fitting summand equals connected height
Deformation.HondaSystem.finrank_eq_of_isCompl_of_bijective_tensorProduct_comul59 below · depth 26 - Fontaine–Hodge membership at a twisted Tate level
Deformation.HondaSystem.map_apply_basis_mem_fontaineHodge_of_cocycle3 below · depth 26 - Fitting summands of a Honda system and the connected–étale splitting
Deformation.HondaSystem.map_eq_zero_of_mem_of_isCompl_of_bijective_tensorProduct2 below · depth 26 - Convergence of Fontaine's w-series when c_k ∈ pg eventually
Deformation.PLoc.isPadicLimit_wPartialSum_wSeries_of_eventually_mem_span0 below · depth 26 - Tautological classes generate and present the Witt-kernel Dieudonné module
Deformation.WittKernel.addSubgroup_eq_top_and_exists_addMonoidHom_apply_tautoClass_eq_of_pow_eq58 below · depth 26 - Compatible normalised lifts of Dieudonné covector components
PDivisibleGroup.exists_compatible_lift_coeff_eq_of_surjective_tower_zmodp0 below · depth 26 - Additivity of the Dieudonné module along a splitting
Deformation.DieudonneModule.bijective_prod_map_of_bijective_tensorProduct_comul1 below · depth 27 - Frobenius is nilpotent on the Dieudonné module of a local bialgebra
Deformation.DieudonneModule.exists_frobenius_iterate_eq_zero_of_isLocalRing0 below · depth 27 - Covector coordinates of a compatible Dieudonné family
Deformation.DieudonneModule.exists_mvPowerSeries_coeff_eq_apply_of_forall_map_eq0 below · depth 27 - Frobenius is bijective on the Dieudonné module of a reduced bialgebra
Deformation.DieudonneModule.frobenius_bijective_of_isReduced0 below · depth 27 - Continuity of the w-series in the evaluation point
Deformation.FontaineLift.wSeries_adicEval_sub_wSeries_adicEval_mem_powSub2 below · depth 27 - Fontaine's linear parts λ₀,λ₁ with nilpotent C
Deformation.HondaSystem.exists_linearMap_surjective_mulVec_isNilpotent_coeff_eq65 below · depth 27 - Additivity of the Dieudonné module on a tensor product
Deformation.DieudonneModule.exists_addEquiv_prod_apply_eq_map_of_tensorProduct0 below · depth 28 - Dieudonné module modulo Frobenius is the cotangent space
Deformation.DieudonneModule.exists_addMonoidHom_cotangent_surjective_ker_eq_range_frobenius_of_isLocalRing_cartierDual59 below · depth 28