Component Level Formulas for Geometric Algebra

Kurt Nalty

Geometric algebra is an associative algebra, where N dimensional space has 2^N
product terms, ranging from scalars to vectors to higher dimensional anti-symmetric
wedge product multivectors.

Associated with each geometric algebra can be a metric, where the square of each basis vector
is typically given a value of 1 for Euclidean space, 0 for wedge or antisymmetric spaces,
or -1 for Minkowski or relativistic spaces.

While most work in geometric algebra is done at a high level symbolic basis, akin to working
with vectors, to produce computer graphics or actual numbers, I find it necessary to establish
a coordinate frame, and produce numerical terms.

In these notes, I assume C type structures are being used. In this example below, the 'q'
component is the scalar component, the x, y, and z components are basis vectors, the xy,
xz and yz components are oriented plane bivectors, while the xyz component is the oriented
solid. Notice the three space vectors lead to eight (2^3) components.

typedef struct {
    long q;     // scalar component
    long x;     // vector (x component)
    long y;     // vector (y component)
    long z;     // vector (z component)
    long xy;    // bivector (xy oriented plane)
    long xz;    // bivector (xz plane) [Many authors use zx with an associated sign change]
    long yz;    // bivector (yz oriented plane)
    long xyz;   // trivector (xyz oriented solid)
} E3PPP;

When evaluating the product of two components, I use a bubble sort, counting the number of swaps,
to determine the overall sign due to swaps of the antisymmetric basis. I then detect the duplicate
basis terms, such as xx, and using the associated metric, replace the squared basis with the 
metric indicated factor.

Example:  xy*xyz using (-1,1,1) metric
    xy*xyz => xyxyz => -xxyyz => - (-1) (1) z => +z
    
The following sections will be organized first by spatial dimension, then by metric.
In each section, I start with a multiplication table, where the prefactor is on the
left, and the postfactor is on the top, followed by component equations for c = ab.

************************ Nine Dimensional Algebras ***************************

For metric elements of (1,0,-1), there are nine two dimensional algebras.

******************* Two Dimensional Euclidean (1,1) metric ********************
    
 q     x     y     xy   
 x     q     xy    y    
 y    -xy    q    -x    
 xy   -y     x    -q    

c.q   =  a.q*b.q   + a.x*b.x   + a.y*b.y   - a.xy*b.xy ;
c.x   =  a.q*b.x   + a.x*b.q   - a.y*b.xy  + a.xy*b.y  ;
c.y   =  a.q*b.y   + a.x*b.xy  + a.y*b.q   - a.xy*b.x  ;
c.xy  =  a.q*b.xy  + a.x*b.y   - a.y*b.x   + a.xy*b.q  ;


******************* Two Dimensional (1,0) metric ********************
    
 q     x     y     xy   
 x     q     xy    y    
 y    -xy    0     0    
 xy   -y     0     0    

c.q   = a.q*b.q  + a.x*b.x  ;
c.x   = a.q*b.x  + a.x*b.q  ;
c.y   = a.q*b.y  + a.x*b.xy + a.y*b.q - a.xy*b.x  ;
c.xy  = a.q*b.xy + a.x*b.y  - a.y*b.x + a.xy*b.q  ;

******************* Two Dimensional (1,-1) metric ********************
    
 q     x     y     xy   
 x     q     xy    y    
 y    -xy   -q     x    
 xy   -y    -x     q    

c.q  = a.q*b.q  + a.x*b.x  - a.y*b.y  + a.xy*b.xy ;
c.x  = a.q*b.x  + a.x*b.q  + a.y*b.xy - a.xy*b.y  ;
c.y  = a.q*b.y  + a.x*b.xy + a.y*b.q  - a.xy*b.x  ;
c.xy = a.q*b.xy + a.x*b.y  - a.y*b.x  + a.xy*b.q  ;

******************* Two Dimensional (0,1) metric ********************

 q     x     y     xy   
 x     0     xy    0    
 y    -xy    q    -x    
 xy    0     x     0    

c.q  = a.q*b.q  + a.y*b.y  ;
c.x  = a.q*b.x  + a.x*b.q - a.y*b.xy + a.xy*b.y  ;
c.y  = a.q*b.y  + a.y*b.q  ;
c.xy = a.q*b.xy + a.x*b.y - a.y*b.x  + a.xy*b.q  ;

******************* Two Dimensional (0,0) metric ********************

 q     x     y     xy   
 x     0     xy    0    
 y    -xy    0     0    
 xy    0     0     0    

c.q  = a.q*b.q  ;
c.x  = a.q*b.x  + a.x*b.q  ;
c.y  = a.q*b.y  + a.y*b.q  ;
c.xy = a.q*b.xy + a.x*b.y - a.y*b.x + a.xy*b.q  ;

******************* Two Dimensional (0,-1) metric ********************

 q     x     y     xy   
 x     0     xy    0    
 y    -xy   -q     x    
 xy    0    -x     0    

c.q  = a.q*b.q  - a.y*b.y ; 
c.x  = a.q*b.x  + a.x*b.q + a.y*b.xy - a.xy*b.y ; 
c.y  = a.q*b.y  + a.y*b.q ;
c.xy = a.q*b.xy + a.x*b.y - a.y*b.x  + a.xy*b.q  ;

******************* Two Dimensional (-1,1) metric ********************

 q     x     y     xy   
 x    -q     xy   -y    
 y    -xy    q    -x    
 xy    y     x     q    

c.q  = a.q*b.q  - a.x*b.x  + a.y*b.y  + a.xy*b.xy ;
c.x  = a.q*b.x  + a.x*b.q  - a.y*b.xy + a.xy*b.y  ;
c.y  = a.q*b.y  - a.x*b.xy + a.y*b.q  + a.xy*b.x  ;
c.xy = a.q*b.xy + a.x*b.y  - a.y*b.x  + a.xy*b.q  ;

******************* Two Dimensional (-1,0) metric ********************

 q     x     y     xy   
 x    -q     xy   -y    
 y    -xy    0     0    
 xy    y     0     0    

c.q  = a.q*b.q  - a.x*b.x ; 
c.x  = a.q*b.x  + a.x*b.q ;
c.y  = a.q*b.y  - a.x*b.xy + a.y*b.q + a.xy*b.x ; 
c.xy = a.q*b.xy + a.x*b.y  - a.y*b.x + a.xy*b.q ;

******************* Two Dimensional (-1,-1) metric ********************

 q     x     y     xy   
 x    -q     xy   -y    
 y    -xy   -q     x    
 xy    y    -x    -q    

