GL-D: the Magnus coefficient algebra (Lazard fragment; insurance lane) #
Design record: docs/orchestration/span-gradedlie-plan.md §4. Interface NOT
frozen — the GL-D worker has latitude; nothing in the main lane cites this file.
Review with the orchestrator before anything else consumes it.
Content (Serre 252 §6, "la méthode de Lazard", at q = p = 2):
- the coefficient ring
MagnusA := FreeMonoid (Fin 3) → ℤ_[2]under convolution (finite sums over word splits; no topology needed for the ring operations); - the mixed filtration
magnusFil j = {f | ∀ w, 2^(j − |w|) ∣ f w}(the ideal generated by2and the letters,j-th power); - the congruence unit group
MagnusU = 1 + m₀with the product topology: a profinite pro-2 group carrying the instance pack thatfreeProTwoLiftrequires; - the Magnus morphism
magnusHom := freeProTwoLift _ (fun i ↦ 1 + ξᵢ)and the filtration estimateλ_j(MagnusU) ≤ congrSub j, which combined withmap_twoCentralSeries_legives coefficient valuationsv₂(coeff_w (μ z)) ≥ j − |w|forz ∈ λ_j(F₃); - per-(word, level) coordinate functionals
Zₖ → 𝔽₂: additive,λ_{k+1}-killing.
Numerically validated end to end (memo §5: span_model.py — filtration, PBW
separation rank = N_k, column span, coker(d̄) = 2).
Role: fallback certificate route for the k = 3 base case should GL-C snag, and the
ker(ab)-sensitive functional infrastructure the (out-of-scope) SL1 design gap will
want later. Do NOT build Lyndon-word combinatorics unless the orchestrator
re-scopes.
Design decisions (GL-D, recorded per the dispatch spec) #
- Bespoke ring, not
MonoidAlgebra. The unit group needs full-support series:(1 + ξ₀)⁻¹ = 1 − ξ₀ + ξ₀² − …has infinite support, so a finitely-supported model (MonoidAlgebra ℤ_[2] (FreeMonoid (Fin 3))) is not closed under the group operation. Mathlib has no non-commutative power-series ring (MvPowerSeriesis indexed byσ →₀ ℕ, i.e. commuting variables), soMagnusAis built here from scratch, following theMvPowerSeriesboilerplate pattern (def+Piadditive structure + bespokeMul/One,mul_assocbyFinset.sum_sigma'/Finset.sum_nbij'). - Split indexing by prefix length. A split
w = u · vis recorded by the single natural numberi = |u| ∈ {0, …, |w|}, so the convolution is aFinset.rangesum and no word-antidiagonalFinset(which would needDecidableEqgymnastics through theFreeMonoidtype synonym) is required. - The unit group is
1 + m₀,m₀ = {a | a 1 = 0}, i.e.{f | f 1 = 1}. The dispatch spec's{f // f 1 = 1 ∧ f − 1 ∈ magnusFil 1}has a redundant second clause (f 1 = 1already forces2 ∣ (f − 1) 1 = 0, and at|w| ≥ 1the divisor is2⁰): seemem_magnusFil_one_iffandsub_one_mem_magnusFil_one. Restricting to constant term exactly1(rather than the larger1 + magnusFil 1 = {f | f 1 ≡ 1 mod 2}, which is also a group) makes the inverse a finite geometric sum with no scalar inversion inℤ_[2]:a := 1 − fis coefficientwise nilpotent (aⁿ w = 0forn > |w|,coeff_pow_eq_zero), sof⁻¹ w = ∑_{n ≤ |w|} (aⁿ) w. The Magnus image lands in this smaller group anyway (1 + ξᵢhas constant term1). - The digit map avoids division.
ℤ_[2]has no total division, so the level-kcoordinate of a2^m-divisible coefficient is defined asdigit m x = 0 ↔ 2^{m+1} ∣ xrather than asx / 2^m mod 2;digit_two_pow_mulidentifies it with the mod-2reduction of the cofactor, which is where additivity comes from.
Interface (for orchestrator review; nothing here is frozen) #
- ring:
MagnusA,coeff,coeff_mul,xi;Ring MagnusA. - filtration:
magnusFil j : AddSubgroup MagnusA,mul_mem_magnusFil(the valuation estimatem^p · m^q ⊆ m^{p+q}),add_self_mem_magnusFil,mul_mem_magnusFil_left/right. - unit group:
MagnusU,Group/IsTopologicalGroup/CompactSpace/T2Space/TotallyDisconnectedSpaceinstances,MagnusU.congrSub j : Subgroup MagnusU,MagnusU.sq_mem_congrSub_succ,MagnusU.commutator_mem_congrSub_succ,MagnusU.exists_congrSub_le,MagnusU.isProP_two. - Magnus expansion:
magnusGen,magnusHom,MagnusU.twoCentralSeries_le_congrSub : λⱼ(MagnusU) ≤ congrSub j, and its corollarytwo_pow_dvd_coeff_magnusHom. - functionals:
digit,digit_add,coord w k,coord_mul,coord_eq_zero_of_mem_succ,coordHom : λₖ(F₃) →* Multiplicative (ZMod 2), and the layer versionszCoord/zCoordHom : Zₖ →* Multiplicative (ZMod 2)(Zₖ = zLayer freeProTwo k).
The file is sorry-free and uses no axioms beyond propext, Classical.choice,
Quot.sound.
Words in three letters #
Word is the index monoid of the Magnus algebra. It is definitionally List (Fin 3);
wlen, wtake, wdrop are List.length, List.take, List.drop transported through
the FreeMonoid type synonym (all the lemmas below are the List ones, by rfl).
The index monoid of the Magnus algebra: words in the three marked letters.
Equations
- GQ2.Roe.Labute.Magnus.Word = FreeMonoid (Fin 3)
Instances For
The length |w| of a word.
Equations
- GQ2.Roe.Labute.Magnus.wlen w = (FreeMonoid.toList w).length
Instances For
The prefix of w of length i (all of w if i ≥ |w|).
Equations
- GQ2.Roe.Labute.Magnus.wtake i w = FreeMonoid.ofList (List.take i (FreeMonoid.toList w))
Instances For
The suffix of w after its first i letters (empty if i ≥ |w|).
Equations
- GQ2.Roe.Labute.Magnus.wdrop i w = FreeMonoid.ofList (List.drop i (FreeMonoid.toList w))
Instances For
A nonzero-length prefix is a nonempty word.
A proper suffix is a nonempty word.
The Magnus coefficient ring ℤ₂⟪ξ₀, ξ₁, ξ₂⟫: all (not necessarily finitely
supported) ℤ_[2]-valued functions on words, with the convolution product
(f * g) w = ∑_{w = u·v} f u · g v.
Equations
Instances For
Coefficient extraction: coeff f w is the coefficient of the word w in f.
Equations
- GQ2.Roe.Labute.Magnus.coeff f w = f w
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- GQ2.Roe.Labute.Magnus.instOneMagnusA = { one := fun (w : GQ2.Roe.Labute.Magnus.Word) => if w = 1 then 1 else 0 }
Equations
- One or more equations did not get rendered due to their size.
Ring axioms #
The triple-convolution normal form of (f * g) * h, indexed by pairs j ≤ i ≤ |w|
(the two cut points of the three-fold split w = u·v·x).
The triple-convolution normal form of f * (g * h), indexed by pairs j, l with
j + l ≤ |w|.
Equations
- One or more equations did not get rendered due to their size.
The letters #
The i-th Magnus letter ξᵢ: the indicator function of the one-letter word i.
Equations
- GQ2.Roe.Labute.Magnus.xi i w = if w = FreeMonoid.of i then 1 else 0
Instances For
The filtration m^j #
magnusFil j is the j-th power of the maximal ideal m = (2, ξ₀, ξ₁, ξ₂), described
by the valuation bound v₂(f w) ≥ j − |w| (truncated subtraction). Only the two
containments actually used downstream are proved: additivity in j under multiplication
(mul_mem_magnusFil, the core estimate) and the trivial monotonicity.
The two-sided filtration ideal m^j = {f | ∀ w, 2^(j − |w|) ∣ f w}, as an additive
subgroup of MagnusA.
Equations
- One or more equations did not get rendered due to their size.
Instances For
At level 1 the filtration only constrains the constant term: m = {f | 2 ∣ f 1}.
Doubling deepens the filtration by one (the 2 ∈ m half of the ideal).
The letters lie in m.
Coefficientwise nilpotence, and inverses #
The inverse of a series with constant term 1, as the geometric series in 1 − f
(coefficientwise a finite sum, by coeff_pow_eq_zero).
Equations
- GQ2.Roe.Labute.Magnus.magnusInv f w = ∑ n ∈ Finset.range (GQ2.Roe.Labute.Magnus.wlen w + 1), GQ2.Roe.Labute.Magnus.coeff ((1 - f) ^ n) w
Instances For
The congruence unit group of the Magnus algebra: the series with constant term
exactly 1. (The dispatch spec's {f // f 1 = 1 ∧ f − 1 ∈ magnusFil 1} has a redundant
second clause — sub_one_mem_magnusFil_one.)
Equations
- GQ2.Roe.Labute.Magnus.MagnusU = { f : GQ2.Roe.Labute.Magnus.MagnusA // GQ2.Roe.Labute.Magnus.coeff f 1 = 1 }
Instances For
Equations
- GQ2.Roe.Labute.Magnus.MagnusU.instOne = { one := ⟨1, GQ2.Roe.Labute.Magnus.coeff_one_self⟩ }
Equations
- GQ2.Roe.Labute.Magnus.MagnusU.instMul = { mul := fun (u v : GQ2.Roe.Labute.Magnus.MagnusU) => ⟨↑u * ↑v, ⋯⟩ }
Equations
- GQ2.Roe.Labute.Magnus.MagnusU.instInv = { inv := fun (u : GQ2.Roe.Labute.Magnus.MagnusU) => ⟨GQ2.Roe.Labute.Magnus.magnusInv ↑u, ⋯⟩ }
Equations
- One or more equations did not get rendered due to their size.
The topology #
The congruence filtration #
The congruence subgroup 1 + m^j of MagnusU.
Equations
- GQ2.Roe.Labute.Magnus.MagnusU.congrSub j = { carrier := {u : GQ2.Roe.Labute.Magnus.MagnusU | ↑u - 1 ∈ GQ2.Roe.Labute.Magnus.magnusFil j}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
The square estimate: squaring deepens the congruence filtration by one.
Each congruence quotient is a 2-group.
The congruence filtration is a neighbourhood basis of 1 #
The congruence filtration separates points.
Neighbourhood-basis property: every open subgroup of MagnusU contains a
congruence subgroup.
MagnusU is a pro-2 group — the last piece of the instance pack that
freeProTwoLift consumes.
The commutator estimate: ⁅1 + m^j, 1 + m⁆ ⊆ 1 + m^{j+1}. (Ring form:
uv − vu = ab − ba ∈ m^{j+1} for a = u − 1 ∈ m^j, b = v − 1 ∈ m, transported to the
group commutator by uvu⁻¹v⁻¹ − 1 = (uv − vu)·u⁻¹·v⁻¹.)
The λ-filtration estimate (Serre 252 §6): the lower 2-central series of the
congruence unit group is contained in the congruence filtration, λⱼ(1 + m₀) ≤ 1 + m^j.
The Magnus morphism μ : F₃ → 1 + m₀ #
The Magnus image of the i-th free generator: 1 + ξᵢ.
Equations
- GQ2.Roe.Labute.Magnus.magnusGen i = ⟨1 + GQ2.Roe.Labute.Magnus.xi i, ⋯⟩
Instances For
The Magnus morphism μ : F₃ → 1 + m₀, xᵢ ↦ 1 + ξᵢ (Serre 252 §6, "la méthode
de Lazard"; the universal property of freeProTwo applied to the pro-2 group
MagnusU).
Equations
Instances For
Filtration compatibility of the Magnus expansion (memo §5, machine-validated):
for z ∈ λⱼ(F₃) every coefficient of μ z − 1 at a word w is divisible by
2^{j − |w|}.
The same estimate for the raw coefficient at a nonempty word (where μ z and
μ z − 1 agree).
Coordinate functionals #
For a word w and a level k ≥ |w|, the 2^{k−|w|}-digit of the w-th Magnus
coefficient is a homomorphism λₖ(F₃) → 𝔽₂ killing λ_{k+1}, hence a functional on the
graded layer Zₖ = λₖ/λ_{k+1}. No division in ℤ_[2] is needed: for x divisible by
2^m, the m-th digit is 0 exactly when 2^{m+1} ∣ x.
2^{m+1} ∣ 2^m · a exactly when a is even.
The m-th binary digit of a 2-adic integer divisible by 2^m (junk value 1 if
the divisibility fails to be one step deeper).
Equations
- GQ2.Roe.Labute.Magnus.digit m x = if 2 ^ (m + 1) ∣ x then 0 else 1
Instances For
On the subgroup 2^m ℤ₂ the m-th digit is the mod-2 reduction of the cofactor.
Additivity of the digit on the subgroup 2^m ℤ₂.
The (w, k) Magnus coordinate functional: the 2^{k−|w|}-digit of the w-th
coefficient of μ z − 1. A homomorphism on λₖ(F₃) (coord_mul) killing λ_{k+1}
(coord_eq_zero_of_mem_succ), i.e. a functional on Zₖ.
Equations
- GQ2.Roe.Labute.Magnus.coord w k z = GQ2.Roe.Labute.Magnus.digit (k - GQ2.Roe.Labute.Magnus.wlen w) (GQ2.Roe.Labute.Magnus.coeff (↑(GQ2.Roe.Labute.Magnus.magnusHom z) - 1) w)
Instances For
The coordinate functionals are additive on λₖ: the cross term A·B of
μ(yz) − 1 = A + B + A·B lands in m^{2k} ⊆ m^{k+1}, one digit deeper.
The coordinate functionals kill the next layer.
The (w, k) coordinate functional packaged as a homomorphism λₖ(F₃) → 𝔽₂
(multiplicatively: into Multiplicative (ZMod 2)).
Equations
- One or more equations did not get rendered due to their size.
Instances For
The coordinate functionals only depend on the class in Q_{k+1}, so they are
genuinely functionals on the graded layer Zₖ = λₖ/λ_{k+1} ≤ Q_{k+1}.
The functionals on the graded layer Zₖ #
The repo encodes Zₖ = λₖ/λ_{k+1} as the subgroup zLayer freeProTwo k ≤ Q_{k+1}, so a
functional there is obtained from coord by choosing a λₖ-representative; the choice is
immaterial by coord_eq_of_levelMk_eq.
Every class in Zₖ has a λₖ-representative (unfolding of lambdaImage).
The (w, k) coordinate functional on the graded layer Zₖ ≤ Q_{k+1}.
Equations
- GQ2.Roe.Labute.Magnus.zCoord w k q = GQ2.Roe.Labute.Magnus.coord w k ⋯.choose
Instances For
Evaluation of the layer functional on any representative.
The (w, k) coordinate functional packaged as a homomorphism Zₖ → 𝔽₂.
Equations
- One or more equations did not get rendered due to their size.