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

Online Help

All Products    Maple    MapleSim


DifferentialGeometry Tutorials

Classical Matrix Algebras

 

 

Overview

Procedures Illustrated

 Example 1.  The special orthogonal Lie algebras so(4), so(3,1), so(2,2)

 Example 2.  The Lie algebra of trace-free 3x3 matrices sl(3,R)

 Example 3. Construct gl(3,C) as a real subalgebra of gl(6, R)

 Example 4. Construct the unitary Lie algebra u(3)

 Example 5. Construct the special unity Lie algebra su(3)

 Example 6. Construct the general quaternionic Lie algebra gl(2,H) as a subalgebra of gl(8, R)

 Example 7.  Construct the symplectic Lie algebra sp(2)

 Example 8.  Construct the exceptional Lie algebra g2

Appendix.  The Cayley-Dickson process

Overview

The Lie algebra of all real mxm  matrices is called the general linear Lie algebra gl(m, R).  Many important Lie algebras, the so-called  classical matrix Lie algebras, can be  characterized as subalgebras of gl(m, R). This tutorial shows how to construct the classical matrix Lie algebras so(p,q), sl(n), gl(n,C), u(n), su(n), gl(n,H), sp(n) and g2 for small values of p, q, and n. In each case we realize these Lie algebras as subalgebras of the appropriate gl(m, R) which fix some tensor or collection of tensors on R^m.

 

The MatrixAlgebras command in the LieAlgebra package is used  to construct these Lie algebras. We shall also use the LieAlgebra package explore some special properties of these Lie algebras.

Procedures Illustrated

In this tutorial we shall make use of the following packages and commands:

DifferentialGeometry, LieAlgebras, Tensor, DGsetup, MatrixAlgebras, CanonicalTensors, Query DecomposeAlgebra

 

 Example 1.  The special orthogonal Lie algebras so(4), so(3,1), so(2,2)

Let g be an inner product on the vector space R^n with signature (p,q)  p + q= n. The Lie algebra so(p,q) is the subalgebra of  gl(n) consisting of  nxn matrices a such that g(ax, y) + g(x, ay) =0 . Typically one takes g to be the inner product defined by the diagonal matrix DiagonalMatrix([1$p, -1$q]) with p 1's and q  (-1)'s  along the diagonal but strictly speaking this is not necessary and other choices for g are sometimes preferred.

 

In this example we construct the Lie algebras so(4) , so(3,1) and so(2, 2).

 

with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

 

Introduce the vector space E4 on which the orthogonal algebras will act.

DGsetup([x1,x2,x3,x4],E4):

 

Create and then initialize the full general linear algebras gl(4).

E4 > 

gl4 := MatrixAlgebras("Full",4, gl4R);

gl4e1,e2=e2,e1,e3=e3,e1,e4=e4,e1,e5=e5,e1,e9=e9,e1,e13=e13,e2,e5=e1e6,e2,e6=e2,e2,e7=e3,e2,e8=e4,e2,e9=e10,e2,e13=e14,e3,e5=e7,e3,e9=e1e11,e3,e10=e2,e3,e11=e3,e3,e12=e4,e3,e13=e15,e4,e5=e8,e4,e9=e12,e4,e13=e1e16,e4,e14=e2,e4,e15=e3,e4,e16=e4,e5,e6=e5,e5,e10=e9,e5,e14=e13,e6,e7=e7,e6,e8=e8,e6,e10=e10,e6,e14=e14,e7,e9=e5,e7,e10=e6e11,e7,e11=e7,e7,e12=e8,e7,e14=e15,e8,e10=e12,e8,e13=e5,e8,e14=e6e16,e8,e15=e7,e8,e16=e8,e9,e11=e9,e9,e15=e13,e10,e11=e10,e10,e15=e14,e11,e12=e12,e11,e15=e15,e12,e13=e9,e12,e14=e10,e12,e15=e11e16,e12,e16=e12,e13,e16=e13,e14,e16=e14,e15,e16=e15,e11,e12,e13,e14,e21,e22,e23,e24,e31,e32,e33,e34,e41,e42,e43,e44,ε11,ε12,ε13,ε14,ε21,ε22,ε23,ε24,ε31,ε32,ε33,ε34,ε41,ε42,ε43,ε44

(3.1)
E4 > 

DGsetup(gl4);

Lie algebra: gl4R

(3.2)

 

Define the inner product on E4 with signature (4,0).

gl4R > 

ChangeFrame(E4):

E4 > 

g := CanonicalTensors("Metric", "bas", 4, 0);

gdx1dx1+dx2dx2+dx3dx3+dx4dx4

(3.3)

 

Calculate the subalgebra of gl4R which preserves the inner product g. 

E4 > 

so4subalgebra := MatrixAlgebras("Subalgebra", gl4R, [g]);

so4subalgebrae12e21,e13e31,e14e41,e23e32,e24e42,e34e43

(3.4)

 

Now we initialize so4, viewed as a Lie algebra of gl4, as a Lie algebra in its own right.

gl4R > 

so4data := LieAlgebraData(so4subalgebra, so4);

so4datae1,e2=e4,e1,e3=e5,e1,e4=e2,e1,e5=e3,e2,e3=e6,e2,e4=e1,e2,e6=e3,e3,e5=e1,e3,e6=e2,e4,e5=e6,e4,e6=e5,e5,e6=e4

(3.5)
gl4R > 

DGsetup(so4data);

Lie algebra: so4

(3.6)
so4 > 

MultiplicationTable("LieTable");

 

We check that so4 is a semi-simple Lie algebra.

so4 > 

Query("Semisimple");

true

(3.7)

 

We can decompose so4 into a direct sum of  two 3-dimensional algebras.

so4 > 

B := Decompose();

so4 > 

Alg1Data := LieAlgebraData(B[2],Alg1);

Alg1Datae1,e2=2e3,e1,e3=2e2,e2,e3=2e1,e4,e5=2e6,e4,e6=2e5,e5,e6=2e4

(3.8)
so4 > 

DGsetup(Alg1Data);

Lie algebra: Alg1

(3.9)
Alg1 > 

MultiplicationTable("LieTable");

 

We repeat the above computations for so(3,1) except that we find this Lie algebra to be indecomposable (over the real numbers) .

We shall construct two different representations of so(3,1) based upon different  choices for the inner product on E4.  The structure equations for both

representations are seen to be the same.

 

Here are the two inner products we shall use.  For the second inner product gB, the vectors D_x3 and D_x4 are null vectors.

Alg1 > 

ChangeFrame(E4):

E4 > 

gA := CanonicalTensors("Metric", "bas", 3, 1);

gAdx1dx1+dx2dx2+dx3dx3dx4dx4

