2.2 &t operators (19.12.97)

2.2.1 Rafal Ablamowicz (23.10.01)

Thanks to all who have replied to my questions regarding the `&`- type operators in Maple. Your comments and suggestions have been very helpful.

In return, let me show you my code of an multilinear operator `&t` which is also left-associative. It gives the basic structure of a tensor product of orthogonal Clifford algebras. It is part of a small extension package G[raded] T[tensor] P[roduct] to my ’CLIFFORD’ package to enable computations in graded tensor products of orthogonal Clifford algebras. These algebras are Z2-graded and their graded tensor products are Z2-isomorphic to orthogonal Clifford algebras in higher dimensions. These strange types tensorprod, clipolynom, cliscalar are defined in the two packages.

If anyone is interested in these packages, please e-mail me.

 GTP[`&t`]:= 
 proc(a1::{`*`,`+`,tensorprod,clipolynom,cliscalar},a2::{cliscalar,clipolynom}) 
 local co,a11,a22,p,i; 
 if nargs<2 then ERROR(`at least two arguments are needed`) fi; 
 if nargs>2 then RETURN(`&t`(`&t`(args[1..2]),args[3..nargs])) fi; 
 if type(a1,`+`) then RETURN(map(`&t`,a1,a2)) 
 elif type(a2,`+`) then RETURN(map2(`&t`,a1,a2)) fi; 
 if type(a1,`*`) and hastype(a1,tensorprod) then 
                     a11:=select(type,a1,tensorprod): 
                     co:=remove(type,a1,tensorprod): 
                     RETURN(co*(`&t`(a11,a2))) 
 fi; 
 if type(a1,`*`) and not hastype(a1,tensorprod) then a11:=select(type,a1,clibasmon): 
                      co:=remove(type,a1,clibasmon): 
                      RETURN(co*(`&t`(a11,a2))) 
 elif type(a2,`*`) and not hastype(a2,tensorprod) then a22:=select(type,a2,clibasmon): 
                        co:=remove(type,a2,clibasmon): 
                        RETURN(co*(`&t`(a1,a22))) 
 fi; 
 p:=args[1];for i from 2 to nargs do p:='`&t`'(p,args[i]) od; 
 RETURN(p); 
 end: