# Representations of Lie algebras#

AUTHORS:

• Travis Scrimshaw (2023-08-31): initial version

class sage.algebras.lie_algebras.representation.FaithfulRepresentationNilpotentPBW(L, minimal=False)[source]#

Return a faithful reprensetation of a nilpotent Lie algebra constructed using the PBW basis.

Let $$L$$ be a $$k$$-step nilpotent Lie algebra. Define a weight function on elements in $$L$$ by the lower central series of $$L$$. Then a faithful representation of $$L$$ is $$U(L) / U(L)^{k+1}$$, where $$U(L)^{k+1}$$ is the (twosided) ideal of $$U(L)$$ generated by all monomials of weight at least $$k + 1$$.

We can also expand the ideal keeping the property that $$I \cap Z(L) = 0$$. The resulting quotient $$U(L) / I$$ remains faithful and is a minimal faithful representation of $$L$$ in the sense that it has no faithful submodules or quotients. (Note: this is not necessarily the smallest dimensional faithful representation of $$L$$.)

We consider an example of the rank 2 Heisenberg Lie algebra, but with a non-standard basis given by $$a = p_1 + z$$, $$b = q_1$$, and $$c = q_1 + z$$:

sage: scoeffs = {('a','b'): {'b':-1, 'c':1}, ('a','c'): {'b':-1, 'c':1}}
sage: L.<a,b,c> = LieAlgebra(QQ, scoeffs)
sage: TestSuite(L).run(elements=list(L.basis()))
sage: L.is_nilpotent()
True
sage: L.derived_series()
(Lie algebra on 3 generators (a, b, c) over Rational Field,
Ideal (b - c) of Lie algebra on 3 generators (a, b, c) over Rational Field,
Ideal () of Lie algebra on 3 generators (a, b, c) over Rational Field)
sage: F = L.faithful_representation()
sage: L.an_element() * F.an_element()
2*F[1, 0, 0] + 8*F[1, 1, 0] + 3*F[2, 0, 0] + 4*F[0, 1, 0]
+ 4*F[0, 2, 0] + 4*F[0, 0, 1]

sage: MF = L.faithful_representation(algorithm="minimal")
sage: MF.dimension()
3
sage: [MF.representation_matrix(be) for be in L.basis()]
[
[0 0 0]  [ 0  0  0]  [ 0  0  0]
[0 0 0]  [ 0  0 -1]  [ 1  0 -1]
[1 0 0], [ 0  0  0], [ 0  0  0]
]

>>> from sage.all import *
>>> scoeffs = {('a','b'): {'b':-Integer(1), 'c':Integer(1)}, ('a','c'): {'b':-Integer(1), 'c':Integer(1)}}
>>> L = LieAlgebra(QQ, scoeffs, names=('a', 'b', 'c',)); (a, b, c,) = L._first_ngens(3)
>>> TestSuite(L).run(elements=list(L.basis()))
>>> L.is_nilpotent()
True
>>> L.derived_series()
(Lie algebra on 3 generators (a, b, c) over Rational Field,
Ideal (b - c) of Lie algebra on 3 generators (a, b, c) over Rational Field,
Ideal () of Lie algebra on 3 generators (a, b, c) over Rational Field)
>>> F = L.faithful_representation()
>>> L.an_element() * F.an_element()
2*F[1, 0, 0] + 8*F[1, 1, 0] + 3*F[2, 0, 0] + 4*F[0, 1, 0]
+ 4*F[0, 2, 0] + 4*F[0, 0, 1]

>>> MF = L.faithful_representation(algorithm="minimal")
>>> MF.dimension()
3
>>> [MF.representation_matrix(be) for be in L.basis()]
[
[0 0 0]  [ 0  0  0]  [ 0  0  0]
[0 0 0]  [ 0  0 -1]  [ 1  0 -1]
[1 0 0], [ 0  0  0], [ 0  0  0]
]


An example with minimal=True for $$H_2 \oplus A_1$$, where $$A_1$$ is a $$1$$-dimensional Abelian Lie algebra:

sage: scoeffs = {('a','b'): {'b':-1, 'c':1}, ('a','c'): {'b':-1, 'c':1}}
sage: L.<a,b,c,d> = LieAlgebra(QQ, scoeffs)
sage: F = L.faithful_representation(); F
Faithful 11 dimensional representation of Lie algebra on 4
generators (a, b, c, d) over Rational Field
sage: MF = L.faithful_representation(algorithm="minimal"); MF
Minimal faithful representation of Lie algebra on 4
generators (a, b, c, d) over Rational Field
sage: MF.dimension()
4

