Function: Cliff5[minimalideal] - find a real basis in a minimal left or right ideal of a Clifford algebra
Calling Sequence:
minimalideal(list,f,s);
Parameters:
list - a list of Clifford basis monomials created, for example, by the procedure 'cbasis'
f - a primitive idempotent in Cl(B) which is to generate a minimal ideal
s - symbol 'left' or 'right' depending whether the ideal is to be left or right
Description:
Procedure 'minimalideal' finds a real basis in a left S=Cl(Q)f or right S=fCl(Q) minimal ideal in the algebra Cl(Q) where f is a primitive idempotent in Cl(Q).
The first argument in the procedure is a list of basis monomials in Cl(Q), e.g., a Clifford basis generated by the procedure 'cbasis' (see cbasis for more help).
If desired, the list entered as the first argument may be first sorted by grade using option 'bygrade' in the Maple's procedure 'sort'. The output from 'cbasis' is already sorted that way. See bygrade for more information on this sorting option.
The second argument in the procedure is a primitive idempotent f. Note that the procedure checks if the polynomial f entered is a primitive idempotent. See `type/primitiveidemp` for more help.
Depending whether the third argument is 'left' or 'right', a basis for the left S=Cl(Q)f or right S=fCl(Q) minimal ideal S in Cl(Q) is computed.
In the given Clifford algebra, there are many different primitive idempotents. It is known that if the signature of Q is (p,q) then a primitive idempotent f is a product of N = q - RHnumber(q-p) commuting projection operators where 'RHnumber' is the Radon-Hurwitz function (see RHnumber for more help). The projection operators may be defined in terms of N commuting basis monomials (see `type/clibasmon` for more help) which may be found with the procedure commutingelements .
For each orthogonal Clifford algebra Cl(Q) in dimensions 1 through 9 there is a data table stored under the procedure clidata . The table is labeled by the signature (p,q) of Q entered as a list [p,q]. The simplest way to access the data for the Clifford algebra over the signature [p,q] is to enter the command
> clidata([p,q]);
To see data for the Clifford algebra of the current form B enter
> clidata();
or use 'clidata' without any arguments provided that the bilinear form B has been defined as a diagonal matrix. For more help on 'clidata' see clidata .
Computation of a basis in S can be dramatically speeded up by using pre-defined primitive idempotents stored under clidata()[4] for each signature. These primitive idempotents are the same as those pre-defined in Pertti Lounesto's CLICAL.
If the primitive idempotent f is the same as clidata()[4] and if the global variable _shortcut_in_minimalideal is set to 'true', then the procedure uses Clifford basis monomials stored under clidata()[5] in a form of a list to compute expanded basis elements in S. Depending whether the third argument is 'left' or 'right', these basis monomials simply multiply f from the left or right.
To display all currently assigned values of environmental variables in 'CLIFFORD', use procedure CLIFFORD_ENV .
If f is different than clidata()[4], complete computations are performed and they usually take longer.
To speed up computations, set global variable _prolevel to true. To find out more, see Cliff5[init] . You can also use a cmulNUM instead of cmulRS for faster computations when B has been assigned a numeric matrix. Selection of the Clifford product procedure is done using useproduct .
The procedure returns a list consisting of three elements:
the first element is an ordered list of expanded basis elements for S,
the second element is the ordered list clidata()[5],
the third element is the string 's' initially entered as the third argument (to remind the user which ideal was used: left or right).
There is a one-to-one relationship between the elements of the two ordered lists.
Examples:
>
restart:with(Cliff5):SS:=time():
_prolevel:=true:
_shortcut_in_minimalideal:=false:
'_default_Clifford_product'=_default_Clifford_product;
useproduct(cmulNUM);
Warning, cmul will use cmulNUM; for help see pages ?cmul, ?Cliff5[intro], or ?cmulNUM
To shorten output, we will use aliases. Since below we will not exceed dimension 6, we can define aliases first:
> eval(makealiases(6,'ordered')):
Thus, for example,
> e1 &c e2;
where e12 = e1e2. When the bilinear form B is diagonal, then e12 = e1e2 = e1we2, etc.
Example 1: Clifford algebra Cl(1,1) is isomorphic to R(2).
>
dim:=2:B:=linalg[diag](1,-1): #define the bilinear form B for Cl(1,1)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> left_sbasis:=minimalideal(clibasis,f,'left'); #compute a real basis in Cl(B)f
> right_sbasis:=minimalideal(clibasis,f,'right'); #compute a real basis in fCl(B)
>
Example 2: Clifford algebra Cl(2,0) is also isomorphic to R(2)
>
dim:=2:B:=linalg[diag](1,1): #define the bilinear form B for Cl(2,0)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> left_sbasis:=minimalideal(clibasis,f,'left'); #compute a real basis in Cl(B)f
> right_sbasis:=minimalideal(clibasis,f,'right'); #compute a real basis in fCl(B)
>
Example 3: Clifford algebra Cl(2,2) is isomorphic to R(4)
>
dim:=4:B:=linalg[diag](1,1,-1,-1): #define the bilinear form B for Cl(2,2)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> left_sbasis:=minimalideal(clibasis,f,'left'); #compute a real basis in Cl(B)f
> right_sbasis:=minimalideal(clibasis,f,'right'); #compute a real basis in fCl(B)
>
Example 4: Now we compute real bases in the left and right minimal ideals of Cl(3,0) = C(2).
> B:=linalg[diag](1,1,1):
> data:=clidata(); #display data about Cl(3,0)
> f:=data[4]; #this is a pre-stored primitive idempotent
> clibasis:=cbasis(3); #a standard basis for Cl(Q)
> left_sbasis:=minimalideal(clibasis,f,'left'); #basis and generators for Cl(Q)f
> right_sbasis:=minimalideal(clibasis,f,'right'); #basis and generators for fCl(Q)
> f:=(1/2)*(Id+e3); #a different primitive idempotent is chosen now
> f &c f, type(f,primitiveidemp);
> left_sbasis:=minimalideal(clibasis,f,'left'); #basis and generators for Cl(Q)f
> right_sbasis:=minimalideal(clibasis,f,'right'); #basis and generators for fCl(Q)
>
Example 5: Clifford algebra Cl(1,3) is isomorphic to H(2).
>
dim:=4:B:=linalg[diag](1,-1,-1,-1):#define form B for Cl(1,3)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> left_sbasis:=minimalideal(clibasis,f,'left'); #compute a real basis in Cl(B)f
> right_sbasis:=minimalideal(clibasis,f,'right'); #compute a real basis in fCl(B)
>
Here is a K_basis returned for S=Cl(B)f. Since for the current signature (1,3) we have that K = H and Cl(1,3)=H(2), the output from 'spinorKbasis' shown below has two basis vectors and their generators modulo f:
> SBgens:=data[5]:FBgens:=data[6]:
> K_basis:=spinorKbasis(SBgens,f,FBgens,'left');
>
Example 6: Clifford algebra Cl(3,1) is isomorphic to R(4).
>
dim:=4:B:=linalg[diag](1,1,1,-1):#define form B for Cl(3,1)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> left_sbasis:=minimalideal(clibasis,f,'left'); #compute a real basis in Cl(B)f
> right_sbasis:=minimalideal(clibasis,f,'right'); #compute a real basis in fCl(B)
>
Example 7: Clifford algebra Cl(3,3) is isomorphic to R(8).
>
dim:=6:B:=linalg[diag](1,1,1,-1,-1,-1):#define form B for Cl(3,3)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4]:#assign pre-stored idempotent to f or use your own here
> left_sbasis:=minimalideal(clibasis,f,'left'); #compute a real basis in Cl(B)f
>
Example 8: Clifford algebra Cl(4,2) is isomorphic to R(8).
>
dim:=6:B:=linalg[diag](1,1,1,1,-1,-1):#define form B for Cl(3,3)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
> f:=data[4];#assign pre-stored idempotent to f or use your own here
> left_sbasis:=minimalideal(clibasis,f,'left'); #compute a real basis in Cl(B)f
>
Example 9: Testing an error message when f is not primitive:
>
_prolevel:=false:
dim:=4:B:=linalg[diag](1,1,1,-1):#define form B for Cl(3,1)
clibasis:=cbasis(dim): #compute a Clifford basis for Cl(B)
> data:=clidata(B); #retrieve and display data about Cl(B)
Thus, a primitive idempotent in Cl(3,1) must have two commuting simple factors. Therefore, f1 defined below is not a primitive idempotent, although it is an idempotent:
> f1:=(1/2)*(1+e1);
> f1 &c f1, type(f1,primitiveidemp);
Attempting to find a real basis in S=Cl(3,1)f1 will result in an error message:
> sbasis:=minimalideal(clibasis,f1,'left');
Error, (in minimalideal) second argument must be a primitive idempotent
Therefore, let's use data[4]:
> f:=eval(data[4]); f &c f, type(f,primitiveidemp);
> sbasis:=minimalideal(clibasis,f,'left');
> time()-SS; #13.43 sec
>
Comments:
Using 'minimalideal' as shown above is the first step towards the computation of the spinor representation of Cl(Q) in a minimal ideal S over the field K. The next step is to use the procedure 'Kfield' to find a basis for the field K (see Kfield ).
The above examples may be redone for right minimal ideals with the same generators for the field K (replace 'left' with 'right'). This is because K is isomophic to the intersection of the left and right minimal ideals Cl(B)f and fCl(B).
Examples 1 -- 7 are continued in the help page for 'Kfield'. Enter Kfield to see them.
See Also: Cliff5[`type/fieldelement`] , Cliff5[squaremodf] , Cliff5[cbasis] , Cliff5[bygrade] , Cliff5[RHnumber] , Cliff5[Bsignature] , Cliff5[`type/primitiveidemp`] , Cliff5[commutingelements] , Cliff5[spinorKrepr] , Cliff5[spinorKbasis] , Cliff5[matKrepr] , Cliff5[Kfield] , Cliff5[`type/clipolynom`] , Cliff5[clidata]
(c) Copyright October 8, 1995, by Rafal Ablamowicz & Bertfried Fauser, all rights reserved.
Last modified: December 26, 2001, RA/BF.