Connes–Kreimer / Foissy (planar, R1) coproduct as a genuine Mathlib Coalgebra instance.
Combinatorial core (List.Perm) proven below verbatim from Coassoc.lean; the Mathlib bridge
lifts it to equality of linear maps. LOCAL — not part of the published godsil tree.
Equations
- CK.instInhabitedRTree = { default := CK.instInhabitedRTree.default }
The Connes-Kreimer coproduct on one rooted tree, as a formal list of tensor terms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The multiplicative extension of the coproduct from trees to forests.
Equations
- CK.coprodForest [] = [([], [])]
- CK.coprodForest (t :: ts) = CK.tmul (CK.coprodTree t) (CK.coprodForest ts)
Instances For
Expand the right tensor leg of every coproduct term.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Carrier: forests with k-coefficients (product = forest concatenation).
Equations
- CK.H k = MonoidAlgebra k (FreeMonoid CK.RTree)
Instances For
Pure 3-tensor of an iterated cut (a, b, c), associated to the right.
Equations
- CK.e3 k t = MonoidAlgebra.single t.1 1 ⊗ₜ[k] (MonoidAlgebra.single t.2.1 1 ⊗ₜ[k] MonoidAlgebra.single t.2.2 1)
Instances For
A linear map commutes with a List.sum of mapped terms.
LHS structural map on Δ₀ f.
RHS structural map on Δ₀ f.
The combinatorial coassoc, transported to E3.
Coassociativity as an equality of linear maps.
Counit. #
The left-counit collapse: ε on the left leg selects the unique ([], f) cut.
The right-counit collapse: ε on the right leg selects the unique (f, []) cut.
(ε ⊗ id) ∘ Δ on a basis forest gives 1 ⊗ single f 1.
(id ⊗ ε) ∘ Δ on a basis forest gives single f 1 ⊗ 1.
Equations
- CK.instCKCoalg k = { toCoalgebraStruct := CK.instCoalgebraStructH k, coassoc := ⋯, rTensor_counit_comp_comul := ⋯, lTensor_counit_comp_comul := ⋯ }
single of a concatenation is the product (algebra structure of H).
Product of two List.sums is the double sum.
Equations
- CK.instCKBialg k = Bialgebra.mk' k (CK.H k) ⋯ ⋯ ⋯ ⋯
Toward HopfAlgebra: node count (grading) and its conservation under cuts. #
Conservation `|p| + |r| = |f|` makes the antipode recursion well-founded
(`r ≠ [] ⟹ |p| < |f|`).
A forest as an H-basis element, with the index forced to FreeMonoid RTree
via ofList (so it is always typed H k, even on the empty forest).
Equations
- CK.sf k r = MonoidAlgebra.single (FreeMonoid.ofList r) 1
Instances For
The antipode on the forest basis, by well-founded recursion on node count.
S(∅) = 1; S(f) = -Σ_{(p,r) cut, r ≠ ∅} S(p)·r. Recursion decreases since
|p| < |f|.
Equations
- One or more equations did not get rendered due to their size.
- CK.antipodeF k [] = 1
Instances For
The antipode linear map obtained by extending antipodeF from the forest basis.
Equations
Instances For
r ++ b is nonempty when r is.
Filtering cuts by "empty right leg" factorizes over tmul.
The unique empty-right cut of a tree t is ([t], []).
Filtering cuts by "empty left leg" factorizes over tmul.
The unique empty-left cut of a tree t is ([], [t]).
The right antipode by well-founded recursion on node count.
S'(∅) = 1; S'(f) = -Σ_{(p,r) cut, p ≠ ∅} p·S'(r). Decreases since |r| < |f|.
Equations
- One or more equations did not get rendered due to their size.
- CK.antipodeF' k [] = 1
Instances For
The mirrored antipode candidate used to prove the right convolution identity.
Equations
Instances For
Left antipode identity as a linear-map equality (the Hopf left axiom).
Right antipode identity for S' as a linear-map equality.
Equations
- CK.instHopfAlgebraStructH k = { toBialgebra := CK.instCKBialg k, antipode := CK.antipode k }
Equations
- CK.instCKHopf k = { toHopfAlgebraStruct := CK.instHopfAlgebraStructH k, mul_antipode_rTensor_comul := ⋯, mul_antipode_lTensor_comul := ⋯ }
Adams operators Ψₙ = id^{⋆n} and the antipode as Ψ₋₁. #
The convolution ring `WithConv (H k →ₗ[k] H k)` (Mathlib `LinearMap.convRing`) turns the
identity into a ring element whose convolution powers are the Adams (Hopf-power) operators.
`Ψ₀ = u∘ε` (the convolution unit), `Ψ₁ = id`, the semigroup law `Ψₘ ⋆ Ψₙ = Ψₘ₊ₙ`, and the
identity is a convolution UNIT whose inverse is the antipode — i.e. `Ψ₋₁ = S`. This is the
first combinatorial-Hopf Adams-operator layer in any ITP (Aguiar–Lauve theory; the Eulerian
idempotent `e⁽¹⁾ = log_⋆ id` is the heavier next step, needing connected-graded nilpotence).
Ψ₀ = u∘ε is the convolution unit.
The convolution-power semigroup law Ψₘ ⋆ Ψₙ = Ψₘ₊ₙ.
Ψ₁ = id is a convolution UNIT, with the antipode as its (two-sided) inverse. This is the
precise sense in which Ψ₋₁ = S.
Equations
- CK.adamsUnit k = { val := WithConv.toConv LinearMap.id, inv := WithConv.toConv (CK.antipode k), val_inv := ⋯, inv_val := ⋯ }
Instances For
Ψ₋₁ = S: the inverse of the Adams unit Ψ₁ is the antipode.
Part 2 — local nilpotency of J = id − u∘ε (the connected-graded engine for log_⋆). #
`J` kills the empty forest and is the identity on nonempty ones. Its convolution powers
`J^{⋆k}` vanish on every basis forest of fewer than `k` nodes (`Jc_pow_ofConv_sf_eq_zero`):
each of the `k` convolution factors must absorb at least one node, so `k` nodes are needed.
Hence the series `log_⋆(id) = Σ_{k≥1} ((-1)^{k+1}/k)·J^{⋆k}` is finite in each degree — the
connected-graded local nilpotency on which the Aguiar–Lauve Eulerian spectrum rests.
comul on a basis forest equals the combinatorial Δ₀.
Convolution-on-basis engine. (F ⋆ G) on a basis forest is the sum over cuts:
(F ⋆ G)(f) = Σ_{(p,r) ∈ coprodForest f} F(p)·G(r). Reusable for all of Part 2.
The convolution unit 1 = u∘ε on a basis forest: ε(f)·1.
Local nilpotency. J^{⋆n} = (id − u∘ε)^{⋆n} vanishes on every basis forest with fewer
than n nodes. Proof: induction on n via the convolution engine and degree conservation;
in a nonzero cut the left leg carries ≥1 node, so the right leg has < n−1 nodes and the
induction hypothesis kills it, while an empty left leg is killed by J directly.
The Adams eigenvalue on primitives: Ψₙ(x) = n·x for primitive x. #
The first piece of the Aguiar–Lauve spectrum, valid on ANY connected graded bialgebra (no
commutativity needed): the primitives are the eigenspace of every Adams operator `Ψₙ` with
eigenvalue `n`. Proof is at the element level (not the basis): on a primitive `x`, the recursion
`Ψₙ₊₁ = id ⋆ Ψₙ` and `Δx = x⊗1 + 1⊗x` give `Ψₙ₊₁(x) = x + Ψₙ(x)`, and `Ψₙ` fixes the unit.
Convolution at the element level: (F ⋆ G)(x) = μ((F⊗G)(Δx)).
Ψₙ₊₁ = id ⋆ Ψₙ evaluated: Ψₙ₊₁(x) = μ((id⊗Ψₙ)(Δx)).
Adams eigenvalue on primitives: for primitive x, Ψₙ₊₁(x) = (n+1)·x. The
primitives are the eigenspace of Ψₙ with eigenvalue n, and S = Ψ₋₁ acts as −1,
recovering S(x) = −x.
The first Eulerian idempotent e⁽¹⁾ = log_⋆(id) as a linear map. #
Over a `ℚ`-algebra the series `log_⋆(id) = Σ_{k≥1} ((-1)^{k+1}/k)·J^{⋆k}` is, by the local
nilpotency above, finite on each basis forest (only `k ≤ |f|` contribute). We define `e⁽¹⁾`
by that finite per-degree sum, mirroring how `Δ` and the antipode are defined on the basis.
`e⁽¹⁾` kills the unit and fixes primitives (eigenvalue `1`) — the connected-graded projector
onto primitives that begins the Aguiar–Lauve spectral decomposition.
Coefficient (-1)^{j+1}/j of the convolution-log series, pushed into k. j = 0 ↦ 0.
Equations
- CK.eulerCoef k j = (algebraMap ℚ k) ((-1) ^ (j + 1) / ↑j)
Instances For
e⁽¹⁾ on a basis forest: the finite log series Σ_{j=0}^{|f|} ((-1)^{j+1}/j)·J^{⋆j}(f)
(the j=0 term is 0; terms with j > |f| are absent — and would vanish anyway).
Equations
- CK.eulerian1F k f = (List.map (fun (j : ℕ) => CK.eulerCoef k j • (CK.Jc k ^ j).ofConv (CK.sf k f)) (List.range (CK.sizeF f + 1))).sum
Instances For
Idempotency on the primitive •: e⁽¹⁾(e⁽¹⁾ •) = e⁽¹⁾ •. Immediate from eulerian1_dot
(since e⁽¹⁾ fixes •); likewise e⁽¹⁾ is idempotent on anything it fixes or kills.
NOTE (honest scope): the GENERAL projector identity e⁽¹⁾∘e⁽¹⁾ = e⁽¹⁾ is false on this
planar (Foissy) Hopf algebra — it is neither commutative nor cocommutative, and the Eulerian
idempotents are orthogonal idempotents only in the (co)commutative case (Patras, Loday).
Explicit
counterexample (verified numerically in ConnesKreimerEval.lean): on the cherry, e⁽¹⁾∘e⁽¹⁾
and e⁽¹⁾ differ in the •·ℓ₂ vs ℓ₂·• terms — exactly the planar non-commutativity. Genuine
idempotency (the Hodge/Eulerian decomposition) lives on the commutative quotient (A2 in the
seam), not here.
e⁽¹⁾ fixes every primitive (Phase 1: the element-level primitive facts). #
For primitive `x`: `ε(x)=0`, `J(x)=x`, and `J^{⋆k}(x)=0` for `k ≥ 2` (each higher factor must
absorb the unit, which `J` kills). These feed the operator identity in Phase 2.
A primitive element has zero counit (forced by the counit axiom (ε⊗id)∘Δ = 1⊗·).
e⁽¹⁾ fixes every primitive (Phase 2: assembling the operator identity). #
`e⁽¹⁾` agrees on degree-`≤N` elements with the finite truncation `Σ_{j≤N} c_j J^{⋆j}` (extra
terms vanish by nilpotency); on a primitive only the `j=1` term survives, giving `e⁽¹⁾(x)=x`.
Bridge: a List.range map-sum equals the corresponding Finset.range sum.
The degree-N truncation of log_⋆(id), as a linear map.
Equations
- CK.logTrunc k N = ∑ j ∈ Finset.range (N + 1), CK.eulerCoef k j • (CK.Jc k ^ j).ofConv
Instances For
e⁽¹⁾ fixes every primitive: e⁽¹⁾(x) = x for primitive x. Only the j=1 term of the
log series survives (J(x)=x; j=0 has coefficient 0; j≥2 vanish), so e⁽¹⁾(x)=x. The
primitives are exactly the eigenvalue-1 eigenspace of e⁽¹⁾.
A2 — the commutative quotient H_ab = H / ⟨ab − ba⟩ #
(Foissy's planar → commutative map).
Abelianizing the (forest) product turns the planar Hopf algebra into a commutative one. This is
the algebra step (S1): the quotient ring `RingQuot` by the commutator relation, shown
commutative.
The coproduct, counit and antipode descend in the following stones, giving the classical
(commutative) Connes–Kreimer / Butcher Hopf algebra, where the Eulerian idempotents become
genuine orthogonal idempotents.
H_ab is commutative: the relation forces π(x)·π(y) = π(y)·x.
Equations
- CK.instCommRingHab k = { toRing := inferInstance, mul_comm := ⋯ }
S2 — the coproduct descends to Delta_ab : H_ab → H_ab ⊗ H_ab. #
S3 — the counit descends to epsilon_ab : H_ab → k. #
ε (right) counit naturality: (epsilon_ab⊗id)∘(π⊗π) = ε⊗π.
ε (left) counit naturality: (id⊗epsilon_ab)∘(π⊗π) = π⊗ε.
Left counitality on H_ab: (epsilon_ab ⊗ id) ∘ Delta_ab = 1 ⊗ ·.
Right counitality on H_ab: (id ⊗ epsilon_ab) ∘ Delta_ab = · ⊗ 1.
Delta_ab ∘ π in .toLinearMap form (for use inside compositions).
Coproduct (right) naturality for the descent:
(Delta_ab⊗id)∘(π⊗π) = ((π⊗π)⊗π)∘(Δ⊗id).
Coproduct (left) naturality for the descent:
(id⊗Delta_ab)∘(π⊗π) = (π⊗(π⊗π))∘(id⊗Δ).
Coassociativity on H_ab, descended from the planar coassociativity via π.
H_ab is a coalgebra (the commutative Connes–Kreimer coalgebra).
Equations
- CK.instCoalgebraStructHab k = { comul := (CK.Δab k).toLinearMap, counit := (CK.εab k).toLinearMap }
Equations
- CK.instHabCoalg k = { toCoalgebraStruct := CK.instCoalgebraStructHab k, coassoc := ⋯, rTensor_counit_comp_comul := ⋯, lTensor_counit_comp_comul := ⋯ }
S5 — H_ab is a Bialgebra. #
`Δab`, `εab` are algebra homs by construction, so the four `Bialgebra.mk'`
compatibilities are just `map_one`/`map_mul` (cf. planar `instCKBialg`, which
needed a separate `Δ_mul` because there `Δ` was not yet packaged as an AlgHom).
Equations
- CK.instHabBialg k = Bialgebra.mk' k (CK.Hab k) ⋯ ⋯ ⋯ ⋯
S6 — the antipode descends to S_ab : H_ab → H_ab, giving HopfAlgebra k (H_ab). #
S = antipode k is an algebra anti-homomorphism; composing with
π into the COMMUTATIVE quotient H_ab turns it into a genuine algebra hom, so it lifts
through RingQuot. The two antipode axioms then descend through π exactly like
coassociativity in S4.
π ∘ S : H → H_ab as an algebra hom: on the commutative quotient the antipode
anti-homomorphism becomes a homomorphism (π(S(ab)) = π(Sb·Sa) = π(Sa)·π(Sb)).
Equations
- CK.SalgHom k = AlgHom.ofLinearMap ((CK.π k).toLinearMap ∘ₗ CK.antipode k) ⋯ ⋯
Instances For
mu_ab ∘ (π⊗π) = π ∘ μ (multiplication naturality, π an algebra hom).
Antipode (left) naturality for the descent: (S_ab⊗id)∘(π⊗π) = (π⊗π)∘(S⊗id).
Antipode (right) naturality for the descent: (id⊗S_ab)∘(π⊗π) = (π⊗π)∘(id⊗S).
The (right-factor) left antipode identity, stated for antipode k rather than antipode' k
(id ⋆ S = u∘ε re-expressed via antipode = antipode').
Left antipode identity on H_ab, descended through π.
Right antipode identity on H_ab, descended through π.
Equations
- CK.instHopfAlgebraStructHab k = { toBialgebra := CK.instHabBialg k, antipode := (CK.Sab k).toLinearMap }
H_ab is a Hopf algebra: the commutative Connes–Kreimer / Butcher Hopf algebra of
rooted forests, obtained from the planar one by the abelianization quotient.
Equations
- CK.instHabHopf k = { toHopfAlgebraStruct := CK.instHopfAlgebraStructHab k, mul_antipode_rTensor_comul := ⋯, mul_antipode_lTensor_comul := ⋯ }
Toward the Eulerian-idempotent payoff — Adams operators on H_ab. #
On the COMMUTATIVE H_ab the Eulerian idempotents e⁽ⁱ⁾ become orthogonal idempotents
(Patras/Loday), so e⁽¹⁾∘e⁽¹⁾ = e⁽¹⁾ HOLDS (unlike the planar non-idempotency of D1). The
principled route is via the Adams operators Ψⁿ: on a commutative Hopf algebra each Ψⁿ is an
algebra morphism, whence Ψᵖ∘Ψq = Ψ^{pq}, whence the e⁽ⁱ⁾ are the orthogonal eigen-projectors.
Brick 1 (no commutativity yet): the Adams operators on H_ab, and their naturality through π
(Ψⁿ_ab ∘ π = π ∘ Ψⁿ), which both defines Ψⁿ_ab and ties it to the planar Ψⁿ.
The Adams operators Ψⁿ = id^{⋆n} on H_ab (convolution powers of the identity).
Equations
- CK.adamsAb k n = (WithConv.toConv LinearMap.id ^ n).ofConv
Instances For
Element-level convolution on H_ab: (F⋆G)(x) = mu_ab((F⊗G)(Delta_ab x)).
Ψⁿ⁺¹_ab = id ⋆ Ψⁿ_ab evaluated.
Brick 2 (commutativity enters): each Adams operator Ψⁿ is an ALGEBRA morphism on the
commutative H_ab. We package Ψⁿ as an AlgHom built by composition:
Ψⁿ⁺¹ = mu_ab∘(id⊗Ψⁿ)∘Delta_ab. This is a composite of the algebra homs
Delta_ab, id⊗Ψⁿ, and mu_ab, and the multiplication is an algebra hom precisely
because H_ab is commutative.
Ψⁿ packaged as an algebra hom on the commutative H_ab (Ψ₀ = u∘ε,
Ψⁿ⁺¹ = mu_ab ∘ (id ⊗ Ψⁿ) ∘ Delta_ab).
Equations
- CK.adamsAbHom k 0 = (Algebra.ofId k (CK.Hab k)).comp (CK.εab k)
- CK.adamsAbHom k n.succ = (Algebra.TensorProduct.lmul' k).comp ((Algebra.TensorProduct.map (AlgHom.id k (CK.Hab k)) (CK.adamsAbHom k n)).comp (CK.Δab k))
Instances For
The algebra-hom Ψⁿ and the convolution-power Ψⁿ agree as linear maps.
Brick 3: the Adams composition law Ψᵖ ∘ Ψq = Ψ^{pq}. Post-composition by an algebra hom
distributes over convolution (LinearMap.algHom_comp_convMul_distrib), so an algebra-hom
φ post-composed with Ψᵖ = id^{⋆p} gives (φ ∘ id)^{⋆p} = (toConv φ)^p.
Taking φ = Ψq gives Ψq ∘ Ψᵖ = (Ψq)^{⋆p} = id^{⋆qp} = Ψ^{qp}.
Brick 3 — the Adams composition law Ψᵖ ∘ Ψq = Ψ^{pq} on the commutative H_ab. The
Adams (Hopf-power) operators form a commuting family of algebra endomorphisms realising the
multiplicative monoid (ℕ, ·); this is the structural reason the Eulerian idempotents are
orthogonal.
Brick 4 — toward e⁽¹⁾∘e⁽¹⁾ = e⁽¹⁾ on the commutative H_ab, via the
finite-difference engine.
The route AVOIDS the full Eulerian decomposition / Vandermonde inversion. The point:
if `v` is an Adams eigenvector with `Ψⁱ(v) = i·v` for all `i`, then expanding
`J^{⋆j} = (id − u∘ε)^{⋆j}` into Adams operators and applying to `v` collapses
each `J^{⋆j}(v)` to a scalar multiple of `v` by the finite-difference identity below.
Hence `e⁽¹⁾` is the identity on its own image.
Finite-difference engine: the j-th finite difference of the identity sequence i ↦ i,
∑ᵢ (-1)^{j-i} C(j,i)·i = δ_{j,1}. This collapses the convolution-log of an
Adams eigenvector to its weight-1 component, which is the combinatorial heart of the
Eulerian idempotency on H_ab.
Brick B (binomial expansion) — J_ab^{⋆j} into Adams operators on the commutative H_ab.
Toward e⁽¹⁾∘e⁽¹⁾ = e⁽¹⁾: expand the convolution-log's J^{⋆j} into the Adams
basis so that, on an Adams eigenvector, alternating_choose_weighted collapses it.
Brick A scaffolding — J^{⋆j} naturality through π and per-degree nilpotency
on H_ab.
Brick A core — the Φ_p ring-hom step: post-composition by Ψᵖ (adamsAb p, an
algebra hom) is a ⋆-ring hom, sending J_ab ↦ Yᵖ − 1 (Y = toConv id_ab). This is
Ψᵖ ∘ e = log(Yᵖ).
Brick A step 2 — eval₂ plumbing: bridge the PowerSeries coeff identity (coeff_logTrunc_pow)
to the convolution sums via eval₂ (X ↦ J_ab), then kill high powers with nilpotency.
r ↦ r • 1 as a ring hom k →+* WithConv(H_ab) (image central; convCommRing).
Equations
- CK.smulOne k = { toFun := fun (r : k) => r • 1, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
eval₂ smulOne J_ab P, applied through .ofConv to w, is the explicit sum
Σₘ (P.coeff m) • (J_ab^m).ofConv w.
The truncated ∑ⱼ cⱼ X^j polynomial has coeff m = cₘ for m ≤ N.
(★) — the eigen-transport identity on a per-degree-nilpotent w: applying Ψᵖ
to the truncated convolution-log scales it by p. Proven by evaluating the polynomial
coeff_logTrunc_pow identity at J_ab (eval₂), killing the surplus J_ab^{>N} by
nilpotency.
π(e⁽¹⁾ y) as a truncated convolution-log sum on H_ab, for any degree bound
M ≥ deg(y).
Brick C — the finite-difference collapse: on an Adams eigenvector the convolution-log truncation collapses to the eigenvector itself (only the weight-1 term survives).
Brick C (collapse). On an Adams eigenvector v (Ψⁱ(v) = i·v), the truncated
convolution-log is the identity: Σⱼ≤M cⱼ · J_ab^{⋆j}(v) = v (M ≥ 1). The
J_ab^{⋆j} expands into Adams ops, the eigen-relation turns each into a scalar, and
alternating_choose_weighted kills all but j = 1.
e⁽¹⁾ ∘ e⁽¹⁾ = e⁽¹⁾ on the commutative H_ab (the Eulerian idempotency, via
π). The first Eulerian idempotent is genuinely idempotent on the abelianized
Connes–Kreimer / Butcher Hopf algebra. Combines pi_eulerian1_eq, the Adams
eigen-relation adamsAb_eigen, and the Brick-C collapse.