(3.10)
E4 > 

gB := evalDG(dx1 &t dx1 + dx2 &t dx2  +  dx3 &s dx4);

gBdx1dx1+dx2dx2+dx3dx4+dx4dx3

(3.11)

 

Here are the algebras as subalgebras of gl4R.

E4 > 

so31Asubalgebra := MatrixAlgebras("Subalgebra",gl4R,[gA]);

so31Asubalgebrae12e21,e13e31,e14+e41,e23e32,e24+e42,e34+e43

(3.12)
gl4R > 

so31Bsubalgebra := MatrixAlgebras("Subalgebra",gl4R,[gB]);

so31Bsubalgebrae12e21,e13e41,e14e31,e23e42,e24e32,e33e44

(3.13)

 

Initialize so31Asubalgebra and so31Bsubalgebra as abstract Lie algebras.

gl4R > 

so31Adata := LieAlgebraData(so31Asubalgebra, so31A):

gl4R > 

so31Bdata := LieAlgebraData(so31Asubalgebra, so31B):

gl4R > 

DGsetup(so31Adata);

Lie algebra: so31A

(3.14)
so31A > 

DGsetup(so31Bdata,[f], [theta]);

Lie algebra: so31B

(3.15)

 

By inspection we see that these Lie algebras are isomorphic.

so31B > 

MultiplicationTable( so31A, "LieTable"),MultiplicationTable( so31B, "LieTable");

 

These algebras are semi-simple and  indecomposable and therefore simple, real Lie algebras. Of course, they not indecomposable over the complex numbers since over the complex numbers there are isomorphic to so(4).

so31B > 

Query("Semisimple"), Query("Indecomposable"), Query("AbsolutelyIndecomposable");

true,true,false

(3.16)

 

Finally, we construct the Lie algebra so(2,2). Here is the inner product we use

so31B > 

A := LinearAlgebra:-DiagonalMatrix([1,1,-1,-1]);

so31B > 

ChangeFrame(E4);

so31B

(3.17)
E4 > 

g := convert(A, DGtensor, [["cov_bas", "cov_bas"], []]);

gdx1dx1+dx2dx2dx3dx3dx4dx4

(3.18)
E4 > 

so22subalgebra := MatrixAlgebras("Subalgebra",gl4R,[g]);

so22subalgebrae12e21,e13+e31,e14+e41,e23+e32,e24+e42,e34e43

(3.19)

 

Now we initialize so22subalgebra, viewed as a Lie algebra of gl4, as a Lie algebra in its own right.

so22subalgebrae12e21,e13+e31,e14+e41,e23+e32,e24+e42,e34e43

gl4R > 

so22data := LieAlgebraData(so22subalgebra,so4);

so22datae1,e2=e4,e1,e3=e5,e1,e4=e2,e1,e5=e3,e2,e3=e6,e2,e4=e1,e2,e6=e3,e3,e5=e1,e3,e6=e2,e4,e5=e6,e4,e6=e5,e5,e6=e4

(3.20)
gl4R > 

DGsetup(so22data);

Lie algebra: so4

(3.21)
so4 > 

MultiplicationTable("LieTable");

 

We check that so22 is a semi-simple but not a simple Lie algebra.

so4 > 

Query("Semisimple"), Query("Indecomposable");

true,false

(3.22)

 Example 2.  The Lie algebra of trace-free 3x3 matrices sl(3,R)

 

The Lie algebra sl(n, R) is defined as the subalgebra of  gl(n) which preserves the volume form on R^n. Equivalently, sl(n,R) is the subalgebra of  gl(n,R)  consisting of trace-free matrices.  The dimension of sl(n,R) is n^2-1. In this example we construct the Lie algebra  sl(3, R)

 

so4 > 

with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

so4 > 

gl3 := MatrixAlgebras("Full",3, gl3R);

gl3e1,e2=e2,e1,e3=e3,e1,e4=e4,e1,e7=e7,e2,e4=e1e5,e2,e5=e2,e2,e6=e3,e2,e7=e8,e3,e4=e6,e3,e7=e1e9,e3,e8=e2,e3,e9=e3,e4,e5=e4,e4,e8=e7,e5,e6=e6,e5,e8=e8,e6,e7=e4,e6,e8=e5e9,e6,e9=e6,e7,e9=e7,e8,e9=e8,e11,e12,e13,e21,e22,e23,e31,e32,e33,ε11,ε12,ε13,ε21,ε22,ε23,ε31,ε32,ε33

(4.1)
so4 > 

DGsetup(gl3);

Lie algebra: gl3R

(4.2)

 

Define the space E3 upon which gl3 acts and define the standard volume form on E3.

gl3R > 

DGsetup([x1, x2, x3], E3):

E3 > 

nu := Tools:-DGvolume("form");

νdx1`^`dx2`^`dx3

(4.3)

 

Define sl(3, R) as the subalgebra of  gl(3, R).

E3 > 

sl3Rsubalgebra := MatrixAlgebras("Subalgebra", gl3R, [nu]);

sl3Rsubalgebrae11e33,e12,e13,e21,e22e33,e23,e31,e32

(4.4)

 

Define sl(3, R) as a Lie algebra in its own right.

gl3R > 

sl3Rdata := LieAlgebraData(sl3Rsubalgebra, sl3R);

sl3Rdatae1,e2=e2,e1,e3=2e3,e1,e4=e4,e1,e6=e6,e1,e7=2e7,e1,e8=e8,e2,e4=e1e5,e2,e5=e2,e2,e6=e3,e2,e7=e8,e3,e4=e6,e3,e5=e3,e3,e7=e1,e3,e8=e2,e4,e5=e4,e4,e8=e7,e5,e6=2e6,e5,e7=e7,e5,e8=2e8,e6,e7=e4,e6,e8=e5

(4.5)
gl3R > 

DGsetup(sl3Rdata);

Lie algebra: sl3R

(4.6)
sl3R > 

MultiplicationTable("LieTable");

 

Check that sl(3, R) is a simple Lie algebra, over both the real and complex numbers.

sl3R > 

Query("Semisimple"), Query("Indecomposable"), Query("AbsolutelyIndecomposable");

true,true,true

(4.7)

 Example 3. Construct gl(3,C) as a real subalgebra of gl(6, R)

 

The real Lie algebra gl(n,C) is the subalgebra of gl(2n, R) which fixes the standard complex structure on R^2n. The Lie algebra gl(n, C) consists of matrices of the form blockmatrix(n, n, [A, B, -B, A]), where A and B are nxn matrices. The (real )dimension of gl(n,C) is 2n^2. In this example we shall  construct the 18 dimensional Lie algebra gl(3, C) and show that this algebra is the complexification of the Lie algebra gl(3, R).

  

