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. ((fileVal "IndCliff") (list + - - -) eq rn) returns a similar list for the 4th degree Clifford algebra that is generated by the space that Minkowski used to described the geometry of special relativity. Below we describe the members of this heterogeneous list. Argument eq is a comparison operator and rn is a random generator of reals. For most cases the two values = and ((fileVal "rr") "Ss") produces rational examples and demands exact equality. Values (lambda (a b) (< (abs (- a b)) 1.e-13)) and ((fileVal "RND") "squatc4") are good when the compromises of floating point are needed.
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 2n reals as described above, r is a plain real Scheme number and v is a list of n plain real Scheme numbers. Of the 2n numbers in a R value, 2n−1 are zero. Of the 2n numbers in a V value, 2n−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, cg, and test a few rules that show that the math is working.
(Gr n) returns a member of the Clifford group consisting of the product of n random members of V. Supposedly this should amount to reflections about n random hyperplanes in V.
eta (= η) is a diagonal matrix with the signature down the diagonal.
“A” is the indefinite orthogonal matrix produced by the proffered group operator. First we choose 5 random members of V (using Vr), turn them with cg, the group operator, and verify that the result remains in V. This property is often used to define membership in the Clifford group. “(InV (#t #t #t #t #t))” comes out if this works. Next we verify that Aη(A⟙) = η which is sometimes the definition of an indefinite orthogonal matrix. “(etaT #t)” if OK. Finally we verify that the quadratic form Q is preserved under transformation of V by A. If so then “(cns #t)”.
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.