Function: Cliff5[beta_plus], Cliff5[beta_minus] - computes scalar product in spinor ideals
Calling Sequence:
beta_plus(psi, phi, f, 's') - computes a scalar product of two spinors 'psi' and 'phi' in S=Cl(Q)f when one of them is subject to reversion anti-automorphism where S is a spinor ideal in Cl(Q) generated by a primitive idempotent 'f'; argument 's' is optional
beta_minus(psi, phi, f, 's') - computes a scalar product of two spinors 'psi' and 'phi' in S=Cl(Q)f when one of them is subject to conjugation anti-automorphism where S is a spinor ideal in Cl(Q) generated by a primitive idempotent 'f'; argument 's' is optional
Parameters:
psi, phi - elements in S=Cl(Q)f which are of one of the following types: `type/cliscalar`, `type/clibasmon`, `type/climon`, or `type/clipolynom`
f - element of `type/primitiveidemp`, that is, a primitive idempotent in Cl(Q)
's' (optional) - optional argument of `type/name` (it must be unevaluatted name)
Description:
These two procedures give beta_{+} and beta_{-} scalar products on S=Cl(Q)f considered as right K-modules that have been described in [1] and [4].
The first two arguments are spinors 'psi' and 'phi' which are expected to be of type one of the types `type/cliscalar` , `type/clibasmon` , `type/climon` , or `type/clipolynom` with the most general one being the last one. Procedures reversion and conjugation realize operations of reversion and conjugation in Cl(Q) (more generally in Cl(V,B)), where Q is a quadratic form defined in V, that is, Cl(Q)=Cl(V,Q). The third argument is a primitive idempotent f in Cl(Q), that is, an element of `type/primitiveidemp' . This idempotent, as it is explained below, can be arbitrary in case when K = R, while there are some restrictions what it can be when K = C and K = H.
The fourth optional argument 's' is of `type/name' : it will be a placeholder for an invertible element s in Cl(Q) such that cmul(f, s) = cmul(s, auto(f)) for a simple Clifford algebra Cl(Q) (when the signature of Q is (p,q) and p - q <> 1 mod 4), or cmul(g, s) = cmul(g, auto(g)) for a semisimple Clifford algebra Cl(Q) (when the signature of Q is (p,q) and p - q = 1 mod 4). Here, cmul denotes Clifford product in Cl(Q), g = f + conjugation(f), and 'auto' is either 'reversion' or 'conjugation'. Invertible element s is needed so that cmul( s, auto(psi), phi) belongs to K, K^ or K + K^, depending on the chosen (anti-) automorphism and whether Cl(Q) is simple or semisimple. Here K is a subalgebra of Cl(Q) isomorphic with the reals, complex numbers, or quaternions depending on the signature of Q (for more information see [1]) and the hat in K^ denotes grade involution in Cl(Q). The grade involution is computed with the procedure gradeinv . Upon exiting, 'beta' stores the value of s under the name 's' supplied by the user. These special elements s in Cl(Q) are called 'purespinors'. It must be entered as 's', that is, as an unevaluated name. Otherwise, an error message will appear if s has already been assigned some other basis monomial as a purespinor since basis mononials are protected in 'CLIFFORD'.
Procedure Kfield computes a basis for the ring K, while procedures spinorKbasis and spinorKrepr compute a K-basis in S = Cl(Q)f and a spinor representation of Cl(Q) in S, respectively.
For more information on symbolic computations in Clifford algebras, see [2] and [3].
Faithful matrix representations of simple and semi-simple Clifford algebras are stored in a library file and can be retrieved with the procedure clidata . Use procedure all_sigs to display signatures and basic structure of Clifford algebras in dimensions 1 through 9.
References:
[1] R. Ablamowicz, "Spinor representations of Clifford algebras: A symbolic approach", Computer Physics Communications Thematic Issue ‘‘Computer Algebra in Physics Research’’, Vol.
115
(1998), Numbers 2--3, pages 510--535.
[2] R. Ablamowicz, P. Lounesto, and J.M. Parra, eds., "Clifford Algebras with Numeric and Symbolic Computations", Birkhauser, Boston, 1996.
[3] R. Ablamowicz and P. Lounesto, "On Clifford algebras of a bilinear form with an antisymmetric part", in: R. Ablamowicz, P. Lounesto, and J.M. Parra, eds., "On Clifford Algebras with Numeric and Symbolic Computations", Birkhauser, Boston, 1996, page 167--188.
[4] P. Lounesto, "Scalar products of spinors and an extension of Brauer-Wall groups", Foundations of Physics, Vol.
11
, Nos. 9/10 (1981) pages 721--740.
Examples:
> restart:with(Cliff5):with(linalg):
Warning, new definition for norm
Warning, new definition for trace
Let's display signatures of simple and semi-simple Clifford algebras in dimensions 1 through 9 which are isomorphic to rings of matrices over R and over the double real field R+R, respectively:
> all_sigs(1..9,'real','simple');
> all_sigs(1..9,'real','semisimple');
Let's display signatures of simple Clifford algebras in dimensions 1 through 9 which are isomorphic to rings of matrices over the complex field C. There are no semi-simple algebras in this case:
> all_sigs(1..9,'complex','simple');
> all_sigs(1..9,'complex','semisimple');
Let's display signatures of simple and semi-simple Clifford algebras in dimensions 1 through 9 which are isomorphic to rings of matrices over quaternions H and over the double quaternionic field H+H, respectively:
> all_sigs(1..9,'quat','simple');
> all_sigs(1..9,'quat','semisimple');
More information about any Clifford algebra Cl(Q) of the quadratic form of signature (p,q), 1<= p+q <= 9, can be displayed using procedure clidata as follows:
> clidata([2,0]); #Clifford algebra of the Ecuclidean plane R^2
> clidata([3,0]); #Clifford algebra of the Ecuclidean space R^3
> clidata([1,3]); #Clifford algebra of the Minkowski space
> clidata([3,1]); #Clifford algebra of the Minkowski space
>
In order to view matrices representing 1-vectors {e1,e2,e3,..., en} in Cl(V,Q), dim V = n, use procedure matKrepr . For example, let's see matrices for the above-listed algebras and for the semi-simple algebra Cl(Cl(2,1) = Mat(2,2,R+R). These last matrices, with entries in the double field R+R are of `type/dfmatrix` and have been precomputed.
> matKrepr([2,0]);
> matKrepr([3,0]); #Pauli matrices
> matKrepr([1,3]);
> matKrepr([3,1]); #Dirac matrices
> matKrepr([2,1]);
For more information how to find spinor representations in higher dimensions, see help pages for
Kfield
,
gradeinv
,
marKrepr
,
minimalideal
,
spinorKbasis
,
spinorKrepr
. See also
cbasis
,
clidata
,
`type/primitiveidemp`
,
`type/idempotent`
.
>
Example 1:
Let's compute the two bilinear forms beta_{+} and beta_{-} on S = Cl(Q)f where Cl(Q)=Cl(3,0) is the Clifford algebra of the Euclidean space R^3. To shorten output, procedure
makealiases
is used.
>
restart:with(Cliff5):with(linalg):
B:=diag(1,1,1); #define the diagonal form B for Cl(3,0)
Warning, new definition for norm
Warning, new definition for trace
> dim:=coldim(B):eval(makealiases(dim)):
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> for i from 1 to nops(data[7]) do f.i:=data[7][i] &c f od;
> Kbasis:=data[6]; #here K = C
Let's define arbitrary (complex) spinor coefficients psi1, psi2, phi1, and phi2 for two spinors 'psi' and 'phi' in S = Cl(Q)f = C^2. Notice, that psi1, psi2, phi1, and phi2 belong to a subalgebra K of Cl(Q) spanned by {Id, e2we3} that is isomorphic to C since (e2we3)^2 = -Id. Recall also that the left minimal ideal S = Cl(D)f is a RIGHT K-module. That's why the 'complex' coefficients must be written on the RIGHT of the spinor basis elements f1 and f2 in S:
> psi1:=psi11 * Id + psi12 * e23;psi2:=psi21 * Id + psi22 * e23; #entries in K
> phi1:=phi11 * Id + phi12 * e23;phi2:=phi21 * Id + phi22 * e23; #entries in K
>
psi:='f1 &c psi1' + 'f2 &c psi2'; #here psi1 ... are 'complex' components of psi
phi:='f1 &c phi1' + 'f2 &c phi2'; #here phi1 ... are 'complex' components of phi
>
Now, we compute beta_{+} on 'psi' and 'phi', while we store the purespinor under the name 'purespinor1'. Notice, that beta_{+} is invariant under the unitary group U(2) (for more information see [1], [4]).
> x:=beta_plus(psi,phi,f,'purespinor1');purespinor1; #beta_plus is invariant under U(2)
> psi1c:=reversion(psi1);psi2c:=reversion(psi2);
> clicollect(psi1c &c phi1 + psi2c &c phi2); #this equals x and is invariant under U(2)
>
Now, we compute beta_{-} on 'psi' and 'phi', while we store the purespinor under the name 'purespinor2'. Notice, that beta_{-} is invariant under the complex symplectic group Sp(2,C) (for more information see [1], [4]).
> y:=beta_minus(psi,phi,f,'purespinor2');purespinor2; #beta_minus is invariant under Sp(2,C)
> clicollect(psi1 &c phi2 - psi2 &c phi1); #this equals y and is invariant under Sp(2,C)
>
Observe that 'purespinor1' and 'purespinor2' have the desired commuting properties with the idempotent f:
> u:=purespinor1; f &c u - u &c reversion(f);
> u:=purespinor2; f &c u - u &c conjugation(f);
Testing error message since K = span{Id, e23} <> R:
> f1:=1/2*Id+1/2*e2;
> type(f1,primitiveidemp);
> beta_plus(psi,phi,f1);
Error, (in beta_plus) in complex K = C and quaternionic K = H cases, primitive idempotent must be plus/minus of clidata(B)[4] or its grade involution
> beta_minus(psi,phi,f1);
Error, (in beta_minus) in complex K = C and quaternionic K = H cases, primitive idempotent must be plus/minus of clidata(B)[4] or its grade involution
The error message is returned due to the fact that in the case when K = C or K = H, the only flexibility in these two procedures in accepting a different primitive idempotent 'f ' than the one stored under clidata(B)[4] is that 'f' must equal plus or minus the stored idempotent, or its grade involution. In the real case when K = R, this doesn't matter and the user can enter any primitive idempotent.
> f:=clidata(B)[4];
> evalb(f1=f),evalb(f1=-f),evalb(f1=gradeinv(f)),evalb(f1=-gradeinv(f));
This requirement has to do with the fact that both procedures beta_{+} and beta_{-} use pre-computed basis for K which contains two or four elements depending whether K = C or K = H. Certainly, this basis depends on the choice of the idempotent! In general, such basis for K can be computed for any primitive idempotent f with the procedure Kbasis .
> 'K'=clidata()[6];
>
Example 2:
Scalar products of spinors of the Clifford algebra Cl(1,3) that is isomorphic to H(2).
>
restart:with(Cliff5):with(linalg):
B:=linalg[diag](1,-1,-1,-1): #define the bilinear form B for Cl(1,3)
Warning, new definition for norm
Warning, new definition for trace
> dim:=coldim(B):eval(makealiases(dim)):
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> for i from 1 to nops(data[7]) do f.i:=data[7][i] &c f od;
Elements f1 and f2 computed above give a K-basis in S = Cl(1,3)f where K = span{Id,e2,e3,e2we3} is a subalgebra of Cl(1,3) isomorphic with the quaternionic ring H. The elements spanning K are stored in data[6] displayed above. One can really check that these elements form a quaternionic basis and form a list of `type/genquatbasis` :
> Kbasis:=data[6]; #here K = H
> type(Kbasis,genquatbasis);
It is also possible to check it directly by computing all possible products and then displaying them in a matrix:
> M:=matrix(4,4,(i,j)->cmul(Kbasis[i],Kbasis[j]));
Like in the example above, we first define arbitrary quaternionic coefficients for two spinors 'psi' and 'phi' in S = Cl(1,3)f:
>
psi1:=psi11 * Id + psi12 * e2 + psi13 * e3 + psi14 * e23;#first coefficient of psi in K
psi2:=psi21 * Id + psi22 * e2 + psi23 * e3 + psi24 * e23;#second coefficient of psi in K
>
phi1:=phi11 * Id + phi12 * e2 + phi13 * e3 + phi14 * e23;#first coefficient of phi in K
phi2:=phi21 * Id + phi22 * e2 + phi23 * e3 + phi24 * e23;#second coefficient of phi in K
Now, we define spinors 'psi' and 'phi':
>
psi:='f1 &c psi1' + 'f2 &c psi2'; #here psi1 ... are quaternionic components of psi
phi:='f1 &c phi1' + 'f2 &c phi2'; #here phi1 ... are quaternionic components of phi
The beta_{+} and the beta_{-} forms on S x S are invariant under the symplectic group Sp(2,2) as can be checked directly from the output below:
> x:=beta_plus(psi,phi,f,'purespinor1');purespinor1; #beta_plus is invariant under Sp(2,2)
> y:=beta_minus(psi,phi,f,'purespinor2');purespinor2; #beta_minus is invariant under Sp(2,2)
>
Example 3:
Let's compute the two bilinear forms beta_{+} and beta_{-} on S = Cl(Q)f where Cl(Q)=Cl(2,3) (complexification of Cl(1,3)) is the Clifford algebra of the de Sitter space of signature (2,3). Cl(2,3) is isomorphic to C(4) and is a complexification of Cl(1,3).
> restart:with(Cliff5):dim:=5:eval(makealiases(dim)):
> B:=linalg[diag](1,1,-1,-1,-1):#define form B for Cl(2,3)
> data:=clidata(B); #retrieve and display data about Cl(2,3)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
Here are the matrices representing basis 1-monomials of Cl(2,3):
> matKrepr(Bsignature());
for i from 1 to 4 do f.i:=data[7][i] &c f od;
Thus, a spinor psi from S=Cl(2,3)f is a four component vector with real entries. It can be written in terms of the basis [f1,f2,f3,f4] and its complex entries in K = <Id>_R +<e3>_R as follows:
> psi1:=psi11+psi12*e3:psi2:=psi21+psi22*e3:psi3:=psi31+psi32*e3:psi4:=psi41+psi42*e3:
> phi1:=phi11+phi12*e3:phi2:=phi21+phi22*e3:phi3:=phi31+phi32*e3:phi4:=phi41+phi42*e3:
Let's define now arbitrary spinors 'psi' and 'phi' in S considered as the RIGHT K-module:
>
psi:='f1 &c psi1' + 'f2 &c psi2' + 'f3 &c psi3' + 'f4 &c psi4';
phi:='f1 &c phi1' + 'f2 &c phi2' + 'f3 &c phi3' + 'f4 &c phi4';
The two scalat forms beta_{+} and beta_{-} are:
> x:=beta_plus(psi,phi,f,'s1');s1; #beta_plus is invariant under Sp(4,C)
> y:=beta_minus(psi,phi,f,'s2');s2; #beta_minus is invariant under U(2,2)
We can verify that the automorphism group of beta_{-} is U(2,2) as follows:
> psi1c:=gradeinv(psi1):psi2c:=gradeinv(psi2):psi3c:=gradeinv(psi3):psi4c:=gradeinv(psi4):
> y1:=clicollect(cmul(psi4c,phi1)+cmul(psi2c,phi3)-cmul(psi3c,phi2)-cmul(psi1c,phi4));
> simplify(y1-y);
>
Example 4: Scalar products in the spinor spaces of the Clifford algebra Cl(3,1), that is isomorphic to R(4), are both invariant under the symplectic group Sp(4).
> restart:with(Cliff5):dim:=4:eval(makealiases(dim)):
> B:=linalg[diag](1,1,1,-1):#define form B for Cl(3,1)
> data:=clidata(B); #retrieve and display data about Cl(3,1)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
Here are the matrices representing some basis monomials of Cl(B). Those that represent the 1-vectors are usually referred to as Dirac gamma matrices (since 'gamma' is a protected Maple name, we will use here 'g' instead):
> matKrepr(Bsignature());
Let's find matrices representing the four basis vectors in S:
> for i from 1 to 4 do f.i:=data[7][i] &c f od;
Thus, a spinor psi from S=Cl(3,1)f is a four component vector with real entries. It can be written in terms of the basis [f1,f2,f3,f4] and its real entries in K = <Id>_R as follows:
>
psi:= psi1 * 'f1' + psi2 * 'f2' + psi3 * 'f3' + psi4 * 'f4';
phi:= phi1 * 'f1' + phi2 * 'f2' + phi3 * 'f3' + phi4 * 'f4';
> x:=beta_plus(psi,phi,f,'s1');s1; #automorphism group of beta_plus is Sp(4,R)
> y:=beta_minus(psi,phi,f,'s2');s2; #automorphism group of beta_minus is Sp(4,R)
Since the coefficients of 'psi' and 'phi' are here assumed to be real, it doesn't matter that they were written on the left side of the basis elements [f1,f2,f3,f4].
>
Example 5: Let's consider finally the semi-simple case of Cl(2,1) = Mat(2,R) + Mat(2,R). Here, we will have to deal with pairs of spinor spinor spaces S and S^ where S^ is a spinor space of spinors of the form gradeinv(psi) where gradeinv is the grade involution in Cl(2,1) and 'psi' is a spinor from S = Cl(1,2)f.
> restart:with(Cliff5):with(linalg):_shortcut_in_spinorKrepr:=false:
Warning, new definition for norm
Warning, new definition for trace
> B:=diag(1$2,-1$1):dim:=coldim(B):eval(makealiases(dim)):clibasis:=cbasis(dim):
Display information stored:
> matKrepr(Bsignature());
> data:=clidata();f:=data[4];
We will need now one spinot basis for S and for S^:
>
K_basis1:=[seq(data[7][i] &c f,i=1..nops(data[7]))];#spinor basis in S
K_basis2:=map(gradeinv,K_basis1);#spinor basis in gradeinv(S) or S hat
> FBgens1:=data[6];FBgens2:=map(gradeinv,FBgens1);#generators for K and K hat
Although the basis elements e1, e2, e3 already have their matrices with entries in R+R pre-computed and displayed above, we show how they were computed. First, we need to find pairs of matrices representing e1, e2, and e3 respectively
>
for i from 1 to dim do
M[i],N[i]:=spinorKrepr(e.i,K_basis1,FBgens1,'left'),spinorKrepr(e.i,K_basis2,FBgens2,'left');
od;
By combining them pairwise, we get matrices representing faithfully e1, e2, and e3 in Mat(2,2,R+R). This operation can be done with cdfmatrix :
> E[1]:=cdfmatrix(M[1],N[1]); #matrix for e1
> E[2]:=cdfmatrix(M[2],N[2]); #matrix for e2
> E[3]:=cdfmatrix(M[3],N[3]); #matrix for e3
Notice that these matrices observe appropriate commutation relations:
> mdfmatrix(E[1],E[1]); #square of E[1] or e1
> mdfmatrix(E[2],E[2]); #square of E[2] or e2
> mdfmatrix(E[3],E[3]); #square of E[3] or e3
> adfmatrix(mdfmatrix(E[1],E[2]),mdfmatrix(E[2],E[1])); #product cmul(e1,e2)+cmul(e2,e1)
> adfmatrix(mdfmatrix(E[1],E[3]),mdfmatrix(E[3],E[1])); #product cmul(e1,e3)+cmul(e3,e1)
> adfmatrix(mdfmatrix(E[2],E[3]),mdfmatrix(E[3],E[2])); #product cmul(e2,e3)+cmul(e3,e2)
>
Let's make assignment of the basis elements for S and S^:
> f1:=K_basis1[1];f2:=K_basis1[2]; #basis in S
> g1:=K_basis2[1];g2:=-K_basis2[2]; #basis in S hat
That is, S = span{f1,f2} and S^ = span{g1,g2}. Thus, spinors in S = Cl(Q)f = R^2 can be displayed as follows:
>
psi:='f1' &c (psi1 &c Id) + 'f2' &c (psi2 &c Id);
phi:='f1' &c (phi1 &c Id) + 'f2' &c (phi2 &c Id);
The matrix representation of 'psi' and 'phi' will then be:
> matKrepr(psi),matKrepr(phi);
The two scalar forms in S are then:
> beta_plus(psi,phi,f1,'s1');s1; #beta_plus is invariant under GL(2,R)
> beta_minus(psi,phi,f1,'s2');s2; #beta_minus is invariant under Sp(2,R)
Verification:
> out1:=clicollect(s2 &c conjugation(psi) &c phi &c f1);
> psiphi:=psi1*phi2-psi2*phi1;
> out2:=clicollect(expand(psiphi*f1));
> out1-out2;
Spinors in S^ = (Cl(Q)f)^ = R^2 can be displayed as follows::
>
psi:='g1' &c (psi1 &c Id) + 'g2' &c (psi2 &c Id);
phi:='g1' &c (phi1 &c Id) + 'g2' &c (phi2 &c Id);
> matKrepr(psi),matKrepr(phi);
>
The scalar forms then are:
> beta_plus(psi,phi,g1); #beta_plus is invariant under GL(2,R)
> beta_minus(psi,phi,g1,'s'); #invariant under Sp(2,R)
Verification:
> s; #purespinor
> out1:=clicollect(s &c conjugation(psi) &c phi &c g1); #all in S hat
> out2:=clicollect(expand(psiphi*g1));
> out1-out2;
>
See Also: Cliff5[`type/dfmatrix`] , Cliff5[ddfmatrix] , Cliff5[cdfmatrix]
(c) Copyright October 8, 1995, by Rafal Ablamowicz & Bertfried Fauser, all rights reserved.
Last modified: December 26, 2001, RA/BF.