>>> from sage.all import *
>>> scoeffs = {('a','b'): {'b':-Integer(1), 'c':Integer(1)}, ('a','c'): {'b':-Integer(1), 'c':Integer(1)}}
>>> L = LieAlgebra(QQ, scoeffs, names=('a', 'b', 'c', 'd',)); (a, b, c, d,) = L._first_ngens(4)
>>> F = L.faithful_representation(); F
Faithful 11 dimensional representation of Lie algebra on 4
generators (a, b, c, d) over Rational Field
>>> MF = L.faithful_representation(algorithm="minimal"); MF
Minimal faithful representation of Lie algebra on 4
generators (a, b, c, d) over Rational Field
>>> MF.dimension()
4


INPUT:

• minimal – boolean (default: False); whether to construct the minimal basis or not

REFERENCES:

class Element[source]#
class sage.algebras.lie_algebras.representation.FaithfulRepresentationPBWPosChar(L)[source]#

A faithful representation of a finite dimensional Lie algebra in positive characteristic.

Warning

This is often a very large dimensional representation relative to the dimension of the Lie algebra.

ALGORITHM:

We implement the algorithm given in [deG2000] Section 6.6. Let $$L$$ be a finite dimensional Lie algebra over a ring of characteristic $$p$$ with basis $$(b_1, \ldots, b_n)$$. We compute (monic) $$p$$-polynomials $$f_i$$ such that $$A = \mathrm{ad}(b_i)$$ (the adjoint action of $$b_i$$) solves $$f_i(A) = 0$$ by using minimal polynomial of $$A$$. The $$(f_1, \ldots, f_n)$$ is a Gröbner basis for an ideal $$I$$ of the universal enveloping algebra $$U(L)$$ such that the quotient $$U(L) / I$$ is a faithful representation of $$L$$.

EXAMPLES:

sage: sl2 = LieAlgebra(GF(3), cartan_type=['A',1])
sage: F = sl2.faithful_representation()
sage: F
Faithful representation with p-multiplicities (1, 3, 1) of Lie algebra
of ['A', 1] in the Chevalley basis
sage: F.dimension()
243

>>> from sage.all import *
>>> sl2 = LieAlgebra(GF(Integer(3)), cartan_type=['A',Integer(1)])
>>> F = sl2.faithful_representation()
>>> F
Faithful representation with p-multiplicities (1, 3, 1) of Lie algebra
of ['A', 1] in the Chevalley basis
>>> F.dimension()
243

class Element[source]#
groebner_basis()[source]#

Return the defining Gröbner basis of self.

EXAMPLES:

sage: sp4 = LieAlgebra(GF(3), cartan_type=['C',2])
sage: F = sp4.faithful_representation()
sage: F.groebner_basis()
[PBW[alpha[2]]^3,
PBW[alpha[1]]^3,
PBW[alpha[1] + alpha[2]]^3,
PBW[2*alpha[1] + alpha[2]]^3,
2*PBW[alphacheck[1]]^27 + PBW[alphacheck[1]],
2*PBW[alphacheck[2]]^27 + PBW[alphacheck[2]],
PBW[-alpha[2]]^3,
PBW[-alpha[1]]^3,
PBW[-alpha[1] - alpha[2]]^3,
PBW[-2*alpha[1] - alpha[2]]^3]

>>> from sage.all import *
>>> sp4 = LieAlgebra(GF(Integer(3)), cartan_type=['C',Integer(2)])
>>> F = sp4.faithful_representation()
>>> F.groebner_basis()
[PBW[alpha[2]]^3,
PBW[alpha[1]]^3,
PBW[alpha[1] + alpha[2]]^3,
PBW[2*alpha[1] + alpha[2]]^3,
2*PBW[alphacheck[1]]^27 + PBW[alphacheck[1]],
2*PBW[alphacheck[2]]^27 + PBW[alphacheck[2]],
PBW[-alpha[2]]^3,
PBW[-alpha[1]]^3,
PBW[-alpha[1] - alpha[2]]^3,
PBW[-2*alpha[1] - alpha[2]]^3]

p_exponents()[source]#

Return the $$p$$-exponents of self.

Let $$p$$ be the characteristic of the base ring of self. The $$p$$-exponents are the exponents $$m_i$$ such that the $$i$$-th $$p$$-polynomial $$f_i$$ is of degree $$p^{m_i}$$.

EXAMPLES:

sage: sp4 = LieAlgebra(GF(3), cartan_type=['C',2])
sage: F = sp4.faithful_representation()
sage: F.p_exponents()
(1, 1, 1, 1, 3, 3, 1, 1, 1, 1)

>>> from sage.all import *
>>> sp4 = LieAlgebra(GF(Integer(3)), cartan_type=['C',Integer(2)])
>>> F = sp4.faithful_representation()
>>> F.p_exponents()
(1, 1, 1, 1, 3, 3, 1, 1, 1, 1)

class sage.algebras.lie_algebras.representation.RepresentationByMorphism(lie_algebra, f, index_set, on_basis, category, **kwargs)[source]#