First we initialize the Lie algebra gl(6, R).

sl3R > 

with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

sl3R > 

DGsetup(MatrixAlgebras("Full",6, gl6R)):

 

Define the 6 dimensional vector space E6 on which gl(6, R) acts and define the standard complex structure on E6 , defined as a 1-1 tensor.

gl6R > 

DGsetup([x1, x2, x3, x4, x5, x6], E6):

E6 > 

J := CanonicalTensors("ComplexStructure","bas", E6);

Jdx1D_x4dx2D_x5dx3D_x6+dx4D_x1+dx5D_x2+dx6D_x3

(5.1)
E6 > 

gl3Csubalgebra := MatrixAlgebras("Subalgebra", gl6R, [J]);

gl3Csubalgebrae11+e44,e12+e45,e13+e46,e14e41,e15e42,e16e43,e21+e54,e22+e55,e23+e56,e24e51,e25e52,e26e53,e31+e64,e32+e65,e33+e66,e34e61,e35e62,e36e63

(5.2)

 

We reorder this basis for gl3C so that the first 9 elements corresponding to the 9 matrices of the form blockmatrix(3, 3, [A, 0, 0,A]) and the last 9 elements corresponding to the 9 matrices of the form blockmatrix(3, 3, [0, B, -B, 0]).

gl6R > 

reorderBasis := [e11+e44, e12+e45, e13+e46,e21+e54, e22+e55, e23+e56,e31+e64, e32+e65, e33+e66, e14-e41, e15-e42, e16-e43,e24-e51, e25-e52, e26-e53,e34-e61, e35-e62, e36-e63];

reorderBasise11+e44,e12+e45,e13+e46,e21+e54,e22+e55,e23+e56,e31+e64,e32+e65,e33+e66,e14e41,e15e42,e16e43,e24e51,e25e52,e26e53,e34e61,e35e62,e36e63

(5.3)

 

Calculate the structure equations and initialize:

gl6R > 

gl3Cdata := LieAlgebraData(reorderBasis, gl3C);

gl3Cdatae1,e2=e2,e1,e3=e3,e1,e4=e4,e1,e7=e7,e1,e11=e11,e1,e12=e12,e1,e13=e13,e1,e16=e16,e2,e4=e1e5,e2,e5=e2,e2,e6=e3,e2,e7=e8,e2,e10=e11,e2,e13=e10e14,e2,e14=e11,e2,e15=e12,e2,e16=e17,e3,e4=e6,e3,e7=e1e9,e3,e8=e2,e3,e9=e3,e3,e10=e12,e3,e13=e15,e3,e16=e10e18,e3,e17=e11,e3,e18=e12,e4,e5=e4,e4,e8=e7,e4,e10=e13,e4,e11=e10+e14,e4,e12=e15,e4,e14=e13,e4,e17=e16,e5,e6=e6,e5,e8=e8,e5,e11=e11,e5,e13=e13,e5,e15=e15,e5,e17=e17,e6,e7=e4,e6,e8=e5e9,e6,e9=e6,e6,e11=e12,e6,e14=e15,e6,e16=e13,e6,e17=e14e18,e6,e18=e15,e7,e9=e7,e7,e10=e16,e7,e11=e17,e7,e12=e10+e18,e7,e15=e13,e7,e18=e16,e8,e9=e8,e8,e12=e11,e8,e13=e16,e8,e14=e17,e8,e15=e14+e18,e8,e18=e17,e9,e12=e12,e9,e15=e15,e9,e16=e16,e9,e17=e17,e10,e11=e2,e10,e12=e3,e10,e13=e4,e10,e16=e7,e11,e13=e1+e5,e11,e14=e2,e11,e15=e3,e11,e16=e8,e12,e13=e6,e12,e16=e1+e9,e12,e17=e2,e12,e18=e3,e13,e14=e4,e13,e17=e7,e14,e15=e6,e14,e17=e8,e15,e16=e4,e15,e17=e5+e9,e15,e18=e6,e16,e18=e7,e17,e18=e8

(5.4)
gl6R > 

DGsetup(gl3Cdata);

Lie algebra: gl3C

(5.5)

Now we show that the Lie algebra gl3C is isomorphic to the Lie algebra obtained by complexifying gl3R:

gl3C > 

DGsetup(MatrixAlgebras("Full", 3, gl3R));

Lie algebra: gl3R

(5.6)
gl3R > 

Alg1data := Complexify(gl3R, Alg1);

Alg1datae1,e2=e2,e1,e3=e3,e1,e4=e4,e1,e7=e7,e1,e11=e11,e1,e12=e12,e1,e13=e13,e1,e16=e16,e2,e4=e1e5,e2,e5=e2,e2,e6=e3,e2,e7=e8,e2,e10=e11,e2,e13=e10e14,e2,e14=e11,e2,e15=e12,e2,e16=e17,e3,e4=e6,e3,e7=e1e9,e3,e8=e2,e3,e9=e3,e3,e10=e12,e3,e13=e15,e3,e16=e10e18,e3,e17=e11,e3,e18=e12,e4,e5=e4,e4,e8=e7,e4,e10=e13,e4,e11=e10+e14,e4,e12=e15,e4,e14=e13,e4,e17=e16,e5,e6=e6,e5,e8=e8,e5,e11=e11,e5,e13=e13,e5,e15=e15,e5,e17=e17,e6,e7=e4,e6,e8=e5e9,e6,e9=e6,e6,e11=e12,e6,e14=e15,e6,e16=e13,e6,e17=e14e18,e6,e18=e15,e7,e9=e7,e7,e10=e16,e7,e11=e17,e7,e12=e10+e18,e7,e15=e13,e7,e18=e16,e8,e9=e8,e8,e12=e11,e8,e13=e16,e8,e14=e17,e8,e15=e14+e18,e8,e18=e17,e9,e12=e12,e9,e15=e15,e9,e16=e16,e9,e17=e17,e10,e11=e2,e10,e12=e3,e10,e13=e4,e10,e16=e7,e11,e13=e1+e5,e11,e14=e2,e11,e15=e3,e11,e16=e8,e12,e13=e6,e12,e16=e1+e9,e12,e17=e2,e12,e18=e3,e13,e14=e4,e13,e17=e7,e14,e15=e6,e14,e17=e8,e15,e16=e4,e15,e17=e5+e9,e15,e18=e6,e16,e18=e7,e17,e18=e8

(5.7)
gl3R > 

DGsetup(Alg1data);

Lie algebra: Alg1

(5.8)

 

We see by inspection that Alg1 and gl3C are isomorphic but we can still check this formally using the Query command to verify that the identity matrix is a Lie algebra homomorphism.

