Grossman–Larson Hopf Algebra

The kauri.gl sub-package implements the Grossman-Larson (GL) [GL89] Hopf algebra \((H, \Delta_{GL}, \cdot_{GL}, \varepsilon_{GL}, \bullet, S_{GL})\), defined as follows.

  • \(H\) is the set of all non-planar rooted trees.

  • The unit is the single-vertex tree \(\bullet\).

  • The counit map is defined by \(\varepsilon_{GL}(\bullet) = 1\), \(\varepsilon_{GL}(t) = 0\) for all \(|t| > 1\).

  • The coproduct \(\Delta_{GL}\) is cocommutative, and splits the children of the root into all possible subsets: for \(t = B_+(t_1, \ldots, t_k)\),

    \[\Delta_{GL}(t) = \sum_{S \subseteq \{1,\ldots,k\}} B_+(t_i : i \in S) \otimes B_+(t_j : j \notin S)\]
  • The product \(\cdot_{GL}\) (grafting) sums over all ways of attaching the children of the right tree to vertices of the left tree. The product is noncommutative.

  • The antipode \(S_{GL}(\bullet) = \bullet\) and

    \[\begin{split}S_{GL}(t) = -t - \sum_{\substack{S \subset \{1,\ldots,k\} \\ S \neq \emptyset,\, S \neq \{1,\ldots,k\}}} S_{GL}(B_+(t_i : i \in S)) \cdot_{GL} B_+(t_j : j \notin S)\end{split}\]

Example: GL coproduct

import kauri as kr
import kauri.gl as gl
t = kr.Tree([[],[[]]])
kr.display(gl.coproduct(t))
+ + +

Example: GL grafting product

import kauri as kr
import kauri.gl as gl
t1 = kr.Tree([[],[]])
t2 = kr.Tree([[]])
kr.display(gl.product(t1, t2))
+ 2
counit = <kauri.maps.Map object>

The counit \(\varepsilon_{GL}\) of the Grossman-Larson Hopf algebra.

Type:

Map

Example usage:

print(gl.counit(Tree([])))  # Returns 1
print(gl.counit(Tree([[]])))  # Returns 0
1
0
antipode = <kauri.maps.Map object>

The antipode \(S_{GL}\) of the Grossman-Larson Hopf algebra.

Type:

Map

Example usage:

t = Tree([[],[]])
kr.display(gl.antipode(t))
+ 2
coproduct(t: Tree) TensorProductSum[source]

The coproduct \(\Delta_{GL}\) of the Grossman-Larson Hopf algebra.

For a tree \(t = B_+(t_1, \ldots, t_k)\):

\[\Delta_{GL}(t) = \sum_{S \subseteq \{1,\ldots,k\}} B_+(t_i : i \in S) \otimes B_+(t_j : j \notin S)\]
Parameters:

t (Tree) – tree

Return type:

TensorProductSum

Example usage:

t = Tree([[[]],[]])
kr.display(gl.coproduct(t))
+ + +
product(s, t)[source]

The Grossman-Larson grafting product.

For trees \(s\) and \(t = B_+(b_1, \ldots, b_k)\), sums over all ways of attaching each \(b_i\) to a vertex of \(s\):

\[s \cdot_{GL} t = \sum_{f: \{1,\ldots,k\} \to V(s)} \mathrm{graft}(s, b_1, \ldots, b_k, f)\]

Extends bilinearly to ForestSum arguments.

Parameters:
Return type:

ForestSum

Example usage:

kr.display(gl.product(Tree([[]]), Tree([[]])))
+
map_product(f: Map, g: Map) Map[source]

Returns the convolution product of scalar-valued maps in the GL Hopf algebra, defined by

\[(f \cdot g)(t) := \mu \circ (f \otimes g) \circ \Delta_{GL} (t)\]
Parameters:
Return type:

Map

Example usage:

f = Map(lambda x: 1 if len(x.list_repr) == 1 else 0)
g = gl.map_product(f, f)
print(g(Tree([[]])))
0
map_power(f: Map, exponent: int) Map[source]

Returns the convolution power of a map in the GL Hopf algebra.

For negative exponents, the convolution inverse is computed via the recursive formula specific to the GL coproduct, then raised to the corresponding positive power. Negative exponents require scalar-valued maps.

Parameters:
  • f (Map) – f

  • exponent (int) – exponent

Return type:

Map

Example usage:

f = Map(lambda x: 1 if len(x.list_repr) == 1 else 0)
f_sq = gl.map_power(f, 2)
print(f_sq(Tree([[]])))
0