Connes-Kreimer Hopf algebra carrier on n-ary rooted trees #
The Connes-Kreimer Hopf algebra on a tree type T
([CK98]; [Foi] §1.2) is
the formal R-linear span of forests (multisets of trees), with product =
forest disjoint union and coproduct = sum over admissible cuts. This file
provides the carrier, its algebra structure, and the counit, generic over
T; the coproducts and the Bialgebra/HopfAlgebra instances are in the
sibling Coproduct/ files and HopfAlgebraNonplanar.lean.
Main declarations #
RootedTree.Forest: forests as multisets of trees; multiset addition is disjoint union.RootedTree.ConnesKreimer: one-field wrapper aroundAddMonoidAlgebra R (Forest T).ConnesKreimer.single,ConnesKreimer.of',ConnesKreimer.ofTree,ConnesKreimer.coeff: basis embeddings and coefficient extraction.ConnesKreimer.lift,ConnesKreimer.algHom_ext,ConnesKreimer.addHom_ext,ConnesKreimer.linearLift: the wrapper-native hom API.ConnesKreimer.counit: the counit ε (coefficient of the empty forest) as an algebra hom.
Implementation notes #
ConnesKreimer R T wraps AddMonoidAlgebra R (Forest T) as a one-field
structure (mathlib's Polynomial pattern): the bare carrier already carries
the group-like AddMonoidAlgebra.instBialgebra, and a def-synonym leaks
parent instance paths (an SMul ℤ diamond). Consumers speak the
wrapper-native API rather than applying AddMonoidAlgebra/Finsupp lemmas
to ConnesKreimer values; toFinsuppAlgEquiv is the bridge for wholesale
transport.
[UPSTREAM] candidate.
Forests #
A forest is a multiset of trees. Multiset addition is the disjoint union (forest concatenation).
A forest of T-shaped trees: finite multiset.
Equations
- RootedTree.Forest T = Multiset T
Instances For
The carrier #
The Connes-Kreimer Hopf algebra on tree type T: a one-field wrapper
around AddMonoidAlgebra R (Forest T). As an algebra: product = forest
disjoint union (commutative), unit = empty forest. The Bialgebra
structure (coproduct + coassoc + counit laws) is in sibling files.
- ofFinsupp :: (
- toFinsupp : AddMonoidAlgebra R (Forest T)
The underlying forest-indexed
Finsupp. - )
Instances For
Structural operations #
Each operation is defined on the toFinsupp field; the toFinsupp_*
pushforward lemmas are all rfl and form the simp normal form.
Equations
- RootedTree.ConnesKreimer.instZero = { zero := { toFinsupp := 0 } }
Equations
- RootedTree.ConnesKreimer.instOne = { one := { toFinsupp := 1 } }
Equations
- RootedTree.ConnesKreimer.instAdd = { add := fun (p q : RootedTree.ConnesKreimer R T) => { toFinsupp := p.toFinsupp + q.toFinsupp } }
Equations
- RootedTree.ConnesKreimer.instMul = { mul := fun (p q : RootedTree.ConnesKreimer R T) => { toFinsupp := p.toFinsupp * q.toFinsupp } }
Equations
- RootedTree.ConnesKreimer.smulZeroClass = { smul := fun (s : S) (p : RootedTree.ConnesKreimer R T) => { toFinsupp := s • p.toFinsupp }, smul_zero := ⋯ }
Equations
- RootedTree.ConnesKreimer.instNatCast = { natCast := fun (n : ℕ) => { toFinsupp := ↑n } }
Equations
- RootedTree.ConnesKreimer.instPowNat = { pow := fun (p : RootedTree.ConnesKreimer R T) (n : ℕ) => { toFinsupp := p.toFinsupp ^ n } }
The instance stack #
Built by injective transport from the single bottom instCommSemiring.
Equations
- One or more equations did not get rendered due to their size.
Granular action instances (mirroring Polynomial): keeping these one
synthesis step away from the underlying carrier lets nested-tensor goals
(CK ⊗ (CK ⊗ CK)) resolve without deep pending chains.
Equations
- RootedTree.ConnesKreimer.distribSMul = { toSMulZeroClass := RootedTree.ConnesKreimer.smulZeroClass, smul_add := ⋯ }
Equations
- RootedTree.ConnesKreimer.distribMulAction = { toSMul := RootedTree.ConnesKreimer.smulZeroClass.toSMul, mul_smul := ⋯, one_smul := ⋯, smul_zero := ⋯, smul_add := ⋯ }
Equations
- RootedTree.ConnesKreimer.instModule = { toDistribMulAction := RootedTree.ConnesKreimer.distribMulAction, add_smul := ⋯, zero_smul := ⋯ }
Equations
- One or more equations did not get rendered due to their size.
Coefficient lookup: a Connes-Kreimer element is a function from forests to coefficients.
Equations
- RootedTree.ConnesKreimer.instFunLike = { coe := fun (p : RootedTree.ConnesKreimer R T) => ⇑p.toFinsupp, coe_injective := ⋯ }
Global ring instance #
zsmul is the pulled-back structural operation and no parent-type path to
SMul ℤ exists, so the instance is safely global.
Equations
- RootedTree.ConnesKreimer.instNeg = { neg := fun (p : RootedTree.ConnesKreimer R T) => { toFinsupp := -p.toFinsupp } }
Equations
- RootedTree.ConnesKreimer.instSub = { sub := fun (p q : RootedTree.ConnesKreimer R T) => { toFinsupp := p.toFinsupp - q.toFinsupp } }
Equations
- RootedTree.ConnesKreimer.instIntCast = { intCast := fun (z : ℤ) => { toFinsupp := ↑z } }
Equations
- One or more equations did not get rendered due to their size.
The algebra equivalence to the bare carrier #
toFinsupp as an R-algebra equivalence — the sanctioned bridge between
the wrapper and the bare AddMonoidAlgebra.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Basis embeddings #
Basis vector: coefficient r on the forest F.
Equations
- RootedTree.ConnesKreimer.single F r = { toFinsupp := Finsupp.single F r }
Instances For
Linear induction: prove p at 0, under +, and on every single.
Bare embedding: a forest as the basis vector single F 1.
Equations
Instances For
MonoidHom embedding: Multiplicative (Forest T) →* ConnesKreimer R T,
multiplicative by construction as AddMonoidAlgebra.of transported through
the wrapper equivalence.
Equations
- RootedTree.ConnesKreimer.of = (↑↑RootedTree.ConnesKreimer.toFinsuppAlgEquiv.symm).comp (AddMonoidAlgebra.of R (RootedTree.Forest T))
Instances For
Embed a single tree as a singleton-forest basis vector.
Equations
Instances For
Coefficients #
coeff is the simp-normal spelling of coefficient extraction
(Polynomial.coeff analogue); the FunLike application p F reduces to it.
The coefficient of the forest F.
Instances For
Elements agreeing coefficientwise are equal.
coeff bundled as a linear functional (Polynomial.lcoeff analogue).
Equations
- RootedTree.ConnesKreimer.lcoeff F = { toFun := fun (p : RootedTree.ConnesKreimer R T) => p.coeff F, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Lifts and hom extensionality #
Consumers use these instead of reaching for AddMonoidAlgebra.lift /
Finsupp.addHom_ext on the bare carrier.
Lift a monoid hom off the forest monoid to an algebra hom off the
Connes-Kreimer algebra (the wrapper-native AddMonoidAlgebra.lift).
Equations
- RootedTree.ConnesKreimer.lift f = ((AddMonoidAlgebra.lift R A (RootedTree.Forest T)) f).comp ↑RootedTree.ConnesKreimer.toFinsuppAlgEquiv
Instances For
Algebra homs off ConnesKreimer agree if they agree on of'.
ofFinsupp as an AddMonoidHom (transport vehicle for addHom_ext).
Equations
- RootedTree.ConnesKreimer.ofFinsuppAddHom = { toFun := RootedTree.ConnesKreimer.ofFinsupp, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Additive homs off ConnesKreimer agree if they agree on single.
Linear maps off ConnesKreimer agree if they agree on single.
Linear maps off ConnesKreimer agree if they agree on the basis of'.
Linearly extend a function off the forest basis
(wrapper-native Finsupp.lift).
Equations
- RootedTree.ConnesKreimer.linearLift f = (Finsupp.lift M R (RootedTree.Forest T)) f ∘ₗ ↑↑RootedTree.ConnesKreimer.toFinsuppAlgEquiv
Instances For
Transport a forest-monoid hom to an algebra hom between Connes-Kreimer
algebras (wrapper-native AddMonoidAlgebra.mapDomainAlgHom).
Equations
- RootedTree.ConnesKreimer.mapDomainAlgHom f = ((↑RootedTree.ConnesKreimer.toFinsuppAlgEquiv.symm).comp (AddMonoidAlgebra.mapDomainAlgHom R R f)).comp ↑RootedTree.ConnesKreimer.toFinsuppAlgEquiv
Instances For
The forest basis #
The forests, via of', as an R-basis of the Connes-Kreimer algebra
(Polynomial.basisMonomials analogue).
Equations
- RootedTree.ConnesKreimer.basisSingleOne = Finsupp.basisSingleOne.map ↑RootedTree.ConnesKreimer.toFinsuppAlgEquiv.symm
Instances For
The counit #
The counit ε : ConnesKreimer R T → R extracts the coefficient of the empty forest, packaged as an algebra hom.
The counit as a monoid hom: the indicator of the empty forest, expressed
as 0 ^ card (so 0 ^ 0 = 1, 0 ^ n = 0) — multiplicativity is
pow_add, and no DecidableEq T is needed.
Equations
- RootedTree.ConnesKreimer.counitMonoidHom = { toFun := fun (F : Multiplicative (RootedTree.Forest T)) => 0 ^ Multiset.card (Multiplicative.toAdd F), map_one' := ⋯, map_mul' := ⋯ }
Instances For
The counit on ConnesKreimer R T as an algebra hom.