Alg1 > 

A := LinearAlgebra:-IdentityMatrix(18):

Alg1 > 

Query( Alg1,gl3C, A, "Homomorphism");

true

(5.9)

 Example 4. Construct the unitary Lie algebra u(3)

The unitary Lie algebra u(n) is the subalgebra of gl(2n,R) which fixes the standard complex structure and the standard metric. It consists of matrices of the form  blockmatrix(n, n, [A, B, -B, A]), where A and B are nxn matrices, A is skew-symmetric and B is symmetric. The dimension of u(n) is n^2.  In this example we construct u(3).

 

gl3C > 

with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

 

First initialize gl(6, R)

gl3C > 

DGsetup(MatrixAlgebras("Full", 6, gl6R)):

 

Define the vector space E6 on which gl(6, R) acts.

gl6R > 

DGsetup([x1, x2, x3, y1, y2, y3], E6):

E6 > 

g := CanonicalTensors("Metric", "bas", 6,0):

E6 > 

J := CanonicalTensors("ComplexStructure","bas"):

E6 > 

u3subalgebra := MatrixAlgebras("Subalgebra",gl6R,[g, J]);

u3subalgebrae12e21+e45e54,e13e31+e46e64,e14e41,e15+e24e42e51,e16+e34e43e61,e23e32+e56e65,e25e52,e26+e35e53e62,e36e63

(6.1)

 

Alternatively, we can calculate gl(3,C) and so(6) and use the command IntersectSubspaces to find u(3) as the intersection of these 2 subalgebras

gl6R > 

gl3C := MatrixAlgebras("Subalgebra", gl6R, [J]);

gl3Ce11+e44,e12+e45,e13+e46,e14e41,e15e42,e16e43,e21+e54,e22+e55,e23+e56,e24e51,e25e52,e26e53,e31+e64,e32+e65,e33+e66,e34e61,e35e62,e36e63

(6.2)
gl6R > 

so6 := MatrixAlgebras("Subalgebra", gl6R, [g]);

so6e12e21,e13e31,e14e41,e15e51,e16e61,e23e32,e24e42,e25e52,e26e62,e34e43,e35e53,e36e63,e45e54,e46e64,e56e65

(6.3)
gl6R > 

newu3subalgebra := IntersectSubspaces([gl3C, so6]);

newu3subalgebrae12+e21e45+e54,e36+e63,e26e35+e53+e62,e16e34+e43+e61,e15e24+e42+e51,e14+e41,e25+e52,e13+e31e46+e64,e23+e32e56+e65

(6.4)

 

The command  DGequal can be used to check that  the subalgebras u3 and newu3 are equal.

gl6R > 

Tools:-DGequal(u3subalgebra,newu3subalgebra);

true

(6.5)

 

Calculate the structure equations for u(3).

gl6R > 

u3data := LieAlgebraData(u3subalgebra,"u3");

u3datae1,e2=e6,e1,e3=e4,e1,e4=2e32e7,e1,e5=e8,e1,e6=e2,e1,e7=e4,e1,e8=e5,e2,e3=e5,e2,e4=e8,e2,e5=2e32e9,e2,e6=e1,e2,e8=e4,e2,e9=e5,e3,e4=e1,e3,e5=e2,e4,e5=e6,e4,e6=e5,e4,e7=e1,e4,e8=e2,e5,e6=e4,e5,e8=e1,e5,e9=e2,e6,e7=e8,e6,e8=2e72e9,e6,e9=e8,e7,e8=e6,e8,e9=e6

(6.6)
gl6R > 

DGsetup(u3data):

u3 > 

 

C := Center();

Ce3+e7+e9

(6.7)
u3 > 

L := QuotientAlgebra(C, [e1, e2, e3, e4, e5, e6, e7, e8], u3mod);

Le1,e2=e6,e1,e3=e4,e1,e4=2e32e7,e1,e5=e8,e1,e6=e2,e1,e7=e4,e1,e8=e5,e2,e3=e5,e2,e4=e8,e2,e5=4e3+2e7,e2,e6=e1,e2,e8=e4,e3,e4=e1,e3,e5=e2,e4,e5=e6,e4,e6=e5,e4,e7=e1,e4,e8=e2,e5,e6=e4,e5,e8=e1,e6,e7=e8,e6,e8=2e3+4e7,e7,e8=e6

(6.8)
u3 > 

DGsetup(L);

Lie algebra: u3mod

(6.9)
u3mod > 

 

 

 Example 5. Construct the special unity Lie algebra su(3)

 

The special unity algebra su(n) is the subalgebra of gl(6,R) which fixes the standard complex structure, the standard metric and the real and imaginary parts of the complex volume form. It consists of matrices of the form blockmatrix(n, n, [A, B, -B, A]), where A and B are nxn matrices, A is skew-symmetric and B is symmetric and trace-free.  The dimension of su(n) is n^2 - 1.

 

with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

u3mod > 

DGsetup(MatrixAlgebras("Full",6)):

gl6R > 

DGsetup([x1, x2, x3, y1, y2, y3], E6):

 

Define the metric, the complex structure,  the real and imaginary parts of the complex volume form.

E6 > 

g := CanonicalTensors("Metric", "bas",6,0):

E6 > 

J := CanonicalTensors("ComplexStructure", "bas");

Jdx1D_y1dx2D_y2dx3D_y3+dy1D_x1+dy2D_x2+dy3D_x3

(7.1)
E6 > 

dz1 := DGzip([1,I],[dx1, dy1],"plus"):
dz2 := DGzip([1,I],[dx2, dy2], "plus"):
dz3 := DGzip([1,I],[dx3, dy3], "plus"):
nu := dz1&wedge dz2 &wedge dz3:

E6 > 

nuR:= (1/2) &mult ( nu  &plus Tools:-DGmap(1,conjugate,nu));

nuRdx1`^`dx2`^`dx3dx1`^`dy2`^`dy3+dx2`^`dy1`^`dy3dx3`^`dy1`^`dy2

(7.2)
E6 > 

nuI:=(I/2) &mult ( nu  &minus Tools:-DGmap(1,conjugate,nu));

nuIdx1`^`dx2`^`dy3+dx1`^`dx3`^`dy2dx2`^`dx3`^`dy1+dy1`^`dy2`^`dy3

(7.3)

 

Find the subalgebra of gl6R which fixes g, J, nuI and nuR.

E6 > 

su3subalgebra := MatrixAlgebras("Subalgebra",gl6R,[g, J, nuI, nuR]);

su3subalgebrae12e21+e45e54,e13e31+e46e64,e14e36e41+e63,e15+e24e42e51,e16+e34e43e61,e23e32+e56e65,e25e36e52+e63,e26+e35e53e62

