# Onsager Algebra#

AUTHORS:

• Travis Scrimshaw (2017-07): Initial version

class sage.algebras.lie_algebras.onsager.OnsagerAlgebra(R)[source]#

The Onsager (Lie) algebra.

The Onsager (Lie) algebra $$\mathcal{O}$$ is a Lie algebra with generators $$A_0, A_1$$ that satisfy

$[A_0, [A_0, [A_0, A_1]]] = -4 [A_0, A_1], \qquad [A_1, [A_1, [A_1, A_0]]] = -4 [A_1, A_0].$

Note

We are using a rescaled version of the usual defining generators.

There exist a basis $$\{A_m, G_n \mid m \in \ZZ, n \in \ZZ_{>0}\}$$ for $$\mathcal{O}$$ with structure coefficients

$[A_m, A_{m'}] = G_{m-m'}, \qquad [G_n, G_{n'}] = 0, \qquad [G_n, A_m] = 2A_{m-n} - 2A_{m+n},$

where $$m > m'$$.

The Onsager algebra is isomorphic to the subalgebra of the affine Lie algebra $$\widehat{\mathfrak{sl}}_2 = \mathfrak{sl}_2 \otimes \CC[t,t^{-1}] \oplus \CC K \oplus \CC d$$ that is invariant under the Chevalley involution. In particular, we have

$A_i \mapsto f \otimes t^i - e \otimes t^{-i}, \qquad G_i \mapsto h \otimes t^{-i} - h \otimes t^i.$

where $$e,f,h$$ are the Chevalley generators of $$\mathfrak{sl}_2$$.

EXAMPLES:

We construct the Onsager algebra and do some basic computations:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: O.inject_variables()
Defining A0, A1

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> O.inject_variables()
Defining A0, A1


We verify the defining relations:

sage: O([A0, [A0, [A0, A1]]]) == -4 * O([A0, A1])
True
sage: O([A1, [A1, [A1, A0]]]) == -4 * O([A1, A0])
True

>>> from sage.all import *
>>> O([A0, [A0, [A0, A1]]]) == -Integer(4) * O([A0, A1])
True
>>> O([A1, [A1, [A1, A0]]]) == -Integer(4) * O([A1, A0])
True


We check the embedding into $$\widehat{\mathfrak{sl}}_2$$:

sage: L = LieAlgebra(QQ, cartan_type=['A',1,1])
sage: B = L.basis()
sage: al = RootSystem(['A',1]).root_lattice().simple_root(1)
sage: ac = al.associated_coroot()
sage: def emb_A(i): return B[-al,i] - B[al,-i]
sage: def emb_G(i): return B[ac,i] - B[ac,-i]
sage: a0 = emb_A(0)
sage: a1 = emb_A(1)
sage: L([a0, [a0, [a0, a1]]]) == -4 * L([a0, a1])
True
sage: L([a1, [a1, [a1, a0]]]) == -4 * L([a1, a0])
True

sage: all(emb_G(n).bracket(emb_A(m)) == 2*emb_A(m-n) - 2*emb_A(m+n)
....:     for m in range(-10, 10) for n in range(1,10))
True
sage: all(emb_A(m).bracket(emb_A(mp)) == emb_G(m-mp)
....:     for m in range(-10,10) for mp in range(m-10, m))
True

>>> from sage.all import *
>>> L = LieAlgebra(QQ, cartan_type=['A',Integer(1),Integer(1)])
>>> B = L.basis()
>>> al = RootSystem(['A',Integer(1)]).root_lattice().simple_root(Integer(1))
>>> ac = al.associated_coroot()
>>> def emb_A(i): return B[-al,i] - B[al,-i]
>>> def emb_G(i): return B[ac,i] - B[ac,-i]
>>> a0 = emb_A(Integer(0))
>>> a1 = emb_A(Integer(1))
>>> L([a0, [a0, [a0, a1]]]) == -Integer(4) * L([a0, a1])
True
>>> L([a1, [a1, [a1, a0]]]) == -Integer(4) * L([a1, a0])
True

>>> all(emb_G(n).bracket(emb_A(m)) == Integer(2)*emb_A(m-n) - Integer(2)*emb_A(m+n)
...     for m in range(-Integer(10), Integer(10)) for n in range(Integer(1),Integer(10)))
True
>>> all(emb_A(m).bracket(emb_A(mp)) == emb_G(m-mp)
...     for m in range(-Integer(10),Integer(10)) for mp in range(m-Integer(10), m))
True


REFERENCES:

Element[source]#

alias of LieAlgebraElement

alternating_central_extension()[source]#

Return the alternating central extension of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: ACE = O.alternating_central_extension()
sage: ACE
Alternating central extension of the Onsager algebra over Rational Field

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> ACE = O.alternating_central_extension()
>>> ACE
Alternating central extension of the Onsager algebra over Rational Field

basis()[source]#

Return the basis of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: O.basis()
Lazy family (Onsager monomial(i))_{i in
Disjoint union of Family (Integer Ring, Positive integers)}

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> O.basis()
Lazy family (Onsager monomial(i))_{i in
Disjoint union of Family (Integer Ring, Positive integers)}

bracket_on_basis(x, y)[source]#

Return the bracket of basis elements indexed by x and y where x < y.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: O.bracket_on_basis((1,3), (1,9))  # [G, G]
0
sage: O.bracket_on_basis((0,8), (1,13))  # [A, G]
-2*A[-5] + 2*A[21]
sage: O.bracket_on_basis((0,-9), (0, 7))  # [A, A]
-G[16]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> O.bracket_on_basis((Integer(1),Integer(3)), (Integer(1),Integer(9)))  # [G, G]
0
>>> O.bracket_on_basis((Integer(0),Integer(8)), (Integer(1),Integer(13)))  # [A, G]
-2*A[-5] + 2*A[21]
>>> O.bracket_on_basis((Integer(0),-Integer(9)), (Integer(0), Integer(7)))  # [A, A]
-G[16]

lie_algebra_generators()[source]#

Return the generators of self as a Lie algebra.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: O.lie_algebra_generators()
Finite family {'A0': A[0], 'A1': A[1]}

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> O.lie_algebra_generators()
Finite family {'A0': A[0], 'A1': A[1]}

quantum_group(q=None, c=None)[source]#

Return the quantum group of self.

The corresponding quantum group is the QuantumOnsagerAlgebra. The parameter $$c$$ must be such that $$c(1) = 1$$

INPUT:

• q – (optional) the quantum parameter; the default is $$q \in R(q)$$, where $$R$$ is the base ring of self

• c – (optional) the parameter $$c$$; the default is q

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: Q
q-Onsager algebra with c=q over Fraction Field of
Univariate Polynomial Ring in q over Rational Field

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> Q
q-Onsager algebra with c=q over Fraction Field of
Univariate Polynomial Ring in q over Rational Field

some_elements()[source]#

Return some elements of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: O.some_elements()
[A[0], A[2], A[-1], G[4], -2*A[-3] + A[2] + 3*G[2]]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> O.some_elements()
[A[0], A[2], A[-1], G[4], -2*A[-3] + A[2] + 3*G[2]]

class sage.algebras.lie_algebras.onsager.OnsagerAlgebraACE(R)[source]#

The alternating central extension of the Onsager algebra.

The alternating central extension of the Onsager algebra is the Lie algebra with basis elements $$\{\mathcal{A}_k, \mathcal{B}_k\}_{k \in \ZZ}$$ that satisfy the relations

\begin{split}\begin{aligned} [\mathcal{A}_k, \mathcal{A}_m] & = \mathcal{B}_{k-m} - \mathcal{B}_{m-k}, \\ [\mathcal{A}_k, \mathcal{B}_m] & = \mathcal{A}_{k+m} - \mathcal{A}_{k-m}, \\ [\mathcal{B}_k, \mathcal{B}_m] & = 0. \end{aligned}\end{split}

This has a natural injection from the Onsager algebra by the map $$\iota$$ defined by

$\iota(A_k) = \mathcal{A}_k, \qquad\qquad \iota(B_k) = \mathcal{B}_k - \mathcal{B}_{-k}.$

Note that the map $$\iota$$ differs slightly from Lemma 4.18 in [Ter2021b] due to our choice of basis of the Onsager algebra.

Warning

We have added an extra basis vector $$\mathcal{B}_0$$, which would be $$0$$ in the definition given in [Ter2021b].

EXAMPLES:

We begin by constructing the ACE and doing some sample computations:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: ACE = O.alternating_central_extension()
sage: ACE
Alternating central extension of the Onsager algebra over Rational Field

sage: B = ACE.basis()
sage: A1, A2, Am2 = B[0,1], B[0,2], B[0,-2]
sage: B1, B2, Bm2 = B[1,1], B[1,2], B[1,-2]
sage: A1.bracket(Am2)
-B[-3] + B[3]
sage: A1.bracket(A2)
B[-1] - B[1]
sage: A1.bracket(B2)
-A[-1] + A[3]
sage: A1.bracket(Bm2)
A[-1] - A[3]
sage: B2.bracket(B1)
0
sage: Bm2.bracket(B2)
0
sage: (A2 + Am2).bracket(B1 + A2 + B2 + Bm2)
-A[-3] + A[-1] - A[1] + A[3] + B[-4] - B[4]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> ACE = O.alternating_central_extension()
>>> ACE
Alternating central extension of the Onsager algebra over Rational Field

>>> B = ACE.basis()
>>> A1, A2, Am2 = B[Integer(0),Integer(1)], B[Integer(0),Integer(2)], B[Integer(0),-Integer(2)]
>>> B1, B2, Bm2 = B[Integer(1),Integer(1)], B[Integer(1),Integer(2)], B[Integer(1),-Integer(2)]
>>> A1.bracket(Am2)
-B[-3] + B[3]
>>> A1.bracket(A2)
B[-1] - B[1]
>>> A1.bracket(B2)
-A[-1] + A[3]
>>> A1.bracket(Bm2)
A[-1] - A[3]
>>> B2.bracket(B1)
0
>>> Bm2.bracket(B2)
0
>>> (A2 + Am2).bracket(B1 + A2 + B2 + Bm2)
-A[-3] + A[-1] - A[1] + A[3] + B[-4] - B[4]


The natural inclusion map $$\iota$$ is implemented as a coercion map:

sage: iota = ACE.coerce_map_from(O)
sage: b = O.basis()
sage: am1, a2, b4 = b[0,-1], b[0,2], b[1,4]
sage: iota(am1.bracket(a2)) == iota(am1).bracket(iota(a2))
True
sage: iota(am1.bracket(b4)) == iota(am1).bracket(iota(b4))
True
sage: iota(b4.bracket(a2)) == iota(b4).bracket(iota(a2))
True

sage: am1 + B2
A[-1] + B[2]
sage: am1.bracket(B2)
-A[-3] + A[1]
sage: Bm2.bracket(a2)
-A[0] + A[4]

>>> from sage.all import *
>>> iota = ACE.coerce_map_from(O)
>>> b = O.basis()
>>> am1, a2, b4 = b[Integer(0),-Integer(1)], b[Integer(0),Integer(2)], b[Integer(1),Integer(4)]
>>> iota(am1.bracket(a2)) == iota(am1).bracket(iota(a2))
True
>>> iota(am1.bracket(b4)) == iota(am1).bracket(iota(b4))
True
>>> iota(b4.bracket(a2)) == iota(b4).bracket(iota(a2))
True

>>> am1 + B2
A[-1] + B[2]
>>> am1.bracket(B2)
-A[-3] + A[1]
>>> Bm2.bracket(a2)
-A[0] + A[4]


We have the projection map $$\rho$$ from Lemma 4.19 in [Ter2021b]:

$\rho(\mathcal{A}_k) = A_k, \qquad\qquad \rho(\mathcal{B}_k) = \mathrm{sgn}(k) B_{|k|}.$

The kernel of $$\rho$$ is the center $$\mathcal{Z}$$, which has a basis $$\{B_k + B_{-k}\}_{k \in \ZZ}$$:

sage: rho = ACE.projection()
sage: rho(A1)
A[1]
sage: rho(Am2)
A[-2]
sage: rho(B1)
1/2*G[1]
sage: rho(Bm2)
-1/2*G[2]
sage: all(rho(B[1,k] + B[1,-k]) == 0 for k in range(-6,6))
True
sage: all(B[0,m].bracket(B[1,k] + B[1,-k]) == 0
....:     for k in range(-4,4) for m in range(-4,4))
True

>>> from sage.all import *
>>> rho = ACE.projection()
>>> rho(A1)
A[1]
>>> rho(Am2)
A[-2]
>>> rho(B1)
1/2*G[1]
>>> rho(Bm2)
-1/2*G[2]
>>> all(rho(B[Integer(1),k] + B[Integer(1),-k]) == Integer(0) for k in range(-Integer(6),Integer(6)))
True
>>> all(B[Integer(0),m].bracket(B[Integer(1),k] + B[Integer(1),-k]) == Integer(0)
...     for k in range(-Integer(4),Integer(4)) for m in range(-Integer(4),Integer(4)))
True

Element[source]#

alias of LieAlgebraElement

basis()[source]#

Return the basis of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
sage: O.basis()
Lazy family (Onsager ACE monomial(i))_{i in
Disjoint union of Family (Integer Ring, Integer Ring)}

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
>>> O.basis()
Lazy family (Onsager ACE monomial(i))_{i in
Disjoint union of Family (Integer Ring, Integer Ring)}

bracket_on_basis(x, y)[source]#

Return the bracket of basis elements indexed by x and y where x < y.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
sage: O.bracket_on_basis((1,3), (1,9))  # [B, B]
0
sage: O.bracket_on_basis((0,8), (1,13))  # [A, B]
-A[-5] + A[21]
sage: O.bracket_on_basis((0,-9), (0, 7))  # [A, A]
B[-16] - B[16]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
>>> O.bracket_on_basis((Integer(1),Integer(3)), (Integer(1),Integer(9)))  # [B, B]
0
>>> O.bracket_on_basis((Integer(0),Integer(8)), (Integer(1),Integer(13)))  # [A, B]
-A[-5] + A[21]
>>> O.bracket_on_basis((Integer(0),-Integer(9)), (Integer(0), Integer(7)))  # [A, A]
B[-16] - B[16]

lie_algebra_generators()[source]#

Return the generators of self as a Lie algebra.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
sage: O.lie_algebra_generators()
Lazy family (Onsager ACE monomial(i))_{i in
Disjoint union of Family (Integer Ring, Integer Ring)}

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
>>> O.lie_algebra_generators()
Lazy family (Onsager ACE monomial(i))_{i in
Disjoint union of Family (Integer Ring, Integer Ring)}

projection()[source]#

Return the projection map $$\rho$$ from Lemma 4.19 in [Ter2021b] to the Onsager algebra.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: ACE = O.alternating_central_extension()
sage: rho = ACE.projection()
sage: B = ACE.basis()
sage: A1, A2, Am2 = B[0,1], B[0,2], B[0,-2]
sage: B1, B2, Bm2 = B[1,1], B[1,2], B[1,-2]

sage: rho(A1)
A[1]
sage: rho(Am2)
A[-2]
sage: rho(B1)
1/2*G[1]
sage: rho(B2)
1/2*G[2]
sage: rho(Bm2)
-1/2*G[2]

sage: rho(A1.bracket(A2))
-G[1]
sage: rho(A1).bracket(rho(A2))
-G[1]
sage: rho(B1.bracket(Am2))
A[-3] - A[-1]
sage: rho(B1).bracket(rho(Am2))
A[-3] - A[-1]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> ACE = O.alternating_central_extension()
>>> rho = ACE.projection()
>>> B = ACE.basis()
>>> A1, A2, Am2 = B[Integer(0),Integer(1)], B[Integer(0),Integer(2)], B[Integer(0),-Integer(2)]
>>> B1, B2, Bm2 = B[Integer(1),Integer(1)], B[Integer(1),Integer(2)], B[Integer(1),-Integer(2)]

>>> rho(A1)
A[1]
>>> rho(Am2)
A[-2]
>>> rho(B1)
1/2*G[1]
>>> rho(B2)
1/2*G[2]
>>> rho(Bm2)
-1/2*G[2]

>>> rho(A1.bracket(A2))
-G[1]
>>> rho(A1).bracket(rho(A2))
-G[1]
>>> rho(B1.bracket(Am2))
A[-3] - A[-1]
>>> rho(B1).bracket(rho(Am2))
A[-3] - A[-1]

some_elements()[source]#

Return some elements of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
sage: O.some_elements()
[A[0], A[2], A[-1], B[4], B[-3], -2*A[-3] + A[2] + B[-1] + 3*B[2]]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ).alternating_central_extension()
>>> O.some_elements()
[A[0], A[2], A[-1], B[4], B[-3], -2*A[-3] + A[2] + B[-1] + 3*B[2]]

class sage.algebras.lie_algebras.onsager.QuantumOnsagerAlgebra(g, q, c)[source]#

The quantum Onsager algebra.

The quantum Onsager algebra, or $$q$$-Onsager algebra, is a quantum group analog of the Onsager algebra. It is the left (or right) coideal subalgebra of the quantum group $$U_q(\widehat{\mathfrak{sl}}_2)$$ and is the simplest example of a quantum symmetric pair coideal subalgebra of affine type.

The $$q$$-Onsager algebra depends on a parameter $$c$$ such that $$c(1) = 1$$. The $$q$$-Onsager algebra with parameter $$c$$ is denoted $$U_q(\mathcal{O}_R)_c$$, where $$R$$ is the base ring of the defining Onsager algebra.

EXAMPLES:

We create the $$q$$-Onsager algebra and its generators:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: G = Q.algebra_generators()

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> G = Q.algebra_generators()


The generators are given as pairs, where $$G[0,n]$$ is the generator $$B_{n\delta+\alpha_1}$$ and $$G[1,n]$$ is the generator $$B_{n\delta}$$. We use the convention that $$n\delta + \alpha_1 \equiv (-n-1)\delta + \alpha_0$$.

sage: G[0,5]
B[5d+a1]
sage: G[0,-5]
B[4d+a0]
sage: G[1,5]
B[5d]
sage: (G[0,5] + G[0,-3]) * (G[1,2] - G[0,3])
B[2d+a0]*B[2d] - B[2d+a0]*B[3d+a1]
+ ((-q^4+1)/q^2)*B[1d]*B[6d+a1]
+ ((q^4-1)/q^2)*B[1d]*B[4d+a1] + B[2d]*B[5d+a1]
- B[5d+a1]*B[3d+a1] + ((q^2+1)/q^2)*B[7d+a1]
+ ((q^6+q^4-q^2-1)/q^2)*B[5d+a1] + (-q^4-q^2)*B[3d+a1]
sage: (G[0,5] + G[0,-3] + G[1,4]) * (G[0,2] - G[1,3])
-B[2d+a0]*B[3d] + B[2d+a0]*B[2d+a1]
+ ((q^4-1)/q^4)*B[1d]*B[7d+a1]
+ ((q^8-2*q^4+1)/q^4)*B[1d]*B[5d+a1]
+ (-q^4+1)*B[1d]*B[3d+a1] + ((q^4-1)/q^2)*B[2d]*B[6d+a1]
+ ((-q^4+1)/q^2)*B[2d]*B[4d+a1] - B[3d]*B[4d]
- B[3d]*B[5d+a1] + B[4d]*B[2d+a1] + B[5d+a1]*B[2d+a1]
+ ((-q^2-1)/q^4)*B[8d+a1] + ((-q^6-q^4+q^2+1)/q^4)*B[6d+a1]
+ (-q^6-q^4+q^2+1)*B[4d+a1] + (q^6+q^4)*B[2d+a1]

>>> from sage.all import *
>>> G[Integer(0),Integer(5)]
B[5d+a1]
>>> G[Integer(0),-Integer(5)]
B[4d+a0]
>>> G[Integer(1),Integer(5)]
B[5d]
>>> (G[Integer(0),Integer(5)] + G[Integer(0),-Integer(3)]) * (G[Integer(1),Integer(2)] - G[Integer(0),Integer(3)])
B[2d+a0]*B[2d] - B[2d+a0]*B[3d+a1]
+ ((-q^4+1)/q^2)*B[1d]*B[6d+a1]
+ ((q^4-1)/q^2)*B[1d]*B[4d+a1] + B[2d]*B[5d+a1]
- B[5d+a1]*B[3d+a1] + ((q^2+1)/q^2)*B[7d+a1]
+ ((q^6+q^4-q^2-1)/q^2)*B[5d+a1] + (-q^4-q^2)*B[3d+a1]
>>> (G[Integer(0),Integer(5)] + G[Integer(0),-Integer(3)] + G[Integer(1),Integer(4)]) * (G[Integer(0),Integer(2)] - G[Integer(1),Integer(3)])
-B[2d+a0]*B[3d] + B[2d+a0]*B[2d+a1]
+ ((q^4-1)/q^4)*B[1d]*B[7d+a1]
+ ((q^8-2*q^4+1)/q^4)*B[1d]*B[5d+a1]
+ (-q^4+1)*B[1d]*B[3d+a1] + ((q^4-1)/q^2)*B[2d]*B[6d+a1]
+ ((-q^4+1)/q^2)*B[2d]*B[4d+a1] - B[3d]*B[4d]
- B[3d]*B[5d+a1] + B[4d]*B[2d+a1] + B[5d+a1]*B[2d+a1]
+ ((-q^2-1)/q^4)*B[8d+a1] + ((-q^6-q^4+q^2+1)/q^4)*B[6d+a1]
+ (-q^6-q^4+q^2+1)*B[4d+a1] + (q^6+q^4)*B[2d+a1]


We check the $$q$$-Dolan-Grady relations:

sage: def q_dolan_grady(a, b, q):
....:     x = q*a*b - ~q*b*a
....:     y = ~q*a*x - q*x*a
....:     return a*y - y*a
sage: A0, A1 = G[0,-1], G[0,0]
sage: q = Q.q()
sage: q_dolan_grady(A1, A0, q) == (q^4 + 2*q^2 + 1) * (A0*A1 - A1*A0)
True
sage: q_dolan_grady(A0, A1, q) == (q^4 + 2*q^2 + 1) * (A1*A0 - A0*A1)
True

>>> from sage.all import *
...     x = q*a*b - ~q*b*a
...     y = ~q*a*x - q*x*a
...     return a*y - y*a
>>> A0, A1 = G[Integer(0),-Integer(1)], G[Integer(0),Integer(0)]
>>> q = Q.q()
>>> q_dolan_grady(A1, A0, q) == (q**Integer(4) + Integer(2)*q**Integer(2) + Integer(1)) * (A0*A1 - A1*A0)
True
>>> q_dolan_grady(A0, A1, q) == (q**Integer(4) + Integer(2)*q**Integer(2) + Integer(1)) * (A1*A0 - A0*A1)
True


REFERENCES:

algebra_generators()[source]#

Return the algebra generators of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: Q.algebra_generators()
Lazy family (generator map(i))_{i in Disjoint union of
Family (Integer Ring, Positive integers)}

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> Q.algebra_generators()
Lazy family (generator map(i))_{i in Disjoint union of
Family (Integer Ring, Positive integers)}

c()[source]#

Return the parameter $$c$$ of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group(c=-3)
sage: Q.c()
-3

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group(c=-Integer(3))
>>> Q.c()
-3

degree_on_basis(m)[source]#

Return the degree of the basis element indexed by m.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: G = Q.algebra_generators()
sage: B0 = G[0,0]
sage: B1 = G[0,-1]
1
20
sage: ((B0 * B1)^3).maximal_degree()
6

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> G = Q.algebra_generators()
>>> B0 = G[Integer(0),Integer(0)]
>>> B1 = G[Integer(0),-Integer(1)]
1
20
>>> ((B0 * B1)**Integer(3)).maximal_degree()
6

gens()[source]#

Return the algebra generators of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: Q.algebra_generators()
Lazy family (generator map(i))_{i in Disjoint union of
Family (Integer Ring, Positive integers)}

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> Q.algebra_generators()
Lazy family (generator map(i))_{i in Disjoint union of
Family (Integer Ring, Positive integers)}

lie_algebra()[source]#

Return the underlying Lie algebra of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: Q.lie_algebra()
Onsager algebra over Rational Field
sage: Q.lie_algebra() is O
True

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> Q.lie_algebra()
Onsager algebra over Rational Field
>>> Q.lie_algebra() is O
True

one_basis()[source]#

Return the basis element indexing $$1$$.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: ob = Q.one_basis(); ob
1
sage: ob.parent()
Free abelian monoid indexed by
Disjoint union of Family (Integer Ring, Positive integers)

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> ob = Q.one_basis(); ob
1
>>> ob.parent()
Free abelian monoid indexed by
Disjoint union of Family (Integer Ring, Positive integers)

product_on_basis(lhs, rhs)[source]#

Return the product of the two basis elements lhs and rhs.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: I = Q._indices.gens()
sage: Q.product_on_basis(I[1,21]^2, I[1,31]^3)
B[21d]^2*B[31d]^3
sage: Q.product_on_basis(I[1,31]^3, I[1,21]^2)
B[21d]^2*B[31d]^3
sage: Q.product_on_basis(I[0,8], I[0,6])
B[8d+a1]*B[6d+a1]
sage: Q.product_on_basis(I[0,-8], I[0,6])
B[7d+a0]*B[6d+a1]
sage: Q.product_on_basis(I[0,-6], I[0,-8])
B[5d+a0]*B[7d+a0]
sage: Q.product_on_basis(I[0,-6], I[1,2])
B[5d+a0]*B[2d]
sage: Q.product_on_basis(I[1,6], I[0,2])
B[6d]*B[2d+a1]

sage: Q.product_on_basis(I[0,1], I[0,2])
1/q^2*B[2d+a1]*B[1d+a1] - B[1d]
sage: Q.product_on_basis(I[0,-3], I[0,-1])
1/q^2*B[a0]*B[2d+a0] + ((-q^2+1)/q^2)*B[1d+a0]^2 - B[2d]
sage: Q.product_on_basis(I[0,2], I[0,-1])
q^2*B[a0]*B[2d+a1] + ((q^4-1)/q^2)*B[1d+a1]*B[a1]
+ (-q^2+1)*B[1d] + q^2*B[3d]
sage: Q.product_on_basis(I[0,2], I[1,1])
B[1d]*B[2d+a1] + (q^2+1)*B[3d+a1] + (-q^2-1)*B[1d+a1]
sage: Q.product_on_basis(I[0,1], I[1,2])
((-q^4+1)/q^2)*B[1d]*B[2d+a1] + ((q^4-1)/q^2)*B[1d]*B[a1]
+ B[2d]*B[1d+a1] + (-q^4-q^2)*B[a0]
+ ((q^2+1)/q^2)*B[3d+a1] + ((q^6+q^4-q^2-1)/q^2)*B[1d+a1]
sage: Q.product_on_basis(I[1,2], I[0,-1])
B[a0]*B[2d] + ((-q^4+1)/q^2)*B[1d+a0]*B[1d]
+ ((q^4-1)/q^2)*B[1d]*B[a1] + ((q^2+1)/q^2)*B[2d+a0]
+ ((-q^2-1)/q^2)*B[1d+a1]
sage: Q.product_on_basis(I[1,2], I[0,-4])
((q^4-1)/q^2)*B[2d+a0]*B[1d] + B[3d+a0]*B[2d]
+ ((-q^4+1)/q^2)*B[4d+a0]*B[1d] + (-q^4-q^2)*B[1d+a0]
+ ((q^6+q^4-q^2-1)/q^2)*B[3d+a0] + ((q^2+1)/q^2)*B[5d+a0]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> I = Q._indices.gens()
>>> Q.product_on_basis(I[Integer(1),Integer(21)]**Integer(2), I[Integer(1),Integer(31)]**Integer(3))
B[21d]^2*B[31d]^3
>>> Q.product_on_basis(I[Integer(1),Integer(31)]**Integer(3), I[Integer(1),Integer(21)]**Integer(2))
B[21d]^2*B[31d]^3
>>> Q.product_on_basis(I[Integer(0),Integer(8)], I[Integer(0),Integer(6)])
B[8d+a1]*B[6d+a1]
>>> Q.product_on_basis(I[Integer(0),-Integer(8)], I[Integer(0),Integer(6)])
B[7d+a0]*B[6d+a1]
>>> Q.product_on_basis(I[Integer(0),-Integer(6)], I[Integer(0),-Integer(8)])
B[5d+a0]*B[7d+a0]
>>> Q.product_on_basis(I[Integer(0),-Integer(6)], I[Integer(1),Integer(2)])
B[5d+a0]*B[2d]
>>> Q.product_on_basis(I[Integer(1),Integer(6)], I[Integer(0),Integer(2)])
B[6d]*B[2d+a1]

>>> Q.product_on_basis(I[Integer(0),Integer(1)], I[Integer(0),Integer(2)])
1/q^2*B[2d+a1]*B[1d+a1] - B[1d]
>>> Q.product_on_basis(I[Integer(0),-Integer(3)], I[Integer(0),-Integer(1)])
1/q^2*B[a0]*B[2d+a0] + ((-q^2+1)/q^2)*B[1d+a0]^2 - B[2d]
>>> Q.product_on_basis(I[Integer(0),Integer(2)], I[Integer(0),-Integer(1)])
q^2*B[a0]*B[2d+a1] + ((q^4-1)/q^2)*B[1d+a1]*B[a1]
+ (-q^2+1)*B[1d] + q^2*B[3d]
>>> Q.product_on_basis(I[Integer(0),Integer(2)], I[Integer(1),Integer(1)])
B[1d]*B[2d+a1] + (q^2+1)*B[3d+a1] + (-q^2-1)*B[1d+a1]
>>> Q.product_on_basis(I[Integer(0),Integer(1)], I[Integer(1),Integer(2)])
((-q^4+1)/q^2)*B[1d]*B[2d+a1] + ((q^4-1)/q^2)*B[1d]*B[a1]
+ B[2d]*B[1d+a1] + (-q^4-q^2)*B[a0]
+ ((q^2+1)/q^2)*B[3d+a1] + ((q^6+q^4-q^2-1)/q^2)*B[1d+a1]
>>> Q.product_on_basis(I[Integer(1),Integer(2)], I[Integer(0),-Integer(1)])
B[a0]*B[2d] + ((-q^4+1)/q^2)*B[1d+a0]*B[1d]
+ ((q^4-1)/q^2)*B[1d]*B[a1] + ((q^2+1)/q^2)*B[2d+a0]
+ ((-q^2-1)/q^2)*B[1d+a1]
>>> Q.product_on_basis(I[Integer(1),Integer(2)], I[Integer(0),-Integer(4)])
((q^4-1)/q^2)*B[2d+a0]*B[1d] + B[3d+a0]*B[2d]
+ ((-q^4+1)/q^2)*B[4d+a0]*B[1d] + (-q^4-q^2)*B[1d+a0]
+ ((q^6+q^4-q^2-1)/q^2)*B[3d+a0] + ((q^2+1)/q^2)*B[5d+a0]

q()[source]#

Return the parameter $$q$$ of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: Q.q()
q

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> Q.q()
q

some_elements()[source]#

Return some elements of self.

EXAMPLES:

sage: O = lie_algebras.OnsagerAlgebra(QQ)
sage: Q = O.quantum_group()
sage: Q.some_elements()
[B[a1], B[3d+a1], B[a0], B[1d], B[4d]]

>>> from sage.all import *
>>> O = lie_algebras.OnsagerAlgebra(QQ)
>>> Q = O.quantum_group()
>>> Q.some_elements()
[B[a1], B[3d+a1], B[a0], B[1d], B[4d]]