restart:with(linalg):with(clifford):_prolevel:=true: read "Walshpackage.m": useproduct(cmulwalsh); _default_clifford_product; eval(makealiases(9'ordered')): Warning expecting one of the following Clifford products: cmulrs cmulnum cmulgen or cmul_user_defined Warning cmul will use cmulwalsh; for help see pages?cmul?clifford:-intro or?cmulwalsh This worksheet accompanies the following three-part paper: cmulwalsh "On the Transposition Anti-Involution in Real Clifford Algebras I: The Transposition Map" by R. Ablamowicz and B. Fauser 1 (to appear in Linear and Multilinear Algebra) "On the Transposition Anti-Involution in Real Clifford Algebras II: Stabilizer Groups of Primitive empotents" by R. Ablamowicz and B. Fauser 1 (to appear in Linear and Multilinear Algebra) "On the Transposition Anti-Involution in Real Clifford Algebras III: The Automorphism Group of the Transposition Scalar Product on Spinor Spaces" by R. Ablamowicz and B. Fauser 11 (submitted to Linear and Multilinear Algebra) Rafal Ablamowicz rablamowicz@tntech.edu Cookeville June 1 11 New procedures: _shortcut_in_minimalideal:=false: _shortcut_in_kfield:=false: _shortcut_in_spinokbasis:=false: _shortcut_in_spinorkrepr:=false: _shortcut_in_minimalideal:=true: _shortcut_in_kfield:=true: _shortcut_in_spinokbasis:=true: _shortcut_in_spinorkrepr:=true: 1. Procedure "by_dimension" defines a Boolean-valued function which allows to sort a list L with signatures [pq according to a total dimension p+q. by_dimension:=proc(l1l) local p: options `Copyright (c) 1995-11 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`; description `Last revised: June 6 11`; if L1[+L1[ <= L[+L[ then return true else return false end if: end proc: read "LAMBDA.m": read "BETA_PLUS.m": read "BETA_MINUS.m":. New type needed by tp. `type/scalartype`:=proc(x) local st; return member(true{seq(type(xst)st=convert(_scalartypeslist))}); end proc: 3. Procedures beta_plus and beta_minus are expected to be faster versions of beta_plus and beta_minus which are built into CLIFFORD. ######################################################################################## beta_plus:= proc(psiphif) local locflocdataymflagmonsuueqlambdasyssolkbasvivarsflagftransversal; global B_prolevel; 1
options `Copyright (c) 1995-9 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`; description `Last revised: August 8 9`; ############################################# if not _prolevel then if not type(psi{cliscalarclibasmonclimonclipolynom}) then error "first argument must be of type 'cliscalar' 'clibasmon' 'climon' or 'clipolynom'" if not type(phi{cliscalarclibasmonclimonclipolynom}) then error "second argument must be of type 'cliscalar' 'clibasmon' 'climon' or 'clipolynom'" ###Load in pre-computed data and check if idempotents are the same locdata:=clifford:-clidata(b): locf:=eval(eval(locdata[4)); Kbas:=locdata[6; if nops(kbas)1 then flagf:=evalb(simplify(f-eval(locf))= or simplify(f-clifford:-gradeinv(locf))= or simplify(f+clifford:-gradeinv(locf))= or simplify(f+eval(locf))=); if not flagf then error "when K = C or K = H primitive idempotent f = plus/minus clidata(b)[4 or its grade involution" ######################################################################################## y:=cmul(reversion(expand(psi))expand(phi)); if y = then if nargs = 4 then if not type(args[4name) or type(args[4protected) then error "fourth optional argument when used must be of type unprotected name" else assign(args[4'') return ######################################################################################### m := 'm';i:='i': flag := false; #mons := cbasis(linalg[coldim(b)); transversal:=locdata[7: mons:=transversal: v := array(1.. nops(kbas)[); lambda := add(v[i*kbas[ii=1..nops(kbas)); for m in mons while not flag do uu := m; #eq := clicollect(cmul(my) - expand(cmul(lambdaf))); eq := clicollect(cmul(my) - expand(cmul(flambda))); sys := {coeffs(eq cliterms(eq))}; vars := {seq(v[i i = 1.. nops(kbas))}; sol := solve(sys vars); flag := not evalb(sol = NULL) end do: if nargs = 4 then if not type(args[4name) or type(args[4protected) then
error "fourth optional argument when used must be of type unprotected name" else assign(args[4uu) lambda:=subs(sollambda): if vectorpart(lambda)=lambda then return (scalarpart(lambda)) else return lambda end proc: ######################################################################################### save beta_plus"beta_plus.m": ######################################################################################### beta_minus:= proc(psiphif) local locflocdataymflagmonsuueqlambdasyssolkbasvivarsflagftransversal; global B_prolevel; options `Copyright (c) 1995-9 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`; description `Last revised: August 8 9`; ############################################# if not _prolevel then if not type(psi{cliscalarclibasmonclimonclipolynom}) then error "first argument must be of type 'cliscalar' 'clibasmon' 'climon' or 'clipolynom'" if not type(phi{cliscalarclibasmonclimonclipolynom}) then error "second argument must be of type 'cliscalar' 'clibasmon' 'climon' or 'clipolynom'" ###Load in pre-computed data and check if idempotents are the same locdata := clidata(b): locf := eval(eval(locdata[4)); Kbas := locdata[6; if nops(kbas)1 then flagf:=evalb(simplify(f-eval(locf))= or simplify(f-clifford:-gradeinv(locf))= or simplify(f+clifford:-gradeinv(locf))= or simplify(f+eval(locf))=); if not flagf then error "when K = C or K = H primitive idempotent f = plus/minus clidata(b)[4 or its grade involution" ######################################################################################## y:=cmul(conjugation(expand(psi))expand(phi)); if y = then if nargs = 4 then if not type(args[4name) or type(args[4protected) then error "fourth optional argument when used must be of type unprotected name" else assign(args[4'') return ######################################################################################### m := 'm';i:='i': flag := false; ###mons := cbasis(linalg[coldim(b)); 3
transversal:=locdata[7: mons:=transversal: v := array(1.. nops(kbas)[); lambda := add(v[i*kbas[ii=1..nops(kbas)); for m in mons while not flag do uu := m; eq := clicollect(cmul(my) - expand(cmul(lambdaf))); sys := {coeffs(eq cliterms(eq))}; vars := {seq(v[i i = 1.. nops(kbas))}; sol := solve(sys vars); flag := not evalb(sol = NULL) end do: if nargs = 4 then if not type(args[4name) or type(args[4protected) then error "fourth optional argument when used must be of type unprotected name" else assign(args[4uu) lambda:=subs(sollambda): if vectorpart(lambda)=lambda then return scalarpart(lambda) else return lambda end proc: ##################################################################################### save beta_minus"beta_minus.m": ##################################################################################### 4. Procedure tp. ######################################################################### tp:=proc(xx::{scalartypeclibasmonclimonclipolynom}) local xlpcou: if type(xxscalartype) then return xx end if: x:=clifford:-displayid(xx): if type(xclibasmon) then if x= then return else p:=op(clifford:-cliterms(x)); L:=Clifford:-extract(p'integers'): L:=[seq(L[nops(L)-i+i=1..nops(L)); u:=clifford:-cmul(seq(b[l[il[i*cat(el[i)i=1..nops(l))); return Clifford:-reorder(u) end if: elif type(xclimon) then p:=op(clifford:-cliterms(x)): co:=coeff(xp); return co*procname(p) elif type(xclipolynom) then return Clifford:-clilinear(xprocname) end if: end proc: ######################################################################### ########################################################## #### CODE FOR SIMPLE ALGEBRAS (semisimple are below) ########################################################## L_real_simple:=sort(all_sigs(1..9'real''simple')by_dimension);nops(%); L_complex_simple:=sort(all_sigs(1..9'complex''simple')by_dimension);nops(%); L_quat_simple:=sort(all_sigs(1..9'quat''simple')by_dimension);nops(%); 4
L_real_simple := [ [ 1 1 [ [ [ 3 1 [ 6 [ 3 3 [ 4 [ 8 [ 1 7 [ 4 4 [ 5 3 [ 8 1 L_complex_simple := [ [ 1 [ 1 [ 3 [ 5 [ 3 [ 4 1 [ 1 6 [ 3 4 [ 5 [ 7 [ 9 [ 7 [ 4 5 [ 6 3 [ 8 15 L_quat_simple := [ [ [ 4 [ 1 3 [ 4 [ 1 5 [ 4 [ 5 1 [ 6 [ 6 [ 3 5 [ 6 [ 7 1 Adjustments if any: L_real_simple:=remove(memberL_real_simple[);nops(%); L_real_simple := [ [ 1 1 [ [ [ 3 1 [ 6 [ 3 3 [ 4 [ 8 [ 1 7 [ 4 4 [ 5 3 [ 8 1 L_complex_simple:=remove(memberL_complex_simple[[);nops(%); L_complex_simple := [ [ 1 [ 3 [ 5 [ 3 [ 4 1 [ 1 6 [ 3 4 [ 5 [ 7 [ 9 [ 7 [ 4 5 [ 6 3 [ 8 14 L_quat_simple:=remove(memberL_quat_simple[[);nops(%); L_quat_simple := [ [ 4 [ 1 3 [ 4 [ 1 5 [ 4 [ 5 1 [ 6 [ 6 [ 3 5 [ 6 [ 7 11 Execute code below for each signature in each list. For example j:=1: _prolevel:=true: pq:=op(l_real_simple[j); #pq:=op(l_complex_simple[j); ##pq:=op(l_quat_simple[j); B:=linalg[diag(1$p -1$q):#define form B for Cl(pq) eval(makealiases(p+q'ordered')): p q := 1 1 data:=clidata(b); #retrieve and display data about Cl(pq) data := real simple + [ [ [ e clibasis:=cbasis(p+q): f:=data[4:#assign pre-stored idempotent to f or use your own here K:=data[6; ##kfieldset:=convert(kfieldset); K := [ left_sbasis:=minimalideal(clibasisf'left'); Kbasis:=Kfield(left_sbasisf); SBgens:=left_sbasis[; FBgens:=Kbasis[; 'K'=K; left_sbasis := e + + [ left Kbasis := + SBgens := [ [ FBgens := [ K = [ K_basis:=spinorKbasis(SBgensfFBgens'left'); e K_basis := + + [ left for i from 1 to nops(k_basis[) do 5
ff i:=k_basis[[i; end do; Let's find matrices representing the basis vectors in S: k:=q-rhnumber(q-p); N:=^k; Thus spinors psi and phi have these components: ff1 := + e ff := + k := 1 N := for i from 1 to N do Psi i:=add(psi i j*fbgens[jj=1..nops(fbgens)); end do; Ψ1 := ψ11 Ψ := ψ1 for i from 1 to N do Phi i:=add(phi i j*fbgens[jj=1..nops(fbgens)); end do; Φ1 := φ11 Φ := φ1 Spinors Psispinor and Phispinor will then look as follows: Psispinor:= add(cmul(ff ipsi i) i=1..n); ψ11 ψ11 ψ1 ψ1 e Psispinor := + + + Phispinor:= add(cmul(ff iphi i) i=1..n); φ11 φ11 φ1 φ1 e Phispinor := + + + psimat:=matrix(n1[seq(psi ii=1..n)); phimat:=matrix(n1[seq(phi ii=1..n)); ψ11 psimat := ψ1 φ11 phimat := φ1 transversal:=data[7; transversal := [ e TO COMPUTE LAMBDA JUMP TO POINT 3 BELOW!!!!! ######################################################################################### ###################################################################### 1. We compute beta_plus using original definition in CLIFFORD and assign 'pure spinor' to s1: start:=time(): x:=beta_plus(psispinorphispinorf's1'); time()-start; 's1'=s1; x := ( ψ1 φ11 + ψ11 φ1) 6
.3 s1 =. We verify that s1 belongs to the transversal and that indeed cmul(s1reversion(psispinor)phispinor) belongs to K = f Cl(pq)f modulo f: member(s1transversal); true start:time(): xx:=cmul(s1reversion(psispinor)phispinor); time()-start; xx-cmul(xf); ## this should be zero if x = xx mod f ( ψ1 φ11 + ψ11 φ1) ( ψ1 φ11 + ψ11 φ1) xx := +.5 read "BETA_PLUS.m": assigned(beta_plus[[pq); ## checking if stored BETA_PLUS[[pq; ## displaying when stored [s1x; ## just computed true [ ( ψ1 φ11 + ψ11 φ1) [ ( ψ1 φ11 + ψ11 φ1) BETA_PLUS[[pq:=[s1x; save BETA_PLUS"BETA_PLUS.m"; BETA_PLUS [ 11 := [ ( ψ1 φ11 + ψ11 φ1) BP:=BETA_PLUS[[pq; ######################################################################################### ############### print(`##############`); print(`this SHOULD BE TRUE: `);flag5:=evalb(s1=bp[); ###<<<--- comparing pure spinors: EXPECTED TO BE TRUE print(`this SHOULD BE TRUE: `);flag6:=evalb(simplify(bp[-x)=); ###<<<--- comparing beta_plus stored and recomputed: EXPECTED TO BE TRUE print(`##############`); ######################################################################################### ############### flag56:=evalb(flag5 and flag6); BP := [ ( ψ1 φ11 + ψ11 φ1) ############## THIS SHOULD BE TRUE: flag5 := true THIS SHOULD BE TRUE: flag6 := true ############## flag56 := true ##BETA_PLUS[[pq:=[s1x; save BETA_PLUS"BETA_PLUS.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet ######################################################################################### ############### if not flag56 then BETA_PLUS[[pq:=[s1x; save BETA_PLUS"BETA_PLUS.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet print(`saved NEW ENTRY IN BETA_PLUS for signature: `[pq); else 7
print(`entry IN BETA_PLUS for signature: `[pq`was OK.`); ENTRY IN BETA_PLUS for signature: [ 1 was OK. 'transversal'=transversal; transversal = [ 1. We compute beta_minus using original definition in CLIFFORD and assign 'pure spinor' to s: start:=time(): y:=beta_minus(psispinorphispinorf's'); time()-start; 's'=s; y := ( ψ1 φ11 + ψ11 φ1).15 s =. We verify that s belongs to the transversal and that indeed cmul(sconjugation(psispinor)phispinor) belongs to K = f Cl(pq)f modulo f: member(stransversal); true start:=time(): yy:=cmul(sconjugation(psispinor)phispinor); time()-start; yy-cmul(yf); ## this should be zero if y = yy mod f ( ψ1 φ11 ψ11 φ1) ( ψ1 φ11 ψ11 φ1) yy :=.47 read "BETA_MINUS.m"; assigned(beta_minus[[pq); BETA_MINUS[[pq; ## displaying when stored [sy; ## just computed true [ ( ψ1 φ11 + ψ11 φ1) [ ( ψ1 φ11 + ψ11 φ1) BETA_MINUS[[pq:=[sy; save BETA_MINUS"BETA_MINUS.m"; BM:=BETA_MINUS[[pq; ######################################################################################### ############### print(`##############`); print(`this SHOULD BE TRUE: `);flag7:=evalb(s=bm[); ###<<<--- comparing pure spinors print(`this SHOULD BE TRUE: `);flag8:=evalb(simplify(bm[-y)=); ###<<<--- comparing beta_minus stored and recomputed with new procedure print(`##############`); ######################################################################################### ############### flag78:=evalb(flag7 and flag8); BETA_MINUS [ 11 := [ ( ψ1 φ11 + ψ11 φ1) BM := [ ( ψ1 φ11 + ψ11 φ1) ############## THIS SHOULD BE TRUE: flag7 := true THIS SHOULD BE TRUE: flag8 := true 8
############## flag78 := true ##BETA_MINUS[[pq:=[sy; save BETA_MINUS"BETA_MINUS.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet if not flag78 then BETA_MINUS[[pq:=[sy; save BETA_MINUS"BETA_MINUS.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet print(`saved NEW ENTRY IN BETA_MINUS for signature: `[pq); else print(`entry IN BETA_MINUS for signature: `[pq`was OK.`); ENTRY IN BETA_MINUS for signature: [ 1 was OK. The above has been checked for errors in these signatures: (a) real simple: (11) () () (31) (6) (33) (4) (8) (17) (44) (53) (8) (b) complex simple: (1) (3) (5) (3) (41) (16) (34) (5) (7) (9) (7) (45) (63) (81) (c) quaternionic simple: (4) (13) (4) (15) (4) (51) (6) (6) (35) (6) (71) ######################################################################################### ###################################################################### ######################################################################################### ###################################################################### 3. Here we compute lambda for simple algebras: ['p''q'=[pq; lambda:='lambda': Lambda:='Lambda': [ p q = [ 1 Lambda:=add(lambda[i*FBgens[ii=1..nops(FBgens)); vars:=[seq(lambda[ii=1..nops(fbgens)); ######################################################################################### ##### print(`###############`); start:=time(): out1:=cmul(tp(psispinor)phispinor); time()-start; print(`###############`); ######################################################################################### ##### sol:=op(clisolve(cmul(flambda)-out1vars)); Lambda1:=subs(sol Lambda); out1 - cmul(lambda1f); ###<<<--- This should be zero out1 - cmul(flambda1); ###<<<--- This is also zero because Lambda1 is in fcl(pq)f and f^=f cmul(lambda1f)-cmul(flambda1); ###<<<--- This should be zero Λ := λ 1 vars := [ λ 1 ############### ( ψ11 φ11 + ψ1 φ1) ( ψ11 φ11 + ψ1 φ1) out1 := +.3 9
############### sol := { λ 1 = ψ11 φ11 + ψ1 φ1} Λ1 := ( ψ11 φ11 + ψ1 φ1) LAMBDA[[pq:=Lambda1; save LAMBDA "LAMBDA.m"; LAMBDA [ 11 := ( ψ11 φ11 + ψ1 φ1) read "LAMBDA.m": LAM:=LAMBDA[[pq; LAM := ( ψ11 φ11 + ψ1 φ1) ######################################################################################### ############### print(`##############`); print(`this SHOULD BE TRUE: `);flaglambda1:=evalb(lam=lambda1); ###<<<--- comparing Lambda[pq saved with computed print(`##############`); ######################################################################################### ############### ############## THIS SHOULD BE TRUE: flaglambda1 := true ############## ##LAMBDA[[pq:=Lambda1; save LAMBDA "LAMBDA.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet ######################################################################################### ############### if not flaglambda1 then LAMBDA[[pq:=Lambda1; save LAMBDA "LAMBDA.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet print(`saved NEW ENTRY IN LAMBDA for signature: `[pq); else print(`entry IN LAMBDA for signature: `[pq`was OK.`); ENTRY IN LAMBDA for signature: [ 1 was OK. The above has been checked for errors in these signatures: (a) real simple: (11) () () (31) (6) (33) (4) (8) (17) (44) (53) (8) (b) complex simple: (1) (3) (5) (3) (41) (16) (34) (5) (7) (9) (7) (45) (63) (81) (c) quaternionic simple: (4) (13) (4) (15) (4) (51) (6) (6) (35) (6) (71) LAM:=LAMBDA[[pq; x:=beta_plus[[pq[; xx:=beta_minus[[pq[; evalb(simplify(lam-lambda1)=); ###<<<--- comparing LAMBDA[[pq stored and recomputed with new procedure LAM := ( ψ11 φ11 + ψ1 φ1) x := ( ψ1 φ11 + ψ11 φ1) xx := ( ψ1 φ11 + ψ11 φ1) true if q= then evalb(simplify(lambda1-x)=) elif p= then evalb(simplify(lambda1-xx)=) 1
[pq; [ 1 'LAMBDA[[pq'=LAMBDA[[pq; LAMBDA [ pq = ( ψ11 φ11 + ψ1 φ1) 'BETA_PLUS[[pq'=BETA_PLUS[[pq; BETA_PLUS [ pq = [ ( ψ1 φ11 + ψ11 φ1) 'BETA_MINUS[[pq'=BETA_MINUS[[pq; BETA_MINUS [ pq = [ ( ψ1 φ11 + ψ11 φ1) assigned(beta_plus[[pq); assigned(beta_minus[[pq);assigned(lambda[[pq); true true true Repeat the above for all signatures in real complex and quaternionic simple Clifford algebras. ############################################################### Displaying signatures of all entries which have been computed: A. LAMBDA: L_indices_LAMBDA:=sort([indices(LAMBDA'nolist')by_dimension); L_indices_LAMBDA := [ [ 1 1 [ [ 1 [ 3 [ 3 [ 1 [ 1 3 [ 3 1 [ 4 [ 4 [ [ 1 4 [ 5 [ 5 [ 4 1 [ 3 [ 3 [ 5 1 [ 6 [ 4 [ 1 5 [ 6 [ 4 [ 3 3 [ 6 1 [ 3 4 [ 5 [ 1 6 [ 7 [ 4 3 [ 7 [ 5 [ 6 [ 3 5 [ 7 1 [ 4 4 [ 6 [ 8 [ 8 [ 1 7 [ 5 3 [ 6 3 [ 3 6 [ 8 1 [ 7 [ 9 [ 9 [ 5 4 [ 4 5 [ 1 8 [ 7 ##LAMBDA[pq:=evaln(LAMBDA[pq); ###eliminating unneeded entry if needed ##save LAMBDA "LAMBDA.m"; B. BETA_PLUS: L_indices_BETA_PLUS:=sort([indices(BETA_PLUS'nolist')by_dimension); L_indices_BETA_PLUS := [ [ 1 1 [ [ 1 [ 3 [ 3 [ 1 [ 1 3 [ 3 1 [ 4 [ 4 [ [ 1 4 [ 5 [ 5 [ 4 1 [ 3 [ 3 [ 5 1 [ 6 [ 4 [ 1 5 [ 6 [ 4 [ 3 3 [ 6 1 [ 3 4 [ 5 [ 1 6 [ 7 [ 4 3 [ 7 [ 5 [ 6 [ 3 5 [ 7 1 [ 4 4 [ 6 [ 8 [ 8 [ 1 7 [ 5 3 [ 6 3 [ 3 6 [ 8 1 [ 7 [ 9 [ 9 [ 5 4 [ 4 5 [ 1 8 [ 7 ##BETA_PLUS[pq:=evaln(BETA_PLUS[pq); ###eliminating unneeded entry if needed ##save BETA_PLUS "BETA_PLUS.m"; C. BETA_MINUS: L_indices_BETA_MINUS:=sort([indices(BETA_MINUS'nolist')by_dimension); L_indices_BETA_MINUS := [ [ 1 1 [ [ 1 [ 3 [ 3 [ 1 [ 1 3 [ 3 1 [ 4 [ 4 [ [ 1 4 [ 5 [ 5 [ 4 1 [ 3 [ 3 [ 5 1 [ 6 [ 4 [ 1 5 [ 6 [ 4 [ 3 3 [ 6 1 [ 3 4 [ 5 [ 1 6 [ 7 [ 4 3 [ 7 [ 5 [ 6 [ 3 5 [ 7 1 [ 4 4 [ 6 [ 8 [ 8 [ 1 7 [ 5 3 [ 6 3 [ 3 6 [ 8 1 [ 7 [ 9 [ 9 [ 5 4 [ 4 5 [ 1 8 [ 7 ##BETA_MINUS[pq:=evaln(BETA_MINUS[pq); ###eliminating unneeded entry if needed ##save BETA_MINUS "BETA_MINUS.m"; Checking if there are any signatures [[pq left to compute LAMBDA[[pq BETA_PLUS[[pq or BETA_MINUS[[pq: A. For real simple first: L_real_simple:=sort(all_sigs(1..9'real''simple')by_dimension);nops(%); 11
L_real_simple := [ [ 1 1 [ [ [ 3 1 [ 6 [ 3 3 [ 4 [ 8 [ 1 7 [ 4 4 [ 5 3 [ 8 1 LAMBDA_to_do_real_simple:=[:for pq in L_real_simple do if not member(pql_indices_lambda) then LAMBDA_to_do_real_simple:=[op(LAMBDA_to_do_real_simple)pq end if end do; seq(pq=member(pql_indices_lambda)pq=l_real_simple); 'LAMBDA_to_do_real_simple'=LAMBDA_to_do_real_simple; ###<<<--- LAMBDA_to_do i real simple case LAMBDA_to_do_real_simple:=remove(memberLAMBDA_to_do_real_simple[); ###<<<--- adjusted LAMBDA_to_do in real simple case [ 1 = true [ = true [ = true [ 3 = true [ 6 = true [ 3 3 = true [ 4 = true [ 8 = true [ 1 7 = true [ 4 4 = true [ 5 3 = true [ 8 = true LAMBDA_to_do_real_simple = [ LAMBDA_to_do_real_simple := [ ########################################################## BETA_PLUS_to_do_real_simple:=[:for pq in L_real_simple do if not member(pql_indices_beta_plus) then BETA_PLUS_to_do_real_simple:=[op(BETA_PLUS_to_do_real_simple)pq end if end do; seq(pq=member(pql_indices_beta_plus)pq=l_real_simple); 'BETA_PLUS_to_do_real_simple'=BETA_PLUS_to_do_real_simple; ###<<<--- BETA_PLUS_to_do i real simple case BETA_PLUS_to_do_real_simple:=remove(memberBETA_PLUS_to_do_real_simple[); ###<<<--- adjusted BETA_PLUS_to_do_real_simple in real simple case [ 1 = true [ = true [ = true [ 3 = true [ 6 = true [ 3 3 = true [ 4 = true [ 8 = true [ 1 7 = true [ 4 4 = true [ 5 3 = true [ 8 = true BETA_PLUS_to_do_real_simple = [ BETA_PLUS_to_do_real_simple := [ ########################################################## BETA_MINUS_to_do_real_simple:=[:for pq in L_real_simple do if not member(pql_indices_beta_minus) then BETA_MINUS_to_do_real_simple:=[op(BETA_MINUS_to_do_real_simple)pq end if end do; seq(pq=member(pql_indices_beta_minus)pq=l_real_simple); 'BETA_MINUS_to_do_real_simple'=BETA_MINUS_to_do_real_simple; ###<<<--- BETA_MINUS_to_do i real simple case BETA_MINUS_to_do_real_simple:=remove(memberBETA_MINUS_to_do_real_simple[); ###<<<--- adjusted BETA_MINUS_to_do_real_simple in real simple case [ 1 = true [ = true [ = true [ 3 = true [ 6 = true [ 3 3 = true [ 4 = true [ 8 = true [ 1 7 = true [ 4 4 = true [ 5 3 = true [ 8 = true BETA_MINUS_to_do_real_simple = [ BETA_MINUS_to_do_real_simple := [ ########################################################## B. For complex simple next: L_complex_simple:=sort(all_sigs(1..9'complex''simple')by_dimension);nops(%); L_complex_simple := [ [ 1 [ 1 [ 3 [ 5 [ 3 [ 4 1 [ 1 6 [ 3 4 [ 5 [ 7 [ 9 [ 7 [ 4 5 [ 6 3 [ 8 15 LAMBDA_to_do_complex_simple:=[:for pq in L_complex_simple do if not member(pql_indices_lambda) then LAMBDA_to_do_complex_simple:=[op(LAMBDA_to_do_complex_simple)pq end if end do; seq(pq=member(pql_indices_lambda)pq=l_complex_simple); 'LAMBDA_to_do_complex_simple'=LAMBDA_to_do_complex_simple; ###<<<--- LAMBDA_to_do in complex simple case LAMBDA_to_do_complex_simple:=remove(memberLAMBDA_to_do_complex_simple[[); 1
###<<<--- adjusted LAMBDA_to_do in complex simple case [ = false [ 1 = true [ 3 = true [ 5 = true [ 3 = true [ 4 = true [ 1 6 = true [ 3 4 = true [ 5 = true [ 7 = true [ 9 = true [ 7 = true [ 4 5 = true [ 6 3 = true [ 8 = true LAMBDA_to_do_complex_simple = [[ LAMBDA_to_do_complex_simple := [ ########################################################## BETA_PLUS_to_do_complex_simple:=[:for pq in L_complex_simple do if not member(pql_indices_beta_plus) then BETA_PLUS_to_do_complex_simple:=[op(BETA_PLUS_to_do_complex_simple)pq end if end do; seq(pq=member(pql_indices_beta_plus)pq=l_complex_simple); 'BETA_PLUS_to_do_complex_simple'=BETA_PLUS_to_do_complex_simple; ###<<<--- BETA_PLUS_to_do in complex simple case BETA_PLUS_to_do_complex_simple:=remove(memberBETA_PLUS_to_do_complex_simple[[); ###<<<--- adjusted BETA_PLUS_to_do_complex_simple in complex simple case [ = false [ 1 = true [ 3 = true [ 5 = true [ 3 = true [ 4 = true [ 1 6 = true [ 3 4 = true [ 5 = true [ 7 = true [ 9 = true [ 7 = true [ 4 5 = true [ 6 3 = true [ 8 = true BETA_PLUS_to_do_complex_simple = [[ BETA_PLUS_to_do_complex_simple := [ ########################################################## BETA_MINUS_to_do_complex_simple:=[:for pq in L_complex_simple do if not member(pql_indices_beta_minus) then BETA_MINUS_to_do_complex_simple:=[op(BETA_MINUS_to_do_complex_simple)pq end if end do; seq(pq=member(pql_indices_beta_minus)pq=l_complex_simple); 'BETA_MINUS_to_do_complex_simple'=BETA_MINUS_to_do_complex_simple; ###<<<--- BETA_MINUS_to_do in complex simple case BETA_MINUS_to_do_complex_simple:=remove(memberBETA_MINUS_to_do_complex_simple[[); ###<<<--- adjusted BETA_MINUS_to_do_complex_simple in complex simple case [ = false [ 1 = true [ 3 = true [ 5 = true [ 3 = true [ 4 = true [ 1 6 = true [ 3 4 = true [ 5 = true [ 7 = true [ 9 = true [ 7 = true [ 4 5 = true [ 6 3 = true [ 8 = true BETA_MINUS_to_do_complex_simple = [[ BETA_MINUS_to_do_complex_simple := [ ########################################################## C. For quaternionic simple next: L_quat_simple:=sort(all_sigs(1..9'quat''simple')by_dimension);nops(%); L_quat_simple := [ [ [ 4 [ 1 3 [ 4 [ 1 5 [ 4 [ 5 1 [ 6 [ 6 [ 3 5 [ 6 [ 7 1 LAMBDA_to_do_quat_simple:=[:for pq in L_quat_simple do if not member(pql_indices_lambda) then LAMBDA_to_do_quat_simple:=[op(LAMBDA_to_do_quat_simple)pq end if end do; seq(pq=member(pql_indices_lambda)pq=l_quat_simple); 'LAMBDA_to_do_quat_simple'=LAMBDA_to_do_quat_simple; ###<<<--- LAMBDA_to_do in quat simple case LAMBDA_to_do_quat_simple:=remove(memberLAMBDA_to_do_quat_simple[[); ###<<<--- adjusted LAMBDA_to_do in quat simple case [ = false [ 4 = true [ 1 3 = true [ 4 = true [ 1 5 = true [ 4 = true [ 5 = true [ 6 = true [ 6 = true [ 3 5 = true [ 6 = true [ 7 = true LAMBDA_to_do_quat_simple = [[ LAMBDA_to_do_quat_simple := [ ########################################################## BETA_PLUS_to_do_quat_simple:=[:for pq in L_quat_simple do if not member(pql_indices_beta_plus) then BETA_PLUS_to_do_quat_simple:=[op(BETA_PLUS_to_do_quat_simple)pq end if end do; 13
seq(pq=member(pql_indices_beta_plus)pq=l_quat_simple); 'BETA_PLUS_to_do_quat_simple'=BETA_PLUS_to_do_quat_simple; ###<<<--- BETA_PLUS_to_do in quat simple case BETA_PLUS_to_do_quat_simple:=remove(memberBETA_PLUS_to_do_quat_simple[[); ###<<<--- adjusted BETA_PLUS_to_do_quat_simple in quat simple case [ = false [ 4 = true [ 1 3 = true [ 4 = true [ 1 5 = true [ 4 = true [ 5 = true [ 6 = true [ 6 = true [ 3 5 = true [ 6 = true [ 7 = true BETA_PLUS_to_do_quat_simple = [[ BETA_PLUS_to_do_quat_simple := [ ########################################################## BETA_MINUS_to_do_quat_simple:=[:for pq in L_quat_simple do if not member(pql_indices_beta_minus) then BETA_MINUS_to_do_quat_simple:=[op(BETA_MINUS_to_do_quat_simple)pq end if end do; seq(pq=member(pql_indices_beta_minus)pq=l_quat_simple); 'BETA_MINUS_to_do_quat_simple'=BETA_MINUS_to_do_quat_simple; ###<<<--- BETA_MINUS_to_do in quat simple case BETA_MINUS_to_do_quat_simple:=remove(memberBETA_MINUS_to_do_quat_simple[[); ###<<<--- adjusted BETA_MINUS_to_do_quat_simple in quat simple case [ = false [ 4 = true [ 1 3 = true [ 4 = true [ 1 5 = true [ 4 = true [ 5 = true [ 6 = true [ 6 = true [ 3 5 = true [ 6 = true [ 7 = true BETA_MINUS_to_do_quat_simple = [[ BETA_MINUS_to_do_quat_simple := [ ########################################################## ########################################################## #### CODE FOR SEMI-SIMPLE ALGEBRAS ########################################################## Now we compute Lambda beta_plus and beta_minus for semisimple algebras. L_real_semisimple:=sort(all_sigs(1..9'real''semisimple')by_dimension);nops(%); L_quat_semisimple:=sort(all_sigs(1..9'quat''semisimple')by_dimension);nops(%); L_real_semisimple := [[ 1 [ 1 [ 3 [ 7 [ 4 3 [ 1 8 [ 5 4 [ 9 8 L_quat_semisimple := [[ 3 [ 1 4 [ 5 [ 5 [ 6 1 [ 3 6 [ 7 7 Adjustments if any: L_real_semisimple:=remove(memberL_real_semisimple[[1);nops(%); L_real_semisimple := [[ 1 [ 3 [ 7 [ 4 3 [ 1 8 [ 5 4 [ 9 7 L_quat_semisimple:=remove(memberL_quat_semisimple[[);nops(%); L_quat_semisimple := [[ 3 [ 1 4 [ 5 [ 5 [ 6 1 [ 3 6 [ 7 7 Select signature and make initial assigmnents: L4:=L_real_semisimple; L5:=L_quat_semisimple; nops(l5); k:=1; L4 := [[ 1 [ 3 [ 7 [ 4 3 [ 1 8 [ 5 4 [ 9 L5 := [[ 3 [ 1 4 [ 5 [ 5 [ 6 1 [ 3 6 [ 7 14
7 k := 1 pq:=l5[k; pq:=op(pq); ppq:=p+q; pmq:=p-q; B:=diag(1$p-1$q); F:=LAMBDA[pq[;####<<<<--- here we take the first entry only as the second entry in LAMBDA[pq is the same kfield:=sort(convert(cliterms(f)list)bygrade); N:=^(q-RHnumber(q-p)-1); ###########################################NEW cdata:=clidata(pq); f:=eval(cdata[4); fg:=gradeinv(f); M:=cdata[7; ##transversal set transversal:=cdata[7; ##another name for M K:=cdata[6; ## basis for K 'kfield'=kfield: kfield:=k; ###########################################NEW pq := [ 3 p q := 3 ppq := 3 pmq := -3-1 B := -1-1 F := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) kfield := [ e N := 1 3 cdata := quaternionic 1 semisimple + [ e e3 [ e [ 3 f := + 3 fg := M := [ transversal := [ K := [ e kfield := [ e for i from 1 to N do Ps[i:=add((psi i j)*kfield[jj=1..nops(kfield)); Ph[i:=add((phi i j)*kfield[jj=1..nops(kfield)); end do: Psi_spinorPhi_spinor:=matrix(N1[seq(Ps[ii=1..N))matrix(N1[seq(Ph[ii=1..N)); Psi_spinor Phi_spinor := [ ψ11 + ψ1 + ψ13 e + ψ14 [ φ11 + φ1 + φ13 e + φ14 Psi_spinor:=add(cmul(transversal[ifPs[i)i=1..N); ### spinor psi in S = Cl(pq)f Phi_spinor:=add(cmul(transversal[ifPh[i)i=1..N); ### spinor phi in S = Cl(pq)f ψ11 ψ1 ψ13 e ψ14 e3 ψ14 ψ13 3 ψ1 e3 ψ11 3 Psi_spinor := + + + + + 15
φ11 φ1 φ13 e φ14 e3 φ14 φ13 3 φ1 e3 φ11 3 Phi_spinor := + + + + + Psi_spinorg:=add(cmul(transversal[ifgPs[i)i=1..N); ### spinor psi in Sg = Cl(pq)fg where fg = gradeinv(f) Phi_spinorg:=add(cmul(transversal[ifgPh[i)i=1..N); ### spinor phi in Sg = Cl(pq)fg where fg = gradeinv(f) ψ11 ψ1 ψ13 e ψ14 e3 ψ14 ψ13 3 ψ1 e3 ψ11 3 Psi_spinorg := + + + + + φ11 φ1 φ13 e φ14 e3 φ14 φ13 3 φ1 e3 φ11 3 Phi_spinorg := + + + + + 'signature'=[pq;'transversal'=transversal; signature = [ 3 transversal = [ TO COMPUTE LAMBDA[[pq = [Lambda1 Lambda1g in semisimple algebras jump to point 4 below. ######################################################################################### ######################################################## 1. We compute beta_plus in S and Sg using original definition in CLIFFORD and assign 'pure spinor' to s1 and s1g: x:='x':xx:='xx':xg:='xg':xxg:='xxg':s1:='s1':s1g:='s1g': start:=time(): x:=beta_plus(psi_spinorphi_spinorf's1'); 's1'=s1; time()-start; x := s1 =.15 N=^(q-RHnumber(q-p)-1);K;clidata(pq); 1 = 1 [ e 3 quaternionic 1 semisimple + [ e e3 [ e [ xg:=beta_plus(psi_spinorgphi_spinorgfg's1g'); 's1g'=s1g; xg := s1g =. We verify that s1 and s1g belong to the transversal and that indeed cmul(s1reversion(psi_spinor)phi_spinor) and cmul(s1greversion(psi_spinorg)phi_spinorg) belong to K = f Cl(pq)f modulo f: member(s1transversal); member(s1gtransversal); true true xx:=cmul(s1reversion(psi_spinor)phi_spinor); xx-cmul(xf); ## this should be zero if x = xx mod f xx := xxg:=cmul(s1greversion(psi_spinorg)phi_spinorg); xxg-cmul(xgfg); ## this should be zero if xg = xxg mod fg xxg := 16
3. We check what is assigned to BETA_PLUS[[pq: read "BETA_PLUS.m"; assigned(beta_plus[[pq); ## checking if stored BETA_PLUS[[pq; ## displaying when stored [[s1x[s1gxg; ## just computed true [[ [ [[ [ BETA_PLUS[[pq:=[[s1x[s1gxg; save BETA_PLUS"BETA_PLUS.m"; BETA_PLUS [ 3 := [[ [ BP:=BETA_PLUS[[pq; BP := [[ [ ######################################################################################### ############### print(`this SHOULD BE TRUE: `);flag1:=evalb(s1=bp[[); ###<<<--- comparing pure spinors: EXPECTED TO BE TRUE print(`this SHOULD BE TRUE: `);flag:=evalb(simplify(bp[[-x)=); ###<<<--- comparing beta_plus stored and recomputed: EXPECTED TO BE TRUE THIS SHOULD BE TRUE: flag1 := true THIS SHOULD BE TRUE: flag := true ######################################################################################### ############### print(`this SHOULD BE TRUE: `);flag3:=evalb(s1g=bp[[); ###<<<--- comparing pure spinors: EXPECTED TO BE TRUE print(`this SHOULD BE TRUE: `);flag4:=evalb(simplify(bp[[-xg)=); ###<<<--- comparing beta_plus stored and recomputed: EXPECTED TO BE TRUE THIS SHOULD BE TRUE: flag3 := true THIS SHOULD BE TRUE: flag4 := true ######################################################################################### ############### print(`###########`); flag134:=evalb(flag1 and flag and flag3 and flag4); ###if true then there is no need to save new data otherwise save print(`###########`); ########### flag134 := true ########### ######################################################################################### ############### if not flag134 then BETA_PLUS[[pq:=[[s1x[s1gxg; save BETA_PLUS"BETA_PLUS.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet print(`saved NEW ENTRY IN BETA_PLUS for signature: `[pq); else print(`entry IN BETA_PLUS for signature: `[pq`was OK.`); 17
ENTRY IN BETA_PLUS for signature: [ 3 was OK. 1. We compute beta_minus in S and Sg using original definition in CLIFFORD and assign 'pure spinor' to s and sg: y:='y':yy:='yy':yg:='yg':yyg:='yyg':s:='s':sg:='sg': start:=time(): y:=beta_minus(psi_spinorphi_spinorf's'); 's'=s; time()-start; y := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) s =.38 start:=time(): yg:=beta_minus(psi_spinorgphi_spinorgfg'sg'); 'sg'=sg; time()-start; yg := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) sg =.3. We verify that s and sg belong to the transversal and that indeed cmul(sconjugation(psi_spinor)phi_spinor) and cmul(sgconjugation(psi_spinorg)phi_spinorg) belong to K = f Cl(pq)f modulo f: member(stransversal); member(sgtransversal); true true yy:=cmul(sconjugation(psi_spinor)phi_spinor); yy-cmul(yf); ## this should be zero if y = yy mod f yy := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) e + ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) e3 ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) 3 ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) 3 ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) e3 + + start:=time(): yyg:=cmul(sgconjugation(psi_spinorg)phi_spinorg); time()-start; yyg-cmul(ygfg); ## this should be zero if yg = yyg mod fg yyg := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) e ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) + ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) e3 ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) e3 ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) 3 ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) 3 18
3. We check what is assigned to BETA_MINUS[[pq:.188 read "BETA_MINUS.m"; assigned(beta_minus[[pq); ## checking if stored BETA_MINUS[[pq; ## displaying when stored [[sy[sgyg; ## just computed true [ [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) BETA_MINUS[[pq:=[[sy[sgyg; save BETA_MINUS"BETA_MINUS.m"; BETA_MINUS [ 3 := [ [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) BM:=BETA_MINUS[[pq; BM := [ [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ######################################################################################### ############### print(`this SHOULD BE TRUE: `);flag1:=evalb(s=bm[[); ###<<<--- comparing pure spinors: EXPECTED TO BE TRUE print(`this SHOULD BE TRUE: `);flag:=evalb(simplify(bm[[-y)=); ###<<<--- comparing beta_minus stored and recomputed: EXPECTED TO BE TRUE THIS SHOULD BE TRUE: flag1 := true THIS SHOULD BE TRUE: flag := true ######################################################################################### ############### print(`this SHOULD BE TRUE: `);flag3:=evalb(sg=bm[[); ###<<<--- comparing pure spinors: EXPECTED TO BE TRUE print(`this SHOULD BE TRUE: `);flag4:=evalb(simplify(bm[[-yg)=); ###<<<--- comparing beta_minus stored and recomputed: EXPECTED TO BE TRUE THIS SHOULD BE TRUE: flag3 := true THIS SHOULD BE TRUE: flag4 := true ######################################################################################### ############### 19
print(`###########`); flag134:=evalb(flag1 and flag and flag3 and flag4); ###if true then there is no need to save new data otherwise save print(`###########`); ########### flag134 := true ########### ######################################################################################### ############### if not flag134 then BETA_MINUS[[pq:=[[sy[sgyg; save BETA_MINUS"BETA_MINUS.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet print(`saved NEW ENTRY IN BETA_MINUS for signature: `[pq); else print(`entry IN BETA_MINUS for signature: `[pq`was OK.`); [pq; L5; BETA_PLUS[pq; BETA_MINUS[pq; ENTRY IN BETA_MINUS for signature: [ 3 was OK. [ 3 [[ 3 [ 1 4 [ 5 [ 5 [ 6 1 [ 3 6 [ 7 [[ [ [ [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) The above has been checked for errors in these signatures: (a) real semisimple: (1) (3) (7) (43) (18) (54) (9) (b) quaternionic semisimple: (3) (14) (5) (5) (61) (36) (7) ######################################################################################### ###################################################################### ######################################################################################### ###################################################################### 4. Here we compute Lambda1 and Lambda1g for semi-simple algebras: ['p''q'=[pq; N:=^(q-RHnumber(q-p)-1); #number of K-components in 1/-spinor Psi_spinor in S and 1/-spinor Psi_spinorg in Sg K:=cdata[6; ## basis for K lambda:='lambda':lambda:='lambda': lambdag:='lambdag':lambdag:='lambdag': [ p q = [ 3 N := 1 K := [ e First we compute Lambda1 for Psi_spinor and Phi_spinor: Lambda:=add(lambda[i*K[ii=1..nops(K));
vars:=[seq(lambda[ii=1..nops(k)); ######################################################################################### ##### print(`###############`); start:=time(): out1:=cmul(tp(psi_spinor)phi_spinor); time()-start; print(`###############`); ######################################################################################### ##### sol1:=op(clisolve(cmul(flambda)-out1vars)); Lambda1:=subs(sol1 Lambda); out1 - cmul(lambda1f); ###<<<--- This should be zero out1 - cmul(flambda1); ###<<<--- This is also zero because Lambda1 is in fcl(pq)f and f^=f cmul(lambda1f)-cmul(flambda1); ###<<<--- This should be zero Λ := λ 1 + λ + λ 3 e + λ 4 vars := [ λ 1 λ λ 3 λ 4 ############### ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) out1 := ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) e ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) e3 + ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) 3 ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) e3 ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) 3 + +.79 ############### sol1 := { λ 1 = ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13 λ = ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14 λ 3 = ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14 λ 4 = ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1} Λ1 := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ##findquatmatrix33(lambda1nk"lambda"); Second we compute Lambda1g for Psi_spinorg and Phi_spinorg: Lambdag:=add(mu[i*K[ii=1..nops(K)); vars:=[seq(mu[ii=1..nops(k)); ######################################################################################### ##### print(`###############`); start:=time(): out:=cmul(tp(psi_spinorg)phi_spinorg); time()-start; print(`###############`); ######################################################################################### ##### sol:=op(clisolve(cmul(fglambdag)-outvars)); Lambda1g:=subs(sol Lambdag); out - cmul(lambda1gfg); ###<<<--- This should be zero 1
out - cmul(fglambda1g); ###<<<--- This is also zero because Lambda1g is in fgcl(pq)fg and fg^=fg cmul(lambda1gfg)-cmul(fglambda1g); ###<<<--- This should be zero Lambdag := µ 1 + µ + µ 3 e + µ 4 vars := [ µ 1 µ µ 3 µ 4 out := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) e ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) + ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) e3 ############### ( ψ14 φ13 ψ11 φ1 + ψ13 φ14 + ψ1 φ11) ( ψ11 φ14 + ψ14 φ11 + ψ1 φ13 ψ13 φ1) e3 ( ψ1 φ14 + ψ13 φ11 ψ11 φ13 + ψ14 φ1) 3 ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) 3.19 ############### sol := { µ 1 = ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13 µ = ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14 µ 3 = ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14 µ 4 = ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1} Lambda1g := ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ##findquatmatrix33(lambda1gnk"lambda"); Are these two forms the same? Yes but why? 'sol1'=sol1; 'sol'=sol; sol1 = { λ 1 = ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13 λ = ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14 λ 3 = ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14 λ 4 = ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1} sol = { µ 1 = ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13 µ = ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14 µ 3 = ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14 µ 4 = ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1} 'Lambda1'=Lambda1; Λ1 = ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) 'Lambda1g'=Lambda1g; Lambda1g = ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) evalb(lambda1-lambda1g=); Now we save if needed: LAMBDA[[pq:=[Lambda1Lambda1g; save LAMBDA "LAMBDA.m"; LAMBDA [ 3 := [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) true
+ ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) read "LAMBDA.m": read "BETA_PLUS.m": read "BETA_MINUS.m": LAM:=LAMBDA[[pq; LAM := [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) BETA_PLUS[[pq; BETA_MINUS[[pq; [[ [ [ [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ######################################################################################### ################################################## print(`##############`); print(`this SHOULD BE TRUE: `);flaglambda1:=evalb(simplify(lam[-lambda1)=); ###<<<--- comparing LAMBDA[pq[ saved with computed Lambda1 print(`##############`); print(`this SHOULD BE TRUE: `);flaglambda1g:=evalb(simplify(lam[-lambda1g)=); ###<<<--- comparing LAMBDA[pq[ saved with computed Lambda1g print(`##############`); print(`this SHOULD BE TRUE: `);flaglambda1lambda1g:=evalb(flaglambda1 and flaglambda1g); ######################################################################################### ################################################## ############## THIS SHOULD BE TRUE: flaglambda1 := true ############## THIS SHOULD BE TRUE: flaglambda1g := true ############## THIS SHOULD BE TRUE: flaglambda1lambda1g := true LAMBDA[[pq:=[Lambda1Lambda1g; save LAMBDA "LAMBDA.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet LAMBDA [ 3 := [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ######################################################################################### ################################################## if not flaglambda1lambda1g then LAMBDA[[pq:=[Lambda1Lambda1g; save LAMBDA "LAMBDA.m"; ### this may be needed if data stored is bad or it has not been computed and stored yet print(`saved NEW ENTRY IN LAMBDA for signature: `[pq); else print(`entry IN LAMBDA for signature: `[pq`was OK.`); ENTRY IN LAMBDA for signature: [ 3 was OK. 3
The above has been checked for errors in these signatures: (a) real semisimple: (1) (3) (7) (43) (18) (54) (9) (b) quaternionic semisimple:(3) (14) (5) (5) (61) (36) (7) LAM:=LAMBDA[[pq; beta_plus_no_pure:=[beta_plus[[pq[[beta_plus[[pq[[; beta_minus_no_pure:=[beta_minus[[pq[[beta_minus[[pq[[; LAM := [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) beta_plus_no_pure := [ beta_minus_no_pure := [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) if q= then evalb(simplify(lam-beta_plus_no_pure)=[) elif p= then evalb(simplify(lam-beta_minus_no_pure)=[) true [pq; [ 3 'LAMBDA[[pq'=LAMBDA[[pq; LAMBDA [ pq = [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) 'BETA_PLUS[[pq'=BETA_PLUS[[pq; BETA_PLUS [ pq = [[ [ 'BETA_MINUS[[pq'=BETA_MINUS[[pq; BETA_MINUS [ pq = [ [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) [ ( ψ11 φ11 + ψ1 φ1 + ψ14 φ14 + ψ13 φ13) + ( ψ1 φ11 + ψ14 φ13 + ψ11 φ1 ψ13 φ14) + ( ψ11 φ13 ψ14 φ1 ψ13 φ11 + ψ1 φ14) e + ( ψ11 φ14 ψ1 φ13 ψ14 φ11 + ψ13 φ1) assigned(beta_plus[[pq); assigned(beta_minus[[pq);assigned(lambda[[pq); true true true ######################################################################################### ######################## Displaying signatures of all entries which have been computed: A. LAMBDA: L_indices_LAMBDA:=sort([indices(LAMBDA'nolist')by_dimension); L_indices_LAMBDA := [ [ 1 1 [ [ 1 [ 3 [ 3 [ 1 [ 1 3 [ 3 1 [ 4 [ 4 [ [ 1 4 [ 5 [ 5 [ 4 1 [ 3 [ 3 [ 5 1 [ 6 [ 4 [ 1 5 [ 6 [ 4 [ 3 3 [ 6 1 [ 3 4 [ 5 [ 1 6 [ 7 [ 4 3 [ 7 [ 5 [ 6 [ 3 5 [ 7 1 [ 4 4 [ 6 [ 8 [ 8 [ 1 7 [ 5 3 [ 6 3 [ 3 6 [ 8 1 [ 7 [ 9 [ 9 [ 5 4 [ 4 5 [ 1 8 [ 7 4
##LAMBDA[pq:=evaln(LAMBDA[pq); ###eliminating unneeded entry if needed ##save LAMBDA "LAMBDA.m"; B. BETA_PLUS: L_indices_BETA_PLUS:=sort([indices(BETA_PLUS'nolist')by_dimension); L_indices_BETA_PLUS := [ [ 1 1 [ [ 1 [ 3 [ 3 [ 1 [ 1 3 [ 3 1 [ 4 [ 4 [ [ 1 4 [ 5 [ 5 [ 4 1 [ 3 [ 3 [ 5 1 [ 6 [ 4 [ 1 5 [ 6 [ 4 [ 3 3 [ 6 1 [ 3 4 [ 5 [ 1 6 [ 7 [ 4 3 [ 7 [ 5 [ 6 [ 3 5 [ 7 1 [ 4 4 [ 6 [ 8 [ 8 [ 1 7 [ 5 3 [ 6 3 [ 3 6 [ 8 1 [ 7 [ 9 [ 9 [ 5 4 [ 4 5 [ 1 8 [ 7 ##BETA_PLUS[pq:=evaln(BETA_PLUS[pq); ###eliminating unneeded entry if needed ##save BETA_PLUS "BETA_PLUS.m"; C. BETA_MINUS: L_indices_BETA_MINUS:=sort([indices(BETA_MINUS'nolist')by_dimension); L_indices_BETA_MINUS := [ [ 1 1 [ [ 1 [ 3 [ 3 [ 1 [ 1 3 [ 3 1 [ 4 [ 4 [ [ 1 4 [ 5 [ 5 [ 4 1 [ 3 [ 3 [ 5 1 [ 6 [ 4 [ 1 5 [ 6 [ 4 [ 3 3 [ 6 1 [ 3 4 [ 5 [ 1 6 [ 7 [ 4 3 [ 7 [ 5 [ 6 [ 3 5 [ 7 1 [ 4 4 [ 6 [ 8 [ 8 [ 1 7 [ 5 3 [ 6 3 [ 3 6 [ 8 1 [ 7 [ 9 [ 9 [ 5 4 [ 4 5 [ 1 8 [ 7 ##BETA_MINUS[pq:=evaln(BETA_MINUS[pq); ###eliminating unneeded entry if needed ##save BETA_MINUS "BETA_MINUS.m"; Checking if there are any signatures [[pq left to compute LAMBDA[[pq BETA_PLUS[[pq or BETA_MINUS[[pq: A. For real simple first: L_real_simple:=sort(all_sigs(1..9'real''simple')by_dimension);nops(%); L_real_simple := [ [ 1 1 [ [ [ 3 1 [ 6 [ 3 3 [ 4 [ 8 [ 1 7 [ 4 4 [ 5 3 [ 8 1 LAMBDA_to_do_real_simple:=[:for pq in L_real_simple do if not member(pql_indices_lambda) then LAMBDA_to_do_real_simple:=[op(LAMBDA_to_do_real_simple)pq end if end do; seq(pq=member(pql_indices_lambda)pq=l_real_simple); 'LAMBDA_to_do_real_simple'=LAMBDA_to_do_real_simple; ###<<<--- LAMBDA_to_do i real simple case LAMBDA_to_do_real_simple:=remove(memberLAMBDA_to_do_real_simple[); ###<<<--- adjusted LAMBDA_to_do in real simple case [ 1 = true [ = true [ = true [ 3 = true [ 6 = true [ 3 3 = true [ 4 = true [ 8 = true [ 1 7 = true [ 4 4 = true [ 5 3 = true [ 8 = true LAMBDA_to_do_real_simple = [ LAMBDA_to_do_real_simple := [ ########################################################## BETA_PLUS_to_do_real_simple:=[:for pq in L_real_simple do if not member(pql_indices_beta_plus) then BETA_PLUS_to_do_real_simple:=[op(BETA_PLUS_to_do_real_simple)pq end if end do; seq(pq=member(pql_indices_beta_plus)pq=l_real_simple); 'BETA_PLUS_to_do_real_simple'=BETA_PLUS_to_do_real_simple; ###<<<--- BETA_PLUS_to_do i real simple case BETA_PLUS_to_do_real_simple:=remove(memberBETA_PLUS_to_do_real_simple[); ###<<<--- adjusted BETA_PLUS_to_do_real_simple in real simple case [ 1 = true [ = true [ = true [ 3 = true [ 6 = true [ 3 3 = true [ 4 = true [ 8 = true [ 1 7 = true [ 4 4 = true [ 5 3 = true [ 8 = true BETA_PLUS_to_do_real_simple = [ 5