Free Zinbiel Algebras¶
AUTHORS:
Travis Scrimshaw (2015-09): initial version
-
class
sage.algebras.free_zinbiel_algebra.
FreeZinbielAlgebra
(R, n, names)¶ Bases:
sage.combinat.free_module.CombinatorialFreeModule
The free Zinbiel algebra on \(n\) generators.
Let \(R\) be a ring. A Zinbiel algebra is a non-associative algebra with multiplication \(\circ\) that satisfies
\[a \circ (b \circ c) = a \circ (b \circ c) + a \circ (c \circ b).\]Zinbiel algebras were first introduced by Loday (see [Lod1995] and [LV2012]) as the Koszul dual to Leibniz algebras (hence the name coined by Lemaire).
Zinbiel algebras are divided power algebras, in that for
\[x^{\circ n} = \bigl(x \circ (x \circ \cdots \circ( x \circ x) \cdots ) \bigr)\]we have
\[x^{\circ m} \circ x^{\circ n} = \binom{n+m-1}{m} x^{n+m}\]and
\[\underbrace{\bigl( ( x \circ \cdots \circ x \circ (x \circ x) \cdots ) \bigr)}_{n+1 \text{ times}} = n! x^n.\]Note
This implies that Zinbiel algebras are not power associative.
To every Zinbiel algebra, we can construct a corresponding commutative associative algebra by using the symmetrized product:
\[a * b = a \circ b + b \circ a.\]The free Zinbiel algebra on \(n\) generators is isomorphic as \(R\)-modules to the reduced tensor algebra \(\bar{T}(R^n)\) with the product
\[(x_0 x_1 \cdots x_p) \circ (x_{p+1} x_{p+2} \cdots x_{p+q}) = \sum_{\sigma \in S_{p,q}} x_0 (x_{\sigma(1)} x_{\sigma(2)} \cdots x_{\sigma(p+q)},\]where \(S_{p,q}\) is the set of \((p,q)\)-shuffles.
The free Zinbiel algebra is free as a divided power algebra. Moreover, the corresponding commutative algebra is isomorphic to the (non-unital) shuffle algebra.
INPUT:
R
– a ringn
– (optional) the number of generatorsnames
– the generator names
Warning
Currently the basis is indexed by all words over the variables, including the empty word. This is a slight abuse as it is supposed to be indexed by all non-empty words.
EXAMPLES:
We create the free Zinbiel algebra and check the defining relation:
sage: Z.<x,y,z> = algebras.FreeZinbiel(QQ) sage: (x*y)*z Z[xyz] + Z[xzy] sage: x*(y*z) + x*(z*y) Z[xyz] + Z[xzy]
We see that the Zinbiel algebra is not associative, nor even power associative:
sage: x*(y*z) Z[xyz] sage: x*(x*x) Z[xxx] sage: (x*x)*x 2*Z[xxx]
We verify that it is a divided powers algebra:
sage: (x*(x*x)) * (x*(x*(x*x))) 15*Z[xxxxxxx] sage: binomial(3+4-1,4) 15 sage: (x*(x*(x*x))) * (x*(x*x)) 20*Z[xxxxxxx] sage: binomial(3+4-1,3) 20 sage: ((x*x)*x)*x 6*Z[xxxx] sage: (((x*x)*x)*x)*x 24*Z[xxxxx]
REFERENCES:
-
algebra_generators
()¶ Return the algebra generators of
self
.EXAMPLES:
sage: Z.<x,y,z> = algebras.FreeZinbiel(QQ) sage: list(Z.algebra_generators()) [Z[x], Z[y], Z[z]]
-
change_ring
(R)¶ Return the free Zinbiel algebra in the same variables over
R
.INPUT:
R
– a ring
EXAMPLES:
sage: A = algebras.FreeZinbiel(ZZ, 'f,g,h') sage: A.change_ring(QQ) Free Zinbiel algebra on generators (Z[f], Z[g], Z[h]) over Rational Field
-
construction
()¶ Return a pair
(F, R)
, whereF
is aZinbielFunctor
and \(R\) is a ring, such thatF(R)
returnsself
.EXAMPLES:
sage: P = algebras.FreeZinbiel(ZZ, 'x,y') sage: x,y = P.gens() sage: F, R = P.construction() sage: F Zinbiel[x,y] sage: R Integer Ring sage: F(ZZ) is P True sage: F(QQ) Free Zinbiel algebra on generators (Z[x], Z[y]) over Rational Field
-
degree_on_basis
(t)¶ Return the degree of a word in the free Zinbiel algebra.
This is the length.
EXAMPLES:
sage: A = algebras.FreeZinbiel(QQ, 'x,y') sage: W = A.basis().keys() sage: A.degree_on_basis(W('xy')) 2
-
gens
()¶ Return the generators of
self
.EXAMPLES:
sage: Z.<x,y,z> = algebras.FreeZinbiel(QQ) sage: Z.gens() (Z[x], Z[y], Z[z])
-
product_on_basis
(x, y)¶ Return the product of the basis elements indexed by
x
andy
.INPUT:
x
,y
– two words
EXAMPLES:
sage: Z.<x,y,z> = algebras.FreeZinbiel(QQ) sage: (x*y)*z # indirect doctest Z[xyz] + Z[xzy]
-
class
sage.algebras.free_zinbiel_algebra.
ZinbielFunctor
(vars)¶ Bases:
sage.categories.pushout.ConstructionFunctor
A constructor for free Zinbiel algebras.
EXAMPLES:
sage: P = algebras.FreeZinbiel(ZZ, 'x,y') sage: x,y = P.gens() sage: F = P.construction()[0]; F Zinbiel[x,y] sage: A = GF(5)['a,b'] sage: a, b = A.gens() sage: F(A) Free Zinbiel algebra on generators (Z[x], Z[y]) over Multivariate Polynomial Ring in a, b over Finite Field of size 5 sage: f = A.hom([a+b,a-b],A) sage: F(f) Generic endomorphism of Free Zinbiel algebra on generators (Z[x], Z[y]) over Multivariate Polynomial Ring in a, b over Finite Field of size 5 sage: F(f)(a * F(A)(x)) (a+b)*Z[x]
-
merge
(other)¶ Merge
self
with another construction functor, or return None.EXAMPLES:
sage: F = sage.algebras.free_zinbiel_algebra.ZinbielFunctor(['x','y']) sage: G = sage.algebras.free_zinbiel_algebra.ZinbielFunctor(['t']) sage: F.merge(G) Zinbiel[x,y,t] sage: F.merge(F) Zinbiel[x,y]
Now some actual use cases:
sage: R = algebras.FreeZinbiel(ZZ, 'x,y,z') sage: x,y,z = R.gens() sage: 1/2 * x 1/2*Z[x] sage: parent(1/2 * x) Free Zinbiel algebra on generators (Z[x], Z[y], Z[z]) over Rational Field sage: S = algebras.FreeZinbiel(QQ, 'z,t') sage: z,t = S.gens() sage: x * t Z[xt] sage: parent(x * t) Free Zinbiel algebra on generators (Z[z], Z[t], Z[x], Z[y]) over Rational Field
-