Representation of a Lie algebra defined by a Lie algebra morphism.

INPUT:

• lie_algebra – a Lie algebra

• f – the Lie algebra morphism defining the action of the basis elements of lie_algebra

• index_set – (optional) the index set of the module basis

• on_basis – (default: False) the function f defines a map from the basis elements or from a generic element of lie_algebra

If f is encoded as a dict or Family, then the keys must be indices of the basis of lie_algebra and the values being the corresponding matrix defining the action. This sets on_basis=True.

EXAMPLES:

sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'y':1}})
sage: f = {x: Matrix([[1,0],[0,0]]), y: Matrix([[0,1],[0,0]])}
sage: L.representation(f)
Representation of Lie algebra on 2 generators (x, y) over Rational Field defined by:
[1 0]
x |--> [0 0]
[0 1]
y |--> [0 0]

>>> from sage.all import *
>>> L = LieAlgebra(QQ, {('x','y'): {'y':Integer(1)}}, names=('x', 'y',)); (x, y,) = L._first_ngens(2)
>>> f = {x: Matrix([[Integer(1),Integer(0)],[Integer(0),Integer(0)]]), y: Matrix([[Integer(0),Integer(1)],[Integer(0),Integer(0)]])}
>>> L.representation(f)
Representation of Lie algebra on 2 generators (x, y) over Rational Field defined by:
[1 0]
x |--> [0 0]
[0 1]
y |--> [0 0]


We construct the direct sum of two copies of the trivial representation for an infinite dimensional Lie algebra:

sage: L = lie_algebras.Affine(QQ, ['E',6,1])
sage: R = L.representation(lambda b: matrix.zero(QQ, 2), index_set=['a','b'])
sage: x = L.an_element()
sage: v = R.an_element(); v
2*R['a'] + 2*R['b']
sage: x * v
0

>>> from sage.all import *
>>> L = lie_algebras.Affine(QQ, ['E',Integer(6),Integer(1)])
>>> R = L.representation(lambda b: matrix.zero(QQ, Integer(2)), index_set=['a','b'])
>>> x = L.an_element()
>>> v = R.an_element(); v
2*R['a'] + 2*R['b']
>>> x * v
0


We construct a finite dimensional representation of the affline Lie algebra of type $$A_2^{(1)}$$:

sage: L = lie_algebras.Affine(QQ, ['A',2,1]).derived_subalgebra()
sage: Phi_plus = list(RootSystem(['A',2]).root_lattice().positive_roots())
sage: def aff_action(key):
....:     mat = matrix.zero(QQ, 3)
....:     if key == 'c':  # central element
....:         return mat
....:     b, ell = key
....:     if b in Phi_plus:  # positive root
....:         ind = tuple(sorted(b.to_ambient().support()))
....:         mat[ind] = 1
....:         if ind[0] + 1 != ind[1]:
....:             mat[ind] = -1
....:     elif -b in Phi_plus:  # negative root
....:         ind = tuple(sorted(b.to_ambient().support(), reverse=True))
....:         mat[ind] = 1
....:         if ind[0] - 1 != ind[1]:
....:             mat[ind] = -1
....:     else:  # must be in the Cartan
....:         mat[i,i] = -1
....:         mat[i-1,i-1] = 1
....:     return mat
sage: F = Family(L.basis(), aff_action, name="lifted natural repr")
sage: R = L.representation(index_set=range(1,4), on_basis=F)
sage: x = L.an_element(); x
(E[alpha[2]] + E[alpha[1]] + h1 + h2 + E[-alpha[2]] + E[-alpha[1]])#t^0
+ (E[-alpha[1] - alpha[2]])#t^1 + (E[alpha[1] + alpha[2]])#t^-1 + c
sage: v = R.an_element(); v
2*R[1] + 2*R[2] + 3*R[3]
sage: x * v
R[1] + 5*R[2] - 3*R[3]
sage: R._test_representation()  # verify that it is a representation