(7.4)
gl6R > 

su3data := LieAlgebraData(su3subalgebra, su3);

su3datae1,e2=e6,e1,e3=e4,e1,e4=2e32e7,e1,e5=e8,e1,e6=e2,e1,e7=e4,e1,e8=e5,e2,e3=2e5,e2,e4=e8,e2,e5=2e3,e2,e6=e1,e2,e7=e5,e2,e8=e4,e3,e4=e1,e3,e5=2e2,e3,e6=e8,e3,e8=e6,e4,e5=e6,e4,e6=e5,e4,e7=e1,e4,e8=e2,e5,e6=e4,e5,e7=e2,e5,e8=e1,e6,e7=2e8,e6,e8=2e7,e7,e8=2e6

(7.5)
gl6R > 

 

 Example 6. Construct the general quaternionic Lie algebra gl(2,H) as a subalgebra of gl(8, R)

 

The Lie algebra gl(n, H) is the real Lie algebra of nxn matrices with quaternion entries. The algebra gl(n, H) can also be defined as  the subalgebra of gl(4n, R) which fixes a pair of skew-commuting complex  structures on R^4n. The algebra gl(n, H) consists of matrices of the type

 blockmatrix(n, n, [A,  -C, B, - D], [C, A, -D, -B], [-B, D, A, -C],[D, B, C,-A]]),

 where the matrices A, B, C, D are arbitrary nxn matrices. The dimension of  gl(n, H) is 4n^2.  In this example we construct gl(2,H).

 

with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

gl6R > 

DGsetup(MatrixAlgebras("Full",8), gl8R):

gl8R > 

DGsetup([x1, y1, u1, v1, x2, y2, u2, v2], E8):

 

Define two matrices Jm and Km which satisfy Jm^2 = -I , Km^2 = -I and Jm . Km = - Km . Jm

E8 > 

Jm := Matrix([[0, 0, 0, 0, -1, 0, 0, 0], [0, 0, 0, 0, 0, -1, 0, 0], [0, 0, 0, 0, 0, 0, -1, 0], [0, 0, 0, 0, 0, 0, 0, -1], [1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0]]);

E8 > 

Km := Matrix([[0, 0, -1, 0, 0, 0, 0, 0], [0, 0, 0, -1, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, -1, 0, 0, 0], [0, 0, 0, 0, 0, -1, 0, 0]]);

E8 > 

(Jm^2 +1), evalm(Km^2 +1), evalm(Jm &* Km + Km &*Jm);

Convert Jm and Km to type (1,1) tensors.

E8 > 

J := convert(Jm, DGtensor,[["cov_bas", "con_bas"],[]]);

Jdx1D_x2dy1D_y2du1D_u2dv1D_v2+dx2D_x1+dy2D_y1+du2D_u1+dv2D_v1

(8.1)
E8 > 

K := convert(Km,DGtensor,[["cov_bas", "con_bas"],[]]);

Kdx1D_u1dy1D_v1+du1D_x1+dv1D_y1+dx2D_u2+dy2D_v2du2D_x2dv2D_y2

(8.2)
E8 > 

gl2Hsubalgebra := MatrixAlgebras("Subalgebra", gl8R, [J, K]);
gl2Hsubalgebrae11+e33+e55+e77,e12+e34+e56+e78,e13e31+e57e75,e14e32+e58e76,e15e37e51+e73,e16e38e52+e74,e17+e35e53e71,e18+e36e54e72,e21+e43+e65+e87,e22+e44+e66+e88,e23e41+e67e85,e24e42+e68e86,e25e47e61+e83,e26e48e62+e84,e27+e45e63e81,e28+e46e64e82

gl2Hsubalgebrae11+e33+e55+e77,e12+e34+e56+e78,e13e31+e57e75,e14e32+e58e76,e15e37e51+e73,e16e38e52+e74,e17+e35e53e71,e18+e36e54e72,e21+e43+e65+e87,e22+e44+e66+e88,e23e41+e67e85,e24e42+e68e86,e25e47e61+e83,e26e48e62+e84,e27+e45e63e81,e28+e46e64e82

(8.3)
gl8R > 

gl2Hdata := LieAlgebraData(gl2Hsubalgebra, gl2H);

gl2Hdatae1,e2=e2,e1,e4=e4,e1,e6=e6,e1,e8=e8,e1,e9=e9,e1,e11=e11,e1,e13=e13,e1,e15=e15,e2,e3=e4,e2,e5=e6,e2,e7=e8,e2,e9=e1e10,e2,e10=e2,e2,e11=e3e12,e2,e12=e4,e2,e13=e5e14,e2,e14=e6,e2,e15=e7e16,e2,e16=e8,e3,e4=e2,e3,e5=2e7,e3,e6=e8,e3,e7=2e5,e3,e8=e6,e3,e9=e11,e3,e11=e9,e3,e13=e15,e3,e15=e13,e4,e5=e8,e4,e7=e6,e4,e9=e3e12,e4,e10=e4,e4,e11=e1+e10,e4,e12=e2,e4,e13=e7e16,e4,e14=e8,e4,e15=e5+e14,e4,e16=e6,e5,e6=e2,e5,e7=2e3,e5,e8=e4,e5,e9=e13,e5,e11=e15,e5,e13=e9,e5,e15=e11,e6,e7=e4,e6,e9=e5e14,e6,e10=e6,e6,e11=e7+e16,e6,e12=e8,e6,e13=e1+e10,e6,e14=e2,e6,e15=e3e12,e6,e16=e4,e7,e8=e2,e7,e9=e15,e7,e11=e13,e7,e13=e11,e7,e15=e9,e8,e9=e7e16,e8,e10=e8,e8,e11=e5e14,e8,e12=e6,e8,e13=e3+e12,e8,e14=e4,e8,e15=e1+e10,e8,e16=e2,e9,e10=e9,e9,e12=e11,e9,e14=e13,e9,e16=e15,e10,e11=e11,e10,e13=e13,e10,e15=e15,e11,e12=e9,e11,e14=e15,e11,e16=e13,e12,e13=e15,e12,e14=2e16,e12,e15=e13,e12,e16=2e14,e13,e14=e9,e13,e16=e11,e14,e15=e11,e14,e16=2e12,e15,e16=e9

(8.4)
gl8R > 

DGsetup(gl2Hdata);

Lie algebra: gl2H

(8.5)
gl2H > 

 

 Example 7.  Construct the symplectic Lie algebra sp(2)

 

