Concatenation
Concatenation, and the two orders differ.
source
<notatio-cell value="CircleTimes(NSymH([2]), NSymH([1, 3]))" />
<notatio-cell value="CircleTimes(NSymH([1]), NSymH([2]))" />
<notatio-cell value="CircleTimes(NSymH([2]), NSymH([1]))" />Everything else in this section is an algebra: a product, and nothing else. A Hopf algebra also has a coproduct, which takes one element to a sum of tensor pairs and pulls objects apart where the product puts them together. The two are not independent — they must satisfy
in the tensor square. That compatibility is the whole point of the structure, and it is also the best test available, because the product and the coproduct are written separately and the identity relates them.
Two such algebras live here, both indexed by compositions (ordered lists of positive parts), and dual to each other:
| basis | product | coproduct | |
|---|---|---|---|
| NSym — non-commutative symmetric functions | concatenation | ||
| QSym — quasi-symmetric functions | quasi-shuffle | deconcatenation |
The graded piece of degree
The product could not be simpler.
Concatenation, and the two orders differ.
<notatio-cell value="CircleTimes(NSymH([2]), NSymH([1, 3]))" />
<notatio-cell value="CircleTimes(NSymH([1]), NSymH([2]))" />
<notatio-cell value="CircleTimes(NSymH([2]), NSymH([1]))" />Interleave the two compositions — and at each step you may instead add the two leading parts together. That third option is what makes it a quasi-shuffle, and it is why
The M₂ term is the overlap. QSym, unlike NSym, is commutative.
<notatio-cell value="CircleTimes(QSymM([1]), QSymM([1]))" />
<notatio-cell value="CircleTimes(QSymM([1]), QSymM([2]))" />
<notatio-cell value="CircleTimes(QSymM([2]), QSymM([1]))" />Coproduct returns a sum of HopfTensor(left, right) pairs. For QSym it is deconcatenation — cut the composition at each of its gaps. For NSym it is the multiplicative extension of splitting a single part.
Δ(M₁,₂) cuts at each gap. Δ(H₂) splits the part 2 as 0+2, 1+1, 2+0.
<notatio-cell value="Coproduct(QSymM([1, 2]))" />
<notatio-cell value="Coproduct(NSymH([2]))" />Both coproducts are coassociative, and both satisfy the compatibility above — checked across every pair of basis elements up to degree 3, in both algebras. Those two facts are what make these bialgebras rather than an algebra and an unrelated map.
A Hopf algebra has one more piece: an antipode
over the rest, where the left factor has strictly smaller degree. The package computes
On a commutative Hopf algebra the antipode is an involution, so S² = id on QSym.
<notatio-cell value="Antipode(QSymM([1]))" />
<notatio-cell value="Antipode(QSymM([1, 2]))" />
<notatio-cell value="Antipode(Antipode(QSymM([1, 2])))" />2^(n−1) compositions of n. The product is homogeneous: degrees add.
<notatio-cell value="AlgebraDimension(NSymAlgebra(4))" />
<notatio-cell value="AlgebraDimension(QSymAlgebra(5))" />
<notatio-cell value="HopfDegree(CircleTimes(QSymM([1]), QSymM([2])))" />A composition of
| definition | inverse | |
|---|---|---|
| NSym | ||
| QSym |
Those signed sums are Möbius inversion over the Boolean lattice, whose Möbius function is
The two directions are opposite — coarsen for NSym, refine for QSym — and that is not a slip. NSym and QSym are dual, with
and since the two transition matrices are written down separately, nothing forces them to be inverse transposes of one another except the mathematics.
R_(2) is just H_(2); the finer composition is the one that picks up signs.
<notatio-cell value="InCompleteBasis(NSymR([1, 1]))" />
<notatio-cell value="InCompleteBasis(NSymR([2]))" />
<notatio-cell value="InMonomialBasis(QSymF([2]))" />
<notatio-cell value="InRibbonBasis(NSymH([2, 1]))" />Both are first-class here — the product, coproduct, antipode and containment all work on
The ribbon product has a two-term closed form:
where
The ribbon antipode is a single signed basis element:
for
Concatenation and near-concatenation; then an antipode with a single term.
<notatio-cell value="CircleTimes(NSymR([2]), NSymR([1]))" />
<notatio-cell value="CircleTimes(QSymF([1]), QSymF([1]))" />
<notatio-cell value="Antipode(NSymR([3]))" />
<notatio-cell value="ConjugateComposition([2, 1])" />Which involution
Tensor pairs get their own head. HopfTensor(a, b), not CircleTimes — that is already the shared ordered product across the algebra libraries, and overloading it for a genuine tensor pair would be a conflation.
The two algebras share an index set but are not the same algebra. Mixing
A sum of mixed degrees has no degree, so HopfDegree leaves that call standing.
Not built yet. Sym itself sitting inside QSym as the symmetric functions, and the Hopf-algebra maps between these and the other algebras in this section.