>>> from sage.all import *
>>> L = lie_algebras.Affine(QQ, ['A',Integer(2),Integer(1)]).derived_subalgebra()
>>> Phi_plus = list(RootSystem(['A',Integer(2)]).root_lattice().positive_roots())
>>> def aff_action(key):
...     mat = matrix.zero(QQ, Integer(3))
...     if key == 'c':  # central element
...         return mat
...     b, ell = key
...     if b in Phi_plus:  # positive root
...         ind = tuple(sorted(b.to_ambient().support()))
...         mat[ind] = Integer(1)
...         if ind[Integer(0)] + Integer(1) != ind[Integer(1)]:
...             mat[ind] = -Integer(1)
...     elif -b in Phi_plus:  # negative root
...         ind = tuple(sorted(b.to_ambient().support(), reverse=True))
...         mat[ind] = Integer(1)
...         if ind[Integer(0)] - Integer(1) != ind[Integer(1)]:
...             mat[ind] = -Integer(1)
...     else:  # must be in the Cartan
...         mat[i,i] = -Integer(1)
...         mat[i-Integer(1),i-Integer(1)] = Integer(1)
...     return mat
>>> F = Family(L.basis(), aff_action, name="lifted natural repr")
>>> R = L.representation(index_set=range(Integer(1),Integer(4)), on_basis=F)
>>> x = L.an_element(); x
(E[alpha[2]] + E[alpha[1]] + h1 + h2 + E[-alpha[2]] + E[-alpha[1]])#t^0
+ (E[-alpha[1] - alpha[2]])#t^1 + (E[alpha[1] + alpha[2]])#t^-1 + c
>>> v = R.an_element(); v
2*R[1] + 2*R[2] + 3*R[3]
>>> x * v
R[1] + 5*R[2] - 3*R[3]
>>> R._test_representation()  # verify that it is a representation

class Element[source]#
class sage.algebras.lie_algebras.representation.Representation_abstract(lie_algebra)[source]#

Bases: object

Mixin class for (left) representations of Lie algebras.

INPUT:

• lie_algebra – a Lie algebra

lie_algebra()[source]#

Return the Lie algebra whose representation self is.

EXAMPLES:

sage: L = lie_algebras.sl(QQ, 4)
sage: R = L.trivial_representation()
sage: R.lie_algebra() is L
True

>>> from sage.all import *
>>> L = lie_algebras.sl(QQ, Integer(4))
>>> R = L.trivial_representation()
>>> R.lie_algebra() is L
True

representation_matrix(elt)[source]#

Return the matrix for the action of elt on self.

EXAMPLES:

sage: H1 = lie_algebras.Heisenberg(QQ, 1)
sage: F = H1.faithful_representation(algorithm="minimal")
sage: P1 = F.representation_matrix(H1.gen(0)); P1
[0 0 0]
[0 0 0]
[1 0 0]
sage: Q1 = F.representation_matrix(H1.gen(1)); Q1
[ 0  0  0]
[ 0  0 -1]
[ 0  0  0]
sage: Z = P1.commutator(Q1); Z
[0 0 0]
[1 0 0]
[0 0 0]
sage: P1.commutator(Z) == Q1.commutator(Z) == 0
True
sage: (H1.gen(0) * F.an_element()).to_vector()
(0, 0, 2)
sage: P1 * F.an_element().to_vector()
(0, 0, 2)
sage: (H1.gen(1) * F.an_element()).to_vector()
(0, -3, 0)
sage: Q1 * F.an_element().to_vector()
(0, -3, 0)
sage: (H1.basis()['z'] * F.an_element()).to_vector()
(0, 2, 0)
sage: Z * F.an_element().to_vector()
(0, 2, 0)

>>> from sage.all import *
>>> H1 = lie_algebras.Heisenberg(QQ, Integer(1))
>>> F = H1.faithful_representation(algorithm="minimal")
>>> P1 = F.representation_matrix(H1.gen(Integer(0))); P1
[0 0 0]
[0 0 0]
[1 0 0]
>>> Q1 = F.representation_matrix(H1.gen(Integer(1))); Q1
[ 0  0  0]
[ 0  0 -1]
[ 0  0  0]
>>> Z = P1.commutator(Q1); Z
[0 0 0]
[1 0 0]
[0 0 0]
>>> P1.commutator(Z) == Q1.commutator(Z) == Integer(0)
True
>>> (H1.gen(Integer(0)) * F.an_element()).to_vector()
(0, 0, 2)
>>> P1 * F.an_element().to_vector()
(0, 0, 2)
>>> (H1.gen(Integer(1)) * F.an_element()).to_vector()
(0, -3, 0)
>>> Q1 * F.an_element().to_vector()
(0, -3, 0)
>>> (H1.basis()['z'] * F.an_element()).to_vector()
(0, 2, 0)
>>> Z * F.an_element().to_vector()
(0, 2, 0)

side()[source]#

Return that self is a left representation.

OUTPUT:

• the string "left"

EXAMPLES:

sage: L = lie_algebras.sl(QQ, 4)
sage: R = L.trivial_representation()
sage: R.side()
'left'

>>> from sage.all import *
>>> L = lie_algebras.sl(QQ, Integer(4))
>>> R = L.trivial_representation()
>>> R.side()
'left'

class sage.algebras.lie_algebras.representation.TrivialRepresentation(lie_algebra, **kwargs)[source]#

The trivial representation of a Lie algebra.

The trivial representation of a Lie algebra $$L$$ over a commutative ring $$R$$ is the $$1$$-dimensional $$R$$-module on which every element of $$L$$ acts by zero.

INPUT:

• lie_algebra – a Lie algebra

REFERENCES:

class Element[source]#