The symplectic algebra sp(n) is the subalgebra of gl(2n, R) of matrices which fixes a symplectic form on R^n. With this definition the algebra sp(n) consists of matrices of the form blockmatrix(n, n, [[A, B], [C, D]]), where D = -transpose(A) and B and C are nxn symmetric matrices. The dimension of sp(n)  is n(2n+1).

 

Alternatively, the symplectic algebra sp(n)  can be viewed as the subalgebra of  gl(n, H) in gl(4n, R) of matrices which fixes the standard metric. In this description sp(n) is the subalgebra of gl(4n, R) given by matrices of  the form

blockmatrix(n, n, [A, -C, B, -D], [C, A, -,D, -B],[-B, D, A, -C],[D, B, C,-A]]).  

Here A is skew-symmetric and B, C, D are symmetric.

 

with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

gl2H > 

DGsetup(MatrixAlgebras("Full",4),gl4R):

gl4R > 

DGsetup([q1, p1, q2, p2], E4);

frame name: E4

(9.1)

Define the standard symplectic form on E4.

E4 > 

omega := CanonicalTensors("SymplecticForm", "bas");

ωdq1`^`dq2+dp1`^`dp2

(9.2)
E4 > 

sp2Asubalgebra := MatrixAlgebras("Subalgebra", gl4R, [omega]);

sp2Asubalgebrae11e33,e12e43,e13,e14+e23,e21e34,e22e44,e24,e31,e32+e41,e42

(9.3)
gl4R > 

sp2Adata := LieAlgebraData(sp2Asubalgebra, sp2A);

sp2Adatae1,e2=e2,e1,e3=2e3,e1,e4=e4,e1,e5=e5,e1,e8=2e8,e1,e9=e9,e2,e4=2e3,e2,e5=e1e6,e2,e6=e2,e2,e7=e4,e2,e8=e9,e2,e9=2e10,e3,e5=e4,e3,e8=e1,e3,e9=e2,e4,e5=2e7,e4,e6=e4,e4,e8=e5,e4,e9=e1+e6,e4,e10=e2,e5,e6=e5,e5,e9=2e8,e5,e10=e9,e6,e7=2e7,e6,e9=e9,e6,e10=2e10,e7,e9=e5,e7,e10=e6

(9.4)
gl4R > 

DGsetup(sp2Adata);

Lie algebra: sp2A

(9.5)

true,true

(9.6)

Now turn to the alternative formulation. We use the construction of gl(2, H) given in the previous example.

sp2A > 

DGsetup([x1, y1, u1, v1, x2, y2, u2, v2], E8);

E8 > 

J := CanonicalTensors("ComplexStructure", "bas");

Jdx1D_x2dy1D_y2du1D_u2dv1D_v2+dx2D_x1+dy2D_y1+du2D_u1+dv2D_v1

(9.7)
E8 > 

K1 := evalDG( -dx1 &t D_u1 - dy1 &t D_v1 +du1 &t D_x1 + dv1 &t D_y1);

K1dx1D_u1dy1D_v1+du1D_x1+dv1D_y1

(9.8)
E8 > 

K2 := evalDG( -dx2 &t D_u2 - dy2 &t D_v2 +du2 &t D_x2 + dv2 &t D_y2);

K2dx2D_u2dy2D_v2+du2D_x2+dv2D_y2

(9.9)
E8 > 

K := K1 &minus K2;

Kdx1D_u1dy1D_v1+du1D_x1+dv1D_y1+dx2D_u2+dy2D_v2du2D_x2dv2D_y2

(9.10)
E8 > 

g := CanonicalTensors("Metric", "bas", 8, 0);

gdx1dx1+dy1dy1+du1du1+dv1dv1+dx2dx2+dy2dy2+du2du2+dv2dv2

(9.11)
E8 > 

DGsetup(MatrixAlgebras("Full",8), gl8R):

gl8R > 

sp2Bsubalgebra := MatrixAlgebras("Subalgebra", gl8R, [J, K, g]);

sp2Bsubalgebrae12e21+e34e43+e56e65+e78e87,e13e31+e57e75,e14+e23e32e41+e58+e67e76e85,e15e37e51+e73,e16+e25e38e47e52e61+e74+e83,e17+e35e53e71,e18+e27+e36+e45e54e63e72e81,e24e42+e68e86,e26e48e62+e84,e28+e46e64e82

(9.12)
gl8R > 

sp2Bdata := LieAlgebraData(sp2Bsubalgebra, sp2B);

sp2Bdatae1,e2=e3,e1,e3=2e22e8,e1,e4=e5,e1,e5=2e42e9,e1,e6=e7,e1,e7=2e62e10,e1,e8=e3,e1,e9=e5,e1,e10=e7,e2,e3=e1,e2,e4=2e6,e2,e5=e7,e2,e6=2e4,e2,e7=e5,e3,e4=e7,e3,e5=2e62e10,e3,e6=e5,e3,e7=2e4+2e9,e3,e8=e1,e3,e9=e7,e3,e10=e5,e4,e5=e1,e4,e6=2e2,e4,e7=e3,e5,e6=e3,e5,e7=2e22e8,e5,e8=e7,e5,e9=e1,e5,e10=e3,e6,e7=e1,e7,e8=e5,e7,e9=e3,e7,e10=e1,e8,e9=2e10,e8,e10=2e9,e9,e10=2e8

(9.13)
gl8R > 

DGsetup(sp2Bdata);

Lie algebra: sp2B

(9.14)

 

One can use the Query command to check that the Lie algebra sp2B is semisimple and indecomposable (although this takes several minutes of computation time).

 

 Example 8.  Construct the exceptional Lie algebra g2

In this example we follow the description of g2 as found in the text:  Spinors and Calibrations by F. Resse Harvey,  p113-118,  namely, g2 is the subalgebra of  gl(7,R) which fixes a certain 3-form.  We check that the g2 is a subalgebra of so(7) and we calculate the g2 stabilizer of  a vector to be a certain 8-dimensional subalgebra h ( this subalgebra is in fact su(3)).  This proves that the 7 sphere is a G2 homogeneous space.

 

sp2B > 

restart: with(DifferentialGeometry): with(LieAlgebras): with(Tensor):

DGsetup(MatrixAlgebras("Full",7), gl7R);

Lie algebra: gl7R

(10.1)
gl7R > 

DGsetup([x1, x2, x3, x4, x5, x6, x7],E7):

E7 > 

g := CanonicalTensors("Metric", "bas", 7,0);

gdx1dx1+dx2dx2+dx3dx3+dx4dx4+dx5dx5+dx6dx6+dx7dx7

(10.2)
E7 > 

phi := evalDG(dx1 &w dx2 &w dx3  + dx1 &w dx4 &w dx5 -dx1 &w dx6 &w dx7 + dx2 &w dx4 &w dx6+ dx2 &w dx5 &w dx7 +dx3 &w dx4 &w dx7 -dx3 &w dx5 &w dx6);

