SemiDirectSum - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim

LieAlgebras[SemiDirectSum] - create the semi-direct sum of two Lie algebras

Calling Sequences

     SemiDirectSum(AlgName1, AlgName2, Phi, Derivations, AlgName3)


     AlgName1     - a name or string, the name of a Lie algebra h

     AlgName2     - a name or string, the name of a Lie algebra k

     Phi          - a transformation defining Lie algebra homomorphism from k  to the Lie algebra of derivations of h

     Derivations  - a list of matrices defining the Lie algebra of derivations of h

     AlgName3     - a name or string, the name for the semi-direct sum algebra






A semi-direct sum for a Lie algebra 𝔤 is a vector space decomposition 𝔤 = h + k , where h 𝔤 is an ideal and k 𝔤 is a subalgebra. For each y k, the adjoint matrix ady restricts to a derivation on h. Conversely, given Lie algebras h and k and a Lie algebra homomorphism φ :k der(h), a Lie bracket can be defined on the vector space 𝔤 = h +kby setting

x1,y1, x2,y2 = x1,x2 +φ y1x2  φy2x1, y1,y2 for all x1,x2h and y1,y2k.

With respect to this bracket on 𝔤, h is an ideal.


To create a semi-direct sum of h and k using the program SemiDirectSum, first use the program Derivations to calculate the matrix algebra of derivations for h. Then use the program LieAlgebraData to obtain the Lie algebra data structure for the algebra of derivations der(h). Then use the transformation program to create a homomorphism from k to der(h). This gives all the data needed for the SemiDirectSum program.


The program SemiDirectSum returns the Lie algebra data structure for the semi-direct sum. A Lie algebra data structure contains the structure constants in a standard format used by the LieAlgebras package. In the LieAlgebras package, the command DGsetup is used to initialize a Lie algebra -- that is, to define the basis elements for the Lie algebra and its dual and to store the structure constants for the Lie algebra in memory.


The command SemiDirectSum is part of the DifferentialGeometry:-LieAlgebras package. It can be used in the form SemiDirectSum(...) only after executing the commands with(DifferentialGeometry) and with(LieAlgebras), but can always be used by executing DifferentialGeometry:-LieAlgebras:-SemiDirectSum(...).


with(DifferentialGeometry): with(LieAlgebras):


Example 1.

First we initialize a pair of Lie algebras and display their multiplication tables.

L1 := _DG([["LieAlgebra", Alg1, [3]], [[[1, 3, 1], 1], [[2, 3, 1], 1], [[2, 3, 2], 1]]]);



DGsetup(L1, [x], [a]):

Alg1 > 

L2 := _DG([["LieAlgebra", Alg2, [2]],[[[1, 2, 1], 1]]]):

Alg1 > 

DGsetup(L2, [y], [b]):

Alg2 > 

MultiplicationTable(Alg1, "LieTable"), MultiplicationTable(Alg2, "LieTable");


Alg2 is the current algebra so we switch back to Alg1 and compute the Matrix algebra of derivations. We find the derivation algebra to be 4 dimensional and we save the result as Der.

Alg2 > 


Alg1 > 


Alg1 > 

Der := map(Matrix, [[[1, 0, 0], [0, 1, 0], [0, 0, 0]], [[0, 1, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 1], [0, 0, 0]]]);


Convert the Matrix algebra Der into an abstract Lie algebra called Alg3 and initialize.

Alg1 > 

L3 := LieAlgebraData(Der, Alg3);


Alg1 > 

DGsetup(L3, [E], [c]):

Alg3 > 



Define a linear transformation from Alg1 to Alg3 and check that the result is a Lie algebra homomorphism. (There can be many such maps.)

Alg3 > 

Phi := Transformation([[y1, E4], [y2, (-1) &mult E1]]);


Alg3 > 

Query(Alg2, Alg3, Phi, "Homomorphism");




Now run the SemiDirectSum program. Keep in mind that the Matrices defining the derivations of Alg1 must be listed in the fourth argument in the same order that was used to initialize the derivations as an abstract Lie algebra.

Alg3 > 

L4 := SemiDirectSum(Alg1, Alg2, Phi, Der, Alg4);


Alg3 > 


Lie algebra: Alg4

Alg4 > 



Let's perform a number of checks on this result. First check that Alg4 is indeed a Lie algebra.

Alg4 > 

Query(Alg4, "Jacobi");




Check that e1, e2, e3 is a basis for an ideal and e4 e5 is a subalgebra.

Alg4 > 

Query([e1, e2, e3], "Ideal"), Query([e4, e5], "Subalgebra");




Next we note that the map φ sends y1to E4 which corresponds to the matrix Der[4]. In the semi-direct sum y1 becomes e4 and the restriction of ad(e4)to the subspace spanned by e1, e2,e3 is the matrix Der[4].

Alg4 > 

ApplyHomomorphism(Phi, y1), Der[4], Adjoint(e4, [e1, e2, e3]);


Likewise, the map φ sends y2 to E1 which corresponds to the Matrix - Der[1]. In the semi-direct sum y2 becomes e5 and the restriction of ad(e5)to the subspace spanned by e1, e2,e3 is the matrix - Der[1].

Alg3 > 

ApplyHomomorphism(Phi, y2), Der[1], Adjoint(e5, [e1, e2, e3]);

See Also