This page assumes some familiarity with Scheme and also my module scheme for Scheme. Perhaps it is possible to gloss over details in both of those areas.

Nth degree Clifford numbers are denoted by a pair of (n−1)th degree Clifford numbers. 0th degree Clifford numbers are ordinary Scheme numbers which we take here as the reals. C is the set of Clifford numbers. All of the code deals with values of this form except where noted. There is a subspace R of C which is naturally isomorphic with the reals and another sub space V which is naturally isomorphic with the vector space that generated the Clifford numbers and on which the Clifford numbers operate.

`((fileVal "IndCliff") (list - - -) eq rn)` yields a list of things relevant to the 3rd degree Clifford algebra for Euclidean 3 space.

In the following C, V, R, r and v are types that we use to describe the inputs and outputs of the functions that we describe.
They are all Scheme values.
C, V, R are formatted as a tree of 2^{n} reals as described above, r is a plain real Scheme number and v is a list of n plain real Scheme numbers.
Of the 2^{n} numbers in a R value, 2^{n}−1 are zero.
Of the 2^{n} numbers in a V value, 2^{n}−n are zero.

The function G takes a list of Scheme values for a Clifford algebra of degree n and returns a like list for an algebra of degree n+1.
The other argument to G is either the Scheme functions add or subtract.
That value depends on one of the elements of the requested signature `sig`.
Below we enumerate, in order, the Scheme values in the list.

name | format & domain | what |

+ | C×C→C | adds two Clifford numbers. |

− | C×C→C | subtracts two Clifford numbers. |

* | C×C→C | Multiplies two Clifford numbers. |

zero | R | The zero vector of Clifford space. |

one | R | The multiplicative identity vector of Clifford space. |

/ | C→C | (C/ x) yields the unique multiplicative inverse of x, if there is one, else it returns false. |

= | C×C→b | Compares two Clifford numbers for equality. |

Cr | →C | Returns a random element of C. |

alpha | C→C | Is the principle involution often denoted α. |

bar | C→C | is an antiisomorphism. |

tr | C→C | is another antiisomorphism. |

rp | C→r | extracts the real part of a Clifford number. |

sm | r×C→C | (sm r cn) yields the product of the real r with the Clifford number cn. |

Q | C→r | is a quadratic form on the Clifford that agrees on the subdomain V. If x and y are in the Clifford Group then (* (Q x) (Q y)) = (Q (* x y)); |

basis | V list | is a list of the basis elements of V within C. |

R? | C→r | (R? x) returns the real part of x if x is in R, else #f. |

V? | C→v | (V? x) returns a list of n reals if xεV else #f. |

Rr | →R | returns random element of R. |

Vr | →V | returns random element of V. |

v2C | v→V | where x is a list of n numbers, (v2C x) returns the corresponding member of V. |

The next line defines turn which is how certain Clifford numbers, from the **Clifford group** act on V in a way that preserves Q.
Mathematical literature writes `(turn x y)` as “xyα((x)^{−1})”.
The next line defines a function, `mmv` to multiply a matrix by a vector.
Next we define `Om` which takes a member from the Clifford group and returns the ‘indefinite orthogonal’ matrix that represents the orientation produced by the Clifford number.
We do this by turning each basis member by the group operator.
We import function `DoL` as a tool to produce a list of values.

This program includes text such as “`'Vb`” which shows up in the output as “`Vb`”.
This helps to relate parts of the output to parts of the program.
Just now all reports are good.

Next the routine ` t` is defined to take a clifford group operator,

“

But what Clifford group values do we test?
There is lore that all Clifford values are produced by products of non-zero members of V.
“`2 refl`” precedes results of the product of two V members, which describe successive reflections about two random hyperplanes in V.
We call routine `t` with the product of from 0 to four random members of V.

Finally there are a few simple tests to evince some reality.
Among the yield of `((fileVal "IndCliffTst") (list - -))` is `(Vb ((1 0) (0 1)))` which shows that the vectors of the list `basis` are indeed all in V.
`((fileVal "IndCliffTst") (list - + -))` includes `(Qb (-1 1 -1))` which reveals the values of the quadratic form on the various basis elements.
`(Rz #t)` in the output shows that the basis vectors conform to the definitional equations for the algebra.
Also included is `(bilinear (#t #t #t))` which shows that the bilinear function defined in terms of Q, is indeed symmetric and bilinear.
Finally `(ops (((-1 0 0) (0 1 0) (0 0 1)) ((1 0 0) (0 -1 0) (0 0 1)) ((1 0 0) (0 1 0) (0 0 -1))))` shows the indefinite orthogonal matrix produced by `Om` on each basis vector.