φdx1`^`dx2`^`dx3+dx1`^`dx4`^`dx5dx1`^`dx6`^`dx7+dx2`^`dx4`^`dx6+dx2`^`dx5`^`dx7+dx3`^`dx4`^`dx7dx3`^`dx5`^`dx6

(10.3)
E7 > 

 

g2subalgebra := MatrixAlgebras("Subalgebra",gl7R,[phi]);

g2subalgebrae12e21+e56e65,e13e31+e57e75,e14e36e41+e63,e15e37e51+e73,e16+e34e43e61,e17+e35e53e71,e23e32+e67e76,e24+e35e42e53,e25e34+e43e52,e26e37e62+e73,e27+e36e63e72,e45e54+e67e76,e46e57e64+e75,e47+e56e65e74

(10.4)

 

If we impose the additional constraint that the metric g be preserved, the result remains the same. This proves that g2 is a subalgebra of so(7).

gl7R > 

S := MatrixAlgebras("Subalgebra", gl7R, [phi, g]);

Se12e21+e56e65,e13e31+e57e75,e14e36e41+e63,e15e37e51+e73,e16+e34e43e61,e17+e35e53e71,e23e32+e67e76,e24+e35e42e53,e25e34+e43e52,e26e37e62+e73,e27+e36e63e72,e45e54+e67e76,e46e57e64+e75,e47+e56e65e74

(10.5)
gl7R > 

Tools:-DGequal(g2subalgebra, S);

true

(10.6)

 

The infinitesimal isotropy algebra is 8 dimensional.

 

gl7R > 

g2IsotropyData := MatrixAlgebras("Subalgebra",gl7R,[phi,D_x1]);

g2IsotropyDatae23e32+e67e76,e24+e35e42e53,e25e34+e43e52,e26e37e62+e73,e27+e36e63e72,e45e54+e67e76,e46e57e64+e75,e47+e56e65e74

(10.7)
gl7R > 

nops(%);

8

(10.8)
gl7R > 

g2data := LieAlgebraData(g2subalgebra, g2);

g2datae1,e2=e7,e1,e3=e8,e1,e4=e5e9,e1,e5=e4e10,e1,e6=e11,e1,e7=e2,e1,e8=e3,e1,e9=e4e10,e1,e10=e5+e9,e1,e11=e6,e1,e12=e13,e1,e13=e12,e2,e3=e5,e2,e4=2e6,e2,e5=e3,e2,e6=2e4,e2,e7=e1,e2,e8=e4,e2,e9=e3e11,e2,e10=e6,e2,e11=e5+e9,e2,e12=e14,e2,e14=e12,e3,e4=e12,e3,e5=2e22e13,e3,e6=e14,e3,e7=e10,e3,e8=e1,e3,e9=e2+e13,e3,e10=e7,e3,e12=e4,e3,e13=e5,e3,e14=e6,e4,e5=e14,e4,e6=2e2,e4,e7=e11,e4,e8=e2,e4,e9=e1+e14,e4,e11=e7,e4,e12=e3,e4,e13=e6,e4,e14=e5,e5,e6=e12,e5,e7=e6e8,e5,e8=e7e12,e5,e10=e1+e14,e5,e11=e2e13,e5,e12=e6,e5,e13=e3,e5,e14=e4,e6,e7=e5e9,e6,e9=e7e12,e6,e10=e2,e6,e11=e1,e6,e12=e5,e6,e13=e4,e6,e14=e3,e7,e8=e9,e7,e9=e8,e7,e10=2e11,e7,e11=2e10,e7,e13=e14,e7,e14=e13,e8,e9=2e72e12,e8,e10=e13,e8,e11=e14,e8,e12=e9,e8,e13=e10,e8,e14=e11,e9,e10=e14,e9,e11=e13,e9,e12=e8,e9,e13=e11,e9,e14=e10,e10,e11=2e7,e10,e12=e11,e10,e13=e8,e10,e14=e9,e11,e12=e10,e11,e13=e9,e11,e14=e8,e12,e13=2e14,e12,e14=2e13,e13,e14=2e12

(10.9)
gl7R > 

DGsetup(g2data):

 

One can use the Query command to check that the Lie algebra g2 is semisimple and indecomposable (although this takes several minutes of computation time).

 

Actually g2 can be constructed using any generic 3-form. The form using in Harris and Fulton, Representation Theory,  page 350, is given below:

g2 > 

DGsetup([v1, v3, v4, w1, w3, w4, u], M);

M > 

omega := evalDG( (dw3 &w du &w dv3) + (dv4 &w du &w dw4) + (dw1 &w du &w dv1) +2*(dv1 &w dv3 &w dw4  + dw1 &w dw3 &w dv4) );

ω2dv1`^`dv3`^`dw4+dv1`^`dw1`^`du+dv3`^`dw3`^`du+2dv4`^`dw1`^`dw3dv4`^`dw4`^`du

(10.10)
E7    >

g2subalgebra_alternative := MatrixAlgebras("Subalgebra", gl7R, [omega]);

M > 

 

g2subalgebra_alternativee11+e33e44e66,e12e54,e132e57e64e72,e15e24+2e37+e76,e16e34,e17+e322e562+e742,e21e45,e22+e33e55e66,e23+2e47e65+e71,e26e35,e27e312+e462+e752,e42e512e67e73,e43e61,e53e62

(10.11)
gl7R > 

nops(g2subalgebra_alternative);

14

(10.12)

Appendix.  The Cayley-Dickson process

 

The Cayley-Dickson process creates a new normed algebra from a given one.  See F. Reese Harvey. Spinors and Calibrations, p104-106.

 

In this appendix we provide some simple programs for implementing the Cayley Dickson process.

• 

The procedure Conj computes the conjugate of an element

• 

The procedure Mult recursively applies the formula 6.18. For lists of length 2, 4 and 8, Mult  is the multiplication in the complex numbers, the quaternions, and the octonions.

• 

The procedure InnerProd calculates the inner product of  two numbers.

• 

The map phi, defined on page 105, is calculated by the procedure phi.

 

 

Programs

 

gl7R > 

restart: with(DifferentialGeometry):

Conj := proc(A)
local i, n;
n := nops(A);
[A[1], seq(-A[i], i=2..n)]
end;

ConjprocAlocali,n;nnopsA;A[1],seq−A[i],i=2..nend proc

(11.1.1)

