Definitions/Def_MvFormalGroup_NegV2.lean
Negation and inversion for multivariate formal group laws
Throughout, F is a g-dimensional formal group law over a commutative ring R, presented by a family F.toPowerSeries : Fin g → MvPowerSeries (Fin g ⊕ Fin g) R with vanishing constant terms, prescribed linear coefficients \delta in each group of variables, and the associativity identity; IsComm F is the commutativity hypothesis. For a family a = (a_1,\dots ,a_g) of power series in variables indexed by an arbitrary type \tau, all with zero constant term, negApprox F a is the sequence of successive approximations to the inverse of a: it starts at 0 and passes from y^{(n)} to y^{(n+1)}_i = y^{(n)}_i - H_{n+1}\bigl(F_i(a,y^{(n)})\bigr), where H_{n+1} takes the homogeneous component of total degree n+1. The coefficients of y^{(n)} in multidegrees of degree \le n no longer change with n, and negSeries F a is the family obtained by reading off, for each multi-index d, the d-th coefficient of y^{(\deg d)}. It has zero constant terms, satisfies F_i(a,\ominus a)=0 and F_i(\ominus a,a)=0, is the unique such family on either side, has linear coefficients the negatives of those of a, commutes with substitution of series with zero constant term, and for commutative F converts the formal sum of a and b into the formal sum of their inverses. invSeries F is \ominus applied to the family of variables X_i, the inversion series of F, of linear part -1.
On this basis, for commutative G the negation Hom.neg of a homomorphism F \to G is the family \ominus_G \varphi, shown to satisfy the defining substitution identity of a homomorphism; this upgrades the additive commutative monoid of homomorphisms to an additive commutative group, and End F from a semiring to a ring, with \varphi - \psi given by G(\varphi, \ominus\psi), with -1 corresponding to invSeries F (also named invHom F), with the integer multiples [n] and [-(n+1)] identified as F.nthSeries n and \ominus(\mathrm{F.nthSeries}(n+1)), and with the linear-part ring homomorphism sending n \in \mathbb{Z} to n \cdot 1. The preparatory sections supply the coefficient estimates used in the degreewise construction: comparison of coefficients of powers, of finitely supported products of powers and of substitutions under agreement up to a degree bound, vanishing of low-degree coefficients of such products, the unit laws F_i(a,0) = a_i = F_i(0,a) for arbitrary admissible families, and the statement that subtracting a family E homogeneous of degree exactly N from the second argument of F alters the coefficients in degrees \le N by precisely -E_i.
Relation to Mathlib
The power-series substitution calculus used here (MvPowerSeries, subst, HasSubst, homogeneousComponent, order) is Mathlib's; the formal group law structure, its homomorphisms and endomorphism ring, and the inverse series constructed degreewise are the project's own.
Where it is used
These definitions are part of the formal-group infrastructure on which the study of torsion and of p-divisible towers attached to a formal group over a base ring rests, the setting in which the local conditions at p in the deformation-theoretic part of the modularity argument are formulated.
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
- M. Lazard, Commutative Formal Groups, Lecture Notes in Mathematics 443, Springer, 1975
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 919 lines
- 56 declarations
- used in the statements of 537 theorems and imported by 579 proofs
- imports 1 definition modules
Source file: Definitions/Def_MvFormalGroup_NegV2.lean
Imports
Imported by
Def_CerednikDrinfeld_CartierGradedPieceDef_CerednikDrinfeld_CartierLMapFibreDef_CerednikDrinfeld_CartierQuadrupleViaDef_CerednikDrinfeld_CartierStructureConstantsDef_CerednikDrinfeld_CritChartEndMatrixDef_CerednikDrinfeld_CriticalIndexChartDef_CerednikDrinfeld_LubinTateModuleDef_CerednikDrinfeld_ODModuleFrobeniusTwistDef_CerednikDrinfeld_OmegaModuliPackageDef_CerednikDrinfeld_PeriodMapDef_CerednikDrinfeld_PeriodMapSpecDef_CerednikDrinfeld_SpecialFormalFunctorGDef_CerednikDrinfeld_SpecialFormalModuleDef_CerednikDrinfeld_StandardFormalODModuleDef_MvFormalGroup_CartierModuleDef_MvFormalGroup_CartierModuleBaseChangeDef_MvFormalGroup_CartierModuleHomothetyDef_MvFormalGroup_CartierModuleIntVerschiebungDef_MvFormalGroup_CartierModuleWittActionDef_MvFormalGroup_PointsV2Def_MvFormalGroup_WittPointFamilyDef_MvFormalGroup_WittPointFamilyInt
Declarations
- theorem
MvFormalGroup.coeff_pow_congr - theorem
MvFormalGroup.coeff_finsuppProd_pow_congr - theorem
MvFormalGroup.coeff_subst_congr - theorem
MvFormalGroup.coeff_pow_eq_zero_of_degree_lt - theorem
MvFormalGroup.coeff_finsuppProd_pow_eq_zero_of_degree_lt - theorem
MvFormalGroup.coeff_mul_congr_right - theorem
MvFormalGroup.coeff_pow_sub_congr - theorem
MvFormalGroup.coeff_finsuppProd_pow_sub_congr - theorem
MvFormalGroup.subst_elim_zero_right - theorem
MvFormalGroup.subst_elim_zero_left - theorem
MvFormalGroup.coeff_subst_elim_sub_homogeneous - def
MvFormalGroup.negApprox - theorem
MvFormalGroup.negApprox_zero - theorem
MvFormalGroup.negApprox_succ - theorem
MvFormalGroup.constantCoeff_negApprox - theorem
MvFormalGroup.coeff_subst_elim_negApprox - theorem
MvFormalGroup.coeff_negApprox_stable - def
MvFormalGroup.negSeries - theorem
MvFormalGroup.coeff_negSeries - theorem
MvFormalGroup.coeff_negSeries_eq_negApprox - theorem
MvFormalGroup.constantCoeff_negSeries - theorem
MvFormalGroup.hasSubst_negSeries - theorem
MvFormalGroup.subst_elim_negSeries - theorem
MvFormalGroup.coeff_single_negSeries - theorem
MvFormalGroup.subst_subst_elim - theorem
MvFormalGroup.subst_elim_negSeries_left - theorem
MvFormalGroup.negSeries_unique - theorem
MvFormalGroup.negSeries_unique_left - def
MvFormalGroup.invSeries - theorem
MvFormalGroup.constantCoeff_invSeries - theorem
MvFormalGroup.hasSubst_invSeries - theorem
MvFormalGroup.subst_elim_X_invSeries - theorem
MvFormalGroup.subst_elim_invSeries_X - theorem
MvFormalGroup.subst_negSeries - theorem
MvFormalGroup.negSeries_elim_add - def
MvFormalGroup.Hom.neg - theorem
MvFormalGroup.Hom.toPowerSeries_neg - instance
MvFormalGroup.Hom.instNeg - instance
MvFormalGroup.Hom.instAddCommGroup - theorem
MvFormalGroup.Hom.toPowerSeries_neg' - theorem
MvFormalGroup.Hom.toPowerSeries_sub - instance
MvFormalGroup.End.instAddCommGroup - instance
MvFormalGroup.End.instRing - theorem
MvFormalGroup.End.toPowerSeries_neg - theorem
MvFormalGroup.End.toPowerSeries_sub - theorem
MvFormalGroup.End.toPowerSeries_neg_one - theorem
MvFormalGroup.End.toPowerSeries_intCast_ofNat - theorem
MvFormalGroup.End.toPowerSeries_intCast_negSucc - def
MvFormalGroup.invHom - theorem
MvFormalGroup.toPowerSeries_invHom - theorem
MvFormalGroup.linearPart_negSeries - theorem
MvFormalGroup.coeff_single_invSeries - theorem
MvFormalGroup.linearPart_invSeries - theorem
MvFormalGroup.linearPartHom_neg - theorem
MvFormalGroup.linearPartHom_neg_one - theorem
MvFormalGroup.linearPartHom_intCast
Source
import Definitions.Def_MvFormalGroup_EndRingV2 set_option autoImplicit false noncomputable section open MvPowerSeries namespace MvFormalGroup variable {g h k : ℕ} {R : Type*} [CommRing R] section Congr variable {τ : Type*} theorem coeff_pow_congr {c c' : MvPowerSeries τ R} {n : ℕ} (h : ∀ e : τ →₀ ℕ, e.degree ≤ n → coeff e c = coeff e c') {k : ℕ} {d : τ →₀ ℕ} (hd : d.degree ≤ n) : coeff d (c ^ k) = coeff d (c' ^ k) := by classical induction k generalizing d with | zero => rfl | succ k IH => rw [pow_succ, pow_succ, coeff_mul, coeff_mul] refine Finset.sum_congr rfl fun p hp => ?_ rw [Finset.HasAntidiagonal.mem_antidiagonal] at hp have h1 : p.1.degree ≤ n := by refine le_trans ?_ hd rw [← hp, map_add] exact Nat.le_add_right _ _ have h2 : p.2.degree ≤ n := by refine le_trans ?_ hd rw [← hp, map_add] exact Nat.le_add_left _ _ rw [IH h1, h p.2 h2] theorem coeff_finsuppProd_pow_congr {σ' : Type*} {c c' : σ' → MvPowerSeries τ R} {n : ℕ} (h : ∀ j, ∀ e : τ →₀ ℕ, e.degree ≤ n → coeff e (c j) = coeff e (c' j)) (m : σ' →₀ ℕ) {d : τ →₀ ℕ} (hd : d.degree ≤ n) : coeff d (m.prod fun j l => c j ^ l) = coeff d (m.prod fun j l => c' j ^ l) := by classical induction m using Finsupp.induction generalizing d with | zero => simp | single_add j l m hjm hl IH => rw [Finsupp.prod_add_index (fun _ _ => pow_zero _) (fun _ _ _ _ => pow_add _ _ _), Finsupp.prod_add_index (fun _ _ => pow_zero _) (fun _ _ _ _ => pow_add _ _ _), Finsupp.prod_single_index (h := fun j' l' => c j' ^ l') (pow_zero _), Finsupp.prod_single_index (h := fun j' l' => c' j' ^ l') (pow_zero _), coeff_mul, coeff_mul] refine Finset.sum_congr rfl fun p hp => ?_ rw [Finset.HasAntidiagonal.mem_antidiagonal] at hp have h1 : p.1.degree ≤ n := by refine le_trans ?_ hd rw [← hp, map_add] exact Nat.le_add_right _ _ have h2 : p.2.degree ≤ n := by refine le_trans ?_ hd rw [← hp, map_add] exact Nat.le_add_left _ _ rw [coeff_pow_congr (h j) h1, IH h2] theorem coeff_subst_congr {σ' : Type*} [Finite σ'] {c c' : σ' → MvPowerSeries τ R} (hc : ∀ j, (c j).constantCoeff = 0) (hc' : ∀ j, (c' j).constantCoeff = 0) {n : ℕ} (h : ∀ j, ∀ e : τ →₀ ℕ, e.degree ≤ n → coeff e (c j) = coeff e (c' j)) (f : MvPowerSeries σ' R) {d : τ →₀ ℕ} (hd : d.degree ≤ n) : coeff d (subst c f) = coeff d (subst c' f) := by rw [coeff_subst (hasSubst_of_constantCoeff_zero hc), coeff_subst (hasSubst_of_constantCoeff_zero hc')] exact finsum_congr fun m => by rw [coeff_finsuppProd_pow_congr h m hd] end Congr section Vanish variable {τ : Type*} theorem coeff_pow_eq_zero_of_degree_lt {c : MvPowerSeries τ R} (hc : c.constantCoeff = 0) {l : ℕ} {d : τ →₀ ℕ} (hd : d.degree < l) : coeff d (c ^ l) = 0 := by classical induction l generalizing d with | zero => omega | succ l IH => rw [pow_succ, coeff_mul] refine Finset.sum_eq_zero fun p hp => ?_ rw [Finset.HasAntidiagonal.mem_antidiagonal] at hp by_cases h1 : p.1.degree < l · rw [IH h1, zero_mul] · have h2 : p.2 = 0 := by by_contra h2 have : 1 ≤ p.2.degree := by rcases Nat.eq_zero_or_pos p.2.degree with hz | hpos · exact absurd ((Finsupp.degree_eq_zero_iff p.2).mp hz) h2 · exact hpos have hdd : p.1.degree + p.2.degree = d.degree := by rw [← hp, map_add] omega rw [h2, coeff_zero_eq_constantCoeff_apply, hc, mul_zero] theorem coeff_finsuppProd_pow_eq_zero_of_degree_lt {σ' : Type*} {c : σ' → MvPowerSeries τ R} (hc : ∀ j, (c j).constantCoeff = 0) {m : σ' →₀ ℕ} {d : τ →₀ ℕ} (hd : d.degree < m.degree) : coeff d (m.prod fun j l => c j ^ l) = 0 := by classical induction m using Finsupp.induction generalizing d with | zero => rw [(Finsupp.degree_eq_zero_iff (0 : σ' →₀ ℕ)).mpr rfl] at hd omega | single_add j l m hjm hl IH => rw [Finsupp.prod_add_index (fun _ _ => pow_zero _) (fun _ _ _ _ => pow_add _ _ _), Finsupp.prod_single_index (h := fun j' l' => c j' ^ l') (pow_zero _), coeff_mul] refine Finset.sum_eq_zero fun p hp => ?_ rw [Finset.HasAntidiagonal.mem_antidiagonal] at hp have hdd : p.1.degree + p.2.degree = d.degree := by rw [← hp, map_add] have hsum : (Finsupp.single j l + m).degree = l + m.degree := by rw [map_add, Finsupp.degree_single] by_cases h1 : p.1.degree < l · rw [coeff_pow_eq_zero_of_degree_lt (hc j) h1, zero_mul] · have h2 : p.2.degree < m.degree := by omega rw [IH h2, mul_zero] end Vanish section SubCongr variable {τ : Type*} theorem coeff_mul_congr_right {u c c' : MvPowerSeries τ R} {K r : ℕ} (hu : ∀ e : τ →₀ ℕ, e.degree < r → coeff e u = 0) (hcc : ∀ e : τ →₀ ℕ, e.degree ≤ K → coeff e c = coeff e c') {d : τ →₀ ℕ} (hd : d.degree ≤ K + r) : coeff d (u * c) = coeff d (u * c') := by classical rw [coeff_mul, coeff_mul] refine Finset.sum_congr rfl fun p hp => ?_ rw [Finset.HasAntidiagonal.mem_antidiagonal] at hp have hdd : p.1.degree + p.2.degree = d.degree := by rw [← hp, map_add] by_cases h1 : p.1.degree < r · rw [hu p.1 h1, zero_mul, zero_mul] · rw [hcc p.2 (by omega)] theorem coeff_pow_sub_congr {c c' : MvPowerSeries τ R} {N : ℕ} (hN : 1 ≤ N) (hc : c.constantCoeff = 0) (hc' : c'.constantCoeff = 0) (hcc : ∀ e : τ →₀ ℕ, e.degree < N → coeff e c = coeff e c') {l : ℕ} {d : τ →₀ ℕ} (hd : d.degree ≤ N + l - 2) : coeff d (c ^ l) = coeff d (c' ^ l) := by classical induction l generalizing d with | zero => rw [pow_zero, pow_zero] | succ l IH => rcases Nat.eq_zero_or_pos l with hl0 | hlpos · subst hl0 rw [pow_one, pow_one] exact hcc d (by omega) · have step1 : coeff d (c ^ (l + 1)) = coeff d (c ^ l * c') := by rw [pow_succ] have hvanish : ∀ e : τ →₀ ℕ, e.degree < l → coeff e (c ^ l) = 0 := fun e he => coeff_pow_eq_zero_of_degree_lt hc he exact coeff_mul_congr_right (K := N - 1) (r := l) hvanish (fun e he => hcc e (by omega)) (by omega) have step2 : coeff d (c ^ l * c') = coeff d (c' ^ l * c') := by rw [mul_comm (c ^ l) c', mul_comm (c' ^ l) c'] have hvanish : ∀ e : τ →₀ ℕ, e.degree < 1 → coeff e c' = 0 := by intro e he have he0 : e = 0 := by rcases Nat.eq_zero_or_pos e.degree with hz | hpos · exact (Finsupp.degree_eq_zero_iff e).mp hz · omega subst he0 rw [coeff_zero_eq_constantCoeff_apply, hc'] exact coeff_mul_congr_right (K := N + l - 2) (r := 1) hvanish (fun e he => IH he) (by omega) rw [step1, step2, ← pow_succ] theorem coeff_finsuppProd_pow_sub_congr {σ' : Type*} {c c' : σ' → MvPowerSeries τ R} {N : ℕ} (hN : 1 ≤ N) (hc : ∀ j, (c j).constantCoeff = 0) (hc' : ∀ j, (c' j).constantCoeff = 0) (hcc : ∀ j, ∀ e : τ →₀ ℕ, e.degree < N → coeff e (c j) = coeff e (c' j)) {m : σ' →₀ ℕ} {d : τ →₀ ℕ} (hd : d.degree ≤ N + m.degree - 2) : coeff d (m.prod fun j l => c j ^ l) = coeff d (m.prod fun j l => c' j ^ l) := by classical induction m using Finsupp.induction generalizing d with | zero => rw [Finsupp.prod_zero_index, Finsupp.prod_zero_index] | single_add j l m hjm hl IH => have hsum : (Finsupp.single j l + m).degree = l + m.degree := by rw [map_add, Finsupp.degree_single] rw [hsum] at hd rw [Finsupp.prod_add_index (fun _ _ => pow_zero _) (fun _ _ _ _ => pow_add _ _ _), Finsupp.prod_add_index (fun _ _ => pow_zero _) (fun _ _ _ _ => pow_add _ _ _), Finsupp.prod_single_index (h := fun j' l' => c j' ^ l') (pow_zero _), Finsupp.prod_single_index (h := fun j' l' => c' j' ^ l') (pow_zero _)] have step1 : coeff d ((c j) ^ l * m.prod fun j' l' => c j' ^ l') = coeff d ((c' j) ^ l * m.prod fun j' l' => c j' ^ l') := by rw [mul_comm ((c j) ^ l) _, mul_comm ((c' j) ^ l) _] have hvanish : ∀ e : τ →₀ ℕ, e.degree < m.degree → coeff e (m.prod fun j' l' => c j' ^ l') = 0 := fun e he => coeff_finsuppProd_pow_eq_zero_of_degree_lt hc he exact coeff_mul_congr_right (K := N + l - 2) (r := m.degree) hvanish (fun e he => coeff_pow_sub_congr hN (hc j) (hc' j) (hcc j) he) (by omega) have step2 : coeff d ((c' j) ^ l * m.prod fun j' l' => c j' ^ l') = coeff d ((c' j) ^ l * m.prod fun j' l' => c' j' ^ l') := by have hvanish : ∀ e : τ →₀ ℕ, e.degree < l → coeff e ((c' j) ^ l) = 0 := fun e he => coeff_pow_eq_zero_of_degree_lt (hc' j) he exact coeff_mul_congr_right (K := N + m.degree - 2) (r := l) hvanish (fun e he => IH he) (by omega) rw [step1, step2] end SubCongr section UnitGeneral variable {τ : Type*} (F : MvFormalGroup g R) theorem subst_elim_zero_right {a : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (i : Fin g) : subst (Sum.elim a fun _ => 0) (F.toPowerSeries i) = a i := by have hsa : HasSubst a := hasSubst_of_constantCoeff_zero ha have hX0 : HasSubst (Sum.elim (fun j => (X j : MvPowerSeries (Fin g) R)) (fun _ => 0) : Fin g ⊕ Fin g → MvPowerSeries (Fin g) R) := hasSubst_elim (fun j => constantCoeff_X j) fun _ => map_zero _ have hfam : (fun s : Fin g ⊕ Fin g => subst a ((Sum.elim (fun j => (X j : MvPowerSeries (Fin g) R)) (fun _ => 0) : Fin g ⊕ Fin g → MvPowerSeries (Fin g) R) s)) = (Sum.elim a (fun _ => 0) : Fin g ⊕ Fin g → MvPowerSeries τ R) := by funext s rcases s with j | j · show subst a (X j) = a j exact subst_X hsa j · show subst a (0 : MvPowerSeries (Fin g) R) = 0 rw [← coe_substAlgHom hsa, map_zero] rw [← hfam, ← subst_comp_subst_apply hX0 hsa, subst_elim_X_zero F i, subst_X hsa] theorem subst_elim_zero_left {a : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (i : Fin g) : subst (Sum.elim (fun _ => 0) a) (F.toPowerSeries i) = a i := by have hsa : HasSubst a := hasSubst_of_constantCoeff_zero ha have h0X : HasSubst (Sum.elim (fun _ => 0) (fun j => (X j : MvPowerSeries (Fin g) R)) : Fin g ⊕ Fin g → MvPowerSeries (Fin g) R) := hasSubst_elim (fun _ => map_zero _) fun j => constantCoeff_X j have hfam : (fun s : Fin g ⊕ Fin g => subst a ((Sum.elim (fun _ => 0) (fun j => (X j : MvPowerSeries (Fin g) R)) : Fin g ⊕ Fin g → MvPowerSeries (Fin g) R) s)) = (Sum.elim (fun _ => 0) a : Fin g ⊕ Fin g → MvPowerSeries τ R) := by funext s rcases s with j | j · show subst a (0 : MvPowerSeries (Fin g) R) = 0 rw [← coe_substAlgHom hsa, map_zero] · show subst a (X j) = a j exact subst_X hsa j rw [← hfam, ← subst_comp_subst_apply h0X hsa, subst_elim_zero_X F i, subst_X hsa] end UnitGeneral section Perturb variable {τ : Type*} (F : MvFormalGroup g R) theorem coeff_subst_elim_sub_homogeneous {a y E : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (hy : ∀ j, (y j).constantCoeff = 0) {N : ℕ} (hN : 1 ≤ N) (hE : ∀ j, ∀ e : τ →₀ ℕ, coeff e (E j) ≠ 0 → e.degree = N) {d : τ →₀ ℕ} (hd : d.degree ≤ N) (i : Fin g) : coeff d (subst (Sum.elim a fun j => y j - E j) (F.toPowerSeries i)) = coeff d (subst (Sum.elim a y) (F.toPowerSeries i)) - coeff d (E i) := by classical have hE0 : ∀ j, (E j).constantCoeff = 0 := by intro j by_contra hcon have h1 : coeff (0 : τ →₀ ℕ) (E j) ≠ 0 := by rwa [coeff_zero_eq_constantCoeff_apply] have h2 := hE j 0 h1 rw [(Finsupp.degree_eq_zero_iff (0 : τ →₀ ℕ)).mpr rfl] at h2 omega have hfam : ∀ s : Fin g ⊕ Fin g, ((Sum.elim a fun j => y j - E j) s).constantCoeff = 0 := by rintro (j | j) · exact ha j · show (y j - E j).constantCoeff = 0 rw [map_sub, hy j, hE0 j, sub_zero] have hfam' : ∀ s : Fin g ⊕ Fin g, ((Sum.elim a y) s).constantCoeff = 0 := by rintro (j | j) exacts [ha j, hy j] have key : ∀ m : (Fin g ⊕ Fin g) →₀ ℕ, coeff d (m.prod fun s l => (Sum.elim a fun j => y j - E j) s ^ l) = coeff d (m.prod fun s l => (Sum.elim a y) s ^ l) - ∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0 := by intro m by_cases hm : ∃ j : Fin g, m = Finsupp.single (Sum.inr j) 1 · obtain ⟨j, rfl⟩ := hm rw [Finsupp.prod_single_index (h := fun s l => (Sum.elim a fun j' => y j' - E j') s ^ l) (pow_zero _), Finsupp.prod_single_index (h := fun s l => (Sum.elim a y) s ^ l) (pow_zero _), pow_one, pow_one, Finset.sum_eq_single j (fun j' _ hj' => if_neg fun hcon => hj' (Sum.inr_injective (Finsupp.single_left_injective one_ne_zero hcon.symm))) (fun hcon => absurd (Finset.mem_univ j) hcon), if_pos rfl] show coeff d (y j - E j) = coeff d (y j) - coeff d (E j) rw [map_sub] · rw [Finset.sum_eq_zero (fun j _ => if_neg fun hcon => hm ⟨j, hcon⟩), sub_zero] rcases Nat.lt_or_ge m.degree 2 with hm2 | hm2 · rcases Nat.lt_or_ge m.degree 1 with hm1 | hm1 · have hm0 : m = 0 := (Finsupp.degree_eq_zero_iff m).mp (by omega) subst hm0 rw [Finsupp.prod_zero_index, Finsupp.prod_zero_index] · have hmem : m ∈ {d' : (Fin g ⊕ Fin g) →₀ ℕ | d'.degree = 1} := by show m.degree = 1 omega rw [← Finsupp.range_single_one] at hmem obtain ⟨s, hs⟩ := hmem have hs' : Finsupp.single s 1 = m := hs rcases s with j | j · rw [← hs', Finsupp.prod_single_index (h := fun s' l => (Sum.elim a fun j' => y j' - E j') s' ^ l) (pow_zero _), Finsupp.prod_single_index (h := fun s' l => (Sum.elim a y) s' ^ l) (pow_zero _), pow_one, pow_one] rfl · exact absurd ⟨j, hs'.symm⟩ hm · have hcc : ∀ s : Fin g ⊕ Fin g, ∀ e : τ →₀ ℕ, e.degree < N → coeff e ((Sum.elim a fun j => y j - E j) s) = coeff e ((Sum.elim a y) s) := by rintro (j | j) e he · rfl · show coeff e (y j - E j) = coeff e (y j) have hEe : coeff e (E j) = 0 := by by_contra hcon have := hE j e hcon omega rw [map_sub, hEe, sub_zero] exact coeff_finsuppProd_pow_sub_congr hN hfam hfam' hcc (by omega) have hsplit : (fun m : (Fin g ⊕ Fin g) →₀ ℕ => coeff m (F.toPowerSeries i) • coeff d (m.prod fun s l => (Sum.elim a fun j => y j - E j) s ^ l)) = fun m => coeff m (F.toPowerSeries i) • coeff d (m.prod fun s l => (Sum.elim a y) s ^ l) - coeff m (F.toPowerSeries i) • (∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0) := by funext m rw [key m, smul_sub] have hfin1 : (Function.support fun m : (Fin g ⊕ Fin g) →₀ ℕ => coeff m (F.toPowerSeries i) • coeff d (m.prod fun s l => (Sum.elim a y) s ^ l)).Finite := by refine Set.Finite.subset (Finsupp.finite_of_degree_le (σ := Fin g ⊕ Fin g) d.degree) ?_ intro m hm show m.degree ≤ d.degree by_contra hcon apply hm show coeff m (F.toPowerSeries i) • coeff d (m.prod fun s l => (Sum.elim a y) s ^ l) = 0 rw [coeff_finsuppProd_pow_eq_zero_of_degree_lt hfam' (by omega), smul_zero] have hfin2 : (Function.support fun m : (Fin g ⊕ Fin g) →₀ ℕ => coeff m (F.toPowerSeries i) • (∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0)).Finite := by refine Set.Finite.subset (Set.finite_range fun j : Fin g => Finsupp.single (Sum.inr j) 1) ?_ intro m hm by_contra hmem apply hm show coeff m (F.toPowerSeries i) • (∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0) = 0 have hz : (∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0) = 0 := Finset.sum_eq_zero fun j _ => if_neg fun hcon => hmem ⟨j, hcon.symm⟩ rw [hz, smul_zero] have hδ : (∑ᶠ m : (Fin g ⊕ Fin g) →₀ ℕ, coeff m (F.toPowerSeries i) • (∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0)) = coeff d (E i) := by rw [finsum_eq_finsetSum_of_support_subset _ (s := Finset.univ.image fun j : Fin g => Finsupp.single (Sum.inr j) 1) (fun m hm => ?_), Finset.sum_image (fun j _ j' _ hjj => Sum.inr_injective (Finsupp.single_left_injective one_ne_zero hjj))] · have hterm : ∀ j : Fin g, coeff (Finsupp.single (Sum.inr j) 1) (F.toPowerSeries i) • (∑ j' : Fin g, if (Finsupp.single (Sum.inr j) 1 : (Fin g ⊕ Fin g) →₀ ℕ) = Finsupp.single (Sum.inr j') 1 then coeff d (E j') else 0) = (if i = j then 1 else 0) * coeff d (E j) := by intro j rw [F.coeff_single_inr i j, Finset.sum_eq_single j (fun j' _ hj' => if_neg fun hcon => hj' (Sum.inr_injective (Finsupp.single_left_injective one_ne_zero hcon)).symm) (fun hcon => absurd (Finset.mem_univ j) hcon), if_pos rfl, smul_eq_mul] rw [Finset.sum_congr rfl fun j _ => hterm j, Finset.sum_eq_single i (fun j _ hj => by rw [if_neg fun hcon => hj hcon.symm, zero_mul]) (fun hcon => absurd (Finset.mem_univ i) hcon), if_pos rfl, one_mul] · by_contra hmem apply hm show coeff m (F.toPowerSeries i) • (∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0) = 0 have hz : (∑ j : Fin g, if m = Finsupp.single (Sum.inr j) 1 then coeff d (E j) else 0) = 0 := Finset.sum_eq_zero fun j _ => if_neg fun hcon => hmem (by rw [hcon] exact Finset.mem_coe.mpr (Finset.mem_image_of_mem _ (Finset.mem_univ j))) rw [hz, smul_zero] rw [coeff_subst (hasSubst_of_constantCoeff_zero hfam), coeff_subst (hasSubst_of_constantCoeff_zero hfam'), hsplit, finsum_sub_distrib hfin1 hfin2, hδ] end Perturb section NegSeries variable {τ : Type*} (F : MvFormalGroup g R) def negApprox (a : Fin g → MvPowerSeries τ R) : ℕ → Fin g → MvPowerSeries τ R | 0 => fun _ => 0 | n + 1 => fun i => negApprox a n i - homogeneousComponent (n + 1) (subst (Sum.elim a (negApprox a n)) (F.toPowerSeries i)) @[simp] theorem negApprox_zero (a : Fin g → MvPowerSeries τ R) : negApprox F a 0 = fun _ => 0 := rfl theorem negApprox_succ (a : Fin g → MvPowerSeries τ R) (n : ℕ) : negApprox F a (n + 1) = fun i => negApprox F a n i - homogeneousComponent (n + 1) (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries i)) := rfl theorem constantCoeff_negApprox (a : Fin g → MvPowerSeries τ R) (n : ℕ) (i : Fin g) : (negApprox F a n i).constantCoeff = 0 := by induction n with | zero => show (0 : MvPowerSeries τ R).constantCoeff = 0 exact map_zero _ | succ n IH => show (negApprox F a n i - homogeneousComponent (n + 1) (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries i))).constantCoeff = 0 have h0 : ((0 : τ →₀ ℕ)).degree = 0 := (Finsupp.degree_eq_zero_iff (0 : τ →₀ ℕ)).mpr rfl have hne : ((0 : τ →₀ ℕ)).degree ≠ n + 1 := by omega rw [map_sub, IH, ← coeff_zero_eq_constantCoeff_apply, coeff_homogeneousComponent, if_neg hne, sub_zero] theorem coeff_subst_elim_negApprox {a : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) {n : ℕ} {d : τ →₀ ℕ} (hdn : d.degree ≤ n) (hd0 : d ≠ 0) (i : Fin g) : coeff d (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries i)) = 0 := by induction n generalizing d with | zero => exact absurd ((Finsupp.degree_eq_zero_iff d).mp (Nat.le_zero.mp hdn)) hd0 | succ n IH => have hy : ∀ j, (negApprox F a n j).constantCoeff = 0 := fun j => constantCoeff_negApprox F a n j have hE : ∀ j, ∀ e : τ →₀ ℕ, coeff e (homogeneousComponent (n + 1) (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries j))) ≠ 0 → e.degree = n + 1 := by intro j e hne by_contra hcon rw [coeff_homogeneousComponent, if_neg hcon] at hne exact hne rfl rw [negApprox_succ, coeff_subst_elim_sub_homogeneous F ha hy (Nat.succ_le_succ (Nat.zero_le n)) hE hdn i] rcases Nat.lt_or_ge d.degree (n + 1) with hlt | hge · have h1 : coeff d (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries i)) = 0 := IH (by omega) hd0 have h2 : coeff d (homogeneousComponent (n + 1) (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries i))) = 0 := by rw [coeff_homogeneousComponent, if_neg (by omega)] rw [h1, h2, sub_zero] · have hdeq : d.degree = n + 1 := by omega have h2 : coeff d (homogeneousComponent (n + 1) (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries i))) = coeff d (subst (Sum.elim a (negApprox F a n)) (F.toPowerSeries i)) := by rw [coeff_homogeneousComponent, if_pos hdeq] rw [h2, sub_self] theorem coeff_negApprox_stable (a : Fin g → MvPowerSeries τ R) {n m : ℕ} (hnm : n ≤ m) {d : τ →₀ ℕ} (hd : d.degree ≤ n) (i : Fin g) : coeff d (negApprox F a m i) = coeff d (negApprox F a n i) := by revert hnm induction m with | zero => intro hnm have hn0 : n = 0 := by omega subst hn0 rfl | succ m IH => intro hnm rcases Nat.lt_or_ge n (m + 1) with hlt | hge · have hstep : coeff d (negApprox F a (m + 1) i) = coeff d (negApprox F a m i) := by rw [negApprox_succ] show coeff d (negApprox F a m i - homogeneousComponent (m + 1) (subst (Sum.elim a (negApprox F a m)) (F.toPowerSeries i))) = coeff d (negApprox F a m i) rw [map_sub, coeff_homogeneousComponent, if_neg (by omega), sub_zero] rw [hstep] exact IH (by omega) · have hn : n = m + 1 := by omega subst hn rfl def negSeries (a : Fin g → MvPowerSeries τ R) : Fin g → MvPowerSeries τ R := fun i => (fun d => coeff d (negApprox F a d.degree i) : (τ →₀ ℕ) → R) theorem coeff_negSeries (a : Fin g → MvPowerSeries τ R) (d : τ →₀ ℕ) (i : Fin g) : coeff d (negSeries F a i) = coeff d (negApprox F a d.degree i) := rfl theorem coeff_negSeries_eq_negApprox (a : Fin g → MvPowerSeries τ R) {n : ℕ} {d : τ →₀ ℕ} (hd : d.degree ≤ n) (i : Fin g) : coeff d (negSeries F a i) = coeff d (negApprox F a n i) := by rw [coeff_negSeries] exact (coeff_negApprox_stable F a hd (le_refl d.degree) i).symm @[simp] theorem constantCoeff_negSeries (a : Fin g → MvPowerSeries τ R) (i : Fin g) : (negSeries F a i).constantCoeff = 0 := by rw [← coeff_zero_eq_constantCoeff_apply, coeff_negSeries, (Finsupp.degree_eq_zero_iff (0 : τ →₀ ℕ)).mpr rfl] show coeff (0 : τ →₀ ℕ) (0 : MvPowerSeries τ R) = 0 exact map_zero _ theorem hasSubst_negSeries (a : Fin g → MvPowerSeries τ R) : HasSubst (negSeries F a) := hasSubst_of_constantCoeff_zero (constantCoeff_negSeries F a) theorem subst_elim_negSeries {a : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (i : Fin g) : subst (Sum.elim a (negSeries F a)) (F.toPowerSeries i) = 0 := by have hneg : ∀ j, (negSeries F a j).constantCoeff = 0 := constantCoeff_negSeries F a ext d rw [map_zero] by_cases hd0 : d = 0 · subst hd0 rw [coeff_zero_eq_constantCoeff_apply] exact constantCoeff_subst_elim F ha hneg i · have hagree : ∀ s : Fin g ⊕ Fin g, ∀ e : τ →₀ ℕ, e.degree ≤ d.degree → coeff e ((Sum.elim a (negSeries F a)) s) = coeff e ((Sum.elim a (negApprox F a d.degree)) s) := by rintro (j | j) e he · rfl · exact coeff_negSeries_eq_negApprox F a he j have hfam1 : ∀ s : Fin g ⊕ Fin g, ((Sum.elim a (negSeries F a)) s).constantCoeff = 0 := by rintro (j | j) exacts [ha j, hneg j] have hfam2 : ∀ s : Fin g ⊕ Fin g, ((Sum.elim a (negApprox F a d.degree)) s).constantCoeff = 0 := by rintro (j | j) exacts [ha j, constantCoeff_negApprox F a _ j] rw [coeff_subst_congr hfam1 hfam2 hagree (F.toPowerSeries i) (le_refl d.degree)] exact coeff_subst_elim_negApprox F ha (le_refl d.degree) hd0 i theorem coeff_single_negSeries {a : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (t : τ) (i : Fin g) : coeff (Finsupp.single t 1) (negSeries F a i) = - coeff (Finsupp.single t 1) (a i) := by have hdeg : (Finsupp.single t 1).degree = 1 := Finsupp.degree_single t 1 rw [coeff_negSeries, hdeg] show coeff (Finsupp.single t 1) (negApprox F a (0 + 1) i) = - coeff (Finsupp.single t 1) (a i) rw [negApprox_succ] show coeff (Finsupp.single t 1) (negApprox F a 0 i - homogeneousComponent (0 + 1) (subst (Sum.elim a (negApprox F a 0)) (F.toPowerSeries i))) = - coeff (Finsupp.single t 1) (a i) simp only [negApprox_zero] rw [map_sub, map_zero, zero_sub, coeff_homogeneousComponent, if_pos (by omega), subst_elim_zero_right F ha i] end NegSeries section Group variable {τ τ' : Type*} (F : MvFormalGroup g R) theorem subst_subst_elim {u v : Fin g → MvPowerSeries τ R} (hu : ∀ j, (u j).constantCoeff = 0) (hv : ∀ j, (v j).constantCoeff = 0) {b : τ → MvPowerSeries τ' R} (hb : HasSubst b) (i : Fin g) : subst b (subst (Sum.elim u v) (F.toPowerSeries i)) = subst (Sum.elim (fun j => subst b (u j)) fun j => subst b (v j)) (F.toPowerSeries i) := by rw [subst_comp_subst_apply (hasSubst_elim hu hv) hb] congr 1 funext s rcases s with j | j <;> rfl theorem subst_elim_negSeries_left {a : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (i : Fin g) : subst (Sum.elim (negSeries F a) a) (F.toPowerSeries i) = 0 := by have hy : ∀ j, (negSeries F a j).constantCoeff = 0 := constantCoeff_negSeries F a have hz : ∀ j, (negSeries F (negSeries F a) j).constantCoeff = 0 := constantCoeff_negSeries F _ have tup1 : ∀ j, subst (Sum.elim (negSeries F a) (negSeries F (negSeries F a))) (F.toPowerSeries j) = 0 := subst_elim_negSeries F hy have haz : a = negSeries F (negSeries F a) := by funext j have s1 : a j = subst (Sum.elim a fun _ => 0) (F.toPowerSeries j) := (subst_elim_zero_right F ha j).symm have s2 : (fun _ : Fin g => (0 : MvPowerSeries τ R)) = fun j' => subst (Sum.elim (negSeries F a) (negSeries F (negSeries F a))) (F.toPowerSeries j') := by funext j' exact (tup1 j').symm have s3 : subst (Sum.elim a fun j' => subst (Sum.elim (negSeries F a) (negSeries F (negSeries F a))) (F.toPowerSeries j')) (F.toPowerSeries j) = subst (Sum.elim (fun j' => subst (Sum.elim a (negSeries F a)) (F.toPowerSeries j')) (negSeries F (negSeries F a))) (F.toPowerSeries j) := (subst_elim_assoc F ha hy hz j).symm have s4 : (fun j' => subst (Sum.elim a (negSeries F a)) (F.toPowerSeries j')) = fun _ : Fin g => (0 : MvPowerSeries τ R) := by funext j' exact subst_elim_negSeries F ha j' rw [s1, s2, s3, s4, subst_elim_zero_left F hz j] nth_rewrite 2 [haz] exact tup1 i theorem negSeries_unique {a y : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (hy : ∀ j, (y j).constantCoeff = 0) (h : ∀ i, subst (Sum.elim a y) (F.toPowerSeries i) = 0) : y = negSeries F a := by have hneg : ∀ j, (negSeries F a j).constantCoeff = 0 := constantCoeff_negSeries F a funext j have s1 : y j = subst (Sum.elim (fun _ => 0) y) (F.toPowerSeries j) := (subst_elim_zero_left F hy j).symm have s2 : (fun _ : Fin g => (0 : MvPowerSeries τ R)) = fun j' => subst (Sum.elim (negSeries F a) a) (F.toPowerSeries j') := by funext j' exact (subst_elim_negSeries_left F ha j').symm have s3 : subst (Sum.elim (fun j' => subst (Sum.elim (negSeries F a) a) (F.toPowerSeries j')) y) (F.toPowerSeries j) = subst (Sum.elim (negSeries F a) fun j' => subst (Sum.elim a y) (F.toPowerSeries j')) (F.toPowerSeries j) := subst_elim_assoc F hneg ha hy j have s4 : (fun j' => subst (Sum.elim a y) (F.toPowerSeries j')) = fun _ : Fin g => (0 : MvPowerSeries τ R) := by funext j' exact h j' rw [s1, s2, s3, s4, subst_elim_zero_right F hneg j] theorem negSeries_unique_left {a y : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (hy : ∀ j, (y j).constantCoeff = 0) (h : ∀ i, subst (Sum.elim y a) (F.toPowerSeries i) = 0) : y = negSeries F a := by have hneg : ∀ j, (negSeries F a j).constantCoeff = 0 := constantCoeff_negSeries F a funext j have s1 : y j = subst (Sum.elim y fun _ => 0) (F.toPowerSeries j) := (subst_elim_zero_right F hy j).symm have s2 : (fun _ : Fin g => (0 : MvPowerSeries τ R)) = fun j' => subst (Sum.elim a (negSeries F a)) (F.toPowerSeries j') := by funext j' exact (subst_elim_negSeries F ha j').symm have s3 : subst (Sum.elim y fun j' => subst (Sum.elim a (negSeries F a)) (F.toPowerSeries j')) (F.toPowerSeries j) = subst (Sum.elim (fun j' => subst (Sum.elim y a) (F.toPowerSeries j')) (negSeries F a)) (F.toPowerSeries j) := (subst_elim_assoc F hy ha hneg j).symm have s4 : (fun j' => subst (Sum.elim y a) (F.toPowerSeries j')) = fun _ : Fin g => (0 : MvPowerSeries τ R) := by funext j' exact h j' rw [s1, s2, s3, s4, subst_elim_zero_left F hneg j] end Group section InvSeries variable (F : MvFormalGroup g R) def invSeries : Fin g → MvPowerSeries (Fin g) R := negSeries F fun j => X j @[simp] theorem constantCoeff_invSeries (i : Fin g) : (invSeries F i).constantCoeff = 0 := constantCoeff_negSeries F _ i theorem hasSubst_invSeries : HasSubst (invSeries F) := hasSubst_of_constantCoeff_zero (constantCoeff_invSeries F) theorem subst_elim_X_invSeries (i : Fin g) : subst (Sum.elim (fun j => (X j : MvPowerSeries (Fin g) R)) (invSeries F)) (F.toPowerSeries i) = 0 := subst_elim_negSeries F (fun j => constantCoeff_X j) i theorem subst_elim_invSeries_X (i : Fin g) : subst (Sum.elim (invSeries F) fun j => (X j : MvPowerSeries (Fin g) R)) (F.toPowerSeries i) = 0 := subst_elim_negSeries_left F (fun j => constantCoeff_X j) i end InvSeries section NegSeriesMore variable {τ τ' : Type*} (F : MvFormalGroup g R) theorem subst_negSeries [Finite τ] {a : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) {b : τ → MvPowerSeries τ' R} (hb0 : ∀ s, (b s).constantCoeff = 0) : (fun i => subst b (negSeries F a i)) = negSeries F fun i => subst b (a i) := by have hb : HasSubst b := hasSubst_of_constantCoeff_zero hb0 have hneg : ∀ j, (negSeries F a j).constantCoeff = 0 := constantCoeff_negSeries F a refine negSeries_unique F (fun j => constantCoeff_subst_eq_zero hb hb0 (ha j)) (fun j => constantCoeff_subst_eq_zero hb hb0 (hneg j)) fun i => ?_ rw [← subst_subst_elim F ha hneg hb i, subst_elim_negSeries F ha i, ← coe_substAlgHom hb, map_zero] theorem negSeries_elim_add [IsComm F] {a b : Fin g → MvPowerSeries τ R} (ha : ∀ j, (a j).constantCoeff = 0) (hb : ∀ j, (b j).constantCoeff = 0) : negSeries F (fun i => subst (Sum.elim a b) (F.toPowerSeries i)) = fun i => subst (Sum.elim (negSeries F a) (negSeries F b)) (F.toPowerSeries i) := by have hna : ∀ j, (negSeries F a j).constantCoeff = 0 := constantCoeff_negSeries F a have hnb : ∀ j, (negSeries F b j).constantCoeff = 0 := constantCoeff_negSeries F b refine (negSeries_unique F (fun j => constantCoeff_subst_elim F ha hb j) (fun j => constantCoeff_subst_elim F hna hnb j) fun i => ?_).symm rw [subst_elim_exchange F ha hb hna hnb i] have hzl : (fun j => subst (Sum.elim a (negSeries F a)) (F.toPowerSeries j)) = fun _ : Fin g => (0 : MvPowerSeries τ R) := by funext j exact subst_elim_negSeries F ha j have hzr : (fun j => subst (Sum.elim b (negSeries F b)) (F.toPowerSeries j)) = fun _ : Fin g => (0 : MvPowerSeries τ R) := by funext j exact subst_elim_negSeries F hb j rw [hzl, hzr] exact subst_elim_zero_right F (fun _ => map_zero _) i end NegSeriesMore namespace Hom variable {F : MvFormalGroup g R} {G : MvFormalGroup h R} def neg [IsComm G] (φ : Hom F G) : Hom F G where toPowerSeries := negSeries G φ.toPowerSeries constantCoeff_eq_zero := constantCoeff_negSeries G φ.toPowerSeries subst_eq := by intro i have hφ : ∀ j, (φ.toPowerSeries j).constantCoeff = 0 := φ.constantCoeff_eq_zero have hbF : ∀ s, ((F.toPowerSeries) s).constantCoeff = 0 := F.constantCoeff_eq_zero have hXl0 : ∀ l : Fin g, ((X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)).constantCoeff = 0 := fun l => constantCoeff_X _ have hXr0 : ∀ l : Fin g, ((X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)).constantCoeff = 0 := fun l => constantCoeff_X _ have hφL : ∀ j, (subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)).constantCoeff = 0 := fun j => constantCoeff_subst_eq_zero (hasSubst_of_constantCoeff_zero hXl0) hXl0 (hφ j) have hφR : ∀ j, (subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j)).constantCoeff = 0 := fun j => constantCoeff_subst_eq_zero (hasSubst_of_constantCoeff_zero hXr0) hXr0 (hφ j) calc subst F.toPowerSeries (negSeries G φ.toPowerSeries i) = negSeries G (fun j => subst F.toPowerSeries (φ.toPowerSeries j)) i := congrFun (subst_negSeries G hφ hbF) i _ = negSeries G (fun j => 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 j)) i := by have hc : (fun j => subst F.toPowerSeries (φ.toPowerSeries j)) = fun j => 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 j) := by funext j exact φ.subst_eq j rw [hc] _ = subst (Sum.elim (negSeries G fun j' => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j')) (negSeries G fun j' => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (φ.toPowerSeries j'))) (G.toPowerSeries i) := congrFun (negSeries_elim_add G hφL hφR) i _ = subst (Sum.elim (fun j' => subst (fun l => (X (Sum.inl l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (negSeries G φ.toPowerSeries j')) fun j' => subst (fun l => (X (Sum.inr l) : MvPowerSeries (Fin g ⊕ Fin g) R)) (negSeries G φ.toPowerSeries j') ) (G.toPowerSeries i) := by rw [← subst_negSeries G hφ hXl0, ← subst_negSeries G hφ hXr0] @[simp] theorem toPowerSeries_neg [IsComm G] (φ : Hom F G) : (Hom.neg φ).toPowerSeries = negSeries G φ.toPowerSeries := rfl instance instNeg [IsComm G] : Neg (Hom F G) := ⟨Hom.neg⟩ instance instAddCommGroup [IsComm G] : AddCommGroup (Hom F G) := { Hom.instAddCommMonoid with neg := Hom.neg zsmul := zsmulRec neg_add_cancel := fun φ => by apply Hom.ext funext i show subst (Sum.elim (negSeries G φ.toPowerSeries) φ.toPowerSeries) (G.toPowerSeries i) = 0 exact subst_elim_negSeries_left G φ.constantCoeff_eq_zero i } @[simp] theorem toPowerSeries_neg' [IsComm G] (φ : Hom F G) : (-φ).toPowerSeries = negSeries G φ.toPowerSeries := rfl @[simp] theorem toPowerSeries_sub [IsComm G] (φ ψ : Hom F G) : (φ - ψ).toPowerSeries = fun i => subst (Sum.elim φ.toPowerSeries (negSeries G ψ.toPowerSeries)) (G.toPowerSeries i) := rfl end Hom namespace End variable (F : MvFormalGroup g R) instance instAddCommGroup [IsComm F] : AddCommGroup (End F) := inferInstanceAs (AddCommGroup (Hom F F)) instance instRing [IsComm F] : Ring (End F) := { End.instSemiring F, End.instAddCommGroup F with } @[simp] theorem toPowerSeries_neg [IsComm F] (φ : End F) : Hom.toPowerSeries (-φ) = negSeries F (Hom.toPowerSeries φ) := rfl @[simp] theorem toPowerSeries_sub [IsComm F] (φ ψ : End F) : Hom.toPowerSeries (φ - ψ) = fun i => subst (Sum.elim (Hom.toPowerSeries φ) (negSeries F (Hom.toPowerSeries ψ))) (F.toPowerSeries i) := rfl theorem toPowerSeries_neg_one [IsComm F] : Hom.toPowerSeries (-1 : End F) = invSeries F := by rw [toPowerSeries_neg] show negSeries F (Hom.toPowerSeries (1 : End F)) = invSeries F rw [toPowerSeries_one] rfl theorem toPowerSeries_intCast_ofNat [IsComm F] (n : ℕ) : Hom.toPowerSeries (((n : ℕ) : ℤ) : End F) = F.nthSeries n := by rw [Int.cast_natCast] exact toPowerSeries_natCast F n theorem toPowerSeries_intCast_negSucc [IsComm F] (n : ℕ) : Hom.toPowerSeries ((Int.negSucc n : ℤ) : End F) = negSeries F (F.nthSeries (n + 1)) := by rw [Int.cast_negSucc, toPowerSeries_neg] show negSeries F (Hom.toPowerSeries (((n + 1 : ℕ) : End F))) = _ rw [toPowerSeries_natCast] end End section InvHom variable (F : MvFormalGroup g R) def invHom [IsComm F] : End F := -(1 : End F) @[simp] theorem toPowerSeries_invHom [IsComm F] : Hom.toPowerSeries (invHom F) = invSeries F := End.toPowerSeries_neg_one F end InvHom section LinearPartNeg variable (F : MvFormalGroup g R) theorem linearPart_negSeries {k : ℕ} {a : Fin g → MvPowerSeries (Fin k) R} (ha : ∀ j, (a j).constantCoeff = 0) : linearPart (negSeries F a) = - linearPart a := by ext i j show coeff (Finsupp.single j 1) (negSeries F a i) = (- linearPart a) i j rw [coeff_single_negSeries F ha j i, Matrix.neg_apply] rfl theorem coeff_single_invSeries (t i : Fin g) : coeff (Finsupp.single t 1) (invSeries F i) = - coeff (Finsupp.single t 1) (X i : MvPowerSeries (Fin g) R) := coeff_single_negSeries F (fun l => constantCoeff_X l) t i theorem linearPart_invSeries : linearPart (invSeries F) = -1 := by classical ext i j show coeff (Finsupp.single j 1) (invSeries F i) = (-1 : Matrix (Fin g) (Fin g) R) i j rw [coeff_single_invSeries F j i, coeff_index_single_X, Matrix.neg_apply, Matrix.one_apply] by_cases hij : j = i · subst hij rfl · rw [if_neg hij, if_neg fun hcon => hij hcon.symm, neg_zero] @[simp] theorem linearPartHom_neg [IsComm F] (φ : End F) : linearPartHom F (-φ) = - linearPartHom F φ := map_neg (linearPartHom F) φ theorem linearPartHom_neg_one [IsComm F] : linearPartHom F (-1 : End F) = -1 := by rw [map_neg, map_one] @[simp] theorem linearPartHom_intCast [IsComm F] (n : ℤ) : linearPartHom F ((n : ℤ) : End F) = n • (1 : Matrix (Fin g) (Fin g) R) := by rw [map_intCast, zsmul_eq_mul, mul_one] end LinearPartNeg end MvFormalGroup
Statements phrased using this module (537)
- 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 - 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 - Fontaine–Hodge membership at a twisted Tate level
Deformation.HondaSystem.map_apply_basis_mem_fontaineHodge_of_cocycle3 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 - 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 - Even kernel degree for a factor of [r^M] on a special formal module
CerednikDrinfeld.FormalODModule.exists_hasKernelOfDegree_pow_two_mul_of_mul_eq_natCast_of_isSpecial_of_hasHeight44 below · depth 28 - A power of p factors through an isogeny of formal 𝒪_D-modules
CerednikDrinfeld.FormalODModule.exists_isODHom_comp_eq_act_pow_of_isIsogenyOfHeight_of_field33 below · depth 28 - Endomorphism-ring export of the quaternionic formal-module dictionary
CerednikDrinfeld.QM.FakeEllipticCurve.exists_le_isOrder_forall_exists_pow_smul_mem_and_act_and_forall_exists_generalLinearGroup_and_exists_isMaximalOrder_inf_eq_of_isOrder_act_of_conj_of_injective16 below · depth 28 - Frame change for the descended Drinfeld package on G
CerednikDrinfeld.SpecialFormal.ModuliPackage.exists_G_bijective_isActBy_iff_isTwistedAct_of_ringEquiv_frame_of_isNoetherianRing0 below · depth 28 - Equivariant gluing of G_Φ with Ω̂ over Noetherian bases
CerednikDrinfeld.SpecialFormal.ModuliPackage.exists_G_bijective_isActBy_iff_isTwistedAct_wittVector_of_exists_forall_bijective_of_isNoetherianRing28 below · depth 28 - Equivariant Drinfeld representability over Noetherian test rings
CerednikDrinfeld.SpecialFormal.ModuliPackage.exists_forall_bijective_and_isBaseChange_and_isPullback_omegaObj_of_isZariskiSheaf_of_isNoetherianRing806 below · depth 28 - A special height-4 formal mathcal O_D-module and its Drinfeld moduli sheaf
CerednikDrinfeld.SpecialFormal.exists_isSpecial_and_hasHeight_four_and_isZariskiSheaf_wittVector_of_isNoetherianRing18 below · depth 28 - Height-4n isogenies between special formal mathcal O_D-modules
CerednikDrinfeld.SpecialFormalODModule.exists_isIsogenyOfHeight_four_mul_of_isAlgClosed58 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 - Kernel degrees multiply under composition of series
CerednikDrinfeld.FormalODModule.HasKernelOfDegree.comp21 below · depth 29 - Degree of the kernel under Xᵢ ↦ Xᵢ^q
CerednikDrinfeld.FormalODModule.HasKernelOfDegree.comp_X_pow0 below · depth 29 - Degree of the outer factor of a composite
CerednikDrinfeld.FormalODModule.HasKernelOfDegree.le_and_of_comp_pow27 below · depth 29 - Nilpotence of coordinates descends along an isogeny
CerednikDrinfeld.FormalODModule.exists_X_pow_mem_span_of_X_pow_mem_span_comp4 below · depth 29 - Drinfeld's standard special formal mathcal O_D-module of height four
CerednikDrinfeld.FormalODModule.exists_forall_isSpecial_map_and_hasHeight_four_map_of_isNilpotent3 below · depth 29 - Existence of a kernel degree over a field
CerednikDrinfeld.FormalODModule.exists_hasKernelOfDegree_of_X_pow_mem_span_of_field15 below · depth 29 - A height homomorphism GL₂(ℚᵣ)→ℤ from quaternionic endomorphisms
CerednikDrinfeld.FormalODModule.exists_monoidHom_generalLinearGroup_finrank_kerAlgebra_eq_pow_of_hasHeight19 below · depth 29 - Frobenius series has kernel of degree r^{2k}
CerednikDrinfeld.FormalODModule.hasKernelOfDegree_frobSeries15 below · depth 29 - Kernel degree from a presenting ideal with constant fibre rank
CerednikDrinfeld.FormalODModule.hasKernelOfDegree_of_span_range_eq0 below · depth 29 - Cancelling an isogeny: β is an mathcal O_D-homomorphism
CerednikDrinfeld.FormalODModule.isODHom_of_comp_eq_act_pow_of_subst_injective0 below · depth 29 - Unique formal completion of a Λ-linear morphism of fake elliptic curves
CerednikDrinfeld.QM.FakeEllipticCurve.existsUnique_hom_isFormalCompletionAlong_of_isFormalModuleVia4 below · depth 29 - Formal completions of q-power quasi-endomorphisms in matrix coordinates
CerednikDrinfeld.QM.FakeEllipticCurve.exists_generalLinearGroup_forall_exists_centralizer_isFormalCompletionAlong_and_apply_eq_zpow_smul_conj13 below · depth 29 - Drinfeld representability for rigidified special formal mathcal O_D-modules
CerednikDrinfeld.SpecialFormal.ModuliPackage.exists_forall_bijective_and_isBaseChange_and_isPullback_and_eq_omegaObj_of_translate_of_isNoetherianRing804 below · depth 29 - Translates by quasi-isogenies r^{-k}e from translates by isogenies
CerednikDrinfeld.SpecialFormal.Rigidified.exists_isAdmissible_and_isTranslate_of_isTranslate_zero2 below · depth 29 - Translate by varpi of an admissible rigidified module exists
CerednikDrinfeld.SpecialFormal.Rigidified.exists_isAdmissible_comp_frobenius_act_frobenius_varpi22 below · depth 29 - Frobenius-twisted translate of an admissible rigidified special formal module
CerednikDrinfeld.SpecialFormal.Rigidified.exists_isAdmissible_comp_frobenius_pow_of_hasKernelOfDegree14 below · depth 29 - Period of an e-translate is a pullback along E(e)
CerednikDrinfeld.SpecialFormal.Rigidified.isPullback_of_isTranslate_of_isTranslate_zero0 below · depth 29 - Determinant of an isogeny of a special formal 𝒪_D-module
CerednikDrinfeld.SpecialFormal.exists_det_eq_mul_pow_of_hasKernelOfDegree22 below · depth 29 - Even height of endomorphisms with invertible coordinate matrix
CerednikDrinfeld.SpecialFormal.exists_hasKernelOfDegree_of_generalLinearGroup_coe_eq22 below · depth 29 - Isogenies of special formal mathcal O_D-modules have even height
CerednikDrinfeld.SpecialFormalODModule.even_of_isIsogenyOfHeight_of_isAlgClosed25 below · depth 29 - Special formal mathcal O_D-modules over algebraically closed k are isogenous
CerednikDrinfeld.SpecialFormalODModule.exists_isIsogenyOfHeight_of_isAlgClosed45 below · depth 29 - Endomorphisms of a special formal mathcal O_D-module form an order
CerednikDrinfeld.SpecialFormalODModule.exists_ringHom_centralizer_injective_of_isAlgClosed46 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 - Cancelling a finite locally free kernel of degree d
CerednikDrinfeld.FormalODModule.HasKernelOfDegree.of_comp24 below · depth 30 - Verschiebung of a height-4 formal mathcal O_D-module
CerednikDrinfeld.FormalODModule.exists_isODHom_map_iterateFrobenius_comp_X_pow_eq_act_pow11 below · depth 30 - Finiteness and projectivity of R[[x,y]]/(φ₁,φ₂)
CerednikDrinfeld.FormalODModule.finite_and_projective_kerAlgebra_of_X_pow_mem14 below · depth 30 - ℤ/2-grading of the Cartier module of a formal mathcal O_D-module
CerednikDrinfeld.FormalODModule.isCompl_gradedPiece_zero_one_of_isCompl_lieZero_lieOne7 below · depth 30 - Unique mathcal O_D-linear formal completion of a Λ-equivariant endomorphism
CerednikDrinfeld.QM.FakeEllipticCurve.existsUnique_centralizer_isFormalCompletionAlong_of_isFormalModuleVia5 below · depth 30 - Endomorphism dictionary matches any splitting up to q^{c₀} and conjugation
CerednikDrinfeld.QM.FakeEllipticCurve.exists_generalLinearGroup_forall_apply_eq_smul_conj_of_isFormalCompletionAlong12 below · depth 30 - Drinfeld data attached to rigidified special formal 𝒪_D-modules
CerednikDrinfeld.SpecialFormal.Rigidified.exists_drinfeldDatum_isIsomorphic_iff_and_exists_cover_and_isBaseChange_of_isAdmissible803 below · depth 30 - Cartier modules of special formal mathcal O_D-modules are isogenous
CerednikDrinfeld.SpecialFormalODModule.exists_addMonoidHom_cartierModule_injective_of_isAlgClosed35 below · depth 30 - A special formal mathcal O_D-module whose endomorphism ring is an order
CerednikDrinfeld.SpecialFormalODModule.exists_forall_nsmul_eq_zero_imp_and_exists_ringHom_centralizer_injective6 below · depth 30 - Drinfeld's deformation ring of a special formal mathcal O_D-module
CerednikDrinfeld.SpecialFormalODModule.exists_isProrepresentedBy_deformations_powerSeries_or_uvCrossingModel219 below · depth 30 - Kernel of the uniformiser has degree q²
CerednikDrinfeld.SpecialFormalODModule.finite_and_finrank_kerAlgebra_varpi9 below · depth 30 - Faithfulness of the Cartier module functor in characteristic p
MvFormalGroup.CartierModule.eq_of_map_eq5 below · depth 30 - Fullness of the Cartier module functor over a perfect field
MvFormalGroup.CartierModule.exists_hom_map_eq_of_perfectRing10 below · depth 30 - Degree formula: colength of the Cartier module of an isogeny
MvFormalGroup.CartierModule.length_quotient_range_mapLinear_eq_of_finrank_eq_pow22 below · depth 30 - Injectivity on Cartier modules for finite-kernel homomorphisms
MvFormalGroup.CartierModule.map_injective_of_finite_quotient0 below · depth 30 - Kernel of the tangent map is V M in characteristic p
MvFormalGroup.CartierModule.tangent_eq_zero_iff_exists_verschiebung_eq1 below · depth 30 - Rigidity of mathcal O_D-linear maps after [p^{nμ}]
CerednikDrinfeld.FormalODModule.act_pow_comp_eq_of_map_eq_and_isODHom_act_pow_comp_of_ker_pow_eq_bot1 below · depth 31 - A canonical ℤₚ²-parametrisation of η_{Φ,0}
CerednikDrinfeld.FormalODModule.exists_addMonoidHom_bijOn_etaPiece_zero_of_isSpecial_of_hasHeight137 below · depth 31 - Constant kernel degree over a ring with connected spectrum
CerednikDrinfeld.FormalODModule.exists_hasKernelOfDegree_of_X_pow_mem_span_of_forall_isIdempotentElem15 below · depth 31 - Kernel degree of a sandwiched mathcal O_D-homomorphism is an even power of r
CerednikDrinfeld.FormalODModule.exists_hasKernelOfDegree_pow_two_mul_of_isODHom_of_comp_eq_act_pow_of_isAlgClosed46 below · depth 31 - An order in M₂(ℚₚ) acting compatibly with a rigidification
CerednikDrinfeld.FormalODModule.exists_ringHom_centralizer_matrix_injective_and_rigidification_compat154 below · depth 31 - Complementary graded Cartier pieces over W(k)/p
CerednikDrinfeld.FormalODModule.isCompl_gradedPiece_of_isSpecial_wittVector_quotient6 below · depth 31 - A graded piece of LieΦ lies in kervarpī
CerednikDrinfeld.FormalODModule.lieZero_le_ker_lieVarpi_or_lieOne_le_ker_lieVarpi_of_isSpecial_wittVector_quotient1 below · depth 31 - The kernel ideal of ρ is an mathcal O_D-stable subgroup
CerednikDrinfeld.FormalODModule.span_act_pow_le_span_and_subst_mem_span_of_isODHom_of_comp_eq_act_pow1 below · depth 31 - Pi-translation preserves the associated Deligne datum
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.eq_of_isPiTranslate_of_isQuadrupleOf148 below · depth 31 - Cartier quadruples: base change of the associated Deligne datum
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.isBaseChange_of_isQuadrupleOf105 below · depth 31 - Uniqueness of the Cartier quadruple as a Drinfeld datum
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.isIsomorphic0 below · depth 31 - Isomorphic Drinfeld quadruples force isomorphic rigidified triples
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.isIsomorphic_of_isIsomorphic_of_lieZero_le_ker790 below · depth 31 - Invariance of the Cartier-quadruple property under isomorphism
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.of_isIsomorphic3 below · depth 31 - Isogeny translation pulls period values back along E(e)
CerednikDrinfeld.SpecialFormal.Rigidified.IsPeriodValue.isPullback_of_isTranslate94 below · depth 31 - Zariski-local realisation of Drinfeld data by admissible rigidified triples
CerednikDrinfeld.SpecialFormal.Rigidified.exists_cover_isAdmissible_isCartierQuadruple_isQuadrupleOf_of_isQuadrupleOf_of_lieVarpi_eq_zero790 below · depth 31 - Admissible rigidified modules admit a Cartier quadruple
CerednikDrinfeld.SpecialFormal.Rigidified.exists_isCartierQuadruple_of_isAdmissible_of_lieVarpi_eq_zero_wittVector282 below · depth 31 - Rank-two lattice with Pi = V in M₀
CerednikDrinfeld.SpecialFormalODModule.exists_fin_two_endAct_varpiEnd_eq_verschiebung_of_isAlgClosed34 below · depth 31 - Pro-representability of deformations of a special formal mathcal O_D-module
CerednikDrinfeld.SpecialFormalODModule.exists_isProrepresentedBy_deformations55 below · depth 31 - mathcal O_D-linear endomorphisms of Drinfeld's standard special module
CerednikDrinfeld.SpecialFormalODModule.exists_ringHom_centralizer_standard_existsUnique_eq_add_mul2 below · depth 31 - Drinfeld's formal moduli of special formal mathcal O_D-modules
CerednikDrinfeld.SpecialFormalODModule.isRegularLocalRing_and_nonempty_algEquiv_powerSeries_or_uvCrossingModel_of_isProrepresentedBy_deformations207 below · depth 31 - Unique finite V-expansion along a tangent basis
MvFormalGroup.CartierModule.existsUnique_eq_sum_verschiebung_homothety_add2 below · depth 31 - V-adic completeness of the Cartier module of a formal group
MvFormalGroup.CartierModule.existsUnique_forall_eq_sum_range_verschiebung_iterate_add0 below · depth 31 - Approximate exactness of the Cartier presentation map
MvFormalGroup.CartierModule.exists_forall_le_order_coeff_sub_of_forall_le_order_presPi1 below · depth 31 - Cokernel of π_* on Cartier modules has rank rank dρ
MvFormalGroup.CartierModule.nonempty_basis_quotient_span_range_map_of_comp_eq_X_pow7 below · depth 31 - Surjectivity of the tangent map of a Cartier module
MvFormalGroup.CartierModule.tangent_surjective3 below · depth 31 - Speciality transports along isomorphisms of formal 𝒪_D-modules
CerednikDrinfeld.FormalODModule.IsSpecial.of_isODHom_of_comp_eq_id0 below · depth 32 - Equal Frobenius twist and balanced r-heights
CerednikDrinfeld.FormalODModule.eq_and_add_eq_add_of_hasKernelOfDegree_of_comp_act_pow_eq_comp29 below · depth 32 - Degree-zero η-piece additively bijective to ℤₚ²
CerednikDrinfeld.FormalODModule.exists_addMonoidHom_bijOn_etaPiece_zero_of_isCanonicalLMap51 below · depth 32 - 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 - Quotients with equal kernel ideals are isomorphic
CerednikDrinfeld.FormalODModule.exists_isODHom_comp_eq_of_span_range_eq_of_hasKernelOfDegree28 below · depth 32 - Endomorphisms of a special formal module as p-adic matrices
CerednikDrinfeld.FormalODModule.exists_ringHom_centralizer_matrix_smul_eq_map_and_nsmul_apply_rigidification_eq84 below · depth 32 - Faithfulness and near-fullness of the matrix representation E
CerednikDrinfeld.FormalODModule.injective_and_exists_pow_smul_map_eq_of_ringHom_centralizer_rigidification_compat150 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 - Speciality and height 4 lift along Artinian thickenings
CerednikDrinfeld.FormalODModule.isSpecial_and_hasHeight_four_of_isIso_of_isArtinianRing11 below · depth 32 - Bijectivity of a period map on Noetherian test algebras
CerednikDrinfeld.SpecialFormal.ModuliPackage.IsPeriodMap.bijective_of_isNoetherianRing_of_lieVarpi_eq_zero776 below · depth 32 - Admissible rigidified object over a local Noetherian base
CerednikDrinfeld.SpecialFormal.ModuliPackage.exists_isAdmissible_eta_eq_of_isLocalRing0 below · depth 32 - Existence of Drinfeld's period map on a moduli package
CerednikDrinfeld.SpecialFormal.ModuliPackage.exists_isPeriodMap_of_lieVarpi_eq_zero329 below · depth 32 - Cartier quadruples of rigidified modules commute with base change
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.isBaseChangeAlong101 below · depth 32 - Pi-translates have the same Deligne datum
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.isQuadrupleOf_of_isPiTranslate90 below · depth 32 - Cartier quadruples of e-translates are E(e)-translates
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.isTranslateEven_or_isTranslateOdd_of_isTranslate89 below · depth 32 - Existence of a Drinfeld moduli package for rigidified special formal O_D-modules
CerednikDrinfeld.SpecialFormal.Rigidified.exists_moduliPackage_isZariskiSheaf_eta_iff_isIsomorphic_and_natural_and_cover78 below · depth 32 - Drinfeld stalk maps u₀,u₁ over W(k)
CerednikDrinfeld.SpecialFormal.Rigidified.exists_stalkMap_tangent_germ_of_forall_mem_iff_isEtaSection_of_lieZero_le_ker_wittVector239 below · depth 32 - Stalks of the η-lattice data of an admissible rigidified module
CerednikDrinfeld.SpecialFormal.Rigidified.exists_submodule_mem_iff_isEtaSection_and_isFullLattice_of_isAdmissible_of_lieZero_le_ker_wittVector256 below · depth 32 - Transport of η-sections along an isomorphism of rigidified modules
CerednikDrinfeld.SpecialFormal.Rigidified.isEtaSection_nMap_of_isODHom0 below · depth 32 - Graded pieces of a special formal mathcal O_D-module: free of rank 2
CerednikDrinfeld.SpecialFormalODModule.exists_fin_two_forall_mem_gradedPiece_existsUnique_eq_sum_smul31 below · depth 32 - Finite coordinates on first-order deformations of a special formal 𝒪_D-module
CerednikDrinfeld.SpecialFormalODModule.exists_injective_deformations_dualNumber_of_charP40 below · depth 32 - Universal formal mathcal O_D-module over a pro-representing ring
CerednikDrinfeld.SpecialFormalODModule.exists_isProrepresentedBy_deformations_of_forall_bijective_algHom14 below · depth 32 - Gluing deformations of a special formal 𝒪_D-module
CerednikDrinfeld.SpecialFormalODModule.exists_map_eq_and_exists_isIso_of_pullback_of_surjective13 below · depth 32 - At most one-dimensional relative cotangent space at a smooth point
CerednikDrinfeld.SpecialFormalODModule.exists_maximalIdeal_eq_map_sup_span_singleton_sup_sq_of_isProrepresentedBy_deformations_of_not_and70 below · depth 32 - Node case: uv=q and generators of mathfrak m_R
CerednikDrinfeld.SpecialFormalODModule.exists_mul_eq_algebraMap_and_maximalIdeal_eq_map_sup_span_pair_sup_sq_of_isProrepresentedBy_deformations36 below · depth 32 - A critical index exists: λ(varpi) kills one eigenline
CerednikDrinfeld.SpecialFormalODModule.forall_mem_lieZero_mulVecLin_linearPart_varpi_eq_zero_or_forall_mem_lieOne0 below · depth 32 - Drinfeld's deformation ring has Krull dimension at least two
CerednikDrinfeld.SpecialFormalODModule.two_le_ringKrullDim_of_isProrepresentedBy_deformations111 below · depth 32 - Every curve arises from a big Witt homomorphism
MvFormalGroup.BigWittLaw.exists_hom_subst_curveFam_eq0 below · depth 32 - V-adic completeness and separatedness of the Cartier module
MvFormalGroup.CartierModule.existsUnique_forall_eq_sum_range_verschiebungInt_iterate_add0 below · depth 32 - Cartier relation points lie in the kernel of Pi_f
MvFormalGroup.CartierModule.presPi_verPt_sub_sum_teichPt_frobPt_eq_presPi_frobPt_iterate0 below · depth 32 - Faithfulness and commutant of a formal W(κ)-action
MvFormalGroup.End.injective_and_forall_exists_eq_of_forall_commute_of_toPowerSeries_eq_X_pow_card1 below · depth 32 - Rigidity of formal group laws along a nilpotent thickening
MvFormalGroup.subst_nthSeries_eq_of_map_eq_and_exists_hom_of_ker_pow_eq_bot0 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 - λ maps ηₙ bijectively onto the varpi=V locus
CerednikDrinfeld.FormalODModule.bijOn_lambda_etaPiece_of_isCanonicalLMap_of_forall_exists1 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 - Image of E contains p^mM₂(ℤₚ)
CerednikDrinfeld.FormalODModule.exists_pow_smul_map_eq_of_ringHom_centralizer_rigidification_compat63 below · depth 33 - Height 4 is preserved by isogenies of formal 𝒪_D-modules
CerednikDrinfeld.FormalODModule.hasHeight_four_of_isIsogenyOfHeight26 below · depth 33 - Kernels of degree d descend along nilpotent surjections
CerednikDrinfeld.FormalODModule.hasKernelOfDegree_of_map_of_surjective_of_isNilpotent_ker17 below · depth 33 - Faithfulness of a rigidification-compatible matrix representation of End(Φ)
CerednikDrinfeld.FormalODModule.injective_of_ringHom_centralizer_rigidification_compat123 below · depth 33 - Base change of the graded Cartier datum of X
CerednikDrinfeld.FormalODModule.isBaseChangeAlong_toGradedCartierModuleData_baseChange18 below · depth 33 - Canonical L-map on a critical graded piece
CerednikDrinfeld.FormalODModule.isCanonicalLMap_apply_eq_nMk_of_verschiebungInt_eq_endAct_varpiEnd2 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 - The η-piece at a critical index, and injectivity
CerednikDrinfeld.FormalODModule.mem_etaPiece_iff_of_isCanonicalLMap_apply_eq_nMk40 below · depth 33 - Fibre-square gluing for the p-adic Ω̂ package, Noetherian case
CerednikDrinfeld.FormalOmega.omegaPackage_padic_existsUnique_map_pullbackFst_eq_and_map_pullbackSnd_eq_of_isNoetherianRing1 below · depth 33 - Bijectivity of the period map on p-torsion Noetherian algebras
CerednikDrinfeld.SpecialFormal.ModuliPackage.IsPeriodMap.bijective_of_charP_of_isNoetherianRing_of_lieVarpi_eq_zero745 below · depth 33 - Zariski-local lifting of moduli points along square-zero thickenings
CerednikDrinfeld.SpecialFormal.ModuliPackage.IsPeriodMap.exists_cover_exists_map_eq_map_of_isBaseChange_of_ker_mul_ker_eq_bot_of_lieVarpi_eq_zero348 below · depth 33 - Fibre-product exactness of the moduli package over Noetherian rings
CerednikDrinfeld.SpecialFormal.ModuliPackage.existsUnique_map_pullbackFst_eq_and_map_pullbackSnd_eq_of_isNoetherianRing_of_isZariskiSheaf48 below · depth 33 - Descent of a natural period rule along η
CerednikDrinfeld.SpecialFormal.ModuliPackage.exists_theta_apply_eta_eq_of_rule8 below · depth 33 - Lattice stalks of an even isogeny translate
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.N_eq_latticeMap_of_isTranslate_of_even82 below · depth 33 - Odd isogeny-translate lattices in a Čerednik–Drinfeld Cartier quadruple
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.N_eq_latticeMap_of_isTranslate_of_odd85 below · depth 33 - Base change of a Cartier quadruple: the lattices can only grow
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.N_le_of_map87 below · depth 33 - Cartier quadruples match under an even isogeny translate
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.exists_linearEquiv_stalkMap_comp_of_isTranslate_of_even82 below · depth 33 - Cartier quadruples of an odd isogeny translate, pieces swapped
CerednikDrinfeld.SpecialFormal.Rigidified.IsCartierQuadruple.exists_linearEquiv_stalkMap_comp_of_isTranslate_of_odd85 below · depth 33
… and 387 more statements (search for the module name to find them).