From: jkp@ukc.ac.uk (J.K.Pearson)
Newsgroups: sci.math.symbolic
Subject: Polynomials over Clifford algebras.
Date: 16 Apr 92 13:11:24 GMT
Organization: Electronics Lab, University of Kent at Canterbury, UK.


A while ago, I posted a request for information, on the use of symbolic
math packages on non commuatvie algebras.

My orginal example was given a Clifford algebra, an element can be represented
as,

x = a + b*e1 + c*e2 + d*e12 , (e1 e2 e12 are the basis elements). Multiplication
is subject to rules such as,

e1*e1 = -1, e1*e12 = -e2 etc, addition done element by element.

I needed expansion of polynomials such as x^3+1.
The best solution for me was a package called Form, by Jod Vermaseren. 
I don't like maple and mathemaitca, because I always feel it looks messy, but
I don't doubt the power of them, just I've never put much effort in to learning
to use them.
Also reduce at UKC, lives on the VAX, this means I have to use a slow brain dead
machine an worse VMS(this is not supposed to start a flame war, this is my
opinion only).

I would recomened people to have a look at form.But here is all the soloutionsin the various different pacakeges.

Any thanks to all the peopl who helped me.

                                The Form soloution
                               ~~~~~~~~~~~~~~~~~~~~

You should try to pick up FORM from nikhefh.nikhef.nl
There is also a dvi file of the manual.
FORM has non-commutative objects built in. In your example
you would use

Functions  e1,e2,e1e2;
Symbols a,b,c,d;
Local  F=(a+b*e1+c*e2+d*e1e2)^2+1;
repeat;
id  e1*e1 = -1;
id  e2*e2 = -1;
id  e1*e2 = e1e2;
id  e2*e1 = -e1e2;
id  more of the above
endrepeat;
print;
.end
 
The contents of the repeat loop would break down any product.
You can also make this into a procedure.
In addition FORM is quite fast and can handle very big expressions.
It has very little knowledge built in (that is of course the compensation
for the speed and the big things).
 
You will need anonymous ftp.
 
Good Luck
Jos Vermaseren



The reduce soloution from John Fitch <jpff@maths.bath.ac.uk>

1: operator e;
 
2: noncom e;
 
3: let e(1)*e(1) = 1, e(2)*e(2)=1, e(1)*e(2)=-e(2)*e(1);
 
4: (a+b*e(1)+c*e(2)+d*e(1)*e(2))^3+1;
 
                2                2                2                3
 - 3*e(2)*e(1)*a *d - e(2)*e(1)*b *d - e(2)*e(1)*c *d + e(2)*e(1)*d
           2           2           3           2           2
 + 3*e(2)*a *c + e(2)*b *c + e(2)*c  - e(2)*c*d  + 3*e(1)*a *b
 
         3           2           2    3        2        2        2
 + e(1)*b  + e(1)*b*c  - e(1)*b*d  + a  + 3*a*b  + 3*a*c  - 3*a*d
 
 + 1
 
5:




                             In Mathematica
                            ~~~~~~~~~~~~~~~

Mathematica
 
(* rules for  Clifford algebra *)
       
  ncm[s[i_],s[j_]] := -ncm[s[j], s[i]]/;i > j
  ncm[s[i_], s[i_]] := 1
  
(* rules for non-commutative multiplication *)
 

(* - behavior of multiplication by integers *)
 
  ncm[a_?NumberQ, b_?NumberQ, c___] := ncm[a b, c]
 
(* - distributivity of addition *)
 
  ncm[m___, a_Plus,b_Plus, n___] :=
          ncm[m, Distribute[tmp[a,b],Plus]/.tmp -> ncm, n]
 
(*  - associativity *)
 
  ncm[a___, ncm[r___], b___] := ncm[a, r, b]
 
(* here's the expression *)
 
  expr = Plus @@ Map[s, Range[1,9]]
 
(* and here's the power.  Note the output form involves ncm; this could be
   formatted to look cleaner for one's individual purposes. *)
 
  expr^5/.
        x_^n_ :> Fold[ncm, x, Table[x, {n - 1}]]
 

 

                              Maple
                             ~~~~~~~

Mathematica
 
(* rules for  Clifford algebra *)
       
  ncm[s[i_],s[j_]] := -ncm[s[j], s[i]]/;i > j
  ncm[s[i_], s[i_]] := 1
  
(* rules for non-commutative multiplication *)
 

(* - behavior of multiplication by integers *)
 
  ncm[a_?NumberQ, b_?NumberQ, c___] := ncm[a b, c]
 
(* - distributivity of addition *)
 
  ncm[m___, a_Plus,b_Plus, n___] :=
          ncm[m, Distribute[tmp[a,b],Plus]/.tmp -> ncm, n]
 
(*  - associativity *)
 
  ncm[a___, ncm[r___], b___] := ncm[a, r, b]
 
(* here's the expression *)
 
  expr = Plus @@ Map[s, Range[1,9]]
 
(* and here's the power.  Note the output form involves ncm; this could be
   formatted to look cleaner for one's individual purposes. *)
 
  expr^5/.
        x_^n_ :> Fold[ncm, x, Table[x, {n - 1}]]
 


Havn't tried this one, but here it is any way.

There is a system/package which can handle non-commutative polynomials
of so called 'solvable type'.
Literature: Kandri-Rodi and Weispfenning:
''Non-commutative Groebner bases in algebras of solvable type''
in J. Symb. Comp., 9, pp 1-26, 1990.
 
The respective package is available via anonymous ftp
from 'alice.fmi.uni-passau.de' = '132.231.10.1'.
 
Sincerely Heinz Kredel
 
 



Hope this helps people.
--
------------------------------------------------------------------------------
Justin Pearson,                       |   So what do you thinks going on?    |
University of Kent at Canterbury      |                                      |
U.K.                                  |                                      |