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
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.
In this tutorial we shall make use of the following packages and commands:
DifferentialGeometry, LieAlgebras, Tensor, DGsetup, MatrixAlgebras, CanonicalTensors, Query DecomposeAlgebra
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).
gl4 := MatrixAlgebras("Full",4, gl4R);
gl4 ≔ e1,e2=e2,e1,e3=e3,e1,e4=e4,e1,e5=−e5,e1,e9=−e9,e1,e13=−e13,e2,e5=e1−e6,e2,e6=e2,e2,e7=e3,e2,e8=e4,e2,e9=−e10,e2,e13=−e14,e3,e5=−e7,e3,e9=e1−e11,e3,e10=e2,e3,e11=e3,e3,e12=e4,e3,e13=−e15,e4,e5=−e8,e4,e9=−e12,e4,e13=e1−e16,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=e6−e11,e7,e11=e7,e7,e12=e8,e7,e14=−e15,e8,e10=−e12,e8,e13=e5,e8,e14=e6−e16,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=e11−e16,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
DGsetup(gl4);
Lie algebra: gl4R
Define the inner product on E4 with signature (4,0).
ChangeFrame(E4):
g := CanonicalTensors("Metric", "bas", 4, 0);
g ≔ dx1⁢dx1+dx2⁢dx2+dx3⁢dx3+dx4⁢dx4
Calculate the subalgebra of gl4R which preserves the inner product g.
so4subalgebra := MatrixAlgebras("Subalgebra", gl4R, [g]);
so4subalgebra ≔ e12−e21,e13−e31,e14−e41,e23−e32,e24−e42,e34−e43
Now we initialize so4, viewed as a Lie algebra of gl4, as a Lie algebra in its own right.
so4data := LieAlgebraData(so4subalgebra, so4);
so4data ≔ e1,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
DGsetup(so4data);
Lie algebra: so4
MultiplicationTable("LieTable");
We check that so4 is a semi-simple Lie algebra.
Query("Semisimple");
true
We can decompose so4 into a direct sum of two 3-dimensional algebras.
B := Decompose();
Alg1Data := LieAlgebraData(B[2],Alg1);
Alg1Data ≔ e1,e2=−2⁢e3,e1,e3=2⁢e2,e2,e3=−2⁢e1,e4,e5=2⁢e6,e4,e6=−2⁢e5,e5,e6=2⁢e4
DGsetup(Alg1Data);
Lie algebra: Alg1
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.
gA := CanonicalTensors("Metric", "bas", 3, 1);
gA ≔ dx1⁢dx1+dx2⁢dx2+dx3⁢dx3−dx4⁢dx4
gB := evalDG(dx1 &t dx1 + dx2 &t dx2 + dx3 &s dx4);
gB ≔ dx1⁢dx1+dx2⁢dx2+dx3⁢dx4+dx4⁢dx3
Here are the algebras as subalgebras of gl4R.
so31Asubalgebra := MatrixAlgebras("Subalgebra",gl4R,[gA]);
so31Asubalgebra ≔ e12−e21,e13−e31,e14+e41,e23−e32,e24+e42,e34+e43
so31Bsubalgebra := MatrixAlgebras("Subalgebra",gl4R,[gB]);
so31Bsubalgebra ≔ e12−e21,e13−e41,e14−e31,e23−e42,e24−e32,e33−e44
Initialize so31Asubalgebra and so31Bsubalgebra as abstract Lie algebras.
so31Adata := LieAlgebraData(so31Asubalgebra, so31A):
so31Bdata := LieAlgebraData(so31Asubalgebra, so31B):
DGsetup(so31Adata);
Lie algebra: so31A
DGsetup(so31Bdata,[f], [theta]);
Lie algebra: so31B
By inspection we see that these Lie algebras are isomorphic.
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).
Query("Semisimple"), Query("Indecomposable"), Query("AbsolutelyIndecomposable");
true,true,false
Finally, we construct the Lie algebra so(2,2). Here is the inner product we use
A := LinearAlgebra:-DiagonalMatrix([1,1,-1,-1]);
ChangeFrame(E4);
so31B
g := convert(A, DGtensor, [["cov_bas", "cov_bas"], []]);
g ≔ dx1⁢dx1+dx2⁢dx2−dx3⁢dx3−dx4⁢dx4
so22subalgebra := MatrixAlgebras("Subalgebra",gl4R,[g]);
so22subalgebra ≔ e12−e21,e13+e31,e14+e41,e23+e32,e24+e42,e34−e43
Now we initialize so22subalgebra, viewed as a Lie algebra of gl4, as a Lie algebra in its own right.
so22data := LieAlgebraData(so22subalgebra,so4);
so22data ≔ e1,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
DGsetup(so22data);
We check that so22 is a semi-simple but not a simple Lie algebra.
Query("Semisimple"), Query("Indecomposable");
true,false
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)
gl3 := MatrixAlgebras("Full",3, gl3R);
gl3 ≔ e1,e2=e2,e1,e3=e3,e1,e4=−e4,e1,e7=−e7,e2,e4=e1−e5,e2,e5=e2,e2,e6=e3,e2,e7=−e8,e3,e4=−e6,e3,e7=e1−e9,e3,e8=e2,e3,e9=e3,e4,e5=−e4,e4,e8=−e7,e5,e6=e6,e5,e8=−e8,e6,e7=e4,e6,e8=e5−e9,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
DGsetup(gl3);
Lie algebra: gl3R
Define the space E3 upon which gl3 acts and define the standard volume form on E3.
DGsetup([x1, x2, x3], E3):
nu := Tools:-DGvolume("form");
ν ≔ dx1⁢`^`⁢dx2⁢`^`⁢dx3
Define sl(3, R) as the subalgebra of gl(3, R).
sl3Rsubalgebra := MatrixAlgebras("Subalgebra", gl3R, [nu]);
sl3Rsubalgebra ≔ e11−e33,e12,e13,e21,e22−e33,e23,e31,e32
Define sl(3, R) as a Lie algebra in its own right.
sl3Rdata := LieAlgebraData(sl3Rsubalgebra, sl3R);
sl3Rdata ≔ e1,e2=e2,e1,e3=2⁢e3,e1,e4=−e4,e1,e6=e6,e1,e7=−2⁢e7,e1,e8=−e8,e2,e4=e1−e5,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=2⁢e6,e5,e7=−e7,e5,e8=−2⁢e8,e6,e7=e4,e6,e8=e5
DGsetup(sl3Rdata);
Lie algebra: sl3R
Check that sl(3, R) is a simple Lie algebra, over both the real and complex numbers.
true,true,true
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).
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.
DGsetup([x1, x2, x3, x4, x5, x6], E6):
J := CanonicalTensors("ComplexStructure","bas", E6);
J ≔ −dx1⁢D_x4−dx2⁢D_x5−dx3⁢D_x6+dx4⁢D_x1+dx5⁢D_x2+dx6⁢D_x3
gl3Csubalgebra := MatrixAlgebras("Subalgebra", gl6R, [J]);
gl3Csubalgebra ≔ e11+e44,e12+e45,e13+e46,e14−e41,e15−e42,e16−e43,e21+e54,e22+e55,e23+e56,e24−e51,e25−e52,e26−e53,e31+e64,e32+e65,e33+e66,e34−e61,e35−e62,e36−e63
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]).
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];
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
Calculate the structure equations and initialize:
gl3Cdata := LieAlgebraData(reorderBasis, gl3C);
gl3Cdata ≔ e1,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=e1−e5,e2,e5=e2,e2,e6=e3,e2,e7=−e8,e2,e10=−e11,e2,e13=e10−e14,e2,e14=e11,e2,e15=e12,e2,e16=−e17,e3,e4=−e6,e3,e7=e1−e9,e3,e8=e2,e3,e9=e3,e3,e10=−e12,e3,e13=−e15,e3,e16=e10−e18,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=e5−e9,e6,e9=e6,e6,e11=−e12,e6,e14=−e15,e6,e16=e13,e6,e17=e14−e18,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
DGsetup(gl3Cdata);
Lie algebra: gl3C
Now we show that the Lie algebra gl3C is isomorphic to the Lie algebra obtained by complexifying gl3R:
DGsetup(MatrixAlgebras("Full", 3, gl3R));
Alg1data := Complexify(gl3R, Alg1);
Alg1data ≔ e1,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=e1−e5,e2,e5=e2,e2,e6=e3,e2,e7=−e8,e2,e10=−e11,e2,e13=e10−e14,e2,e14=e11,e2,e15=e12,e2,e16=−e17,e3,e4=−e6,e3,e7=e1−e9,e3,e8=e2,e3,e9=e3,e3,e10=−e12,e3,e13=−e15,e3,e16=e10−e18,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=e5−e9,e6,e9=e6,e6,e11=−e12,e6,e14=−e15,e6,e16=e13,e6,e17=e14−e18,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
DGsetup(Alg1data);
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.
A := LinearAlgebra:-IdentityMatrix(18):
Query( Alg1,gl3C, A, "Homomorphism");
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).
First initialize gl(6, R)
DGsetup(MatrixAlgebras("Full", 6, gl6R)):
Define the vector space E6 on which gl(6, R) acts.
DGsetup([x1, x2, x3, y1, y2, y3], E6):
g := CanonicalTensors("Metric", "bas", 6,0):
J := CanonicalTensors("ComplexStructure","bas"):
u3subalgebra := MatrixAlgebras("Subalgebra",gl6R,[g, J]);
u3subalgebra ≔ e12−e21+e45−e54,e13−e31+e46−e64,e14−e41,e15+e24−e42−e51,e16+e34−e43−e61,e23−e32+e56−e65,e25−e52,e26+e35−e53−e62,e36−e63
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
gl3C := MatrixAlgebras("Subalgebra", gl6R, [J]);
gl3C ≔ e11+e44,e12+e45,e13+e46,e14−e41,e15−e42,e16−e43,e21+e54,e22+e55,e23+e56,e24−e51,e25−e52,e26−e53,e31+e64,e32+e65,e33+e66,e34−e61,e35−e62,e36−e63
so6 := MatrixAlgebras("Subalgebra", gl6R, [g]);
so6 ≔ e12−e21,e13−e31,e14−e41,e15−e51,e16−e61,e23−e32,e24−e42,e25−e52,e26−e62,e34−e43,e35−e53,e36−e63,e45−e54,e46−e64,e56−e65
newu3subalgebra := IntersectSubspaces([gl3C, so6]);
newu3subalgebra ≔ −e12+e21−e45+e54,−e36+e63,−e26−e35+e53+e62,−e16−e34+e43+e61,−e15−e24+e42+e51,−e14+e41,−e25+e52,−e13+e31−e46+e64,−e23+e32−e56+e65
The command DGequal can be used to check that the subalgebras u3 and newu3 are equal.
Tools:-DGequal(u3subalgebra,newu3subalgebra);
Calculate the structure equations for u(3).
u3data := LieAlgebraData(u3subalgebra,"u3");
u3data ≔ e1,e2=−e6,e1,e3=−e4,e1,e4=2⁢e3−2⁢e7,e1,e5=−e8,e1,e6=e2,e1,e7=e4,e1,e8=e5,e2,e3=−e5,e2,e4=−e8,e2,e5=2⁢e3−2⁢e9,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=2⁢e7−2⁢e9,e6,e9=e8,e7,e8=−e6,e8,e9=−e6
DGsetup(u3data):
C := Center();
C ≔ e3+e7+e9
L := QuotientAlgebra(C, [e1, e2, e3, e4, e5, e6, e7, e8], u3mod);
L ≔ e1,e2=−e6,e1,e3=−e4,e1,e4=2⁢e3−2⁢e7,e1,e5=−e8,e1,e6=e2,e1,e7=e4,e1,e8=e5,e2,e3=−e5,e2,e4=−e8,e2,e5=4⁢e3+2⁢e7,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=2⁢e3+4⁢e7,e7,e8=−e6
DGsetup(L);
Lie algebra: u3mod
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.
DGsetup(MatrixAlgebras("Full",6)):
Define the metric, the complex structure, the real and imaginary parts of the complex volume form.
g := CanonicalTensors("Metric", "bas",6,0):
J := CanonicalTensors("ComplexStructure", "bas");
J ≔ −dx1⁢D_y1−dx2⁢D_y2−dx3⁢D_y3+dy1⁢D_x1+dy2⁢D_x2+dy3⁢D_x3
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:
nuR:= (1/2) &mult ( nu &plus Tools:-DGmap(1,conjugate,nu));
nuR ≔ dx1⁢`^`⁢dx2⁢`^`⁢dx3−dx1⁢`^`⁢dy2⁢`^`⁢dy3+dx2⁢`^`⁢dy1⁢`^`⁢dy3−dx3⁢`^`⁢dy1⁢`^`⁢dy2
nuI:=(I/2) &mult ( nu &minus Tools:-DGmap(1,conjugate,nu));
nuI ≔ −dx1⁢`^`⁢dx2⁢`^`⁢dy3+dx1⁢`^`⁢dx3⁢`^`⁢dy2−dx2⁢`^`⁢dx3⁢`^`⁢dy1+dy1⁢`^`⁢dy2⁢`^`⁢dy3
Find the subalgebra of gl6R which fixes g, J, nuI and nuR.
su3subalgebra := MatrixAlgebras("Subalgebra",gl6R,[g, J, nuI, nuR]);
su3subalgebra ≔ e12−e21+e45−e54,e13−e31+e46−e64,e14−e36−e41+e63,e15+e24−e42−e51,e16+e34−e43−e61,e23−e32+e56−e65,e25−e36−e52+e63,e26+e35−e53−e62
su3data := LieAlgebraData(su3subalgebra, su3);
su3data ≔ e1,e2=−e6,e1,e3=−e4,e1,e4=2⁢e3−2⁢e7,e1,e5=−e8,e1,e6=e2,e1,e7=e4,e1,e8=e5,e2,e3=−2⁢e5,e2,e4=−e8,e2,e5=2⁢e3,e2,e6=−e1,e2,e7=−e5,e2,e8=e4,e3,e4=−e1,e3,e5=−2⁢e2,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=−2⁢e8,e6,e8=2⁢e7,e7,e8=−2⁢e6
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).
DGsetup(MatrixAlgebras("Full",8), 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
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]]);
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]]);
(Jm^2 +1), evalm(Km^2 +1), evalm(Jm &* Km + Km &*Jm);
Convert Jm and Km to type (1,1) tensors.
J := convert(Jm, DGtensor,[["cov_bas", "con_bas"],[]]);
J ≔ −dx1⁢D_x2−dy1⁢D_y2−du1⁢D_u2−dv1⁢D_v2+dx2⁢D_x1+dy2⁢D_y1+du2⁢D_u1+dv2⁢D_v1
K := convert(Km,DGtensor,[["cov_bas", "con_bas"],[]]);
K ≔ −dx1⁢D_u1−dy1⁢D_v1+du1⁢D_x1+dv1⁢D_y1+dx2⁢D_u2+dy2⁢D_v2−du2⁢D_x2−dv2⁢D_y2
gl2Hsubalgebra := MatrixAlgebras("Subalgebra", gl8R, [J, K]); gl2Hsubalgebra ≔ e11+e33+e55+e77,e12+e34+e56+e78,e13−e31+e57−e75,e14−e32+e58−e76,e15−e37−e51+e73,e16−e38−e52+e74,e17+e35−e53−e71,e18+e36−e54−e72,e21+e43+e65+e87,e22+e44+e66+e88,e23−e41+e67−e85,e24−e42+e68−e86,e25−e47−e61+e83,e26−e48−e62+e84,e27+e45−e63−e81,e28+e46−e64−e82
gl2Hsubalgebra ≔ e11+e33+e55+e77,e12+e34+e56+e78,e13−e31+e57−e75,e14−e32+e58−e76,e15−e37−e51+e73,e16−e38−e52+e74,e17+e35−e53−e71,e18+e36−e54−e72,e21+e43+e65+e87,e22+e44+e66+e88,e23−e41+e67−e85,e24−e42+e68−e86,e25−e47−e61+e83,e26−e48−e62+e84,e27+e45−e63−e81,e28+e46−e64−e82
gl2Hdata := LieAlgebraData(gl2Hsubalgebra, gl2H);
gl2Hdata ≔ e1,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=e1−e10,e2,e10=e2,e2,e11=e3−e12,e2,e12=e4,e2,e13=e5−e14,e2,e14=e6,e2,e15=e7−e16,e2,e16=e8,e3,e4=−e2,e3,e5=−2⁢e7,e3,e6=−e8,e3,e7=2⁢e5,e3,e8=e6,e3,e9=−e11,e3,e11=e9,e3,e13=−e15,e3,e15=e13,e4,e5=−e8,e4,e7=e6,e4,e9=e3−e12,e4,e10=e4,e4,e11=−e1+e10,e4,e12=−e2,e4,e13=−e7−e16,e4,e14=−e8,e4,e15=e5+e14,e4,e16=e6,e5,e6=−e2,e5,e7=−2⁢e3,e5,e8=−e4,e5,e9=−e13,e5,e11=e15,e5,e13=e9,e5,e15=−e11,e6,e7=−e4,e6,e9=e5−e14,e6,e10=e6,e6,e11=e7+e16,e6,e12=e8,e6,e13=−e1+e10,e6,e14=−e2,e6,e15=−e3−e12,e6,e16=−e4,e7,e8=−e2,e7,e9=−e15,e7,e11=−e13,e7,e13=e11,e7,e15=e9,e8,e9=e7−e16,e8,e10=e8,e8,e11=−e5−e14,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=−2⁢e16,e12,e15=e13,e12,e16=2⁢e14,e13,e14=e9,e13,e16=−e11,e14,e15=−e11,e14,e16=−2⁢e12,e15,e16=e9
DGsetup(gl2Hdata);
Lie algebra: gl2H
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.
DGsetup(MatrixAlgebras("Full",4),gl4R):
DGsetup([q1, p1, q2, p2], E4);
frame name: E4
Define the standard symplectic form on E4.
omega := CanonicalTensors("SymplecticForm", "bas");
ω ≔ dq1⁢`^`⁢dq2+dp1⁢`^`⁢dp2
sp2Asubalgebra := MatrixAlgebras("Subalgebra", gl4R, [omega]);
sp2Asubalgebra ≔ e11−e33,e12−e43,e13,e14+e23,e21−e34,e22−e44,e24,e31,e32+e41,e42
sp2Adata := LieAlgebraData(sp2Asubalgebra, sp2A);
sp2Adata ≔ e1,e2=e2,e1,e3=2⁢e3,e1,e4=e4,e1,e5=−e5,e1,e8=−2⁢e8,e1,e9=−e9,e2,e4=2⁢e3,e2,e5=e1−e6,e2,e6=e2,e2,e7=e4,e2,e8=−e9,e2,e9=−2⁢e10,e3,e5=−e4,e3,e8=e1,e3,e9=e2,e4,e5=−2⁢e7,e4,e6=−e4,e4,e8=e5,e4,e9=e1+e6,e4,e10=e2,e5,e6=−e5,e5,e9=−2⁢e8,e5,e10=−e9,e6,e7=2⁢e7,e6,e9=−e9,e6,e10=−2⁢e10,e7,e9=e5,e7,e10=e6
DGsetup(sp2Adata);
Lie algebra: sp2A
true,true
Now turn to the alternative formulation. We use the construction of gl(2, H) given in the previous example.
DGsetup([x1, y1, u1, v1, x2, y2, u2, v2], E8);
K1 := evalDG( -dx1 &t D_u1 - dy1 &t D_v1 +du1 &t D_x1 + dv1 &t D_y1);
K1 ≔ −dx1⁢D_u1−dy1⁢D_v1+du1⁢D_x1+dv1⁢D_y1
K2 := evalDG( -dx2 &t D_u2 - dy2 &t D_v2 +du2 &t D_x2 + dv2 &t D_y2);
K2 ≔ −dx2⁢D_u2−dy2⁢D_v2+du2⁢D_x2+dv2⁢D_y2
K := K1 &minus K2;
g := CanonicalTensors("Metric", "bas", 8, 0);
g ≔ dx1⁢dx1+dy1⁢dy1+du1⁢du1+dv1⁢dv1+dx2⁢dx2+dy2⁢dy2+du2⁢du2+dv2⁢dv2
sp2Bsubalgebra := MatrixAlgebras("Subalgebra", gl8R, [J, K, g]);
sp2Bsubalgebra ≔ e12−e21+e34−e43+e56−e65+e78−e87,e13−e31+e57−e75,e14+e23−e32−e41+e58+e67−e76−e85,e15−e37−e51+e73,e16+e25−e38−e47−e52−e61+e74+e83,e17+e35−e53−e71,e18+e27+e36+e45−e54−e63−e72−e81,e24−e42+e68−e86,e26−e48−e62+e84,e28+e46−e64−e82
sp2Bdata := LieAlgebraData(sp2Bsubalgebra, sp2B);
sp2Bdata ≔ e1,e2=−e3,e1,e3=2⁢e2−2⁢e8,e1,e4=−e5,e1,e5=2⁢e4−2⁢e9,e1,e6=−e7,e1,e7=2⁢e6−2⁢e10,e1,e8=e3,e1,e9=e5,e1,e10=e7,e2,e3=−e1,e2,e4=−2⁢e6,e2,e5=−e7,e2,e6=2⁢e4,e2,e7=e5,e3,e4=−e7,e3,e5=−2⁢e6−2⁢e10,e3,e6=e5,e3,e7=2⁢e4+2⁢e9,e3,e8=−e1,e3,e9=−e7,e3,e10=e5,e4,e5=−e1,e4,e6=−2⁢e2,e4,e7=−e3,e5,e6=−e3,e5,e7=−2⁢e2−2⁢e8,e5,e8=e7,e5,e9=−e1,e5,e10=−e3,e6,e7=−e1,e7,e8=−e5,e7,e9=e3,e7,e10=−e1,e8,e9=−2⁢e10,e8,e10=2⁢e9,e9,e10=−2⁢e8
DGsetup(sp2Bdata);
Lie algebra: sp2B
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).
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.
restart: with(DifferentialGeometry): with(LieAlgebras): with(Tensor):
DGsetup(MatrixAlgebras("Full",7), gl7R);
Lie algebra: gl7R
DGsetup([x1, x2, x3, x4, x5, x6, x7],E7):
g := CanonicalTensors("Metric", "bas", 7,0);
g ≔ dx1⁢dx1+dx2⁢dx2+dx3⁢dx3+dx4⁢dx4+dx5⁢dx5+dx6⁢dx6+dx7⁢dx7
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⁢`^`⁢dx5−dx1⁢`^`⁢dx6⁢`^`⁢dx7+dx2⁢`^`⁢dx4⁢`^`⁢dx6+dx2⁢`^`⁢dx5⁢`^`⁢dx7+dx3⁢`^`⁢dx4⁢`^`⁢dx7−dx3⁢`^`⁢dx5⁢`^`⁢dx6
g2subalgebra := MatrixAlgebras("Subalgebra",gl7R,[phi]);
g2subalgebra ≔ e12−e21+e56−e65,e13−e31+e57−e75,e14−e36−e41+e63,e15−e37−e51+e73,e16+e34−e43−e61,e17+e35−e53−e71,e23−e32+e67−e76,e24+e35−e42−e53,e25−e34+e43−e52,e26−e37−e62+e73,e27+e36−e63−e72,e45−e54+e67−e76,e46−e57−e64+e75,e47+e56−e65−e74
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).
S := MatrixAlgebras("Subalgebra", gl7R, [phi, g]);
S ≔ e12−e21+e56−e65,e13−e31+e57−e75,e14−e36−e41+e63,e15−e37−e51+e73,e16+e34−e43−e61,e17+e35−e53−e71,e23−e32+e67−e76,e24+e35−e42−e53,e25−e34+e43−e52,e26−e37−e62+e73,e27+e36−e63−e72,e45−e54+e67−e76,e46−e57−e64+e75,e47+e56−e65−e74
Tools:-DGequal(g2subalgebra, S);
The infinitesimal isotropy algebra is 8 dimensional.
g2IsotropyData := MatrixAlgebras("Subalgebra",gl7R,[phi,D_x1]);
g2IsotropyData ≔ e23−e32+e67−e76,e24+e35−e42−e53,e25−e34+e43−e52,e26−e37−e62+e73,e27+e36−e63−e72,e45−e54+e67−e76,e46−e57−e64+e75,e47+e56−e65−e74
nops(%);
8
g2data := LieAlgebraData(g2subalgebra, g2);
g2data ≔ e1,e2=−e7,e1,e3=−e8,e1,e4=−e5−e9,e1,e5=e4−e10,e1,e6=−e11,e1,e7=e2,e1,e8=e3,e1,e9=e4−e10,e1,e10=e5+e9,e1,e11=e6,e1,e12=−e13,e1,e13=e12,e2,e3=−e5,e2,e4=−2⁢e6,e2,e5=e3,e2,e6=2⁢e4,e2,e7=−e1,e2,e8=e4,e2,e9=−e3−e11,e2,e10=−e6,e2,e11=e5+e9,e2,e12=−e14,e2,e14=e12,e3,e4=−e12,e3,e5=−2⁢e2−2⁢e13,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=−2⁢e2,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=e6−e8,e5,e8=e7−e12,e5,e10=−e1+e14,e5,e11=−e2−e13,e5,e12=e6,e5,e13=−e3,e5,e14=−e4,e6,e7=−e5−e9,e6,e9=e7−e12,e6,e10=e2,e6,e11=−e1,e6,e12=−e5,e6,e13=e4,e6,e14=−e3,e7,e8=e9,e7,e9=−e8,e7,e10=−2⁢e11,e7,e11=2⁢e10,e7,e13=−e14,e7,e14=e13,e8,e9=2⁢e7−2⁢e12,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=−2⁢e7,e10,e12=e11,e10,e13=−e8,e10,e14=−e9,e11,e12=−e10,e11,e13=e9,e11,e14=−e8,e12,e13=−2⁢e14,e12,e14=2⁢e13,e13,e14=−2⁢e12
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:
DGsetup([v1, v3, v4, w1, w3, w4, u], 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) );
ω ≔ 2⁢dv1⁢`^`⁢dv3⁢`^`⁢dw4+dv1⁢`^`⁢dw1⁢`^`⁢du+dv3⁢`^`⁢dw3⁢`^`⁢du+2⁢dv4⁢`^`⁢dw1⁢`^`⁢dw3−dv4⁢`^`⁢dw4⁢`^`⁢du
g2subalgebra_alternative := MatrixAlgebras("Subalgebra", gl7R, [omega]);
g2subalgebra_alternative ≔ e11+e33−e44−e66,e12−e54,e13−2⁢e57−e64−e72,e15−e24+2⁢e37+e76,e16−e34,e17+e322−e562+e742,e21−e45,e22+e33−e55−e66,e23+2⁢e47−e65+e71,e26−e35,e27−e312+e462+e752,e42−e51−2⁢e67−e73,e43−e61,e53−e62
nops(g2subalgebra_alternative);
14
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
restart: with(DifferentialGeometry):
Conj := proc(A) local i, n; n := nops(A); [A[1], seq(-A[i], i=2..n)] end;
Conj ≔ procAlocali,n;n ≔ nops⁡A;A[1],seq⁡−A[i],i=2..nend proc
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;
InnerProd ≔ procA,Blocali;add⁡A[i]*B[i],i=1..nops⁡Aend proc
phi := (x,y,z)-> expand(InnerProd(x,Mult(y,z)));
φ ≔ x,y,z→expand⁡InnerProd⁡x,Mult⁡y,z
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]);
−d⁢b+a⁢c,b⁢c+d⁢a
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
Mult(i, j), Mult(k, i), Mult(j ,k);
0,0,0,1,0,0,1,0,0,1,0,0
Mult(j , i), Mult(i, k), Mult(k, j);
0,0,0,−1,0,0,−1,0,0,−1,0,0
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
Mult(alpha, Mult(beta, e5)) - Mult(Mult(beta, alpha), e5);
Mult(Mult(alpha, e5), beta) - Mult(Mult(alpha, Conj(beta)), e5);
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
Check that phi is alternating on imaginary octonions.
im_x:=[0,seq(x||i,i = 1..7)];
im_x ≔ 0,x1,x2,x3,x4,x5,x6,x7
im_y:=[0,seq(y||i,i = 1..7)];
im_y ≔ 0,y1,y2,y3,y4,y5,y6,y7
im_z:=[0,seq(z||i,i = 1..7)];
im_z ≔ 0,z1,z2,z3,z4,z5,z6,z7
phi(im_x,im_y,im_z) + phi(im_x,im_z,im_y);
0
phi(im_x,im_y,im_z) +phi(im_y,im_x,im_z);
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;
Check_phi ≔ proclocali,j,k,a;forito8doforjfromi+1to8doforkfromj+1to8doa ≔ φ⁡e||i,e||j,e||k;ifa<>0thenprint⁡i,j,k,aend ifend doend doend doend proc
Check_phi();
2,3,4,1
2,5,6,1
2,7,8,−1
3,5,7,1
3,6,8,1
4,5,8,1
4,6,7,−1
with(DifferentialGeometry):with(Tools):
DGsetup([x1, x2, x3, x4, x5, x6, x7], E7):
new_phi := AssociativeForm();
new_phi ≔ dx2⁢`^`⁢dx3⁢`^`⁢dx4+dx2⁢`^`⁢dx5⁢`^`⁢dx6+dx3⁢`^`⁢dx5⁢`^`⁢dx7−dx4⁢`^`⁢dx6⁢`^`⁢dx7
psi := Transformation(E7,E7,[x1= x1,x2 = x2,x3 = x3,x4 = x4,x5 =-x7,x7=-x5,x6 =x6]);
ψ ≔ x1=x1,x2=x2,x3=x3,x4=x4,x5=−x7,x6=x6,x7=−x5
newer_phi:= Pullback(psi,new_phi);
newer_phi ≔ dx2⁢`^`⁢dx3⁢`^`⁢dx4+dx2⁢`^`⁢dx6⁢`^`⁢dx7−dx3⁢`^`⁢dx5⁢`^`⁢dx7−dx4⁢`^`⁢dx5⁢`^`⁢dx6
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]));
φ ≔ dx1⁢`^`⁢dx2⁢`^`⁢dx3−dx1⁢`^`⁢dx4⁢`^`⁢dx7−dx1⁢`^`⁢dx5⁢`^`⁢dx6+dx2⁢`^`⁢dx4⁢`^`⁢dx6−dx2⁢`^`⁢dx5⁢`^`⁢dx7−dx3⁢`^`⁢dx4⁢`^`⁢dx5−dx3⁢`^`⁢dx6⁢`^`⁢dx7
Download Help Document