c.q  = a.q*b.q  - a.x*b.x  - a.y*b.y  - a.xy*b.xy ;
c.x  = a.q*b.x  + a.x*b.q  + a.y*b.xy - a.xy*b.y  ;
c.y  = a.q*b.y  - a.x*b.xy + a.y*b.q  + a.xy*b.x  ;
c.xy = a.q*b.xy + a.x*b.y  - a.y*b.x  + a.xy*b.q  ;


******************* Two Dimensional Wedge ********************

The pure wedge product has no scalar terms. It is associative,
being the algebra (0,0), simply with the scalar terms zeroed.

       x     y     xy   
 x     0     xy    0    
 y    -xy    0     0    
 xy    0     0     0    

c.q  = 0 ; 
c.x  = 0 ; 
c.y  = 0 ; 
c.xy = a.x*b.y - a.y*b.x ; 

****************** Three Dimensional Cases *********************

For the three dimensional case, we have eight elements, and 27 metric
combinations. I am only listing a handful of cases, which I feel cover the
interesting cases.

******************* Three Dimensional (1,1,1) metric ********************

 q     x     y     z     xy    xz    yz    xyz  
 x     q     xy    xz    y     z     xyz   yz   
 y    -xy    q     yz   -x    -xyz   z    -xz   
 z    -xz   -yz    q     xyz  -x    -y     xy   
 xy   -y     x     xyz  -q    -yz    xz   -z    
 xz   -z    -xyz   x     yz   -q    -xy    y    
 yz    xyz  -z     y    -xz    xy   -q    -x    
 xyz   yz   -xz    xy   -z     y    -x    -q    

c.q   = a.q*b.q   + a.x*b.x   + a.y*b.y   - a.xy*b.xy  + a.z*b.z   - a.xz*b.xz  - a.yz*b.yz  - a.xyz*b.xyz ;
c.x   = a.q*b.x   + a.x*b.q   - a.y*b.xy  + a.xy*b.y   - a.z*b.xz  + a.xz*b.z   - a.yz*b.xyz - a.xyz*b.yz  ;
c.y   = a.q*b.y   + a.x*b.xy  + a.y*b.q   - a.xy*b.x   - a.z*b.yz  + a.xz*b.xyz + a.yz*b.z   + a.xyz*b.xz  ;
c.z   = a.q*b.z   + a.x*b.xz  + a.y*b.yz  - a.xy*b.xyz + a.z*b.q   - a.xz*b.x   - a.yz*b.y   - a.xyz*b.xy  ;
c.xy  = a.q*b.xy  + a.x*b.y   - a.y*b.x   + a.xy*b.q   + a.z*b.xyz - a.xz*b.yz  + a.yz*b.xz  + a.xyz*b.z   ;
c.xz  = a.q*b.xz  + a.x*b.z   - a.y*b.xyz + a.xy*b.yz  - a.z*b.x   + a.xz*b.q   - a.yz*b.xy  - a.xyz*b.y   ;
c.yz  = a.q*b.yz  + a.x*b.xyz + a.y*b.z   - a.xy*b.xz  - a.z*b.y   + a.xz*b.xy  + a.yz*b.q   + a.xyz*b.x   ;
c.xyz = a.q*b.xyz + a.x*b.yz  - a.y*b.xz  + a.xy*b.z   + a.z*b.xy  - a.xz*b.y   + a.yz*b.x   + a.xyz*b.q   ;

******************* Three Dimensional (-1,-1,-1) metric ********************

 q     x     y     z     xy    xz    yz    xyz  
 x    -q     xy    xz   -y    -z     xyz  -yz   
 y    -xy   -q     yz    x    -xyz  -z     xz   
 z    -xz   -yz   -q     xyz   x     y    -xy   
 xy    y    -x     xyz  -q     yz   -xz   -z    
 xz    z    -xyz  -x    -yz   -q     xy    y    
 yz    xyz   z    -y     xz   -xy   -q    -x    
 xyz  -yz    xz   -xy   -z     y    -x     q    

c.q   = a.q*b.q   - a.x*b.x   - a.y*b.y   - a.xy*b.xy  - a.z*b.z   - a.xz*b.xz  - a.yz*b.yz  + a.xyz*b.xyz ;
c.x   = a.q*b.x   + a.x*b.q   + a.y*b.xy  - a.xy*b.y   + a.z*b.xz  - a.xz*b.z   - a.yz*b.xyz - a.xyz*b.yz  ;
c.y   = a.q*b.y   - a.x*b.xy  + a.y*b.q   + a.xy*b.x   + a.z*b.yz  + a.xz*b.xyz - a.yz*b.z   + a.xyz*b.xz  ;
c.z   = a.q*b.z   - a.x*b.xz  - a.y*b.yz  - a.xy*b.xyz + a.z*b.q   + a.xz*b.x   + a.yz*b.y   - a.xyz*b.xy  ;
c.xy  = a.q*b.xy  + a.x*b.y   - a.y*b.x   + a.xy*b.q   - a.z*b.xyz + a.xz*b.yz  - a.yz*b.xz  - a.xyz*b.z   ;
c.xz  = a.q*b.xz  + a.x*b.z   + a.y*b.xyz - a.xy*b.yz  - a.z*b.x   + a.xz*b.q   + a.yz*b.xy  + a.xyz*b.y   ;
c.yz  = a.q*b.yz  - a.x*b.xyz + a.y*b.z   + a.xy*b.xz  - a.z*b.y   - a.xz*b.xy  + a.yz*b.q   - a.xyz*b.x   ;
c.xyz = a.q*b.xyz + a.x*b.yz  - a.y*b.xz  + a.xy*b.z   + a.z*b.xy  - a.xz*b.y   + a.yz*b.x   + a.xyz*b.q   ;

******************* Three Dimensional (0,0,0) metric ********************

 q     x     y     z     xy    xz    yz    xyz  
 x     0     xy    xz    0     0     xyz   0    
 y    -xy    0     yz    0    -xyz   0     0    
 z    -xz   -yz    0     xyz   0     0     0    
 xy    0     0     xyz   0     0     0     0    
 xz    0    -xyz   0     0     0     0     0    
 yz    xyz   0     0     0     0     0     0    
 xyz   0     0     0     0     0     0     0    

