Function: Cliff5[reversion] - reversion anti-automorphism in a Clifford algebra Cl(B) or Cl(K)
Calling Sequence:
reversion(p);
reversion(p,K);
Parameters:
p - expression of the type 'cliscalar' or 'clipolynom'
K - (optional) argument of type name, symbol, matrix, or array, or `&*`(numeric,{name,symbol,array,matrix})
Description:
Procedure 'reversion' calculates reversion in the Clifford algebra Cl(K). When no optional argument is used, it operates in Cl(B), that is, the default value of K is B. It is linear in its argument and it is always a Clifford algebra anti-automorphism. See `type/cliscalar` and `type/clipolynom` for more help on the types.
When the antisymmetric part of B is not zero, 'reversion' does not preserve the multilinear structure of the algebra because it mixes grades, i.e., it does not preserve the gradation of the exterior algebra.
Procedure of 'reversion' is an automorphism of Cl(B) of order 2.
This procedure may also be applied to matrices with entries in a Clifford algebra in which case it is applied to each matrix entry.
Examples:
> restart:with(Cliff5):
Example 1: Reversing with respect to the default bilinear form B in Cl(B):
> reversion((2+alpha)*Id);
> reversion(e1we2); #note the off-diagonal entries of B
> reversion(e2we1); #note the off-diagonal entries of B
> reversion(e1we2we3):clicollect(%);
>
The same but reversion is now performed with respect to some other form K and -K:
>
reversion((2+alpha)*Id,K);
reversion((2+alpha)*Id,-K);
>
reversion(e1we2,K); #note the off-diagonal entries of K
reversion(e1we2,-K); #note the off-diagonal entries of K
>
reversion(e2we1,K); #note the off-diagonal entries of K
reversion(e2we1,-K); #note the off-diagonal entries of K
>
reversion(e1we2we3,K):clicollect(%);
reversion(e1we2we3,-K):clicollect(%);
> u:=4+Pi*e1we4+2*e1we2we3:v:=a+3*e2we4+e3:
Notice that when the bilinear form B is not symmetric, 'reversion' does not preserve the gradation in Cl(B):
> revv:=clicollect(reversion(v));
> revu:=clicollect(reversion(u));
However, 'reversion' still is an anti-automorphism in Cl(B):
> uv:=cmul(u,v); #compute product of u and v in Cl(B)
> evalb(expand(reversion(uv)-cmul(revv,revu))=0);
The same computation but in Cl(K):
>
revv:=clicollect(reversion(v,K));
revu:=clicollect(reversion(u,K));
uv:=cmul[K](u,v); #compute product of u and v in Cl(K)
evalb(expand(reversion(uv,K)-cmul[K](revv,revu))=0);
Reversion when matrix has been assigned to a name:
> B,K:=matrix(2,2,[a,b,c,d]),matrix(2,2,[a,0,0,d]);
> u:=4+Pi*e1we2+2*e1+e2we1;
> reversion(u,B);
> reversion(u,-B);
> reversion(u,2*B);
> reversion(u,-3*K);
> reversion(u,K);
Example 2: When the bilinear form B is diagonal, the reversion does preserve the gradation in Cl(Q) and it is also an anti-automorphism in Cl(Q):
> B:=linalg[diag](1,1,-1):
>
u:=4+Pi*e1we3+2*e1we2we3;revu:=reversion(u);
v:=a*e1+3*e2we3+e3;revv:=reversion(v);
> clicollect(reversion(cmulQ(u,v)));
> cmulQ(revv,revu);
> M:=linalg[matrix](2,2,[3+e2we3,2-3*e1we2we3,2*Id,e1we2-e3we2]);
> reversion(M);
>
Example 3: Let's see some examples how we can compute reversion in Cl(B) with a specific matrix assigned.
>
K:='K':g:='g':B:='B':F:='F':
reversion(e1we2);
reversion(e1we2,X);
reversion(e1we2,-X);
reversion(e1we2,B);
>
reversion(2*Pi*e1we2);
reversion(2*Pi*e1we2,X);
reversion(2*Pi*e1we2,B);
>
reversion(2*e1we2+3-2*e4we5-eiwej);
reversion(2*e1we2+3-2*e4we5-eiwej,B);
reversion(2*e1we2+3-2*e4we5-eiwej,K);
Now, let's assign a specific matrix to B:
>
dim_V:=3:
matF:=linalg[matrix](dim_V,dim_V,(i,j)->if i=j then RETURN(0) elif i<j then RETURN(F[i,j]) else RETURN(-F[j,i]) fi);
matg:=linalg[matrix](dim_V,dim_V,(i,j)-> if i<j then RETURN(g[i,j]) else RETURN(g[j,i]) fi);
matB:=evalm(matg+matF);
> cbas:=cbasis(dim_V);
>
for x in cbas do
print(`x = `,x);
'reversion(x)'=reversion(x);
'reversion(x,-matB)'=reversion(x,-matB);
'reversion(x,-matF)'=reversion(x,-matF);
'reversion(x,-matg)'=reversion(x,-matg);
print(`***************`);
od;
> M:=matrix(2,2,[2*e1we2+2*e4-eiwej+4*Id,e3-4*e5,2-4*e1we2,1+2*Pi*e3we2]);
> reversion(M);
> reversion(M,X);
> reversion(M,-X);
> reversion(M,g);
Note that since the M[1,1] enrty in the matrix M contained a Grassmann basis monomial eiwej with unassigned indices i and j, the result also containg these indices as in matg[i,j].
>
Example 4: The reversion procedure in Cl(B) can be extended and applied to Clifford polynomials expressed in terms of the Clifford basis monomials, or, expressions of `type/cliprod` . To extend 'reversion' to such terms, user needs to load in package 'Cli5plus' :
> restart:with(Cliff5):with(Cli5plus);
Warning, new definition for init
Warning, definitions for type/climon and type/clipolynom now include &C and &C[K]. Type ?cliprod for help.
Procedure 'clirev' in that package extends 'reversion'. That is, macro(reversion=clirev) is defined when 'Cli5plus' is loaded in. One can use direct procedure 'clirev' or one can continue using the name 'reversion':
> reversion(e1 &C e2),clirev(e1 &C e2);
> reversion(`&C`[B](e1,e2),B),clirev(`&C`[B](e1,e2),B);
> reversion(`&C`[K](e1,e2),K),clirev(`&C`[K](e1,e2),K);
An error message will appear if appropriate name is not used in 'reversion' or 'clirev', or when mixed indices are used:
> reversion(`&C`[K](e1,e2)),clirev(`&C`[K](e1,e2));
Error, (in clirev) optional (or default B) parameter in clirev differs from indices encountered in its cliprod arguments. Found these names as indices of &C:, {K, B}
> reversion(`&C`[K](e1,e2)-`&C`[M](e4,e5),B);
Error, (in clirev) optional (or default B) parameter in clirev differs from indices encountered in its cliprod arguments. Found these names as indices of &C:, {K, B, M}
>
See Also: Cliff5[conjugation] , Cliff5[gradeinv] , Cliff5[`type/clipolynom`] , Cliff5[`type/climon`] , Cliff5[`type/clibasmon`] , Cliff5[`type/cliscalar`]
(c) Copyright October 8, 1995, by Rafal Ablamowicz & Bertfried Fauser, all rights reserved.
Last modified: December 26, 2001, RA/BF.