Onsager Algebra¶
AUTHORS:
- Travis Scrimshaw (2017-07): Initial version
-
class
sage.algebras.lie_algebras.onsager.
OnsagerAlgebra
(R)¶ Bases:
sage.algebras.lie_algebras.lie_algebra.LieAlgebraWithGenerators
,sage.structure.indexed_generators.IndexedGenerators
The Onsager (Lie) algebra.
The Onsager (Lie) algebra O is a Lie algebra with generators A0,A1 that satisfy
[A0,[A0,[A0,A1]]]=−4[A0,A1],[A1,[A1,[A1,A0]]]=−4[A1,A0].Note
We are using a rescaled version of the usual defining generators.
There exist a basis {Am,Gn∣m∈Z,n∈Z>0} for O with structure coefficients
[Am,Am′]=Gm−m′,[Gn,Gn′]=0,[Gn,Am]=2Am−n−2Am+n,where m>m′.
The Onsager algebra is isomorphic to the subalgebra of the affine Lie algebra ^sl2=sl2⊗C[t,t−1]⊕CK⊕Cd that is invariant under the Chevalley involution. In particular, we have
Ai↦f⊗ti−e⊗t−i,Gi↦h⊗t−i−h⊗ti.where e,f,h are the Chevalley generators of sl2.
EXAMPLES:
We construct the Onsager algebra and do some basic computations:
sage: O = lie_algebras.OnsagerAlgebra(QQ) sage: 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
We check the embedding into ^sl2:
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
REFERENCES:
-
Element
¶ alias of
sage.algebras.lie_algebras.lie_algebra_element.LieAlgebraElement
-
basis
()¶ 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)}
-
bracket_on_basis
(x, y)¶ Return the bracket of basis elements indexed by
x
andy
wherex < 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]
-
lie_algebra_generators
()¶ 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]}
-
quantum_group
(q=None, c=None)¶ Return the quantum group of
self
.The corresponding quantum group is the
QuantumOnsagerAlgebra
. The parameter c must be such that c(1)=1INPUT:
q
– (optional) the quantum parameter; the default is q∈R(q), where R is the base ring ofself
c
– (optional) the parameter c; the default isq
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
-
some_elements
()¶ 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]]
-
-
class
sage.algebras.lie_algebras.onsager.
QuantumOnsagerAlgebra
(g, q, c)¶ Bases:
sage.combinat.free_module.CombinatorialFreeModule
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 Uq(^sl2) 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 Uq(OR)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()
The generators are given as pairs, where G[0,n] is the generator Bnδ+α1 and G[1,n] is the generator Bnδ. We use the convention that nδ+α1≡(−n−1)δ+α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]
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
REFERENCES:
-
algebra_generators
()¶ 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)}
-
c
()¶ Return the parameter c of
self
.EXAMPLES:
sage: O = lie_algebras.OnsagerAlgebra(QQ) sage: Q = O.quantum_group(c=-3) sage: Q.c() -3
-
degree_on_basis
(m)¶ 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] sage: Q.degree_on_basis(B0.leading_support()) 1 sage: Q.degree_on_basis((B1^10 * B0^10).leading_support()) 20 sage: ((B0 * B1)^3).maximal_degree() 6
-
gens
()¶ 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)}
-
lie_algebra
()¶ 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
-
one_basis
()¶ 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)
-
product_on_basis
(lhs, rhs)¶ Return the product of the two basis elements
lhs
andrhs
.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]
-
q
()¶ Return the parameter q of
self
.EXAMPLES:
sage: O = lie_algebras.OnsagerAlgebra(QQ) sage: Q = O.quantum_group() sage: Q.q() q
-
some_elements
()¶ 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]]
-