c.q   = a.q*b.q  ;
c.x   = a.q*b.x   + a.x*b.q  ;
c.y   = a.q*b.y   + a.y*b.q  ;
c.z   = a.q*b.z   + a.z*b.q  ;
c.xy  = a.q*b.xy  + a.x*b.y   - a.y*b.x   + a.xy*b.q  ;
c.xz  = a.q*b.xz  + a.x*b.z   - a.z*b.x   + a.xz*b.q  ;
c.yz  = a.q*b.yz  + a.y*b.z   - a.z*b.y   + a.yz*b.q  ;
c.xyz = a.q*b.xyz + a.x*b.yz  - a.y*b.xz  + a.xy*b.z   + a.z*b.xy  - a.xz*b.y   + a.yz*b.x   + a.xyz*b.q ; 


******************* Three Dimensional Wedge Only ********************

       x     y     z     xy    xz    yz    xyz  
 x     0     xy    xz    0     0     xyz   0    
 y    -xy    0     yz    0    -xyz   0     0    
 z    -xz   -yz    0     xyz   0     0     0    
 xy    0     0     xyz   0     0     0     0    
 xz    0    -xyz   0     0     0     0     0    
 yz    xyz   0     0     0     0     0     0    
 xyz   0     0     0     0     0     0     0    

c.q   = 0  ;
c.x   = 0  ;
c.y   = 0  ;
c.z   = 0  ;
c.xy  = a.x*b.y   - a.y*b.x  ;
c.xz  = a.x*b.z   - a.z*b.x  ;
c.yz  = a.y*b.z   - a.z*b.y  ;
c.xyz = a.x*b.yz  - a.y*b.xz  + a.xy*b.z   + a.z*b.xy  - a.xz*b.y   + a.yz*b.x  ;


******************** Four Dimensional Cases ******************************

The four dimensional cases have 16 components and 81 metric combinations.
Only a small subset of the metric cases are shown here.


******************* Four Dimensional (1,1,1,1) metric ********************

 q      x      y      z      t      xy     xz     yz     xt     yt     zt     xyz    xyt    xzt    yzt    xyzt  
 x      q      xy     xz     xt     y      z      xyz    t      xyt    xzt    yz     yt     zt     xyzt   yzt   
 y     -xy     q      yz     yt    -x     -xyz    z     -xyt    t      yzt   -xz    -xt    -xyzt   zt    -xzt   
 z     -xz    -yz     q      zt     xyz   -x     -y     -xzt   -yzt    t      xy     xyzt  -xt    -yt     xyt   
 t     -xt    -yt    -zt     q      xyt    xzt    yzt   -x     -y     -z     -xyzt   xy     xz     yz    -xyz   
 xy    -y      x      xyz    xyt   -q     -yz     xz    -yt     xt     xyzt  -z     -t     -yzt    xzt   -zt    
 xz    -z     -xyz    x      xzt    yz    -q     -xy    -zt    -xyzt   xt     y      yzt   -t     -xyt    yt    
 yz     xyz   -z      y      yzt   -xz     xy    -q      xyzt  -zt     yt    -x     -xzt    xyt   -t     -xt    
 xt    -t     -xyt   -xzt    x      yt     zt     xyzt  -q     -xy    -xz    -yzt    y      z      xyz   -yz    
 yt     xyt   -t     -yzt    y     -xt    -xyzt   zt     xy    -q     -yz     xzt   -x     -xyz    z      xz    
 zt     xzt    yzt   -t      z      xyzt  -xt    -yt     xz     yz    -q     -xyt    xyz   -x     -y     -xy    
 xyz    yz    -xz     xy     xyzt  -z      y     -x      yzt   -xzt    xyt   -q     -zt     yt    -xt    -t     
 xyt    yt    -xt    -xyzt   xy    -t     -yzt    xzt    y     -x     -xyz    zt    -q     -yz     xz     z     
 xzt    zt     xyzt  -xt     xz     yzt   -t     -xyt    z      xyz   -x     -yt     yz    -q     -xy    -y     
 yzt   -xyzt   zt    -yt     yz    -xzt    xyt   -t     -xyz    z     -y      xt    -xz     xy    -q      x     
 xyzt  -yzt    xzt   -xyt    xyz   -zt     yt    -xt    -yz     xz    -xy     t     -z      y     -x      q     

c.q    = a.q*b.q    + a.x*b.x    + a.y*b.y    - a.xy*b.xy   + a.z*b.z    - a.xz*b.xz   - a.yz*b.yz   - a.xyz*b.xyz  + a.t*b.t    - a.xt*b.xt   - a.yt*b.yt   - a.xyt*b.xyt  - a.zt*b.zt   - a.xzt*b.xzt  - a.yzt*b.yzt  + a.xyzt*b.xyzt ;
c.x    = a.q*b.x    + a.x*b.q    - a.y*b.xy   + a.xy*b.y    - a.z*b.xz   + a.xz*b.z    - a.yz*b.xyz  - a.xyz*b.yz   - a.t*b.xt   + a.xt*b.t    - a.yt*b.xyt  - a.xyt*b.yt   - a.zt*b.xzt  - a.xzt*b.zt   + a.yzt*b.xyzt - a.xyzt*b.yzt  ;
c.y    = a.q*b.y    + a.x*b.xy   + a.y*b.q    - a.xy*b.x    - a.z*b.yz   + a.xz*b.xyz  + a.yz*b.z    + a.xyz*b.xz   - a.t*b.yt   + a.xt*b.xyt  + a.yt*b.t    + a.xyt*b.xt   - a.zt*b.yzt  - a.xzt*b.xyzt - a.yzt*b.zt   + a.xyzt*b.xzt  ;
c.z    = a.q*b.z    + a.x*b.xz   + a.y*b.yz   - a.xy*b.xyz  + a.z*b.q    - a.xz*b.x    - a.yz*b.y    - a.xyz*b.xy   - a.t*b.zt   + a.xt*b.xzt  + a.yt*b.yzt  + a.xyt*b.xyzt + a.zt*b.t    + a.xzt*b.xt   + a.yzt*b.yt   - a.xyzt*b.xyt  ;
c.t    = a.q*b.t    + a.x*b.xt   + a.y*b.yt   - a.xy*b.xyt  + a.z*b.zt   - a.xz*b.xzt  - a.yz*b.yzt  - a.xyz*b.xyzt + a.t*b.q    - a.xt*b.x    - a.yt*b.y    - a.xyt*b.xy   - a.zt*b.z    - a.xzt*b.xz   - a.yzt*b.yz   + a.xyzt*b.xyz  ;
c.xy   = a.q*b.xy   + a.x*b.y    - a.y*b.x    + a.xy*b.q    + a.z*b.xyz  - a.xz*b.yz   + a.yz*b.xz   + a.xyz*b.z    + a.t*b.xyt  - a.xt*b.yt   + a.yt*b.xt   + a.xyt*b.t    - a.zt*b.xyzt - a.xzt*b.yzt  + a.yzt*b.xzt  - a.xyzt*b.zt   ;
c.xz   = a.q*b.xz   + a.x*b.z    - a.y*b.xyz  + a.xy*b.yz   - a.z*b.x    + a.xz*b.q    - a.yz*b.xy   - a.xyz*b.y    + a.t*b.xzt  - a.xt*b.zt   + a.yt*b.xyzt + a.xyt*b.yzt  + a.zt*b.xt   + a.xzt*b.t    - a.yzt*b.xyt  + a.xyzt*b.yt   ;
c.yz   = a.q*b.yz   + a.x*b.xyz  + a.y*b.z    - a.xy*b.xz   - a.z*b.y    + a.xz*b.xy   + a.yz*b.q    + a.xyz*b.x    + a.t*b.yzt  - a.xt*b.xyzt - a.yt*b.zt   - a.xyt*b.xzt  + a.zt*b.yt   + a.xzt*b.xyt  + a.yzt*b.t    - a.xyzt*b.xt   ;
c.xt   = a.q*b.xt   + a.x*b.t    - a.y*b.xyt  + a.xy*b.yt   - a.z*b.xzt  + a.xz*b.zt   - a.yz*b.xyzt - a.xyz*b.yzt  - a.t*b.x    + a.xt*b.q    - a.yt*b.xy   - a.xyt*b.y    - a.zt*b.xz   - a.xzt*b.z    + a.yzt*b.xyz  - a.xyzt*b.yz   ;
c.yt   = a.q*b.yt   + a.x*b.xyt  + a.y*b.t    - a.xy*b.xt   - a.z*b.yzt  + a.xz*b.xyzt + a.yz*b.zt   + a.xyz*b.xzt  - a.t*b.y    + a.xt*b.xy   + a.yt*b.q    + a.xyt*b.x    - a.zt*b.yz   - a.xzt*b.xyz  - a.yzt*b.z    + a.xyzt*b.xz   ;
c.zt   = a.q*b.zt   + a.x*b.xzt  + a.y*b.yzt  - a.xy*b.xyzt + a.z*b.t    - a.xz*b.xt   - a.yz*b.yt   - a.xyz*b.xyt  - a.t*b.z    + a.xt*b.xz   + a.yt*b.yz   + a.xyt*b.xyz  + a.zt*b.q    + a.xzt*b.x    + a.yzt*b.y    - a.xyzt*b.xy   ;
c.xyz  = a.q*b.xyz  + a.x*b.yz   - a.y*b.xz   + a.xy*b.z    + a.z*b.xy   - a.xz*b.y    + a.yz*b.x    + a.xyz*b.q    - a.t*b.xyzt + a.xt*b.yzt  - a.yt*b.xzt  - a.xyt*b.zt   + a.zt*b.xyt  + a.xzt*b.yt   - a.yzt*b.xt   + a.xyzt*b.t    ;
c.xyt  = a.q*b.xyt  + a.x*b.yt   - a.y*b.xt   + a.xy*b.t    + a.z*b.xyzt - a.xz*b.yzt  + a.yz*b.xzt  + a.xyz*b.zt   + a.t*b.xy   - a.xt*b.y    + a.yt*b.x    + a.xyt*b.q    - a.zt*b.xyz  - a.xzt*b.yz   + a.yzt*b.xz   - a.xyzt*b.z    ;
c.xzt  = a.q*b.xzt  + a.x*b.zt   - a.y*b.xyzt + a.xy*b.yzt  - a.z*b.xt   + a.xz*b.t    - a.yz*b.xyt  - a.xyz*b.yt   + a.t*b.xz   - a.xt*b.z    + a.yt*b.xyz  + a.xyt*b.yz   + a.zt*b.x    + a.xzt*b.q    - a.yzt*b.xy   + a.xyzt*b.y    ;
c.yzt  = a.q*b.yzt  + a.x*b.xyzt + a.y*b.zt   - a.xy*b.xzt  - a.z*b.yt   + a.xz*b.xyt  + a.yz*b.t    + a.xyz*b.xt   + a.t*b.yz   - a.xt*b.xyz  - a.yt*b.z    - a.xyt*b.xz   + a.zt*b.y    + a.xzt*b.xy   + a.yzt*b.q    - a.xyzt*b.x    ;
c.xyzt = a.q*b.xyzt + a.x*b.yzt  - a.y*b.xzt  + a.xy*b.zt   + a.z*b.xyt  - a.xz*b.yt   + a.yz*b.xt   + a.xyz*b.t    - a.t*b.xyz  + a.xt*b.yz   - a.yt*b.xz   - a.xyt*b.z    + a.zt*b.xy   + a.xzt*b.y    - a.yzt*b.x    + a.xyzt*b.q    ;


******************* Four Dimensional (-1,1,1,1) metric ********************

 q      x      y      z      t      xy     xz     yz     xt     yt     zt     xyz    xyt    xzt    yzt    xyzt  
 x     -q      xy     xz     xt    -y     -z      xyz   -t      xyt    xzt   -yz    -yt    -zt     xyzt  -yzt   
 y     -xy     q      yz     yt    -x     -xyz    z     -xyt    t      yzt   -xz    -xt    -xyzt   zt    -xzt   
 z     -xz    -yz     q      zt     xyz   -x     -y     -xzt   -yzt    t      xy     xyzt  -xt    -yt     xyt   
 t     -xt    -yt    -zt     q      xyt    xzt    yzt   -x     -y     -z     -xyzt   xy     xz     yz    -xyz   
 xy     y      x      xyz    xyt    q      yz     xz     yt     xt     xyzt   z      t      yzt    xzt    zt    
 xz     z     -xyz    x      xzt   -yz     q     -xy     zt    -xyzt   xt    -y     -yzt    t     -xyt   -yt    
 yz     xyz   -z      y      yzt   -xz     xy    -q      xyzt  -zt     yt    -x     -xzt    xyt   -t     -xt    
 xt     t     -xyt   -xzt    x     -yt    -zt     xyzt   q     -xy    -xz     yzt   -y     -z      xyz    yz    
 yt     xyt   -t     -yzt    y     -xt    -xyzt   zt     xy    -q     -yz     xzt   -x     -xyz    z      xz    
 zt     xzt    yzt   -t      z      xyzt  -xt    -yt     xz     yz    -q     -xyt    xyz   -x     -y     -xy    
 xyz   -yz    -xz     xy     xyzt   z     -y     -x     -yzt   -xzt    xyt    q      zt    -yt    -xt     t     
 xyt   -yt    -xt    -xyzt   xy     t      yzt    xzt   -y     -x     -xyz   -zt     q      yz     xz    -z     
 xzt   -zt     xyzt  -xt     xz    -yzt    t     -xyt   -z      xyz   -x      yt    -yz     q     -xy     y     
 yzt   -xyzt   zt    -yt     yz    -xzt    xyt   -t     -xyz    z     -y      xt    -xz     xy    -q      x     
 xyzt   yzt    xzt   -xyt    xyz    zt    -yt    -xt     yz     xz    -xy    -t      z     -y     -x     -q     

c.q    = a.q*b.q    - a.x*b.x    + a.y*b.y    + a.xy*b.xy   + a.z*b.z    + a.xz*b.xz   - a.yz*b.yz   + a.xyz*b.xyz  + a.t*b.t    + a.xt*b.xt   - a.yt*b.yt   + a.xyt*b.xyt  - a.zt*b.zt   + a.xzt*b.xzt  - a.yzt*b.yzt  - a.xyzt*b.xyzt ;
c.x    = a.q*b.x    + a.x*b.q    - a.y*b.xy   + a.xy*b.y    - a.z*b.xz   + a.xz*b.z    - a.yz*b.xyz  - a.xyz*b.yz   - a.t*b.xt   + a.xt*b.t    - a.yt*b.xyt  - a.xyt*b.yt   - a.zt*b.xzt  - a.xzt*b.zt   + a.yzt*b.xyzt - a.xyzt*b.yzt  ;
c.y    = a.q*b.y    - a.x*b.xy   + a.y*b.q    + a.xy*b.x    - a.z*b.yz   - a.xz*b.xyz  + a.yz*b.z    - a.xyz*b.xz   - a.t*b.yt   - a.xt*b.xyt  + a.yt*b.t    - a.xyt*b.xt   - a.zt*b.yzt  + a.xzt*b.xyzt - a.yzt*b.zt   - a.xyzt*b.xzt  ;
c.z    = a.q*b.z    - a.x*b.xz   + a.y*b.yz   + a.xy*b.xyz  + a.z*b.q    + a.xz*b.x    - a.yz*b.y    + a.xyz*b.xy   - a.t*b.zt   - a.xt*b.xzt  + a.yt*b.yzt  - a.xyt*b.xyzt + a.zt*b.t    - a.xzt*b.xt   + a.yzt*b.yt   + a.xyzt*b.xyt  ;
c.t    = a.q*b.t    - a.x*b.xt   + a.y*b.yt   + a.xy*b.xyt  + a.z*b.zt   + a.xz*b.xzt  - a.yz*b.yzt  + a.xyz*b.xyzt + a.t*b.q    + a.xt*b.x    - a.yt*b.y    + a.xyt*b.xy   - a.zt*b.z    + a.xzt*b.xz   - a.yzt*b.yz   - a.xyzt*b.xyz  ;
c.xy   = a.q*b.xy   + a.x*b.y    - a.y*b.x    + a.xy*b.q    + a.z*b.xyz  - a.xz*b.yz   + a.yz*b.xz   + a.xyz*b.z    + a.t*b.xyt  - a.xt*b.yt   + a.yt*b.xt   + a.xyt*b.t    - a.zt*b.xyzt - a.xzt*b.yzt  + a.yzt*b.xzt  - a.xyzt*b.zt   ;
c.xz   = a.q*b.xz   + a.x*b.z    - a.y*b.xyz  + a.xy*b.yz   - a.z*b.x    + a.xz*b.q    - a.yz*b.xy   - a.xyz*b.y    + a.t*b.xzt  - a.xt*b.zt   + a.yt*b.xyzt + a.xyt*b.yzt  + a.zt*b.xt   + a.xzt*b.t    - a.yzt*b.xyt  + a.xyzt*b.yt   ;
c.yz   = a.q*b.yz   - a.x*b.xyz  + a.y*b.z    + a.xy*b.xz   - a.z*b.y    - a.xz*b.xy   + a.yz*b.q    - a.xyz*b.x    + a.t*b.yzt  + a.xt*b.xyzt - a.yt*b.zt   + a.xyt*b.xzt  + a.zt*b.yt   - a.xzt*b.xyt  + a.yzt*b.t    + a.xyzt*b.xt   ;
c.xt   = a.q*b.xt   + a.x*b.t    - a.y*b.xyt  + a.xy*b.yt   - a.z*b.xzt  + a.xz*b.zt   - a.yz*b.xyzt - a.xyz*b.yzt  - a.t*b.x    + a.xt*b.q    - a.yt*b.xy   - a.xyt*b.y    - a.zt*b.xz   - a.xzt*b.z    + a.yzt*b.xyz  - a.xyzt*b.yz   ;
c.yt   = a.q*b.yt   - a.x*b.xyt  + a.y*b.t    + a.xy*b.xt   - a.z*b.yzt  - a.xz*b.xyzt + a.yz*b.zt   - a.xyz*b.xzt  - a.t*b.y    - a.xt*b.xy   + a.yt*b.q    - a.xyt*b.x    - a.zt*b.yz   + a.xzt*b.xyz  - a.yzt*b.z    - a.xyzt*b.xz   ;
c.zt   = a.q*b.zt   - a.x*b.xzt  + a.y*b.yzt  + a.xy*b.xyzt + a.z*b.t    + a.xz*b.xt   - a.yz*b.yt   + a.xyz*b.xyt  - a.t*b.z    - a.xt*b.xz   + a.yt*b.yz   - a.xyt*b.xyz  + a.zt*b.q    - a.xzt*b.x    + a.yzt*b.y    + a.xyzt*b.xy   ;
c.xyz  = a.q*b.xyz  + a.x*b.yz   - a.y*b.xz   + a.xy*b.z    + a.z*b.xy   - a.xz*b.y    + a.yz*b.x    + a.xyz*b.q    - a.t*b.xyzt + a.xt*b.yzt  - a.yt*b.xzt  - a.xyt*b.zt   + a.zt*b.xyt  + a.xzt*b.yt   - a.yzt*b.xt   + a.xyzt*b.t    ;
c.xyt  = a.q*b.xyt  + a.x*b.yt   - a.y*b.xt   + a.xy*b.t    + a.z*b.xyzt - a.xz*b.yzt  + a.yz*b.xzt  + a.xyz*b.zt   + a.t*b.xy   - a.xt*b.y    + a.yt*b.x    + a.xyt*b.q    - a.zt*b.xyz  - a.xzt*b.yz   + a.yzt*b.xz   - a.xyzt*b.z    ;
c.xzt  = a.q*b.xzt  + a.x*b.zt   - a.y*b.xyzt + a.xy*b.yzt  - a.z*b.xt   + a.xz*b.t    - a.yz*b.xyt  - a.xyz*b.yt   + a.t*b.xz   - a.xt*b.z    + a.yt*b.xyz  + a.xyt*b.yz   + a.zt*b.x    + a.xzt*b.q    - a.yzt*b.xy   + a.xyzt*b.y    ;
c.yzt  = a.q*b.yzt  - a.x*b.xyzt + a.y*b.zt   + a.xy*b.xzt  - a.z*b.yt   - a.xz*b.xyt  + a.yz*b.t    - a.xyz*b.xt   + a.t*b.yz   + a.xt*b.xyz  - a.yt*b.z    + a.xyt*b.xz   + a.zt*b.y    - a.xzt*b.xy   + a.yzt*b.q    + a.xyzt*b.x    ;
c.xyzt = a.q*b.xyzt + a.x*b.yzt  - a.y*b.xzt  + a.xy*b.zt   + a.z*b.xyt  - a.xz*b.yt   + a.yz*b.xt   + a.xyz*b.t    - a.t*b.xyz  + a.xt*b.yz   - a.yt*b.xz   - a.xyt*b.z    + a.zt*b.xy   + a.xzt*b.y    - a.yzt*b.x    + a.xyzt*b.q    ;


******************* Four Dimensional (-1,-1,-1,-1) metric ********************

 q      x      y      z      t      xy     xz     yz     xt     yt     zt     xyz    xyt    xzt    yzt    xyzt  
 x     -q      xy     xz     xt    -y     -z      xyz   -t      xyt    xzt   -yz    -yt    -zt     xyzt  -yzt   
 y     -xy    -q      yz     yt     x     -xyz   -z     -xyt   -t      yzt    xz     xt    -xyzt  -zt     xzt   
 z     -xz    -yz    -q      zt     xyz    x      y     -xzt   -yzt   -t     -xy     xyzt   xt     yt    -xyt   
 t     -xt    -yt    -zt    -q      xyt    xzt    yzt    x      y      z     -xyzt  -xy    -xz    -yz     xyz   
 xy     y     -x      xyz    xyt   -q      yz    -xz     yt    -xt     xyzt  -z     -t      yzt   -xzt   -zt    
 xz     z     -xyz   -x      xzt   -yz    -q      xy     zt    -xyzt  -xt     y     -yzt   -t      xyt    yt    
 yz     xyz    z     -y      yzt    xz    -xy    -q      xyzt   zt    -yt    -x      xzt   -xyt   -t     -xt    
 xt     t     -xyt   -xzt   -x     -yt    -zt     xyzt  -q      xy     xz     yzt    y      z     -xyz   -yz    
 yt     xyt    t     -yzt   -y      xt    -xyzt  -zt    -xy    -q      yz    -xzt   -x      xyz    z      xz    
 zt     xzt    yzt    t     -z      xyzt   xt     yt    -xz    -yz    -q      xyt   -xyz   -x     -y     -xy    
 xyz   -yz     xz    -xy     xyzt  -z      y     -x     -yzt    xzt   -xyt    q     -zt     yt    -xt     t     
 xyt   -yt     xt    -xyzt  -xy    -t      yzt   -xzt    y     -x      xyz    zt     q     -yz     xz    -z     
 xzt   -zt     xyzt   xt    -xz    -yzt   -t      xyt    z     -xyz   -x     -yt     yz     q     -xy     y     
 yzt   -xyzt  -zt     yt    -yz     xzt   -xyt   -t      xyz    z     -y      xt    -xz     xy     q     -x     
 xyzt   yzt   -xzt    xyt   -xyz   -zt     yt    -xt    -yz     xz    -xy    -t      z     -y      x      q     

