Finite Dimensional Lie Algebras With Basis#
AUTHORS:
Travis Scrimshaw (07-15-2013): Initial implementation
- class sage.categories.finite_dimensional_lie_algebras_with_basis.FiniteDimensionalLieAlgebrasWithBasis(base_category)#
Bases:
CategoryWithAxiom_over_base_ringCategory of finite dimensional Lie algebras with a basis.
Todo
Many of these tests should use non-abelian Lie algebras and need to be added after github issue #16820.
- class ElementMethods#
Bases:
object- adjoint_matrix(sparse=False)#
Return the matrix of the adjoint action of
self.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.an_element().adjoint_matrix() [0 0 0] [0 0 0] [0 0 0] sage: L.an_element().adjoint_matrix(sparse=True).is_sparse() True
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: x.adjoint_matrix() [0 1] [0 0] sage: y.adjoint_matrix() [-1 0] [ 0 0]
We verify that this forms a representation:
sage: # needs sage.combinat sage.modules sage: sl3 = lie_algebras.sl(QQ, 3) sage: e1, e2 = sl3.e(1), sl3.e(2) sage: e12 = e1.bracket(e2) sage: E1, E2 = e1.adjoint_matrix(), e2.adjoint_matrix() sage: E1 * E2 - E2 * E1 == e12.adjoint_matrix() True
- to_vector(order=None, sparse=False)#
Return the vector in
g.module()corresponding to the elementselfofg(wheregis the parent ofself).Implement this if you implement
g.module(). Seesage.categories.lie_algebras.LieAlgebras.module()for how this is to be done.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.an_element().to_vector() (0, 0, 0) sage: L.an_element().to_vector(sparse=True) (0, 0, 0) sage: # needs sage.combinat sage.groupssage.modules sage: D = DescentAlgebra(QQ, 4).D() sage: L = LieAlgebra(associative=D) sage: L.an_element().to_vector() (1, 1, 1, 1, 1, 1, 1, 1)
- Nilpotent#
- class ParentMethods#
Bases:
object- as_finite_dimensional_algebra()#
Return
selfas aFiniteDimensionalAlgebra.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = lie_algebras.cross_product(QQ) sage: x, y, z = L.basis() sage: F = L.as_finite_dimensional_algebra() sage: X, Y, Z = F.basis() sage: x.bracket(y) Z sage: X * Y Z
- casimir_element(order=2, UEA=None, force_generic=False)#
Return the Casimir element in the universal enveloping algebra of
self.A Casimir element of order \(k\) is a distinguished basis element for the center of \(U(\mathfrak{g})\) of homogeneous degree \(k\) (that is, it is an element of \(U_k \setminus U_{k-1}\), where \(\{U_i\}_{i=0}^{\infty}\) is the natural filtration of \(U(\mathfrak{g})\)). When \(\mathfrak{g}\) is a simple Lie algebra, then this spans \(Z(U(\mathfrak{g}))_k\).
INPUT:
order– (default:2) the order of the Casimir elementUEA– (optional) the universal enveloping algebra to return the result inforce_generic– (default:False) ifTruefor the quadratic order, then this uses the default algorithm; otherwise this is ignored
ALGORITHM:
For the quadratic order (i.e.,
order=2), then this uses \(K^{ij}\), the inverse of the Killing form matrix, to compute \(C_{(2)} = \sum_{i,j} K^{ij} X_i \cdots X_j\), where \(\{X_1, \ldots, X_n\}\) is a basis for \(\mathfrak{g}\). Otherwise this solves the system of equations\[f_{aj}^b \kappa^{jc\cdots d} + f_{aj}^c \kappa^{cj\cdots d} \cdots + f_{aj}^d \kappa^{bc \cdots j}\]for the symmetric tensor \(\kappa^{i_1 \cdots i_k}\), where \(k\) is the
order. This system comes from \([X_i, C_{(k)}] = 0\) with\[C_{(k)} = \sum_{i_1, \ldots, i_k}^n \kappa^{i_1 \cdots i_k} X_{i_1} \cdots X_{i_k}.\]EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, cartan_type=['A', 1]) sage: C = L.casimir_element(); C 1/8*b1^2 + 1/2*b0*b2 - 1/4*b1 sage: U = L.universal_enveloping_algebra() sage: all(g * C == C * g for g in U.gens()) True sage: U = L.pbw_basis() sage: C = L.casimir_element(UEA=U); C 1/2*PBW[alpha[1]]*PBW[-alpha[1]] + 1/8*PBW[alphacheck[1]]^2 - 1/4*PBW[alphacheck[1]] sage: all(g * C == C * g for g in U.algebra_generators()) True sage: # needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, cartan_type=['B', 2]) sage: U = L.pbw_basis() sage: C = L.casimir_element(UEA=U) sage: all(g * C == C * g for g in U.algebra_generators()) True sage: # needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, cartan_type=['C', 3]) sage: U = L.pbw_basis() sage: C = L.casimir_element(UEA=U) sage: all(g * C == C * g for g in U.algebra_generators()) True sage: # needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, cartan_type=['A', 1]) sage: C4 = L.casimir_element(order=4, UEA=L.pbw_basis()); C4 4*PBW[alpha[1]]^2*PBW[-alpha[1]]^2 + 2*PBW[alpha[1]]*PBW[alphacheck[1]]^2*PBW[-alpha[1]] + 1/4*PBW[alphacheck[1]]^4 - PBW[alphacheck[1]]^3 - 4*PBW[alpha[1]]*PBW[-alpha[1]] + 2*PBW[alphacheck[1]] sage: all(g * C4 == C4 * g for g in L.pbw_basis().algebra_generators()) True sage: # needs sage.combinat sage.modules sage: L = lie_algebras.Heisenberg(QQ, 2) sage: L.casimir_element() 0
Todo
Use the symmetry of the tensor to reduce the number of equations and/or variables to solve.
- center()#
Return the center of
self.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: Z = L.center(); Z An example of a finite dimensional Lie algebra with basis: the 3-dimensional abelian Lie algebra over Rational Field sage: Z.basis_matrix() [1 0 0] [0 1 0] [0 0 1]
- centralizer(S)#
Return the centralizer of
Sinself.INPUT:
S– a subalgebra ofselfor a list of elements that represent generators for a subalgebra
See also
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: a, b, c = L.lie_algebra_generators() sage: S = L.centralizer([a + b, 2*a + c]); S An example of a finite dimensional Lie algebra with basis: the 3-dimensional abelian Lie algebra over Rational Field sage: S.basis_matrix() [1 0 0] [0 1 0] [0 0 1]
- centralizer_basis(S)#
Return a basis of the centralizer of
Sinself.INPUT:
S– a subalgebra ofselfor a list of elements that represent generators for a subalgebra
See also
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: a, b, c = L.lie_algebra_generators() sage: L.centralizer_basis([a + b, 2*a + c]) [(1, 0, 0), (0, 1, 0), (0, 0, 1)] sage: # needs sage.combinat sage.modules sage: H = lie_algebras.Heisenberg(QQ, 2) sage: H.centralizer_basis(H) [z] sage: # needs sage.combinat sage.groupssage.modules sage: D = DescentAlgebra(QQ, 4).D() sage: L = LieAlgebra(associative=D) sage: L.centralizer_basis(L) [D{}, D{1} + D{1, 2} + D{2, 3} + D{3}, D{1, 2, 3} + D{1, 3} + D{2}] sage: D.center_basis() (D{}, D{1} + D{1, 2} + D{2, 3} + D{3}, D{1, 2, 3} + D{1, 3} + D{2})
- chevalley_eilenberg_complex(M=None, dual=False, sparse=True, ncpus=None)#
Return the Chevalley-Eilenberg complex of
self.Let \(\mathfrak{g}\) be a Lie algebra and \(M\) be a right \(\mathfrak{g}\)-module. The Chevalley-Eilenberg complex is the chain complex on
\[C_{\bullet}(\mathfrak{g}, M) = M \otimes \bigwedge\nolimits^{\bullet} \mathfrak{g},\]where the differential is given by
\[d(m \otimes g_1 \wedge \cdots \wedge g_p) = \sum_{i=1}^p (-1)^{i+1} (m g_i) \otimes g_1 \wedge \cdots \wedge \hat{g}_i \wedge \cdots \wedge g_p + \sum_{1 \leq i < j \leq p} (-1)^{i+j} m \otimes [g_i, g_j] \wedge g_1 \wedge \cdots \wedge \hat{g}_i \wedge \cdots \wedge \hat{g}_j \wedge \cdots \wedge g_p.\]INPUT:
M– (default: the trivial 1-dimensional module) one of the following:a module \(M\) with an action of
selfa dictionary whose keys are basis elements and values are matrices representing a Lie algebra homomorphism defining the representation
dual– (default:False) ifTrue, causes the dual of the complex to be computedsparse– (default:True) whether to use sparse or dense matricesncpus– (optional) how many cpus to use
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = lie_algebras.sl(ZZ, 2) sage: C = L.chevalley_eilenberg_complex(); C Chain complex with at most 4 nonzero terms over Integer Ring sage: ascii_art(C) [-2 0 0] [0] [ 0 1 0] [0] [0 0 0] [ 0 0 -2] [0] 0 <-- C_0 <-------- C_1 <----------- C_2 <---- C_3 <-- 0 sage: # needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, cartan_type=['C',2]) sage: C = L.chevalley_eilenberg_complex() # long time sage: [C.free_module_rank(i) for i in range(11)] # long time [1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1] sage: # needs sage.combinat sage.modules sage: g = lie_algebras.sl(QQ, 2) sage: E, F, H = g.basis() sage: n = g.subalgebra([F, H]) sage: ascii_art(n.chevalley_eilenberg_complex()) [ 0] [0 0] [-2] 0 <-- C_0 <------ C_1 <----- C_2 <-- 0 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: C = L.chevalley_eilenberg_complex(f); C Chain complex with at most 3 nonzero terms over Rational Field sage: ascii_art(C) [ 0 -1] [ 2 0] [1 0 0 1] [ 0 0] [0 0 0 0] [ 0 1] 0 <-- C_0 <---------- C_1 <-------- C_2 <-- 0 sage: ascii_art(L.chevalley_eilenberg_complex(f, sparse=False)) [ 0 -1] [ 2 0] [1 0 0 1] [ 0 0] [0 0 0 0] [ 0 1] 0 <-- C_0 <---------- C_1 <-------- C_2 <-- 0
REFERENCES:
- cohomology(deg=None, M=None, sparse=True, ncpus=None)#
Return the Lie algebra cohomology of
self.The Lie algebra cohomology is the cohomology of the Chevalley-Eilenberg cochain complex (which is the dual of the Chevalley-Eilenberg chain complex).
Let \(\mathfrak{g}\) be a Lie algebra and \(M\) a left \(\mathfrak{g}\)-module. It is known that \(H^0(\mathfrak{g}; M)\) is the subspace of \(\mathfrak{g}\)-invariants of \(M\):
\[H^0(\mathfrak{g}; M) = M^{\mathfrak{g}} = \{ m \in M \mid g m = 0 \text{ for all } g \in \mathfrak{g} \}.\]Additionally, \(H^1(\mathfrak{g}; M)\) is the space of derivations \(\mathfrak{g} \to M\) modulo the space of inner derivations, and \(H^2(\mathfrak{g}; M)\) is the space of equivalence classes of Lie algebra extensions of \(\mathfrak{g}\) by \(M\).
INPUT:
deg– the degree of the homology (optional)M– (default: the trivial module) a right module ofselfsparse– (default:True) whether to use sparse matrices for the Chevalley-Eilenberg chain complexncpus– (optional) how many cpus to use when computing the Chevalley-Eilenberg chain complex
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = lie_algebras.so(QQ, 4) sage: L.cohomology() {0: Vector space of dimension 1 over Rational Field, 1: Vector space of dimension 0 over Rational Field, 2: Vector space of dimension 0 over Rational Field, 3: Vector space of dimension 2 over Rational Field, 4: Vector space of dimension 0 over Rational Field, 5: Vector space of dimension 0 over Rational Field, 6: Vector space of dimension 1 over Rational Field} sage: # needs sage.combinat sage.modules sage: L = lie_algebras.Heisenberg(QQ, 2) sage: L.cohomology() {0: Vector space of dimension 1 over Rational Field, 1: Vector space of dimension 4 over Rational Field, 2: Vector space of dimension 5 over Rational Field, 3: Vector space of dimension 5 over Rational Field, 4: Vector space of dimension 4 over Rational Field, 5: Vector space of dimension 1 over Rational Field} sage: # needs sage.combinat sage.modules sage: d = {('x', 'y'): {'y': 2}} sage: L.<x,y> = LieAlgebra(ZZ, d) sage: L.cohomology() {0: Z, 1: Z, 2: C2}
See also
REFERENCES:
- derivations_basis()#
Return a basis for the Lie algebra of derivations of
selfas matrices.A derivation \(D\) of an algebra is an endomorphism of \(A\) such that
\[D([a, b]) = [D(a), b] + [a, D(b)]\]for all \(a, b \in A\). The set of all derivations form a Lie algebra.
EXAMPLES:
We construct the derivations of the Heisenberg Lie algebra:
sage: # needs sage.combinat sage.modules sage: H = lie_algebras.Heisenberg(QQ, 1) sage: H.derivations_basis() ( [1 0 0] [0 1 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1 0 0] [0 1 0] [0 0 0] [0 0 0] [0 0 1], [0 0 0], [0 0 0], [0 0 1], [1 0 0], [0 1 0] )
We construct the derivations of \(\mathfrak{sl}_2\):
sage: # needs sage.combinat sage.modules sage: sl2 = lie_algebras.sl(QQ, 2) sage: sl2.derivations_basis() ( [ 1 0 0] [ 0 1 0] [ 0 0 0] [ 0 0 0] [ 0 0 -1/2] [ 1 0 0] [ 0 0 -1], [ 0 0 0], [ 0 -2 0] )
We verify these are derivations:
sage: # needs sage.combinat sage.modules sage: D = [sl2.module_morphism(matrix=M, codomain=sl2) ....: for M in sl2.derivations_basis()] sage: all(d(a.bracket(b)) == d(a).bracket(b) + a.bracket(d(b)) ....: for a in sl2.basis() for b in sl2.basis() for d in D) True
REFERENCES:
- derived_series()#
Return the derived series \((\mathfrak{g}^{(i)})_i\) of
selfwhere the rightmost \(\mathfrak{g}^{(k)} = \mathfrak{g}^{(k+1)} = \cdots\).We define the derived series of a Lie algebra \(\mathfrak{g}\) recursively by \(\mathfrak{g}^{(0)} := \mathfrak{g}\) and
\[\mathfrak{g}^{(k+1)} = [\mathfrak{g}^{(k)}, \mathfrak{g}^{(k)}]\]and recall that \(\mathfrak{g}^{(k)} \supseteq \mathfrak{g}^{(k+1)}\). Alternatively we can express this as
\[\mathfrak{g} \supseteq [\mathfrak{g}, \mathfrak{g}] \supseteq \bigl[ [\mathfrak{g}, \mathfrak{g}], [\mathfrak{g}, \mathfrak{g}] \bigr] \supseteq \biggl[ \bigl[ [\mathfrak{g}, \mathfrak{g}], [\mathfrak{g}, \mathfrak{g}] \bigr], \bigl[ [\mathfrak{g}, \mathfrak{g}], [\mathfrak{g}, \mathfrak{g}] \bigr] \biggr] \supseteq \cdots.\]EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.derived_series() (An example of a finite dimensional Lie algebra with basis: the 3-dimensional abelian Lie algebra over Rational Field, An example of a finite dimensional Lie algebra with basis: the 0-dimensional abelian Lie algebra over Rational Field with basis matrix: [])
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: L.derived_series() # not implemented (Lie algebra on 2 generators (x, y) over Rational Field, Subalgebra generated of Lie algebra on 2 generators (x, y) over Rational Field with basis: (x,), Subalgebra generated of Lie algebra on 2 generators (x, y) over Rational Field with basis: ())
- derived_subalgebra()#
Return the derived subalgebra of
self.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.derived_subalgebra() An example of a finite dimensional Lie algebra with basis: the 0-dimensional abelian Lie algebra over Rational Field with basis matrix: []
If
selfis semisimple, then the derived subalgebra isself:sage: # needs sage.combinat sage.modules sage: sl3 = LieAlgebra(QQ, cartan_type=['A', 2]) sage: sl3.derived_subalgebra() Lie algebra of ['A', 2] in the Chevalley basis sage: sl3 is sl3.derived_subalgebra() True
- from_vector(v, order=None)#
Return the element of
selfcorresponding to the vectorvinself.module().Implement this if you implement
module(); see the documentation ofsage.categories.lie_algebras.LieAlgebras.module()for how this is to be done.EXAMPLES:
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.modules sage: u = L.from_vector(vector(QQ, (1, 0, 0))); u # needs sage.modules (1, 0, 0) sage: parent(u) is L # needs sage.modules True
- homology(deg=None, M=None, sparse=True, ncpus=None)#
Return the Lie algebra homology of
self.The Lie algebra homology is the homology of the Chevalley-Eilenberg chain complex.
INPUT:
deg– the degree of the homology (optional)M– (default: the trivial module) a right module ofselfsparse– (default:True) whether to use sparse matrices for the Chevalley-Eilenberg chain complexncpus– (optional) how many cpus to use when computing the Chevalley-Eilenberg chain complex
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = lie_algebras.cross_product(QQ) sage: L.homology() {0: Vector space of dimension 1 over Rational Field, 1: Vector space of dimension 0 over Rational Field, 2: Vector space of dimension 0 over Rational Field, 3: Vector space of dimension 1 over Rational Field} sage: # needs sage.combinat sage.modules sage: L = lie_algebras.pwitt(GF(5), 5) sage: L.homology() {0: Vector space of dimension 1 over Finite Field of size 5, 1: Vector space of dimension 0 over Finite Field of size 5, 2: Vector space of dimension 1 over Finite Field of size 5, 3: Vector space of dimension 1 over Finite Field of size 5, 4: Vector space of dimension 0 over Finite Field of size 5, 5: Vector space of dimension 1 over Finite Field of size 5} sage: # needs sage.combinat sage.modules sage: d = {('x', 'y'): {'y': 2}} sage: L.<x,y> = LieAlgebra(ZZ, d) sage: L.homology() {0: Z, 1: Z x C2, 2: 0}
See also
- ideal(*gens, **kwds)#
Return the ideal of
selfgenerated bygens.INPUT:
gens– a list of generators of the idealcategory– (optional) a subcategory of subobjects of finite dimensional Lie algebras with basis
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: H = lie_algebras.Heisenberg(QQ, 2) sage: p1,p2,q1,q2,z = H.basis() sage: I = H.ideal([p1 - p2, q1 - q2]) sage: I.basis().list() [-p1 + p2, -q1 + q2, z] sage: I.reduce(p1 + p2 + q1 + q2 + z) 2*p1 + 2*q1
Passing an extra category to an ideal:
sage: # needs sage.combinat sage.modules sage: L.<x,y,z> = LieAlgebra(QQ, abelian=True) sage: C = LieAlgebras(QQ).FiniteDimensional().WithBasis() sage: C = C.Subobjects().Graded().Stratified() sage: I = L.ideal(x, y, category=C) sage: I.homogeneous_component_basis(1).list() [x, y]
- inner_derivations_basis()#
Return a basis for the Lie algebra of inner derivations of
selfas matrices.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: H = lie_algebras.Heisenberg(QQ, 1) sage: H.inner_derivations_basis() ( [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1 0 0], [0 1 0] )
- is_abelian()#
Return if
selfis an abelian Lie algebra.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.is_abelian() True
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: L.is_abelian() False
- is_ideal(A)#
Return if
selfis an ideal ofA.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: a, b, c = L.lie_algebra_generators() sage: I = L.ideal([2*a - c, b + c]) sage: I.is_ideal(L) True sage: L.<x,y> = LieAlgebra(QQ, {('x','y'):{'x':1}}) # needs sage.combinat sage.modules sage: L.is_ideal(L) # needs sage.combinat sage.modules True sage: F = LieAlgebra(QQ, 'F', representation='polynomial') # needs sage.combinat sage.modules sage: L.is_ideal(F) # needs sage.combinat sage.modules Traceback (most recent call last): ... NotImplementedError: A must be a finite dimensional Lie algebra with basis
- is_nilpotent()#
Return if
selfis a nilpotent Lie algebra.A Lie algebra is nilpotent if the lower central series eventually becomes \(0\).
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.is_nilpotent() True
- is_semisimple()#
Return if
selfif a semisimple Lie algebra.A Lie algebra is semisimple if the solvable radical is zero. In characteristic 0, this is equivalent to saying the Killing form is non-degenerate.
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.is_semisimple() False
- is_solvable()#
Return if
selfis a solvable Lie algebra.A Lie algebra is solvable if the derived series eventually becomes \(0\).
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.is_solvable() True
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: L.is_solvable() # not implemented False
- killing_form(x, y)#
Return the Killing form on
xandy, wherexandyare two elements ofself.The Killing form is defined as
\[\langle x \mid y \rangle = \operatorname{tr}\left( \operatorname{ad}_x \circ \operatorname{ad}_y \right).\]EXAMPLES:
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.modules sage: a, b, c = L.lie_algebra_generators() # needs sage.modules sage: L.killing_form(a, b) # needs sage.modules 0
- killing_form_matrix()#
Return the matrix of the Killing form of
self.The rows and the columns of this matrix are indexed by the elements of the basis of
self(in the order provided bybasis()).EXAMPLES:
sage: # needs sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.killing_form_matrix() [0 0 0] [0 0 0] [0 0 0] sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example(0) sage: m = L.killing_form_matrix(); m [] sage: parent(m) Full MatrixSpace of 0 by 0 dense matrices over Rational Field
- killing_matrix(x, y)#
Return the Killing matrix of
xandy, wherexandyare two elements ofself.The Killing matrix is defined as the matrix corresponding to the action of \(\operatorname{ad}_x \circ \operatorname{ad}_y\) in the basis of
self.EXAMPLES:
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.modules sage: a, b, c = L.lie_algebra_generators() # needs sage.modules sage: L.killing_matrix(a, b) # needs sage.modules [0 0 0] [0 0 0] [0 0 0]
sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) # needs sage.combinat sage.modules sage: L.killing_matrix(y, x) # needs sage.combinat sage.modules [ 0 -1] [ 0 0]
- lower_central_series(submodule=False)#
Return the lower central series \((\mathfrak{g}_{i})_i\) of
selfwhere the rightmost \(\mathfrak{g}_k = \mathfrak{g}_{k+1} = \cdots\).INPUT:
submodule– (default:False) ifTrue, then the result is given as submodules ofself
We define the lower central series of a Lie algebra \(\mathfrak{g}\) recursively by \(\mathfrak{g}_0 := \mathfrak{g}\) and
\[\mathfrak{g}_{k+1} = [\mathfrak{g}, \mathfrak{g}_{k}]\]and recall that \(\mathfrak{g}_{k} \supseteq \mathfrak{g}_{k+1}\). Alternatively we can express this as
\[\mathfrak{g} \supseteq [\mathfrak{g}, \mathfrak{g}] \supseteq \bigl[ [\mathfrak{g}, \mathfrak{g}], \mathfrak{g} \bigr] \supseteq\biggl[\bigl[ [\mathfrak{g}, \mathfrak{g}], \mathfrak{g} \bigr], \mathfrak{g}\biggr] \supseteq \cdots.\]EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: L.derived_series() (An example of a finite dimensional Lie algebra with basis: the 3-dimensional abelian Lie algebra over Rational Field, An example of a finite dimensional Lie algebra with basis: the 0-dimensional abelian Lie algebra over Rational Field with basis matrix: [])
The lower central series as submodules:
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: L.lower_central_series(submodule=True) (Sparse vector space of dimension 2 over Rational Field, Vector space of degree 2 and dimension 1 over Rational Field Basis matrix: [1 0])
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: L.lower_central_series() # not implemented (Lie algebra on 2 generators (x, y) over Rational Field, Subalgebra generated of Lie algebra on 2 generators (x, y) over Rational Field with basis: (x,))
- module(R=None)#
Return a dense free module associated to
selfoverR.EXAMPLES:
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.modules sage: L._dense_free_module() # needs sage.modules Vector space of dimension 3 over Rational Field
- morphism(on_generators, codomain=None, base_map=None, check=True)#
Return a Lie algebra morphism defined by images of a Lie generating subset of
self.INPUT:
on_generators– dictionary{X: Y}of the images \(Y\) incodomainof elements \(X\) ofdomaincodomain– a Lie algebra (optional); this is inferred from the values ofon_generatorsif not givenbase_map– a homomorphism from the base ring to something coercing into the codomaincheck– (default:True) boolean; ifFalsethe values on the Lie brackets implied byon_generatorswill not be checked for contradictory values
Note
The keys of
on_generatorsneed to generatedomainas a Lie algebra.EXAMPLES:
A quotient type Lie algebra morphism
sage: # needs sage.combinat sage.modules sage: L.<X,Y,Z,W> = LieAlgebra(QQ, {('X','Y'): {'Z': 1}, ....: ('X','Z'): {'W': 1}}) sage: K.<A,B> = LieAlgebra(QQ, abelian=True) sage: L.morphism({X: A, Y: B}) Lie algebra morphism: From: Lie algebra on 4 generators (X, Y, Z, W) over Rational Field To: Abelian Lie algebra on 2 generators (A, B) over Rational Field Defn: X |--> A Y |--> B Z |--> 0 W |--> 0
The reverse map \(A \mapsto X\), \(B \mapsto Y\) does not define a Lie algebra morphism, since \([A,B] = 0\), but \([X,Y] \neq 0\):
sage: # needs sage.combinat sage.modules sage: K.morphism({A:X, B: Y}) Traceback (most recent call last): ... ValueError: this does not define a Lie algebra morphism; contradictory values for brackets of length 2
However, it is still possible to create a morphism that acts nontrivially on the coefficients, even though it’s not a Lie algebra morphism (since it isn’t linear):
sage: # needs sage.combinat sage.modules sage.rings.number_fields sage: R.<x> = ZZ[] sage: K.<i> = NumberField(x^2 + 1) sage: cc = K.hom([-i]) sage: L.<X,Y,Z,W> = LieAlgebra(K, {('X','Y'): {'Z': 1}, ....: ('X','Z'): {'W': 1}}) sage: M.<A,B> = LieAlgebra(K, abelian=True) sage: phi = L.morphism({X: A, Y: B}, base_map=cc) sage: phi(X) A sage: phi(i*X) -i*A
- product_space(L, submodule=False)#
Return the product space
[self, L].INPUT:
L– a Lie subalgebra ofselfsubmodule– (default:False) ifTrue, then the result is forced to be a submodule ofself
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() sage: a,b,c = L.lie_algebra_generators() sage: X = L.subalgebra([a, b + c]) sage: L.product_space(X) An example of a finite dimensional Lie algebra with basis: the 0-dimensional abelian Lie algebra over Rational Field with basis matrix: [] sage: Y = L.subalgebra([a, 2*b - c]) sage: X.product_space(Y) An example of a finite dimensional Lie algebra with basis: the 0-dimensional abelian Lie algebra over Rational Field with basis matrix: []
sage: # needs sage.combinat sage.modules sage: H = lie_algebras.Heisenberg(ZZ, 4) sage: Hp = H.product_space(H, submodule=True).basis() sage: [H.from_vector(v) for v in Hp] [z]
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'):{'x':1}}) sage: Lp = L.product_space(L) # not implemented sage: Lp # not implemented Subalgebra generated of Lie algebra on 2 generators (x, y) over Rational Field with basis: (x,) sage: Lp.product_space(L) # not implemented Subalgebra generated of Lie algebra on 2 generators (x, y) over Rational Field with basis: (x,) sage: L.product_space(Lp) # not implemented Subalgebra generated of Lie algebra on 2 generators (x, y) over Rational Field with basis: (x,) sage: Lp.product_space(Lp) # not implemented Subalgebra generated of Lie algebra on 2 generators (x, y) over Rational Field with basis: ()
- quotient(I, names=None, category=None)#
Return the quotient of
selfby the idealI.A quotient Lie algebra.
INPUT:
I– an ideal or a list of generators of the idealnames– (optional) a string or a list of strings; names for the basis elements of the quotient. Ifnamesis a string, the basis will be namednames_1,…,``names_n``.
EXAMPLES:
The Engel Lie algebra as a quotient of the free nilpotent Lie algebra of step 3 with 2 generators:
sage: # needs sage.combinat sage.modules sage: L.<X,Y,Z,W,U> = LieAlgebra(QQ, 2, step=3) sage: E = L.quotient(U); E Lie algebra quotient L/I of dimension 4 over Rational Field where L: Free Nilpotent Lie algebra on 5 generators (X, Y, Z, W, U) over Rational Field I: Ideal (U) sage: E.basis().list() [X, Y, Z, W] sage: E(X).bracket(E(Y)) Z sage: Y.bracket(Z) -U sage: E(Y).bracket(E(Z)) 0 sage: E(U) 0
Quotients when the base ring is not a field are not implemented:
sage: # needs sage.combinat sage.modules sage: L = lie_algebras.Heisenberg(ZZ, 1) sage: L.quotient(L.an_element()) Traceback (most recent call last): ... NotImplementedError: quotients over non-fields not implemented
- structure_coefficients(include_zeros=False)#
Return the structure coefficients of
self.INPUT:
include_zeros– (default:False) ifTrue, then include the \([x, y] = 0\) pairs in the output
OUTPUT:
A dictionary whose keys are pairs of basis indices \((i, j)\) with \(i < j\), and whose values are the corresponding elements \([b_i, b_j]\) in the Lie algebra.
EXAMPLES:
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.modules sage: L.structure_coefficients() # needs sage.modules Finite family {} sage: L.structure_coefficients(True) # needs sage.modules Finite family {(0, 1): (0, 0, 0), (0, 2): (0, 0, 0), (1, 2): (0, 0, 0)}
sage: # needs sage.combinat sage.groups sage.modules sage: G = SymmetricGroup(3) sage: S = GroupAlgebra(G, QQ) sage: L = LieAlgebra(associative=S) sage: L.structure_coefficients() Finite family {((2,3), (1,2)): (1,2,3) - (1,3,2), ((2,3), (1,3)): -(1,2,3) + (1,3,2), ((1,2,3), (2,3)): -(1,2) + (1,3), ((1,2,3), (1,2)): (2,3) - (1,3), ((1,2,3), (1,3)): -(2,3) + (1,2), ((1,3,2), (2,3)): (1,2) - (1,3), ((1,3,2), (1,2)): -(2,3) + (1,3), ((1,3,2), (1,3)): (2,3) - (1,2), ((1,3), (1,2)): -(1,2,3) + (1,3,2)}
- subalgebra(*gens, **kwds)#
Return the subalgebra of
selfgenerated bygens.INPUT:
gens– a list of generators of the subalgebracategory– (optional) a subcategory of subobjects of finite dimensional Lie algebras with basis
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: H = lie_algebras.Heisenberg(QQ, 2) sage: p1,p2,q1,q2,z = H.basis() sage: S = H.subalgebra([p1, q1]) sage: S.basis().list() [p1, q1, z] sage: S.basis_matrix() [1 0 0 0 0] [0 0 1 0 0] [0 0 0 0 1]
Passing an extra category to a subalgebra:
sage: # needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, 3, step=2) sage: x,y,z = L.homogeneous_component_basis(1) sage: C = LieAlgebras(QQ).FiniteDimensional().WithBasis() sage: C = C.Subobjects().Graded().Stratified() sage: S = L.subalgebra([x, y], category=C) sage: S.homogeneous_component_basis(2).list() [X_12]
- universal_commutative_algebra()#
Return the universal commutative algebra associated to
self.Let \(I\) be the index set of the basis of
self. Let \(\mathcal{P} = \{P_{a,i,j}\}_{a,i,j \in I}\) denote the universal polynomials of a Lie algebra \(L\). The universal commutative algebra associated to \(L\) is the quotient ring \(R[X_{ij}]_{i,j \in I} / (\mathcal{P})\).EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: A = L.universal_commutative_algebra() sage: a, b, c, d = A.gens() sage: a, b, c, d (X00bar, X01bar, 0, X11bar) sage: a*d - a 0
- universal_polynomials()#
Return the family of universal polynomials of
self.The universal polynomials of a Lie algebra \(L\) with basis \(\{e_i\}_{i \in I}\) and structure coefficients \([e_i, e_j] = \tau_{ij}^a e_a\) is given by
\[P_{aij} = \sum_{u \in I} \tau_{ij}^u X_{au} - \sum_{s,t \in I} \tau_{st}^a X_{si} X_{tj},\]where \(a,i,j \in I\).
REFERENCES:
EXAMPLES:
sage: # needs sage.combinat sage.modules sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x':1}}) sage: L.universal_polynomials() Finite family {('x', 'x', 'y'): X01*X10 - X00*X11 + X00, ('y', 'x', 'y'): X10} sage: # needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, cartan_type=['A',1]) sage: list(L.universal_polynomials()) [-2*X01*X10 + 2*X00*X11 - 2*X00, -2*X02*X10 + 2*X00*X12 + X01, -2*X02*X11 + 2*X01*X12 - 2*X02, X01*X20 - X00*X21 - 2*X10, X02*X20 - X00*X22 + X11, X02*X21 - X01*X22 - 2*X12, -2*X11*X20 + 2*X10*X21 - 2*X20, -2*X12*X20 + 2*X10*X22 + X21, -2*X12*X21 + 2*X11*X22 - 2*X22] sage: # long time, needs sage.combinat sage.modules sage: L = LieAlgebra(QQ, cartan_type=['B', 2]) sage: al = RootSystem(['B', 2]).root_lattice().simple_roots() sage: k = list(L.basis().keys())[0] sage: UP = L.universal_polynomials() sage: len(UP) 450 sage: UP[al[2], al[1], -al[1]] X0_7*X4_1 - X0_1*X4_7 - 2*X0_7*X5_1 + 2*X0_1*X5_7 + X2_7*X7_1 - X2_1*X7_7 - X3_7*X8_1 + X3_1*X8_7 + X0_4
- class Subobjects(category, *args)#
Bases:
SubobjectsCategoryA category for subalgebras of a finite dimensional Lie algebra with basis.
- class ParentMethods#
Bases:
object- ambient()#
Return the ambient Lie algebra of
self.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: C = LieAlgebras(QQ).FiniteDimensional().WithBasis() sage: L = C.example() sage: a, b, c = L.lie_algebra_generators() sage: S = L.subalgebra([2*a + b, b + c]) sage: S.ambient() == L True
- basis_matrix()#
Return the basis matrix of
self.EXAMPLES:
sage: # needs sage.combinat sage.modules sage: C = LieAlgebras(QQ).FiniteDimensional().WithBasis() sage: L = C.example() sage: a, b, c = L.lie_algebra_generators() sage: S = L.subalgebra([2*a + b, b + c]) sage: S.basis_matrix() [ 1 0 -1/2] [ 0 1 1]
- example(n=3)#
Return an example of a finite dimensional Lie algebra with basis as per
Category.example.EXAMPLES:
sage: C = LieAlgebras(QQ).FiniteDimensional().WithBasis() sage: C.example() # needs sage.modules An example of a finite dimensional Lie algebra with basis: the 3-dimensional abelian Lie algebra over Rational Field
Other dimensions can be specified as an optional argument:
sage: C.example(5) # needs sage.modules An example of a finite dimensional Lie algebra with basis: the 5-dimensional abelian Lie algebra over Rational Field