The Poincare-Birkhoff-Witt Basis For A Universal Enveloping Algebra¶
AUTHORS:
Travis Scrimshaw (2013-11-03): Initial version
-
class
sage.algebras.lie_algebras.poincare_birkhoff_witt.
PoincareBirkhoffWittBasis
(g, basis_key, prefix, **kwds)¶ Bases:
sage.combinat.free_module.CombinatorialFreeModule
The Poincare-Birkhoff-Witt (PBW) basis of the universal enveloping algebra of a Lie algebra.
Consider a Lie algebra \(\mathfrak{g}\) with ordered basis \((b_1,\dots,b_n)\). Then the universal enveloping algebra \(U(\mathfrak{g})\) is generated by \(b_1,\dots,b_n\) and subject to the relations
\[[b_i, b_j] = \sum_{k = 1}^n c_{ij}^k b_k\]where \(c_{ij}^k\) are the structure coefficients of \(\mathfrak{g}\). The Poincare-Birkhoff-Witt (PBW) basis is given by the monomials \(b_1^{e_1} b_2^{e_2} \cdots b_n^{e_n}\). Specifically, we can rewrite \(b_j b_i = b_i b_j + [b_j, b_i]\) where \(j > i\), and we can repeat this to sort any monomial into
\[b_{i_1} \cdots b_{i_k} = b_1^{e_1} \cdots b_n^{e_n} + LOT\]where \(LOT\) are lower order terms. Thus the PBW basis is a filtered basis for \(U(\mathfrak{g})\).
EXAMPLES:
We construct the PBW basis of \(\mathfrak{sl}_2\):
sage: L = lie_algebras.three_dimensional_by_rank(QQ, 3, names=['E','F','H']) sage: PBW = L.pbw_basis()
We then do some computations; in particular, we check that \([E, F] = H\):
sage: E,F,H = PBW.algebra_generators() sage: E*F PBW['E']*PBW['F'] sage: F*E PBW['E']*PBW['F'] - PBW['H'] sage: E*F - F*E PBW['H']
Next we construct another instance of the PBW basis, but sorted in the reverse order:
sage: def neg_key(x): ....: return -L.basis().keys().index(x) sage: PBW2 = L.pbw_basis(prefix='PBW2', basis_key=neg_key)
We then check the multiplication is preserved:
sage: PBW2(E) * PBW2(F) PBW2['F']*PBW2['E'] + PBW2['H'] sage: PBW2(E*F) PBW2['F']*PBW2['E'] + PBW2['H'] sage: F * E + H PBW['E']*PBW['F']
We now construct the PBW basis for Lie algebra of regular vector fields on \(\CC^{\times}\):
sage: L = lie_algebras.regular_vector_fields(QQ) sage: PBW = L.pbw_basis() sage: G = PBW.algebra_generators() sage: G[2] * G[3] PBW[2]*PBW[3] sage: G[3] * G[2] PBW[2]*PBW[3] + PBW[5] sage: G[-2] * G[3] * G[2] PBW[-2]*PBW[2]*PBW[3] + PBW[-2]*PBW[5]
-
class
Element
¶ Bases:
sage.modules.with_basis.indexed_element.IndexedFreeModuleElement
-
algebra_generators
()¶ Return the algebra generators of
self
.EXAMPLES:
sage: L = lie_algebras.sl(QQ, 2) sage: PBW = L.pbw_basis() sage: PBW.algebra_generators() Finite family {alpha[1]: PBW[alpha[1]], alphacheck[1]: PBW[alphacheck[1]], -alpha[1]: PBW[-alpha[1]]}
-
degree_on_basis
(m)¶ Return the degree of the basis element indexed by
m
.EXAMPLES:
sage: L = lie_algebras.sl(QQ, 2) sage: PBW = L.pbw_basis() sage: E,H,F = PBW.algebra_generators() sage: PBW.degree_on_basis(E.leading_support()) 1 sage: m = ((H*F)^10).trailing_support(key=PBW._monomial_key) # long time sage: PBW.degree_on_basis(m) # long time 20 sage: ((H*F*E)^4).maximal_degree() # long time 12
-
gens
()¶ Return the algebra generators of
self
.EXAMPLES:
sage: L = lie_algebras.sl(QQ, 2) sage: PBW = L.pbw_basis() sage: PBW.algebra_generators() Finite family {alpha[1]: PBW[alpha[1]], alphacheck[1]: PBW[alphacheck[1]], -alpha[1]: PBW[-alpha[1]]}
-
lie_algebra
()¶ Return the underlying Lie algebra of
self
.EXAMPLES:
sage: L = lie_algebras.sl(QQ, 2) sage: PBW = L.pbw_basis() sage: PBW.lie_algebra() is L True
-
one_basis
()¶ Return the basis element indexing \(1\).
EXAMPLES:
sage: L = lie_algebras.three_dimensional_by_rank(QQ, 3, names=['E','F','H']) sage: PBW = L.pbw_basis() sage: ob = PBW.one_basis(); ob 1 sage: ob.parent() Free abelian monoid indexed by {'E', 'F', 'H'}
-
product_on_basis
(lhs, rhs)¶ Return the product of the two basis elements
lhs
andrhs
.EXAMPLES:
sage: L = lie_algebras.three_dimensional_by_rank(QQ, 3, names=['E','F','H']) sage: PBW = L.pbw_basis() sage: I = PBW.indices() sage: PBW.product_on_basis(I.gen('E'), I.gen('F')) PBW['E']*PBW['F'] sage: PBW.product_on_basis(I.gen('E'), I.gen('H')) PBW['E']*PBW['H'] sage: PBW.product_on_basis(I.gen('H'), I.gen('E')) PBW['E']*PBW['H'] + 2*PBW['E'] sage: PBW.product_on_basis(I.gen('F'), I.gen('E')) PBW['E']*PBW['F'] - PBW['H'] sage: PBW.product_on_basis(I.gen('F'), I.gen('H')) PBW['F']*PBW['H'] sage: PBW.product_on_basis(I.gen('H'), I.gen('F')) PBW['F']*PBW['H'] - 2*PBW['F'] sage: PBW.product_on_basis(I.gen('H')**2, I.gen('F')**2) PBW['F']^2*PBW['H']^2 - 8*PBW['F']^2*PBW['H'] + 16*PBW['F']^2 sage: E,F,H = PBW.algebra_generators() sage: E*F - F*E PBW['H'] sage: H * F * E PBW['E']*PBW['F']*PBW['H'] - PBW['H']^2 sage: E * F * H * E PBW['E']^2*PBW['F']*PBW['H'] + 2*PBW['E']^2*PBW['F'] - PBW['E']*PBW['H']^2 - 2*PBW['E']*PBW['H']
-
class