c.q    = a.q*b.q    - a.x*b.x    - a.y*b.y    - a.xy*b.xy   - a.z*b.z    - a.xz*b.xz   - a.yz*b.yz   + a.xyz*b.xyz  - a.t*b.t    - a.xt*b.xt   - a.yt*b.yt   + a.xyt*b.xyt  - a.zt*b.zt   + a.xzt*b.xzt  + a.yzt*b.yzt  + a.xyzt*b.xyzt ;
c.x    = a.q*b.x    + a.x*b.q    + a.y*b.xy   - a.xy*b.y    + a.z*b.xz   - a.xz*b.z    - a.yz*b.xyz  - a.xyz*b.yz   + a.t*b.xt   - a.xt*b.t    - a.yt*b.xyt  - a.xyt*b.yt   - a.zt*b.xzt  - a.xzt*b.zt   - a.yzt*b.xyzt + a.xyzt*b.yzt  ;
c.y    = a.q*b.y    - a.x*b.xy   + a.y*b.q    + a.xy*b.x    + a.z*b.yz   + a.xz*b.xyz  - a.yz*b.z    + a.xyz*b.xz   + a.t*b.yt   + a.xt*b.xyt  - a.yt*b.t    + a.xyt*b.xt   - a.zt*b.yzt  + a.xzt*b.xyzt - a.yzt*b.zt   - a.xyzt*b.xzt  ;
c.z    = a.q*b.z    - a.x*b.xz   - a.y*b.yz   - a.xy*b.xyz  + a.z*b.q    + a.xz*b.x    + a.yz*b.y    - a.xyz*b.xy   + a.t*b.zt   + a.xt*b.xzt  + a.yt*b.yzt  - a.xyt*b.xyzt - a.zt*b.t    + a.xzt*b.xt   + a.yzt*b.yt   + a.xyzt*b.xyt  ;
c.t    = a.q*b.t    - a.x*b.xt   - a.y*b.yt   - a.xy*b.xyt  - a.z*b.zt   - a.xz*b.xzt  - a.yz*b.yzt  + a.xyz*b.xyzt + a.t*b.q    + a.xt*b.x    + a.yt*b.y    - a.xyt*b.xy   + a.zt*b.z    - a.xzt*b.xz   - a.yzt*b.yz   - a.xyzt*b.xyz  ;
c.xy   = a.q*b.xy   + a.x*b.y    - a.y*b.x    + a.xy*b.q    - a.z*b.xyz  + a.xz*b.yz   - a.yz*b.xz   - a.xyz*b.z    - a.t*b.xyt  + a.xt*b.yt   - a.yt*b.xt   - a.xyt*b.t    - a.zt*b.xyzt - a.xzt*b.yzt  + a.yzt*b.xzt  - a.xyzt*b.zt   ;
c.xz   = a.q*b.xz   + a.x*b.z    + a.y*b.xyz  - a.xy*b.yz   - a.z*b.x    + a.xz*b.q    + a.yz*b.xy   + a.xyz*b.y    - a.t*b.xzt  + a.xt*b.zt   + a.yt*b.xyzt + a.xyt*b.yzt  - a.zt*b.xt   - a.xzt*b.t    - a.yzt*b.xyt  + a.xyzt*b.yt   ;
c.yz   = a.q*b.yz   - a.x*b.xyz  + a.y*b.z    + a.xy*b.xz   - a.z*b.y    - a.xz*b.xy   + a.yz*b.q    - a.xyz*b.x    - a.t*b.yzt  - a.xt*b.xyzt + a.yt*b.zt   - a.xyt*b.xzt  - a.zt*b.yt   + a.xzt*b.xyt  - a.yzt*b.t    - a.xyzt*b.xt   ;
c.xt   = a.q*b.xt   + a.x*b.t    + a.y*b.xyt  - a.xy*b.yt   + a.z*b.xzt  - a.xz*b.zt   - a.yz*b.xyzt - a.xyz*b.yzt  - a.t*b.x    + a.xt*b.q    + a.yt*b.xy   + a.xyt*b.y    + a.zt*b.xz   + a.xzt*b.z    + a.yzt*b.xyz  - a.xyzt*b.yz   ;
c.yt   = a.q*b.yt   - a.x*b.xyt  + a.y*b.t    + a.xy*b.xt   + a.z*b.yzt  + a.xz*b.xyzt - a.yz*b.zt   + a.xyz*b.xzt  - a.t*b.y    - a.xt*b.xy   + a.yt*b.q    - a.xyt*b.x    + a.zt*b.yz   - a.xzt*b.xyz  + a.yzt*b.z    + a.xyzt*b.xz   ;
c.zt   = a.q*b.zt   - a.x*b.xzt  - a.y*b.yzt  - a.xy*b.xyzt + a.z*b.t    + a.xz*b.xt   + a.yz*b.yt   - a.xyz*b.xyt  - a.t*b.z    - a.xt*b.xz   - a.yt*b.yz   + a.xyt*b.xyz  + a.zt*b.q    - a.xzt*b.x    - a.yzt*b.y    - a.xyzt*b.xy   ;
c.xyz  = a.q*b.xyz  + a.x*b.yz   - a.y*b.xz   + a.xy*b.z    + a.z*b.xy   - a.xz*b.y    + a.yz*b.x    + a.xyz*b.q    + a.t*b.xyzt - a.xt*b.yzt  + a.yt*b.xzt  + a.xyt*b.zt   - a.zt*b.xyt  - a.xzt*b.yt   + a.yzt*b.xt   - a.xyzt*b.t    ;
c.xyt  = a.q*b.xyt  + a.x*b.yt   - a.y*b.xt   + a.xy*b.t    - a.z*b.xyzt + a.xz*b.yzt  - a.yz*b.xzt  - a.xyz*b.zt   + a.t*b.xy   - a.xt*b.y    + a.yt*b.x    + a.xyt*b.q    + a.zt*b.xyz  + a.xzt*b.yz   - a.yzt*b.xz   + a.xyzt*b.z    ;
c.xzt  = a.q*b.xzt  + a.x*b.zt   + a.y*b.xyzt - a.xy*b.yzt  - a.z*b.xt   + a.xz*b.t    + a.yz*b.xyt  + a.xyz*b.yt   + a.t*b.xz   - a.xt*b.z    - a.yt*b.xyz  - a.xyt*b.yz   + a.zt*b.x    + a.xzt*b.q    + a.yzt*b.xy   - a.xyzt*b.y    ;
c.yzt  = a.q*b.yzt  - a.x*b.xyzt + a.y*b.zt   + a.xy*b.xzt  - a.z*b.yt   - a.xz*b.xyt  + a.yz*b.t    - a.xyz*b.xt   + a.t*b.yz   + a.xt*b.xyz  - a.yt*b.z    + a.xyt*b.xz   + a.zt*b.y    - a.xzt*b.xy   + a.yzt*b.q    + a.xyzt*b.x    ;
c.xyzt = a.q*b.xyzt + a.x*b.yzt  - a.y*b.xzt  + a.xy*b.zt   + a.z*b.xyt  - a.xz*b.yt   + a.yz*b.xt   + a.xyz*b.t    - a.t*b.xyz  + a.xt*b.yz   - a.yt*b.xz   - a.xyt*b.z    + a.zt*b.xy   + a.xzt*b.y    - a.yzt*b.x    + a.xyzt*b.q    ;


******************* Four Dimensional (0,0,0,0) metric ********************

 q      x      y      z      t      xy     xz     yz     xt     yt     zt     xyz    xyt    xzt    yzt    xyzt  
 x      0      xy     xz     xt     0      0      xyz    0      xyt    xzt    0      0      0      xyzt   0     
 y     -xy     0      yz     yt     0     -xyz    0     -xyt    0      yzt    0      0     -xyzt   0      0     
 z     -xz    -yz     0      zt     xyz    0      0     -xzt   -yzt    0      0      xyzt   0      0      0     
 t     -xt    -yt    -zt     0      xyt    xzt    yzt    0      0      0     -xyzt   0      0      0      0     
 xy     0      0      xyz    xyt    0      0      0      0      0      xyzt   0      0      0      0      0     
 xz     0     -xyz    0      xzt    0      0      0      0     -xyzt   0      0      0      0      0      0     
 yz     xyz    0      0      yzt    0      0      0      xyzt   0      0      0      0      0      0      0     
 xt     0     -xyt   -xzt    0      0      0      xyzt   0      0      0      0      0      0      0      0     
 yt     xyt    0     -yzt    0      0     -xyzt   0      0      0      0      0      0      0      0      0     
 zt     xzt    yzt    0      0      xyzt   0      0      0      0      0      0      0      0      0      0     
 xyz    0      0      0      xyzt   0      0      0      0      0      0      0      0      0      0      0     
 xyt    0      0     -xyzt   0      0      0      0      0      0      0      0      0      0      0      0     
 xzt    0      xyzt   0      0      0      0      0      0      0      0      0      0      0      0      0     
 yzt   -xyzt   0      0      0      0      0      0      0      0      0      0      0      0      0      0     
 xyzt   0      0      0      0      0      0      0      0      0      0      0      0      0      0      0     