Mult := proc( A,B)
local n, i,a, b, c, d, k, ans1, ans2, ans, c_bar, d_bar;
n := nops(A);
k := n/2;
if nops(A) =1 and nops(B) =1 then return([A[1]*B[1]]) fi;
a := [seq(A[i], i = 1..k)];
b := [seq(A[i], i = k+1..n)];
c := [seq(B[i], i = 1..k)];
d := [seq(B[i], i = k+1..n)];
c_bar := Conj(c):
d_bar := Conj(d):
ans1 := Mult(a, c)- Mult(d_bar, b):
ans2 := Mult(d, a) + Mult(b, c_bar);
ans := [seq(ans1[i],i = 1..k),seq(ans2[i], i = 1..k)];
end:

 

InnerProd := proc(A,B)

local i;

add( A[i]*B[i],i = 1 .. nops(A));

end;

InnerProdprocA,Blocali;addA[i]*B[i],i=1..nopsAend proc

(11.1.2)

 

phi := (x,y,z)-> expand(InnerProd(x,Mult(y,z)));

φx,y,z→expandInnerProdx,Multy,z

(11.1.3)

AssociativeForm:=proc()
local ans, i,j,k;
ans := DifferentialGeometry:-Tools:-DGzero("form", 3);
for i from 1 to 7
do for j from i+1to 7
do for k from j+1 to 7
do ans:= ans &plus (phi(e||i,e||j,e||k)&mult  DifferentialGeometry:-Tools:-DGform([x||i,x||j,x||k]) )
od;od;od;  
ans;
end:

 

 

complex  multiplication:

Mult([a, b], [c, d]);

db+ac,bc+da

(11.1)

 

Quaternion  multiplication:

e := [1,0,0,0]:

i := [0,1,0,0]:

j := [0,0,1,0]:

k := [0,0,0,1]:

Mult(i, i), Mult(j, j), Mult(k, k);

1,0,0,0,1,0,0,0,1,0,0,0

(11.2)

Mult(i, j), Mult(k, i), Mult(j ,k);

0,0,0,1,0,0,1,0,0,1,0,0

(11.3)

Mult(j , i), Mult(i, k), Mult(k, j);

0,0,0,1,0,0,1,0,0,1,0,0

(11.4)

 

Octonion Multiplication

e1 := [1,0,0,0,0,0,0,0]:

e2:=[0,1,0,0,0,0,0,0]:

e3:=[0,0,1,0,0,0,0,0]:

e4:=[0,0,0,1,0,0,0,0]:

e5:=[0,0,0,0,1,0,0,0]:

e6:=[0,0,0,0,0,1,0,0]:

e7:=[0,0,0,0,0,0,1,0]:

e8:=[0,0,0,0,0,0,0,1]:

alpha := [a1,a2,a3,a4,0,0,0,0]:

beta := [b1,b2,b3,b4,0,0,0,0]:

 

Check some basic multiplication laws for octonions:

Mult(Mult(alpha, e5), Mult(beta, e5)) + Mult(Conj(beta), alpha);

0,0,0,0,0,0,0,0

(11.5)

Mult(alpha, Mult(beta, e5)) - Mult(Mult(beta, alpha), e5);

0,0,0,0,0,0,0,0

(11.6)

Mult(Mult(alpha, e5), beta) - Mult(Mult(alpha, Conj(beta)), e5);

0,0,0,0,0,0,0,0

(11.7)

 

Octonion multiplication is non-associative.

Mult(e4, Mult(e5, e6)), Mult(Mult(e4, e5), e6);

0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0

(11.8)

 

Check that phi is alternating on imaginary octonions.

im_x:=[0,seq(x||i,i = 1..7)];

im_x0,x1,x2,x3,x4,x5,x6,x7

(11.9)

im_y:=[0,seq(y||i,i = 1..7)];

im_y0,y1,y2,y3,y4,y5,y6,y7

(11.10)

im_z:=[0,seq(z||i,i = 1..7)];

im_z0,z1,z2,z3,z4,z5,z6,z7

(11.11)

phi(im_x,im_y,im_z) + phi(im_x,im_z,im_y);

0

(11.12)

phi(im_x,im_y,im_z) +phi(im_y,im_x,im_z);

0

(11.13)

The next procedure checks some other properties of the phi map

Check_phi := proc()

local i, j, k, a;

for i to 8

do for j from i+1 to 8

do for k from j+1 to 8 do
a := phi(e||i,e||j,e||k);

if  a<> 0  then print(i,j,k,a) fi;
od;od;od;

end;

Check_phiproclocali&comma;j&comma;k&comma;a&semi;forito8doforjfromi&plus;1to8doforkfromj&plus;1to8doa&phi;e||i&comma;e||j&comma;e||k&semi;ifa<>0thenprinti&comma;j&comma;k&comma;aend ifend doend doend doend proc

(11.14)

 

Check_phi();

2&comma;3&comma;4&comma;1

2&comma;5&comma;6&comma;1

2&comma;7&comma;8&comma;1

3&comma;5&comma;7&comma;1

3&comma;6&comma;8&comma;1

4&comma;5&comma;8&comma;1

4&comma;6&comma;7&comma;1

(11.15)

with(DifferentialGeometry):with(Tools):

DGsetup([x1, x2, x3, x4, x5, x6, x7], E7):

E7 > 

 

new_phi := AssociativeForm();

new_phidx2`^`dx3`^`dx4&plus;dx2`^`dx5`^`dx6&plus;dx3`^`dx5`^`dx7dx4`^`dx6`^`dx7

(11.16)
E7 > 

psi := Transformation(E7,E7,[x1= x1,x2 = x2,x3 = x3,x4 = x4,x5 =-x7,x7=-x5,x6 =x6]);

&psi;x1&equals;x1&comma;x2&equals;x2&comma;x3&equals;x3&comma;x4&equals;x4&comma;x5&equals;x7&comma;x6&equals;x6&comma;x7&equals;x5

(11.17)
E7 > 

newer_phi:= Pullback(psi,new_phi);

newer_phidx2`^`dx3`^`dx4&plus;dx2`^`dx6`^`dx7dx3`^`dx5`^`dx7dx4`^`dx5`^`dx6

(11.18)
E7 > 

phi:= DGform([x1,x2,x3]) &minus (DGform([x1,x5,x6])  &plus DGform([x4,x2,x6]) &plus DGform([x4,x5,x3]) &plus DGform([x1,x4,x7]) &plus DGform([x2,x5,x7]) &plus DGform([x3,x6,x7]));

&phi;dx1`^`dx2`^`dx3dx1`^`dx4`^`dx7dx1`^`dx5`^`dx6&plus;dx2`^`dx4`^`dx6dx2`^`dx5`^`dx7dx3`^`dx4`^`dx5dx3`^`dx6`^`dx7

(11.19)
sp2B >