c.q    = a.q*b.q  ; 
c.x    = a.q*b.x    + a.x*b.q  ; 
c.y    = a.q*b.y    + a.y*b.q  ; 
c.z    = a.q*b.z    + a.z*b.q  ; 
c.t    = a.q*b.t    + a.t*b.q  ; 
c.xy   = a.q*b.xy   + a.x*b.y    - a.y*b.x    + a.xy*b.q  ; 
c.xz   = a.q*b.xz   + a.x*b.z    - a.z*b.x    + a.xz*b.q  ; 
c.yz   = a.q*b.yz   + a.y*b.z    - a.z*b.y    + a.yz*b.q  ; 
c.xt   = a.q*b.xt   + a.x*b.t    - a.t*b.x    + a.xt*b.q  ; 
c.yt   = a.q*b.yt   + a.y*b.t    - a.t*b.y    + a.yt*b.q  ; 
c.zt   = a.q*b.zt   + a.z*b.t    - a.t*b.z    + a.zt*b.q  ; 
c.xyz  = a.q*b.xyz  + a.x*b.yz   - a.y*b.xz   + a.xy*b.z    + a.z*b.xy   - a.xz*b.y    + a.yz*b.x    + a.xyz*b.q  ; 
c.xyt  = a.q*b.xyt  + a.x*b.yt   - a.y*b.xt   + a.xy*b.t    + a.t*b.xy   - a.xt*b.y    + a.yt*b.x    + a.xyt*b.q  ; 
c.xzt  = a.q*b.xzt  + a.x*b.zt   - a.z*b.xt   + a.xz*b.t    + a.t*b.xz   - a.xt*b.z    + a.zt*b.x    + a.xzt*b.q  ;
c.yzt  = a.q*b.yzt  + a.y*b.zt   - a.z*b.yt   + a.yz*b.t    + a.t*b.yz   - a.yt*b.z    + a.zt*b.y    + a.yzt*b.q  ; 
c.xyzt = a.q*b.xyzt + a.x*b.yzt  - a.y*b.xzt  + a.xy*b.zt   + a.z*b.xyt  - a.xz*b.yt   + a.yz*b.xt   + a.xyz*b.t    - a.t*b.xyz  + a.xt*b.yz   - a.yt*b.xz   - a.xyt*b.z    + a.zt*b.xy   + a.xzt*b.y    - a.yzt*b.x    + a.xyzt*b.q  ; 


******************* Four Dimensional Wedge Only ********************

        x      y      z      t      xy     xz     yz     xt     yt     zt     xyz    xyt    xzt    yzt    xyzt  
 x      0      xy     xz     xt     0      0      xyz    0      xyt    xzt    0      0      0      xyzt   0     
 y     -xy     0      yz     yt     0     -xyz    0     -xyt    0      yzt    0      0     -xyzt   0      0     
 z     -xz    -yz     0      zt     xyz    0      0     -xzt   -yzt    0      0      xyzt   0      0      0     
 t     -xt    -yt    -zt     0      xyt    xzt    yzt    0      0      0     -xyzt   0      0      0      0     
 xy     0      0      xyz    xyt    0      0      0      0      0      xyzt   0      0      0      0      0     
 xz     0     -xyz    0      xzt    0      0      0      0     -xyzt   0      0      0      0      0      0     
 yz     xyz    0      0      yzt    0      0      0      xyzt   0      0      0      0      0      0      0     
 xt     0     -xyt   -xzt    0      0      0      xyzt   0      0      0      0      0      0      0      0     
 yt     xyt    0     -yzt    0      0     -xyzt   0      0      0      0      0      0      0      0      0     
 zt     xzt    yzt    0      0      xyzt   0      0      0      0      0      0      0      0      0      0     
 xyz    0      0      0      xyzt   0      0      0      0      0      0      0      0      0      0      0     
 xyt    0      0     -xyzt   0      0      0      0      0      0      0      0      0      0      0      0     
 xzt    0      xyzt   0      0      0      0      0      0      0      0      0      0      0      0      0     
 yzt   -xyzt   0      0      0      0      0      0      0      0      0      0      0      0      0      0     
 xyzt   0      0      0      0      0      0      0      0      0      0      0      0      0      0      0     

c.q    = 0  ; 
c.x    = 0  ; 
c.y    = 0  ; 
c.z    = 0  ; 
c.t    = 0  ; 
c.xy   = a.x*b.y    - a.y*b.x  ; 
c.xz   = a.x*b.z    - a.z*b.x  ; 
c.yz   = a.y*b.z    - a.z*b.y  ; 
c.xt   = a.x*b.t    - a.t*b.x  ; 
c.yt   = a.y*b.t    - a.t*b.y  ; 
c.zt   = a.z*b.t    - a.t*b.z  ; 
c.xyz  = a.x*b.yz   - a.y*b.xz   + a.xy*b.z    + a.z*b.xy   - a.xz*b.y    + a.yz*b.x  ; 
c.xyt  = a.x*b.yt   - a.y*b.xt   + a.xy*b.t    + a.t*b.xy   - a.xt*b.y    + a.yt*b.x  ; 
c.xzt  = a.x*b.zt   - a.z*b.xt   + a.xz*b.t    + a.t*b.xz   - a.xt*b.z    + a.zt*b.x  ;
c.yzt  = a.y*b.zt   - a.z*b.yt   + a.yz*b.t    + a.t*b.yz   - a.yt*b.z    + a.zt*b.y  ; 
c.xyzt = a.x*b.yzt  - a.y*b.xzt  + a.xy*b.zt   + a.z*b.xyt  - a.xz*b.yt   + a.yz*b.xt   + a.xyz*b.t    - a.t*b.xyz  + a.xt*b.yz   - a.yt*b.xz   - a.xyt*b.z    + a.zt*b.xy   + a.xzt*b.y    - a.yzt*b.x  ;