Tiny C Compiler TCC x86_64

I have used TCC-0.9.25 on i386 for ten years, and enjoyed the speed of compilation, integrated code generator, assembler, and linker, all in a 266K static linked binary. Migrating to 64 bits, I have successfully compiled TCC-0.9.27 using uClibc 0.9.30 and musl, with static linking working. For my personal numeric work, TCC works well!

The static link tcc_0.9.27 below is modified from source to default to static linking.

SRL Old School TCC Console TCC Busybox uClibc Environment
SRL Old School TCC Console TCC Busybox musl Environment
tcc_0.9.27_musl_x86.tar.gz Static Linking MUSL specialized TCC variant source code.

RAM Disk Linux x86_64

I am rebuilding RAM Disk Linux in 64-bits, and updating the web browser in response to google's https push. Ten years has been a long run for the 32-bit product, which has served me well. I expect I will also make an ARM64 raspberry pi variant as well. Every time I jump into projects like these, I am appalled by the wasteful, bloating complexity of modern software, and am reminded of the lessons taught in "Reflections on Trusting Trust", by Ken Thompson.

My first checkpoint was bulding a statically linked uClibc gcc compiler and tool chain. My second checkpoint was to build the statically linked X11 environment linked to below. My current task is to repeat the above using MUSL C libraries ( and llvm libcxx ( After that, I will build a generic GCC environment.

The tar archive linked below contains a reference kernel (5.1M) and init ram disk (14.6M), as well as clippings from grub configuration menus for both grub1 and grub2. The Static_uClibc_64.cpio.gz archive (53M) is a complete, ram disk boot, text-mode static gcc/uClibc development environment for c, c++ and perl. The Static_musl_64.cpio.gz archive (50M) is a complete, ram disk boot, text-mode static gcc 4.6.4/musl development environment for c, c++ and perl. I've built and tested a GCC6.4.0 environment, and am put off by the 20M executable size for cc1 and cc1plus.

I now plan to build and test the Clang/LLVM static builds as my next task.

Soon, I hope to post an ISO image, bootable into these environoments, with complete source code and build scripts.

Static RAM Linux - 2018 Base Graphical X11 Busybox Init Environment

Static uClibc C, C++, Perl Text Busybox uClibc Static Environment
md5sum: f1e95879311c3e6deadc7b1848632d36 Static_uClibc_64.cpio.gz

Static musl C, C++, Perl Text Busybox musl Static Environment with LibreSSL, GPM, elinks browser
2bf0b27c13e945d3ca9dd347088d24a6 Static_musl_64.cpio.gz

I express my appreciation for the open source community, especially uClibC, Busybox, Tiny Core Linux, Puppy Linux, MUSL, LLVM, GNU/gcc (and Linux!) projects.

Phase Space and Multivectors

I have a line of thought I am pursuing, which may be obvious be obvious to others. Three dimensional geometric algebra and complexified two dimensional geometric algebra are isomorphic. This means that the complexified two dimensional curvature encodes three dimensional curvature and torsion, and that Lagrangian/Hamiltonion dynamics involving positions and velocities, or positions and momentum, are adequate for three dimensions, provided we use complex numbers. Conjugate variables, such as position and momentum, map into vector and bivector components. Phase space flow dynamics simply becomes three dimensional geometric algebra, in disguise. Likewise, Schroedinger equation quantum mechanics becomes three dimensional geometric algebra, again in disguise. As an aside, we learn from Graham Farmelo's book "The Strangest Man", page 73, that Dirac had studied Grassmann's algebra, but doesn't seem to have studied or embraced Clifford's algebra. I can only imagine how differently things could have evolved.

Spin Doctor

As I progress on Project Aldehyde, I find I need to clarify my understanding of spin. There is a difference between knowing that the even grade components of three dimensional geometric algebra are spinors, or knowing that Pauli's wavefunction is a spinor, while Dirac's wavefunction is a bispinor, and knowing *what* a spinor is. Here is my current executive summary: A three dimensional Euclidean spinor is a connection between two points somewhat like a rigid rod, which in addition to transmitting tension or compression, can also transmit torsion. In polar format, a spinor has length r, angles for elevation (phi) and azimuth (theta), and angle around the shaft (alpha). My current ponderings deal with changing the length r to be a magnitude of the bivector components, (vector/bivector confusion), and generalizing the spinor to be part of a geometric curvature multivector, made from distance s, unit tangent vector dr/ds, curvature bivector kappa = u wedge (du/ds) and scaled torsion trivector kappa^2 tau = u wedge (du/ds) wedge (d^2u/ds^2). For low speed systems (Pauli equation), s is approximately t. Our spinor column vector becomes a left ideal, which in turn is a projection. As I form more opinions, I will explain these concepts to the computer, and include write-ups and code below.

GA3E_Spinor.cp (in progress, moving target)

The Hermitian Operation on Multivectors is the Change to Reciprocal Basis Elements

By looking at matrix implementations of geometric algebra in three dimensional Euclidean space, Minkowksi spacetime, and five dimensional Dirac spacetime, I have come to the realization that the Hermitian operation is simply the replacement of each multivector basis by its reciprocal.

Hermitian = matrix transpose and complex conjugation = Reverse and time inversion = reciprocal basis.

As a few examples, e_x -> e_x, as e_x*e_x = 1, but e_t -> -e_t, as e_t*e_t = -1.

Implemention code from my GA code library follows.


GA3E Hermitian(GA3E w)	// correct for both 2x2 complex and 4x4 real matrix implementations
//(A,  B, C, D, -E,-F,-G, -H)  = Reverse (no time term to deal with) = Basis reciprocal
	GA3E v;

	v.q =  w.q;

	v.x =  w.x;	v.y =  w.y;	v.z =  w.z;

	v.xy = -w.xy;	v.xz = -w.xz;	v.yz = -w.yz; =;

	return v;


Mink Hermitian(Mink w)	// Reverse and time sign change
//(A,  B, C, D,-E, -F,-G,-H, J, K, L, -M, N, P, R, -S) 
	Mink v;
	v.q =  w.q;

	v.x =  w.x;	v.y =  w.y;	v.z =  w.z;	v.t = -w.t;

	v.xy = -w.xy;	v.xz = -w.xz;	v.yz = -w.yz;	v.xt =  w.xt; =;	v.zt =  w.zt; =;	v.xyt =  w.xyt;	v.xzt =  w.xzt;	v.yzt =  w.yzt;

	v.xyzt = -w.xyzt;

	return v;


GA5_4_1 Hermitian(const GA5_4_1 &a)	// InverseBasis = reverse and time sign change. Each basis times its InverseBasis = 1
// These are reciprocol basis :)
// Conjugates complex determinant. Magnitude matches.
//	+ a*q
//	+ b*w + c*x + d*y + e*z - f*t
//	- g*wx - h*wy - j*wz + k*wt - l*xy - m*xz + n*xt - p*yz + r*yt + s*zt
//	- S*wxy - R*wxz + P*wxt - N*wyz + M*wyt + L*wzt - K*xyz + J*xyt + H*xzt + G*yzt
//	+ F*wxyz - E*wxyt - D*wxzt - C*wyzt - B*xyzt
//	- A*wxyzt 
	GA5_4_1 b;

	b.q =  a.q;
	b.w = a.w;		b.x = a.x;		b.y = a.y;		b.z = a.z;		b.t = -a.t;

	b.wx = -a.wx;		b.wy = -a.wy;		b.wz = -a.wz;		b.wt = a.wt;		b.xy = -a.xy;
	b.xz = -a.xz;		b.yz = -a.yz;		b.xt = a.xt; =;		b.zt = a.zt;

	b.wxy = -a.wxy;		b.wxz = -a.wxz;		b.wxt = a.wxt;		b.wyz = -a.wyz;		b.wyt = a.wyt;
	b.wzt = a.wzt; =;		b.xyt = a.xyt;		b.xzt = a.xzt;		b.yzt = a.yzt;

	b.wxyz =  a.wxyz;	b.wxyt =  -a.wxyt;	b.wxzt =  -a.wxzt;	b.wyzt =  -a.wyzt;	b.xyzt =  -a.xyzt;
	b.wxyzt = -a.wxyzt;

	return b;


Hermitian multivectors, like Hermitian matrices, are unchanged under the Hermitian operation. This means that the sign changing components in the expressions above become zero for the Hermitian forms. A Hermitian GA3E is purely scalar plus vector. A Hermitian Mink is a bit more complicated, having zeroes in the time component, the spatial bivectors, the spatial trivector, and the quadvector. A Hermitian GA5_4_1 has zeroes in the time component, the atemporal bivectors and trivectors, as well as the temporal quadvector and pentavector components.

Python code illustrating the equivalence of the Hermitian to the InverseBasis is at

2x2 Hermitian Matrices Correspond to (Scalar + Vector) Only Multivectors

Three dimensional Euclidean geometry can be modelled by complex 2x2 matrices, or by a subset of 4x4 real matrices. In both models, the Hermitian transformation of transposition and complex conjugation results in changing the sign of the bivector and trivector components. In component form,

           MV = a + b*e_x + c*e_y + d*e_z + e*e_xy + f*e_xz + g*e_yz + h*e_xyz 
Hermetian(MV) = a + b*e_x + c*e_y + d*e_z - e*e_xy - f*e_xz - g*e_yz - h*e_xyz 

MV = [[ (a + c) - I*(f - h), (b - e) + I*(d + g)],
      [ (b + e) - I*(d - g), (a - c) + I*(f + h)]]

Reverse(MV) = InverseBasis(MV) = a + b*e_x + c*e_y + d*e_z - e*e_xy - f*e_xz - g*e_yz - h*e_xyz 

Transpose(MV) = [[ (a + c) - I*(f - h), (b + e) - I*(d - g)],
                 [ (b - e) + I*(d + g), (a - c) + I*(f + h)]]

Hermetian(MV) = Conjugate(Transpose(MV)) = Reverse(MV) = InverseBasis(MV) = 
        [[ (a + c) + I*(f - h), (b + e) + I*(d - g)],
         [ (b - e) - I*(d + g), (a - c) - I*(f + h)]]
              = a + b*e_x + c*e_y + d*e_z - e*e_xy - f*e_xz - g*e_yz - h*e_xyz 

This, in turn, means that 2x2 Hermitian matrices correspond to pure (scalar + vector) multivectors. This observation should become common knowledge, and be useful in physics of quantum mechanics.

Ideals and Projection Operators

Generalized ideals partition a space under some multiplication operation, and seem to be based upon projection operators. After a term has been multiplied by an ideal, it remains in that subspace regardless of future products. This note first looks at column and row ideals in 2x2 and 4x4 complex matrices and their associated three dimensional and five dimensional geometric algebras, and identifies the idempotent factors involved. Next, sandwich product spinor ideals are examined, and again, idempotent post-factor terms are found to be involved.


The Pauli Sigma and Dirac Gamma Matrices are Geometric Algebra

It is somewhat well known, but worth repeating: the Pauli sigma matrices are a complete, complex 2x2 matrix implementation of geometric algebra in three dimensional Euclidean space. The Dirac gamma matrices are a complete, complex 4x4 matrix implementation of geometric algebra in a five dimensional (4,1) Minkowski space.

Real 2x2 matrices implement real two dimensional Eucliden geometric algebra. The complexification of the 2x2 matrices provides one more degree of freedom, allowing faithful implementation of a three dimensional Euclidean geometric algebra. My preferred mapping follows.

I choose q, x, y and xy to be the real number two dimensional geometric algebra subset

q = [ 1, 0]    x = [ 0, 1]     y = [ 1, 0]     xy = [ 0,-1]
    [ 0, 1]        [ 1, 0]         [ 0,-1]          [ 1, 0]

z = [ 0, I]   xz = [-I, 0]    yz = [ 0, I]    xyz = [ I, 0]
    [-I, 0]        [ 0, I]         [ I, 0]          [ 0, I]

The product table among these elements is GA3E ( = Cl_3)

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

The general multivector (a, b,c,d, e,f,g, h) is

MV = a + b*e_x + c*e_y + d*e_z + e*e_xy + f*e_xz + g*e_yz + h*e_xyz 

MV = [[ (a + c) - I*(f - h), (b - e) + I*(d + g)],
      [ (b + e) - I*(d - g), (a - c) + I*(f + h)]]

Reverse(MV) = InverseBasis(MV) = a + b*e_x + c*e_y + d*e_z - e*e_xy - f*e_xz - g*e_yz - h*e_xyz 

Transpose(MV) = [[ (a + c) - I*(f - h), (b + e) - I*(d - g)],
                 [ (b - e) + I*(d + g), (a - c) + I*(f + h)]]

Hermetian(MV) = Conjugate(Transpose(MV)) = Reverse(MV) = InverseBasis(MV) = 
        [[ (a + c) + I*(f - h), (b + e) + I*(d - g)],
         [ (b - e) - I*(d + g), (a - c) - I*(f + h)]]

det(MV) = (a^2 - b^2 - c^2 - d^2 + e^2 + f^2 + g^2 - h^2) + (2*I)*(a*h - b*g + c*f - d*e)

A text file summary of basis matrices, their eigenvalues and eigenvectors for the sigma and gamma matrices, and general multivectors in three and five dimensions, is linked below.


CHO Conjugations and the Product of Pure CH times Pure O

Algebra is filled with many types of conjugation, most given silly names which obscure their geometric significance. In three dimensional geometric algebra, we have basis sign reversals (parity), which invert the sign of the x, y and z components, preserve the xy, yz and zx components (due to the square of -1), and invert the xyz component. We also have the reverse, which reverses the order of basis multiplication, with the effect of preserving x, y, and z while complementing xy, yz, xz and xyz. Combining the two gives the Clifford conjugation (see the obscuring name) which inverts x, y, z, xy, yz and xyz components. Taking the product of a CH or GA3E multivector with the Clifford conjugate yields a multivector with six zero elements in vector and bivector slots, with the scalar and trivector components playing the role of a complex number. Similarly, for octonions, the octonion complement changes the sign of all elements except the scalar. The product of an octonion with its complement yields a pure scalar, with the remaining seven components zero.
The general CHO has 64 components, which I generally print as an 8x8 grid, ordered as below.

q     	i     	j     	ij    	E     	iE    	jE    	ijE   	
x     	xi    	xj    	xij   	xE    	xiE   	xjE   	xijE  	
y     	yi    	yj    	yij   	yE    	yiE   	yjE   	yijE  	
xy    	xyi   	xyj   	xyij  	xyE   	xyiE  	xyjE  	xyijE 	
z     	zi    	zj    	zij   	zE    	ziE   	zjE   	zijE  	
xz    	xzi   	xzj   	xzij  	xzE   	xziE  	xzjE  	xzijE 	
yz    	yzi   	yzj   	yzij  	yzE   	yziE  	yzjE  	yzijE 	
xyz   	xyzi  	xyzj  	xyzij 	xyzE  	xyziE 	xyzjE 	xyzijE	
Many times, I only care about the zero/non-zero status of a product. I have written a software routine "CHO_Zero_Grid(CHO a)" which examines the CHO and prints either an x for non-zero, or 0 for zero components. I can specify a particular conjugation pattern for a CHO as another 8x8 grid, this time indicating + or - factors for the conjugation.
Using this notation, the combined Clifford/Octonion conjugation for CHO is
+ - - - - - - -                x 0 0 0 0 0 0 0 
- + + + + + + +     with       0 x x x x x x x 
- + + + + + + +   conjugate    0 x x x x x x x 
- + + + + + + +    product     0 x x x x x x x 
- + + + + + + +                0 x x x x x x x 
- + + + + + + +                0 x x x x x x x 
- + + + + + + +                0 x x x x x x x 
+ - - - - - - -                x 0 0 0 0 0 0 0 

For the special case of a CHO which is the product of a pure CH times a pure O, we get even better, with 62 zeroes and only scalar and xyz component non-zero terms.

CHO4 =  CHO2*CHO3 = 
(c00*b00 , b01*c00 , b02*c00 , c00*b03 , b04*c00 , b05*c00 , c00*b06 , c00*b07 ,
 c10*b00 , c10*b01 , c10*b02 , c10*b03 , b04*c10 , c10*b05 , c10*b06 , c10*b07 ,
 c20*b00 , b01*c20 , b02*c20 , c20*b03 , b04*c20 , b05*c20 , c20*b06 , c20*b07 ,
 c30*b00 , c30*b01 , c30*b02 , c30*b03 , c30*b04 , c30*b05 , c30*b06 , c30*b07 ,
 c40*b00 , b01*c40 , b02*c40 , c40*b03 , b04*c40 , b05*c40 , c40*b06 , c40*b07 ,
 b00*c50 , b01*c50 , b02*c50 , b03*c50 , b04*c50 , b05*c50 , b06*c50 , c50*b07 ,
 c60*b00 , b01*c60 , c60*b02 , c60*b03 , b04*c60 , b05*c60 , c60*b06 , c60*b07 ,
 b00*c70 , b01*c70 , b02*c70 , b03*c70 , b04*c70 , b05*c70 , b06*c70 , c70*b07)

CHO4*CHO_Signed_Conjugation(CHO4); = 
x 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
x 0 0 0 0 0 0 0 
More details are in CHO_Explore_Conjugates.cp

Some Comments on CHO and Subsets

The ability to do symbolic calculations in CHO is so pleasant. In general terms, I've verified that complex numbers are commutative and associative, quaternions are non-commutative but associative, octonions are alternating/flexible, CO is likewise alternating/flexible, but HO and CHO are none of the above. Defining the commutator as (A*B - B*A), HO has zero component for the scalar term, CO has zeroes in the scalar and xyz (imaginary) terms, while CHO likwise has zeroes in the scalar and imaginary terms. Defining the associator as ((A*B)*C - A*(B*C)), HO has zeroes in the pure quaternion suffix terms, being q, xy, yz, xz, CO has zeroes in scalar and imaginary terms, while CHO has zeroes in the pure CH suffix terms, being q, x, y, xy, z, yz, xz, and xyz. With numeric routines as in CHO_Routines.c, I can see this behavior, with symbolic calculations, I can prove this behavior.

CxHxO Routines in C and C++/GiNaC

CxHxO was surprisingly easy to implement. I am using Cayley's octonions in this implementation. CHO_Routines.c provides complex, quaternion, octonion, CxH, CxO, HxO and CxHxO routines for product, initialize, compare, add and subtract. CHO_Equation_Maker.c demonstrates this library, and generates and validates the product equations. CHO_Routines.cp is the symbolic math version of the library using GiNaC, CLN, and C++.



CHO.cp - Direct Product Software for Cl3 otimes O

I find the direct product is surprisingly straightforward to implement as ordered pairs. Having established to my satisfaction that CxH = GA3E = Cl3, I jump directly to CxHxO, rather than stepping CxO and HxO. This program calculate the 64 basis elements, the 4096 basis products, identifies the two central elements (1x1 and (e_xyz)x1) which commute with all algebra elements, and identifies which pairs commute. This program will evolve and be updated as I continue my investigations. The similarities, yet contrasts, between Cl3 and Octonions enthrall me.

Here are the 64 basis elements of CHO, arranged in an 8x8 grid clearly showing their direct product origin. I am using q for the identity element in both source sets, i, j, and E for the octonion bit basis, and x, y, z for the GA3E/Cl3/CH basis. Both q and xyz (=sqrt(-1)) commute with all terms, thus forming the center of the combined algebra.

q     	i     	j     	ij    	E     	iE    	jE    	ijE   	
x     	xi    	xj    	xij   	xE    	xiE   	xjE   	xijE  	
y     	yi    	yj    	yij   	yE    	yiE   	yjE   	yijE  	
xy    	xyi   	xyj   	xyij  	xyE   	xyiE  	xyjE  	xyijE 	
z     	zi    	zj    	zij   	zE    	ziE   	zjE   	zijE  	
xz    	xzi   	xzj   	xzij  	xzE   	xziE  	xzjE  	xzijE 	
yz    	yzi   	yzj   	yzij  	yzE   	yziE  	yzjE  	yzijE 	
xyz   	xyzi  	xyzj  	xyzij 	xyzE  	xyziE 	xyzjE 	xyzijE	

Using the Cayley representation for octonions, I can make a bitmap for the algebra using i=1, j=2, E=4, where the binary numbers 0-7 encode the base, XOR logic provides the base product, and the sign is stored separately. This behavior is just like Cl3, with the difference being the sign details. Consequently, in the CHO algebra, I have two three-bit fields for each base, XOR logic for the base product, and a simple 64x64 sign array (shown in CHO_Sign_Array.txt below).

Octonion Cayley Representation

q = 000  i = 001  j = 010  k = 011  E = 100  I = 101  J = 110  K = 111

 * | q  i  j  k | E  I  J  K                Sign Table
 q | q  i  j  k | E  I  J  K             + + + +  + + + +       
 i | i -q  k -j | I -E -K  J             + - + -  + - - +
 j | j -k -q  i | J  K -E -I             + - - +  + + - -  
 k | k  j -i -q | K -J  I -E             + + - -  + - + -
 E | E -I -J -K |-q  i  j  k             + - - -  - + + +
 I | I  E -K  J |-i -q -k  j             + + - +  - - - +
 J | J  K  E -I |-j  k -q -i             + + + -  - + - -
 K | K -J  I  E |-k -j  i -q             + - + +  - - + -

In a similar fashion, the Clifford algebra for three dimensional Euclidean space 
can be mapped to a bitmap and associated sign matrix.

GA3E = Cl3 = CxH Representation

q = 000  x = 001  y = 010  xy = 010  z = 100  xz = 101  yz = 110  xyz = 111 

  * |  q    x    y   xy |   z   xz   yz  xyz         Sign Table
  q |  q    x    y   xy |   z   xz   yz  xyz      + + + +  + + + +
  x |  x    q   xy    y |  xz    z  xyz   yz      + + + +  + + + +
  y |  y  -xy    q   -x |  yz -xyz    z  -xz      + - + -  + - + -
 xy | xy   -y    x   -q | xyz  -yz   xz   -z      + - + -  + - + -
  z |  z  -xz  -yz  xyz |   q   -x   -y   xy      + - - +  + - - +
 xz | xz   -z -xyz   yz |   x   -q  -xy    y      + - - +  + - - +
 yz | yz  xyz   -z  -xz |   y   xy   -q   -x      + + - -  + + - -
xyz |xyz   yz  -xz   -z |  xy    y   -x   -q      + + - -  + + - - 


Quaternion and Octonion Routines in C++ and C

I present two files demonstrating Quaternion and Octonion symbolic routines using GiNaC and C++. There are a ridiculous number of different implementations of octonions. In my software, I have a global integer variable "Baez". When "Baez = 1", octonions are implemented using the table in his well respected paper, which features index scaling and other niceties. When "Baez = 0", I use my preferred implementation, which clearly shows the quaternion heritage of the octonions.

I also provide two files implementing these functions numerically in fast, pure C.

Standard Right Hand Quaternion Table
 * |  q  i  j  k 
 q |  q  i  j  k 
 i |  i -q  k -j 
 j |  j -k -q  i 
 k |  k  j -i -q 

Baez's Octonion Table, Featuring Cyclic Indices  |  Cayley's Octonion Table, Showing Quaternion Inheritance
 * |  q  i  j  k  E  I  J  K                     |   * |  q  i  j  k  E  I  J  K 
-----------------------------                    |  -----------------------------
 q |  q  i  j  k  E  I  J  K                     |   q |  q  i  j  k  E  I  J  K 
 i |  i -q  E  K -j  J -I -k                     |   i |  i -q  k -j  I -E -K  J 
 j |  j -E -q  I  i -k  K -J                     |   j |  j -k -q  i  J  K -E -I 
 k |  k -K -I -q  J  j -E  i                     |   k |  k  j -i -q  K -J  I -E 
 E |  E  j -i -J -q  K  k -I                     |   E |  E -I -J -K -q  i  j  k 
 I |  I -J  k -j -K -q  i  E                     |   I |  I  E -K  J -i -q -k  j 
 J |  J  I -K  E -k -i -q  j                     |   J |  J  K  E -I -j  k -q -i 
 K |  K  k  J -i  I -E -j -q                     |   K |  K -J  I  E -k -j  i -q 
 *   |  e_0  e_1  e_2  e_3  e_4  e_5  e_6  e_7   |   *   |  e_0  e_1  e_2  e_3  e_4  e_5  e_6  e_7 
-----------------------------------------------  |  -----------------------------------------------
 e_0 |  e_0  e_1  e_2  e_3  e_4  e_5  e_6  e_7   |   e_0 |  e_0  e_1  e_2  e_3  e_4  e_5  e_6  e_7 
 e_1 |  e_1 -e_0  e_4  e_7 -e_2  e_6 -e_5 -e_3   |   e_1 |  e_1 -e_0  e_3 -e_2  e_5 -e_4 -e_7  e_6 
 e_2 |  e_2 -e_4 -e_0  e_5  e_1 -e_3  e_7 -e_6   |   e_2 |  e_2 -e_3 -e_0  e_1  e_6  e_7 -e_4 -e_5 
 e_3 |  e_3 -e_7 -e_5 -e_0  e_6  e_2 -e_4  e_1   |   e_3 |  e_3  e_2 -e_1 -e_0  e_7 -e_6  e_5 -e_4 
 e_4 |  e_4  e_2 -e_1 -e_6 -e_0  e_7  e_3 -e_5   |   e_4 |  e_4 -e_5 -e_6 -e_7 -e_0  e_1  e_2  e_3 
 e_5 |  e_5 -e_6  e_3 -e_2 -e_7 -e_0  e_1  e_4   |   e_5 |  e_5  e_4 -e_7  e_6 -e_1 -e_0 -e_3  e_2 
 e_6 |  e_6  e_5 -e_7  e_4 -e_3 -e_1 -e_0  e_2   |   e_6 |  e_6  e_7  e_4 -e_5 -e_2  e_3 -e_0 -e_1 
 e_7 |  e_7  e_3  e_6 -e_1  e_5 -e_4 -e_2 -e_0   |   e_7 |  e_7 -e_6  e_5  e_4 -e_3 -e_2  e_1 -e_0 


Project Aldehyde (In Progress) - CxHxO => Standard Model

I was introduced to quaternions in the early 1980s via Morse and Feshbach, Methods of Theoretical Physics. I was fascinated by the compactness of this tool, especially for rotations and electromagnetism, and was surprised at the poor reputation of this tool in the academic community. As an engineer, I am pleased by utility. As I gained in experience, I learned of octonions (courtesy of John Baez), and divisional algebras in general. About a decade ago, I began to investigate divisional algebras in a bit more detail. It seemed a historical accident that quaternions used a right-hand cross product, rather than a left-hand cross product. Upon investigation, I decided that there were at least 256 workable different definitions for quaternions, and 524288 (2^19) workable definitions for octonions. Geoffrey Dixon's little green book "Division Algebras: Octonions, Quaternions, Complex Numbers and the Algebraic Design of Physics", was inspirational, but also beyond my comfort level at the time. My interests then shifted to geometric algebra, with the intention of revisiting his work at a later time. Now is that time.

The trigger for this revival of interest is an article in quanta magazine (, The Octonion Math That Could Underpin Physics, which is basically a feature piece on Cohl Furey and her work investigating these algebras and the standard model. Courtesy of arxiv, her thesis/dissertation and preprints are readily available, see (1002.1497, 1405.4601, 1603.04078, 1611.09182, 1806.00612). She has done the heavy lifting.

As a note of appreciation, the Simons foundation ( ) sponsors both quanta magazine and arxiv. Thank-you for these fine resources.

So, what is my agenda?

  1. Understand and explain to a computer what is meant by the direct products CxH and CxHxO.
  2. Compare CxH with biquaternions and Euclidean three dimensional geometric algebra. (Done. These are congruent.)
  3. Look at quaternions not as four dimensional objects, but rather even grade subset of three dimensional multivector (true).
  4. Look at octonions not as eight dimensional objects, but rather as a three dimensional multivector analog. (Good!)
  5. Understand ideals, in the context of subgroups and mappings.
  6. Demonstrate the utility of self-simularity, nilpotents and idempotents in particle descriptions.
  7. Understand and communicate the standard model.

As I achieve each goal, links in the above list will become active.

Multivectors and Eigenvectors

This note investigates the eigenvalues, polynomials and potents associated with multivectors in two and three dimensions, as well as in Minkowski spacetime and GA5_4_1 spacetime. Two and three dimensional space has pairs of eigenvalues and eigenfactors, while four and five dimensional space have quads of eigenvalues and eigenfactors. I am impressed by how in Minkowski fivespace, everything fits.



Quintic Equation Hypergeometric Solution in Python (using mpmath)

I provide a step by step solution of the quintic equation in python using the mpmath module. A specific example is provided reducing the quintic to Bring's normal form, then solving Bring's normal form using general hypergeometric functions. We then go interactive. You specify the polynomial, we provide all five roots via hypergeometric function. Thank-you to Owen Maresh who posted demonstration python code for Bring's normal form on his math blog.

My hosting service does not allow posting python suffix files. Note the txt suffix below, and change to py, if needed.

quintic.txt Quintic Demonstration Code

Tschirnhaus Transformations, Sylvester's Matrices and Reducing the Quintic

I provide a step by step presentation of the Tschirnhaus transformation using the Sylvester matrices for reducing terms in polynomial equations. A specific example is provided reducing a quintic to Bring's normal form.

Tschirnhaus Transformations Includes Demonstration Code
Tschirnhaus.cp Symbolic Demonstration Code (should get cleaned up)
Bring_Demo.c Numeric Demonstration Code (should get cleaned up)

C Code Solving Complex Quadratic, Cubic and Quartic Equations

Every couple of years, I find myself needing to solve cubic and quartic equations, typically as part of an eigenvalue problem. Given the nice support of complex numbers in the gcc compiler (with math library), I've written a demonstration program solving general quadratic, cubic and quartic equations with complex coefficients. This program is simple, illustrates by example some C features such as scanf and pointers, and of course, works well for me. Enjoy!

Quadratic_Cubic_Quartic.c Demonstration Code

Gamma Matrices and 96 Five Dimensional Geometric Algebras

The 32 complex 4x4 gamma matrices of quantum mechanics support 96 unique implementations of five dimensional geometric algebra in (4,1), (2,3) and (0,5) signatures. An additional 96 sets of five anti-commutating blades exist which double cover four dimensional space, with fake signatures of (5,0), (3,2) and (1,4). I am beginning another study of this fascinating set of matrices, geometric algebra, and various factorings of the Klein-Gordon equations. If you crave more leptons than Majorana, Weyl, Dirac, Bjorken or Drell, this is the read for you!
The program linked below generates the large output file (340K).


The executive summary below lists the anti-commutating sets of five blades, organized by signature. Multivectors made from these blade sets square to a scalar, with the determinant being the square of that square, as expected.


Fond Memories of "People of Earth" (TBS)

Not unexpectedly, TBS has cancelled the sci-fi comedy "People Of Earth". This is my tribute to the show, the fine actors, and usually decent, clever writing.

A Tribute to "People of Earth" (TBS)

Determinants, Idempotents and Nilpotents in Geometric Algebra

I am fascinated by describing physics using multivectors, where multivectors are both the object and the transformation rules for the objects. In these systems of continuously compounding products, projection operators provide finite solutions. Idempotent, nilpotents and their close relatives all have zero determinant in both linear algebra and geometric algebra. This note looks at determinants, idempotents and nilpotents in 2-5 dimensions. I find interesting relationships between the square of a multivector, the determinant of a multivector, and projections involving the Reverse and Clifford conjugation operations.

Determinants, Idempotents and Nilpotents in Geometric Algebra

Determinant Preserving Transforms in Geometric Algebra

By analogy to matrix implementations, we can define a determinant for generic multivectors in geometric algebra. This determinant measures the internal volume of the multivector, and is akin to a magnitude. Like matrices, the determinant of a product of multivectors is the product of their determinants. Like matrices, the determinant must be non-zero for an inverse to exist. Just as rotations leave a magnitude invariant, so do a large class of transforms leave determinants invariant. This note documents transforms akin to complements, duals, simple blade products and simple sandwich products in (3,0), (4,0), (3,1) and (4,1) geometric algebras.

Determinant Preserving Transforms

There are 360 Magic Square Transforms which Preserve the Determinant in GA5_4_1 Space

I have earlier looked at 72 remappings of Minkowski spacetime among itself based upon magic-square like transformations. Now I have identified 360 determinant preserving remappings in five dimensional geometric algebra with a (4,1) signature.

GA5_4_1_Magic_Bases.txt   Just the basis remappings (q, w,x,y,z,t)

GA5_4_1_Magic_Remapping_Routine.cp   Subroutine implementing these transforms.

Mink Magic Square Transforms Preserve the Determinant

I have earlier looked at 72 remappings of Minkowski spacetime among itself based upon magic-square like transformations. These transformations, conveniently defined in the program below, preserve the determinant, as expected. Each of these 72 transformations supports many (32) sign variations, per the unary complements discussed below.


Five Dimensional 4+1 Unary Complements Logic

Further investigation of the logic of the determinant preserving five dimensional 4+1 unary complements has been interesting. The logic involved is indeed XOR logic. The independent variables are the q, w, x, y, z, and wx bits. The t bit is a dependent variable, t = q^w^x^y^z, meaning that q^w^x^y^z^t = 0 is a determinant preserving conservation law (CPT). Our sixth independent variable turns out to be wx (or equivalently yzt). I haven't mapped out this error correcting code yet, but I suspect we have a six bit information payload with five bit error detection and correction.

The determinant preserving logic equations look like extended parity, or error correcting code. The deduced equations are given below.

Independent variables - q w x y z wx

	yzt = wx;

	wxyt = z;
	wxzt = y;
	wyzt = x;
	xyzt = w;

	wxyzt = q;

	t  = wxyz = q^w^x^y^z;

	wt = xyz = q^w^y^z^wx;
	xt = wyz = q^x^y^z^wx;
	yz = wxt = w^x^y^z^wx;

	wy = xzt = x^y^wx;
	wz = xyt = x^z^wx;
	xy = wzt = w^y^wx;
	xz = wyt = w^z^wx;
	yt = wxz = q^z^wx;
	zt = wxy = q^y^wx;

Logic Equation Work Tool in C

Five Dimensional 4+1 Unary Complements

I provide a simple C program to enumerate all interesting (determinant preserving) unary complements in five dimensional 4+1 space. Run time is about 30 minutes on my fastest machine. Sandwich product factors are shown on the far right. Notice left/right sign symmetry between multivector left/right halves (duality related), and factor of (-1) between the first 32 multivectors and the mirrored remaining 32. (@31 = - @32, @0 = - @63). These folded patterns are strongly reminescent of XOR logic.

Multiplying the original multivector times the selected complement results in a new multivector, often with a large number of zero components. For example, Clifford conjugation, (index 1) times the original multivector has a product with 20 of 32 components zero. The score parameter to the right of the multivector is this number of zero terms. Because these complements preserve the determinant, the product of the complement and the original has a determinant equal to the square of the determinant of the original multivector, but potentially far fewer terms. Searching for determinant preserving transforms among the resulting 12 element multivectors directly leads to my amazingly efficient determinant formulas.

Five Dimensional 4+1 Unary Complements in C

 0  00000000  ( a,  b, c, d, e, f,  g, h, j, k, l, m, n, p, r, s,  S, R, P, N, M, L, K, J, H, G,  F, E, D, C, B,  A)   0   q, wxyzt
 1  03ffffc0  ( a,  b, c, d, e, f, -g,-h,-j,-k,-l,-m,-n,-p,-r,-s, -S,-R,-P,-N,-M,-L,-K,-J,-H,-G,  F, E, D, C, B,  A)  20
 2  0cde7b30  ( a,  b, c, d,-e,-f,  g, h,-j,-k, l,-m,-n,-p,-r, s,  S,-R,-P,-N,-M, L,-K,-J, H, G, -F,-E, D, C, B,  A)   0  zt, wxy
 3  0f2184f0  ( a,  b, c, d,-e,-f, -g,-h, j, k,-l, m, n, p, r,-s, -S, R, P, N, M,-L, K, J,-H,-G, -F,-E, D, C, B,  A)  12
 4  156db6a8  ( a,  b, c,-d, e,-f,  g,-h, j,-k,-l, m,-n,-p, r,-s, -S, R,-P,-N, M,-L,-K, J,-H, G, -F, E,-D, C, B,  A)   0  yt, wxz
 5  16924968  ( a,  b, c,-d, e,-f, -g, h,-j, k, l,-m, n, p,-r, s,  S,-R, P, N,-M, L, K,-J, H,-G, -F, E,-D, C, B,  A)  12
 6  19b3cd98  ( a,  b, c,-d,-e, f,  g,-h,-j, k,-l,-m, n, p,-r,-s, -S,-R, P, N,-M,-L, K,-J,-H, G,  F,-E,-D, C, B,  A)   0  yz, wxt
 7  1a4c3258  ( a,  b, c,-d,-e, f, -g, h, j,-k, l, m,-n,-p, r, s,  S, R,-P,-N, M, L,-K, J, H,-G,  F,-E,-D, C, B,  A)  12
 8  258c31a4  ( a,  b,-c, d, e,-f,  g,-h,-j, k, l, m,-n,-p, r, s,  S, R,-P,-N, M, L, K,-J,-H, G, -F, E, D,-C, B,  A)  12
 9  2673ce64  ( a,  b,-c, d, e,-f, -g, h, j,-k,-l,-m, n, p,-r,-s, -S,-R, P, N,-M,-L,-K, J, H,-G, -F, E, D,-C, B,  A)   0  xt, wyz
10  29524a94  ( a,  b,-c, d,-e, f,  g,-h, j,-k, l,-m, n, p,-r, s,  S,-R, P, N,-M, L,-K, J,-H, G,  F,-E, D,-C, B,  A)  12
11  2aadb554  ( a,  b,-c, d,-e, f, -g, h,-j, k,-l, m,-n,-p, r,-s, -S, R,-P,-N, M,-L, K,-J, H,-G,  F,-E, D,-C, B,  A)   0  xz, wyt
12  30e1870c  ( a,  b,-c,-d, e, f,  g, h,-j,-k,-l, m, n, p, r,-s, -S, R, P, N, M,-L,-K,-J, H, G,  F, E,-D,-C, B,  A)  12
13  331e78cc  ( a,  b,-c,-d, e, f, -g,-h, j, k, l,-m,-n,-p,-r, s,  S,-R,-P,-N,-M, L, K, J,-H,-G,  F, E,-D,-C, B,  A)   0  xy, wzt
14  3c3ffc3c  ( a,  b,-c,-d,-e,-f,  g, h, j, k,-l,-m,-n,-p,-r,-s, -S,-R,-P,-N,-M,-L, K, J, H, G, -F,-E,-D,-C, B,  A)  20
15  3fc003fc  ( a,  b,-c,-d,-e,-f, -g,-h,-j,-k, l, m, n, p, r, s,  S, R, P, N, M, L,-K,-J,-H,-G, -F,-E,-D,-C, B,  A)   0   w, xyzt
16  44742e22  ( a, -b, c, d, e,-f,  g, h, j,-k,-l,-m, n,-p, r, s,  S, R,-P, N,-M,-L,-K, J, H, G, -F, E, D, C,-B,  A)  12
17  478bd1e2  ( a, -b, c, d, e,-f, -g,-h,-j, k, l, m,-n, p,-r,-s, -S,-R, P,-N, M, L, K,-J,-H,-G, -F, E, D, C,-B,  A)   0  wt, xyz
18  48aa5512  ( a, -b, c, d,-e, f,  g, h,-j, k,-l, m,-n, p,-r, s,  S,-R, P,-N, M,-L, K,-J, H, G,  F,-E, D, C,-B,  A)  12
19  4b55aad2  ( a, -b, c, d,-e, f, -g,-h, j,-k, l,-m, n,-p, r,-s, -S, R,-P, N,-M, L,-K, J,-H,-G,  F,-E, D, C,-B,  A)   0  wz, xyt
20  5119988a  ( a, -b, c,-d, e, f,  g,-h, j, k, l,-m,-n, p, r,-s, -S, R, P,-N,-M, L, K, J,-H, G,  F, E,-D, C,-B,  A)  12
21  52e6674a  ( a, -b, c,-d, e, f, -g, h,-j,-k,-l, m, n,-p,-r, s,  S,-R,-P, N, M,-L,-K,-J, H,-G,  F, E,-D, C,-B,  A)   0  wy, xzt
22  5dc7e3ba  ( a, -b, c,-d,-e,-f,  g,-h,-j,-k, l, m, n,-p,-r,-s, -S,-R,-P, N, M, L,-K,-J,-H, G, -F,-E,-D, C,-B,  A)  20
23  5e381c7a  ( a, -b, c,-d,-e,-f, -g, h, j, k,-l,-m,-n, p, r, s,  S, R, P,-N,-M,-L, K, J, H,-G, -F,-E,-D, C,-B,  A)   0   x, wyzt
24  61f81f86  ( a, -b,-c, d, e, f,  g,-h,-j,-k,-l,-m,-n, p, r, s,  S, R, P,-N,-M,-L,-K,-J,-H, G,  F, E, D,-C,-B,  A)   0  wx, yzt
25  6207e046  ( a, -b,-c, d, e, f, -g, h, j, k, l, m, n,-p,-r,-s, -S,-R,-P, N, M, L, K, J, H,-G,  F, E, D,-C,-B,  A)  12
26  6d2664b6  ( a, -b,-c, d,-e,-f,  g,-h, j, k,-l, m, n,-p,-r, s,  S,-R,-P, N, M,-L, K, J,-H, G, -F,-E, D,-C,-B,  A)   0   y, wxzt
27  6ed99b76  ( a, -b,-c, d,-e,-f, -g, h,-j,-k, l,-m,-n, p, r,-s, -S, R, P,-N,-M, L,-K,-J, H,-G, -F,-E, D,-C,-B,  A)  20
28  7495a92e  ( a, -b,-c,-d, e,-f,  g, h,-j, k, l,-m, n,-p, r,-s, -S, R,-P, N,-M, L, K,-J, H, G, -F, E,-D,-C,-B,  A)   0   z, wxyt
29  776a56ee  ( a, -b,-c,-d, e,-f, -g,-h, j,-k,-l, m,-n, p,-r, s,  S,-R, P,-N, M,-L,-K, J,-H,-G, -F, E,-D,-C,-B,  A)  20
30  784bd21e  ( a, -b,-c,-d,-e, f,  g, h, j,-k, l, m,-n, p,-r,-s, -S,-R, P,-N, M, L,-K, J, H, G,  F,-E,-D,-C,-B,  A)   0   t, wxyz
31  7bb42dde  ( a, -b,-c,-d,-e, f, -g,-h,-j, k,-l,-m, n,-p, r, s,  S, R,-P, N,-M,-L, K,-J,-H,-G,  F,-E,-D,-C,-B,  A)  20
32  844bd221  (-a,  b, c, d, e,-f,  g, h, j,-k, l, m,-n, p,-r,-s, -S,-R, P,-N, M, L,-K, J, H, G, -F, E, D, C, B, -A)  20
33  87b42de1  (-a,  b, c, d, e,-f, -g,-h,-j, k,-l,-m, n,-p, r, s,  S, R,-P, N,-M,-L, K,-J,-H,-G, -F, E, D, C, B, -A)   0
34  8895a911  (-a,  b, c, d,-e, f,  g, h,-j, k, l,-m, n,-p, r,-s, -S, R,-P, N,-M, L, K,-J, H, G,  F,-E, D, C, B, -A)  20
35  8b6a56d1  (-a,  b, c, d,-e, f, -g,-h, j,-k,-l, m,-n, p,-r, s,  S,-R, P,-N, M,-L,-K, J,-H,-G,  F,-E, D, C, B, -A)   0
36  91266489  (-a,  b, c,-d, e, f,  g,-h, j, k,-l, m, n,-p,-r, s,  S,-R,-P, N, M,-L, K, J,-H, G,  F, E,-D, C, B, -A)  20
37  92d99b49  (-a,  b, c,-d, e, f, -g, h,-j,-k, l,-m,-n, p, r,-s, -S, R, P,-N,-M, L,-K,-J, H,-G,  F, E,-D, C, B, -A)   0
38  9df81fb9  (-a,  b, c,-d,-e,-f,  g,-h,-j,-k,-l,-m,-n, p, r, s,  S, R, P,-N,-M,-L,-K,-J,-H, G, -F,-E,-D, C, B, -A)  12
39  9e07e079  (-a,  b, c,-d,-e,-f, -g, h, j, k, l, m, n,-p,-r,-s, -S,-R,-P, N, M, L, K, J, H,-G, -F,-E,-D, C, B, -A)   0
40  a1c7e385  (-a,  b,-c, d, e, f,  g,-h,-j,-k, l, m, n,-p,-r,-s, -S,-R,-P, N, M, L,-K,-J,-H, G,  F, E, D,-C, B, -A)   0
41  a2381c45  (-a,  b,-c, d, e, f, -g, h, j, k,-l,-m,-n, p, r, s,  S, R, P,-N,-M,-L, K, J, H,-G,  F, E, D,-C, B, -A)  20
42  ad1998b5  (-a,  b,-c, d,-e,-f,  g,-h, j, k, l,-m,-n, p, r,-s, -S, R, P,-N,-M, L, K, J,-H, G, -F,-E, D,-C, B, -A)   0
43  aee66775  (-a,  b,-c, d,-e,-f, -g, h,-j,-k,-l, m, n,-p,-r, s,  S,-R,-P, N, M,-L,-K,-J, H,-G, -F,-E, D,-C, B, -A)  12
44  b4aa552d  (-a,  b,-c,-d, e,-f,  g, h,-j, k,-l, m,-n, p,-r, s,  S,-R, P,-N, M,-L, K,-J, H, G, -F, E,-D,-C, B, -A)   0
45  b755aaed  (-a,  b,-c,-d, e,-f, -g,-h, j,-k, l,-m, n,-p, r,-s, -S, R,-P, N,-M, L,-K, J,-H,-G, -F, E,-D,-C, B, -A)  12
46  b8742e1d  (-a,  b,-c,-d,-e, f,  g, h, j,-k,-l,-m, n,-p, r, s,  S, R,-P, N,-M,-L,-K, J, H, G,  F,-E,-D,-C, B, -A)   0
47  bb8bd1dd  (-a,  b,-c,-d,-e, f, -g,-h,-j, k, l, m,-n, p,-r,-s, -S,-R, P,-N, M, L, K,-J,-H,-G,  F,-E,-D,-C, B, -A)  12
48  c03ffc03  (-a, -b, c, d, e, f,  g, h, j, k,-l,-m,-n,-p,-r,-s, -S,-R,-P,-N,-M,-L, K, J, H, G,  F, E, D, C,-B, -A)   0
49  c3c003c3  (-a, -b, c, d, e, f, -g,-h,-j,-k, l, m, n, p, r, s,  S, R, P, N, M, L,-K,-J,-H,-G,  F, E, D, C,-B, -A)  20
50  cce18733  (-a, -b, c, d,-e,-f,  g, h,-j,-k,-l, m, n, p, r,-s, -S, R, P, N, M,-L,-K,-J, H, G, -F,-E, D, C,-B, -A)   0
51  cf1e78f3  (-a, -b, c, d,-e,-f, -g,-h, j, k, l,-m,-n,-p,-r, s,  S,-R,-P,-N,-M, L, K, J,-H,-G, -F,-E, D, C,-B, -A)  12
52  d5524aab  (-a, -b, c,-d, e,-f,  g,-h, j,-k, l,-m, n, p,-r, s,  S,-R, P, N,-M, L,-K, J,-H, G, -F, E,-D, C,-B, -A)   0
53  d6adb56b  (-a, -b, c,-d, e,-f, -g, h,-j, k,-l, m,-n,-p, r,-s, -S, R,-P,-N, M,-L, K,-J, H,-G, -F, E,-D, C,-B, -A)  12
54  d98c319b  (-a, -b, c,-d,-e, f,  g,-h,-j, k, l, m,-n,-p, r, s,  S, R,-P,-N, M, L, K,-J,-H, G,  F,-E,-D, C,-B, -A)   0
55  da73ce5b  (-a, -b, c,-d,-e, f, -g, h, j,-k,-l,-m, n, p,-r,-s, -S,-R, P, N,-M,-L,-K, J, H,-G,  F,-E,-D, C,-B, -A)  12
56  e5b3cda7  (-a, -b,-c, d, e,-f,  g,-h,-j, k,-l,-m, n, p,-r,-s, -S,-R, P, N,-M,-L, K,-J,-H, G, -F, E, D,-C,-B, -A)  12
57  e64c3267  (-a, -b,-c, d, e,-f, -g, h, j,-k, l, m,-n,-p, r, s,  S, R,-P,-N, M, L,-K, J, H,-G, -F, E, D,-C,-B, -A)   0
58  e96db697  (-a, -b,-c, d,-e, f,  g,-h, j,-k,-l, m,-n,-p, r,-s, -S, R,-P,-N, M,-L,-K, J,-H, G,  F,-E, D,-C,-B, -A)  12
59  ea924957  (-a, -b,-c, d,-e, f, -g, h,-j, k, l,-m, n, p,-r, s,  S,-R, P, N,-M, L, K,-J, H,-G,  F,-E, D,-C,-B, -A)   0
60  f0de7b0f  (-a, -b,-c,-d, e, f,  g, h,-j,-k, l,-m,-n,-p,-r, s,  S,-R,-P,-N,-M, L,-K,-J, H, G,  F, E,-D,-C,-B, -A)  12
61  f32184cf  (-a, -b,-c,-d, e, f, -g,-h, j, k,-l, m, n, p, r,-s, -S, R, P, N, M,-L, K, J,-H,-G,  F, E,-D,-C,-B, -A)   0
62  fc00003f  (-a, -b,-c,-d,-e,-f,  g, h, j, k, l, m, n, p, r, s,  S, R, P, N, M, L, K, J, H, G, -F,-E,-D,-C,-B, -A)  20
63  ffffffff  (-a, -b,-c,-d,-e,-f, -g,-h,-j,-k,-l,-m,-n,-p,-r,-s, -S,-R,-P,-N,-M,-L,-K,-J,-H,-G, -F,-E,-D,-C,-B, -A)   0

Euclidean 2D Geometric Algebra C Routines

I provide a simple include file library implementing floating point geometric algebra routines for 2D Euclidean space.

Euclidean 2D Space Geometric Algebra Subroutines in C

Euclidean 2D Space Geometric Algebra Demonstration Program in C

Euclidean 2D Space Geometric Algebra Demonstration Program Results

Euclidean 2D Geometric Algebra C++ Routines

I provide a simple include file library implementing symbolic geometric algebra routines for 2D Euclidean space using the GiNaC library.

Euclidean 2D Space Geometric Algebra Subroutines in C++

Euclidean 2D Space Geometric Algebra Demonstration Program in C++

Euclidean 2D Space Geometric Algebra Demonstration Program Results

Five Dimensional (4,1) Geometric Algebra C Routines

I provide a simple include file library implementing floating point geometric algebra routines for Five Dimensional (4,1) spacetime.

Five Dimensional (4,1) Geometric Algebra Subroutines in C

Five Dimensional (4,1) Geometric Algebra Demonstration Program in C

Five Dimensional (4,1) Geometric Algebra Demonstration Program Results

Five Dimensional 4,1 Symbolic GA Routines in C++

Electrogravity as well as general Dirac quantum mechanics requires a five dimensional spacetime. I implement a geometric algebra using a (4,1) metric, matching a matrix implementation using Dirac Gamma matrices. The Gamma matrices are complexified 4x4 matrices, and have a complex value for their determinant. The pseudoscalar I = wxyzt mimics the complex i, and commutes with all multivectors. The complex number made from (a + A*wxyzt) likewise commutes with all multivectors. For the determinant and Adjugate, I have chosen to implement the complex result to allow easy comparison between conventional gamma matrix versus GA results. However, it is trivial to convert the complex determinant to a magnitude, typically for scaling purposes to create unit magnitude multivectors.

GA metric 4,1 routines (GA5_4_1_Routines.cp)

GA metric 4,1 test program (GA5_4_1_Test_Harness.cp)

GA metric 4,1 test program results (GA5_4_1_Test_Harness.txt)

Another GA metric 4,1 test program, showing a mix of matrix and multivector techniques (GA5_4_1_Development.cp)

Minkowski Spacetime Geometric Algebra C Routines

I provide a simple include file library implementing floating point geometric algebra routines for Minkowski spacetime.

Minkowski Spacetime Geometric Algebra Subroutines in C

Minkowski Spacetime Geometric Algebra Demonstration Program in C

Minkowski Spacetime Geometric Algebra Demonstration Program Results

Euclidean 4D Geometric Algebra C Routines

I provide a simple include file library implementing floating point geometric algebra routines for Euclidean spacetime.

Euclidean Spacetime Geometric Algebra Subroutines in C

Euclidean Spacetime Geometric Algebra Demonstration Program in C

Euclidean Spacetime Geometric Algebra Demonstration Program Results

Euclidean 3D Geometric Algebra C Routines

I provide a simple include file library implementing floating point geometric algebra routines for Euclidean space.

Euclidean Space Geometric Algebra Subroutines in C

Euclidean Space Geometric Algebra Demonstration Program in C

Euclidean Space Geometric Algebra Demonstration Program Results

Euclidean 3D Geometric Algebra C++ Routines

I provide a simple include file library implementing symbolic geometric algebra routines for Euclidean space using the GiNaC library.

Euclidean Space Geometric Algebra Subroutines in C++

Euclidean Space Geometric Algebra Demonstration Program in C++

Euclidean Space Geometric Algebra Demonstration Program Results

Euclidean 4D Geometric Algebra C++ Routines

I provide a simple include file library implementing symbolic geometric algebra routines for Euclidean spacetime using the GiNaC library.

Euclidean Spacetime Geometric Algebra Subroutines in C++

Euclidean Spacetime Geometric Algebra Demonstration Program in C++

Euclidean Spacetime Geometric Algebra Demonstration Program Results

Verification of Determinant Formula via Matrices

Minkowski Geometric Algebra C++ Routines

I provide a simple include file library implementing symbolic geometric algebra routines for Minkowski spacetime using the GiNaC library.

Minkowski Spacetime Geometric Algebra Subroutines in C++

Minkowski Spacetime Geometric Algebra Demonstration Program in C++

Minkowski Spacetime Geometric Algebra Demonstration Program Results

Interesting Duals and Complements in Minkowski and Euclidean Spacetime

I provide sample C++ code finding all interesting duals and complements for Minkowski and Euclidean spacetime. The geometric product of a multivector and the best duals and complements eliminate ten out of sixteen terms. These are like extensions of the complex conjugate to four dimensional spaces. As such, they lead to great simplifications of formulas for determinants. Basically, a Reverse conjugation, products, complex-like conjugation, products yields the determinant of a Minkowski multivector. The code below illustrates 12 different methods, all leading to the same result. Here is my favorite.

Start with a generic Minkowski spacetime multivector r.

Format for Mink is Mink(a_q, a_x,a_y,a_z,a_t, a_xy,a_xz,a_yz,a_xt,a_yt,a_zt, a_xyz,a_xyt,a_xzt,a_yzt, a_xyzt);  

r = Mink(a, b,c,d,e, f,g,h,i,j,k, l,m,n,o, p)

Form the Reverse Conjugate, (index 32736 in my codes below.)

s = Mink(a, b,c,d,e, -f,-g,-h,-i,-j,-k, -l,-m,-n,-o, p));  

Form Clifford product of r and s. Ten terms disappear in the product.

t = r*s = Mink(A,  B,C,D,E, 0,0,0,0,0,0,  0,0,0,0, P)

A = g^2+l^2+b^2-j^2-o^2-e^2+h^2-m^2+c^2-p^2+f^2-k^2-i^2-n^2+a^2+d^2
B = -2*e*i-2*n*k+2*g*d-2*o*p+2*f*c+2*h*l-2*m*j+2*a*b
C = -2*k*o+2*m*i+2*a*c+2*n*p-2*g*l-2*j*e-2*b*f+2*d*h
D =  2*j*o+2*n*i-2*m*p-2*h*c-2*k*e-2*g*b+2*d*a+2*l*f
E = -2*d*k+2*m*f+2*h*o+2*a*e+2*g*n-2*j*c-2*l*p-2*b*i
P = -2*b*o+2*j*g+2*n*c+2*a*p-2*m*d-2*h*i-2*k*f+2*e*l

We now form a complex conjugate-like term from t

w = Mink(A,  -B,-C,-D,-E, 0,0,0,0,0,0,  0,0,0,0, -P)

Multiply t and w

t*w = Mink(A^2-B^2-C^2-D^2+E^2+P^2,   0,0,0,0,   0,0,0,0,0,0,   0,0,0,0, 0)

This scalar term is the determinant of r, and it is the fourth power of the magnitude of the complete multivector.

This is very nice, as no matrix operations were used in this process!

We can do better!, We can now easily define the reciprocol of a Minkowski multivector!

Start with   t*w = w*t = det(r) = |r|^4

w  = det(r) *(1/t) = det(r)*(1/(r*s)) = det(r)*(1/s)*(1/r)

s*w = det(r)*(1/r)

(1/r) = (s*w)/det(r)

Verification is in Verify_Reciprocol.cp

This process works with 4D Euclidean space, as well. Of course, the details of the determinant
and reciprocol are different, but the process is the same.

Demonstration Software Finding All Duals

Demonstration Software Finding All Duals Output

Compound Operations Efficiently Finding Determinant (Work in Progress)

Compound Operations Efficiently Finding Determinant (Work in Progress) Output

Verification of Determinant and Reciprocol Formulas

Reference Multivector Routines for Geometric Algebra in Minkowski Spacetime

I provide sample C++ code for geometric product, wedge product, antiwedge product, regressive product and assorted unary operators for Minkowski spacetime. Also included is a set of multiplication tables for rank increasing, rank preserving and rank decreasing terms of the geometric product, as well as code for the Expander, Conserver and Shrinker products.

Demonstration Software for Geometric Algebra in Minkowski Spacetime

Demonstration Software Output

Comparison of Hestenes' Regressive Product versus Lengyel's Antiwedge Product

The Hestenes' (1986) regressive product differs from the Lengyel antiwedge product. This note presents multiplication tables for the geometric, wedge, regressive and antiwedge products, and points out that the sign differs between the regressive versus antiwedge product when both blade factors have odd rank.

Regressive Versus Antiwedge Products

Speculation about Zuma, Spaceplanes, Satellite Warfare, and Warp Drives

Secrecy surrounds the Zuma mission, presumed lost. I speculate that Zuma may have been a successful spaceplane test, or even a successful warp drive test.

Zuma Speculation

Simple Proof that the AntiWedge Product is Associative

This is a simple proof that the AntiWedge product of Eric Lengyel and Leandro Fernandes is Associative. Previously, I had frustration, wrongly implementing Hestenes' formula. I now show that the Hestenes regressive product (now correctly defined) is associative.

AntiWedge Product is Associative

The AntiWedge Product of Professor Leandro Augusto Frata Fernandes

Professor Leandro Augusto Frata Fernandes, in 2013, posted a very nice set of notes as an introduction to geometric algebra, including his algorithms for calculating wedge, regressive, left contaction and right contraction products. His regressive product agrees with that of Eric Lengyel, increasing my confidence that their formulas are the true regessive product. Implementation of his algorithm and results are in the c file linked below.

2D C Code

3D C Code

4D C Code

Multiplication Tables and Component Equations for Wedge, Regressive and Clifford Products in 2, 3, and 4 Dimensions

2D Associative Demonstration Code

3D Associative Demonstration Code

4D Associative Demonstration Code

The AntiWedge Product of Eric Lengyel

Hermann Grassmann's wedge product has been widely adopted in physics and mathematics, but the related regressive product is rarely presented. Eric Lengyel, in Foundations of Game Engine Development, Volume 1, interprets the regressive product as a complement to the wedge product, and provides a geometrical view of the regressive product as a measure of intersection of the multiplied elements. Eric's most important insight is that the non-commutative nature of wedge multiplication leads to two potentially different complements, being the right versus left complement. His antiwedge product uses both complements, and achieves an associative antiwedge product.

This antiwedge product is associative, unlike Grassmann's variations, which gives me confidence that this is a correct implementation. This note will be revised as I gain in understanding.

The AntiWedge Product of Eric Lengyel

3D C++ Verification Code

The Regressive Product Per David Hestenes (1986)

David Hestenes, in his (1986) paper "Universal Geometric Algebra", provides a definition of an associative regressive product based upon the Clifford product. This note presents multiplicaton tables and equation sets for the Hestenes regressive product in two, three and four dimensions.

Regressive product 2D

 V      |  +q       +x       +y       +xy  
 +q     |   0        0        0       +q      
 +x     |   0        0       -q       +x      
 +y     |   0       +q        0       +y      
 +xy    |  +q       +x       +y       +xy     

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

Regressive product 3D

 V      |  +q       +x       +y       +z       +xy      +xz      +yz      +xyz 
 +q     |   0        0        0        0        0        0        0       +q      
 +x     |   0        0        0        0        0        0       +q       +x      
 +y     |   0        0        0        0        0       -q        0       +y      
 +z     |   0        0        0        0       +q        0        0       +z      
 +xy    |   0        0        0       +q        0       -x       -y       +xy     
 +xz    |   0        0       -q        0       +x        0       -z       +xz     
 +yz    |   0       +q        0        0       +y       +z        0       +yz     
 +xyz   |  +q       +x       +y       +z       +xy      +xz      +yz      +xyz   

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

Regressive product 4D Spacetime

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


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

The Regressive Product per Hestenes 1986 Code

The Regressive_AND Product

Hermann Grassmann's wedge product has been widely adopted in physics and mathematics. However, the related regressive product is rarely presented, due to varying interpretations and prescriptions for implementing the regressive product. Instead, various methods are presented for unions and intersections, joins and meets. This note presents a simple set of products based upon AND, OR and XOR logic operations operating on geometric elements. These products are associative, in contrast with the common regressive products. The program Regressive_AND_OR_XOR.cp is provided for associativity verification.

The Wedge, AND, OR and XOR Products

The AND, OR and XOR Products Validation Code

The AND, OR and XOR Equation Generator Code

Sample Curvature and Torsion Calculations Using Geometric Algebra

I am fond of the Frenet Serret formulas for curvatures for trajectories, and I like extending these formulas to geometric algebra. Here are some simple calculations using geometric algebra and the wedge product to calculate curvature and torsion for the simple cases of the line, a circle, and a spiral.

Frenet Formula Examples Using Geometric Algebra

Sidetrack - Unary Operators and Determinants in Geometric Algebra

Using real matrix implementations of three dimensional Euclidean geometric algebra and Minkowski geometric algebra, we can define the determinant of a multivector, which can be used as a measure of magnitude. Likewise, we can define unary operators which change the sign of various multivector components in a fashion similar to complex conjugation, which preserve the value of the determinant, but zero out substantial portions of the multivector product with the original multivector. This note documents the determinants in Euclidean and Minkowski space, lists the interesting unary operators which preserve determinant, then documents efficient calculation of the determinant using these unary operators.

Unary Operators and Determinants

The Dirac Equation in 3D!

I've been through many variations trying to clearly understand the Dirac equation, and quantum mechanics in general. This particular variation has me quite pleased. The standard Dirac treatment appears to only partially occupy the four-space and five-space standard implementations. I decided to drop down to three-space only, and see what I could come up with.

Using Euclidean, three-space geometric algebra, I find the Dirac equation maps into a three-space, eight component multivector, as compared to the four component complex spinors. More importantly, these eight components have a nice geometric interpretation. The scalar equation corresponds to energy terms. We find three equations for linear momentum, three equations for angular momentum (curvature), and one equation for torsion. I find that the wavefunction corresponds to a unit magnitude multivector corresponding to a local Frenet multivector frameset, being psi = (1 + u + un + unb) where the tangent u provides flowlines, and the curvature term un indicate normals to the flowlines (akin to equipotentials in EM field plots).

I further find these equations, in the macroscopic view (where hbar multiplied terms are sent to zero) provides coupling between linear momentum and angular space terms which are not part of our standard technology. I expect these terms to manifest as an electro-gyroscopic effect, and intend to wind toroidal coils to realize these effects in hardware shortly.

Dirac Equation in 3D! (Drafts in Revision)

Lists of Anti-commutating Sets in Minkowsi and Dirac Spacetimes

In Minkowski geometric algebra, I commonly use the anti-commutating vector basis (x, y, z, t). I found early on that the quadvector xyzt also anti-commutes with the vector basis to make a set of five anti-commutating members. Curious as to whether there were any other sets in Minkowski spacetime, I quickly found six total sets of five anti-commutating elements, which could be used to factor the Dirac equation without sources, for example.

Knowing that several sets exist, the question arises of how many set exist, and what are their members. To answer this question, I have written two small programs to identify and enumerate all anti-commutating sets in four dimensional Minkowski spacetime, and five dimensional Dirac spacetime.

This note documents the anti-commutating sets in Minkowski and Dirac geometric algebras. I find 60 pairs, 80 triads, 30 tetrads and 6 pentads in Minkowski geometric algebra with a signature of (+ + + -). I find 240 pairs, 640 triads, 480 tetrads and 192 pentads in Dirac geometric algebra with a signature of (+ + + + -).

Anti-commutating Basis Elements in Minkowski Geometric Algebra

Anti-commutating Basis Elements in Dirac Geometric Algebra

Matrix Operations in Minkowski Geometric Algebra

Geometric algebras are associative, non-commutative algebras which can be mapped to matrices. As such, the geometric algebras have matrix related operations, such as determinants, eigenvalues and eigenvectors. This note documents and provides formula for matrix related operations for the specific case of Minkowski geometric algebra, using an east coast metric of (+,+,+,-).

Matrix Operations In Minkowski Geometric Algebra

Quantum Re-annotated: The Dirac Equation

This project began as a simple effort to cast the Dirac equation into geometric algebra terms following the example of David Hestenes, but using real 4x4 matrices as a geometric algebra representation (with metric (+,+,+,-)), rather than the complex algebra matrices used by Dirac. Each attempt (of many) to eliminate complex numbers failed. Upon admitting defeat in fourspace, I realized that the complexified Minkowski fourspace describes a five dimensional geometric algebra, with signature (+,-,-,-,+). Having made this realization, I quickly found many others, such as Jose Almeida in Portugal, N. Redington and M.A.K. Lodhi (USA), and the grand master Dirac himself (1935) have made five dimensional models for the Dirac electron.

This project is finally beginning to make me happy. At this point, the draft paper derives a set of eight real (or four complex) component equations for the Dirac wavefunction using the standard Bjorken and Drell matrices. I then set up a five dimensional geometric algebra with signature (+ - - - +) matching the Bjorken and Drell matrices. Corresponding to the column wavefunction, I have a left ideal multivector. I then recover the same set of eight equation found in the standard approach.

Demonstration code, including matrix and multivector implementation and utilities is at Dirac_vs_Ginac.cp

Quantum Re-annotated: The Dirac Equation

Fock and Ivanenko's Luminal Electron

David Delphenich has translated the 1929 paper On a possible geometric interpretation of relativistic quantum theory by V. Fock and D. Ivanenko. This paper provides a geometric interpretation of the Dirac equation, and points out that the expected velocity of the electron is always c. This note is an extract of their work.

Fock and Ivanenko's Luminal Electron

The Magic Square at the Heart of Spacetime

Four two-by-two matrices can be used to implement two dimensional Euclidean geometric algebra. The pair-wise direct product of these matrices provides sixteen real four-by-four matrices implementing four dimensional Minkowski geometric algebra with (+,+,+,-) signature. These sixteen geometric algebra elements can be arranged in a four-by-four grid sharing many of the symmetries of magic squares, with the substitution of the geometric product in place of addition. Seventy two mappings in magic square format and geometric algebra basis format are listed. I suspect that these mappings may enable practical sigma deritrinitation.

The Magic Square at the Heart of Spacetime

Notes on 4x4 Magic Squares

Magic squares are usually presented as a mathematical recreation. These squares have a sequence of integers, arranged such that the sum across each row, sum down each column, and the sum across each diagonal equals the same magic constant. Within the family of 7040 4x4 magic squares is a subset of 384 with an even greater degree of symmetry. These pandiagonal 4x4 magic squares sum to the magic constant along every broken diagonal, glide path and 3x3 cell spacing.

This note describes and provides source code for finding the 549504 semi-magic 4x4 squares, where we only require matching sums across and down. The note then filters this list to identify the 7040 4x4 magic squares which also include the requirement that the diagonals sum to the magic number, as well as the rows and columns. After that, this note filters down to the 384 panmagic squares, which have 52 different formulas summing to the magic number. Having found the 384 squares, we then look at Grogono's bit plane decomposition (magic carpets), finding a set of eight planar bit patterns, which can be derived from any one member by rolling and rotating operations.

Pandiagonal 4x4 Magic Squares

Magic Square Source Code

Direct Product Factors for Minkowski Matrices

Sixteen 4x4 matrices can be used to represent the basis for Minkowski geometric algebra. These matrices are outer products of a set of 2x2 planar Euclidean geometric algebra matrices. This note lists the 4x4 matrices, and their originating 2x2 matrices.

Direct Product Factors for Minkowski Matrices

Symmetries In Minkowski Geometric Algebra

Inside Minkowski Geometric Algebra with signature (+,+,+,-) are six subspaces with are isomorphic to three dimensional Euclidean geometric algebra. As each of these subspaces has the same mathematical structure as three space, we can use our standard tools, such as translations, scaling, rotations, cylindrical coordinates, spherical coordinates, and so forth in these subspaces. A program demonstrating and verifying these six representations is Six_Euclideans.ginac.cp

Furthermore, within Minkowski geometric algebra are twelve non-trivial remappings, allowing our additional fourspace standard tools of rotations, boosts, and hyperbolic geometry to be used in novel forms, as well. A program demonstrating and verifying these twelve representations is Twelve_Minkowskis.ginac.cp

Symmetries In Minkowski Geometric Algebra

Extending Geometric Algebra to Include Internal Orientation

Geometric Algebra in 3D Euclidean space can be implemented at least six ways using 4x4 real matrices, using half the available degrees of freedom. Digging into the multiple representations, we find 3D Euclidean geometric algebra to be an even grade subset of a 4D Minkowski space with signature (+,+,+,-). Usually, we stop here, and get excited about 3D space as a spinor subspace of 4D. However, I wanted to dig deeper, looking further into the symmetries associated with this 4x4 matrix set of representations. What I came to realize, is that we have nine elements which square to unity, which can be arranged into a 3x3 grid such that across each row we have a set of anti-commutating elements which can be used as a linear basis, and down each column, likewise, we find sets which can be used as a linear basis. In the ordinary geometric algebra implementation, we indeed use one of these sets for our spatial basis and associated trivector. We use another set for our space-time bivectors, and the third set for three trivectors. However, the symmetries involved give no special assignment among our six candidate arrangements. Looking at this from the point of view of modelling an electron as a general purpose multivector, I find a neat opportunity. Instead of viewing this 4x4 set of basis as a Minkowski spacetime, I look at this as a conventional three space Euclidean algebra, augmented with two more displacements and associated trivectors. These displacement may be independent deltas from a particle center, or may be internal degrees of freedom somewhat like isospin. I prefer the real space delta, at this time. Given a three component model for the electron of a luminal charge between two real magnetic monopoles of opposite polarity, this mathematical re-interpretation is exciting.

Oriented 3D GA

Twelve Real Dirac Matrices

The Dirac matrices can be interpreted as a set of basis for geometric algebra in a Minkowski metric space. The imaginary factors in Dirac's gamma matrix have always annoyed me. In this note, I present twelve alternatives to the Dirac matrices, using simple real numbers, for a metric (+,+,+,-). Supporting code is at Minkowski.c

Twelve Real Dirac Matrices

The Dirac Equation in Geometric Algebra

David Hestenes, Chris Doran, Anthony Lasenby, and others have implemented the Dirac equation for the the relativistic electron in geometric algebra. David Hestenes, in particular, has shown how the geometric algebra view provides insight into electron motion. This note starts with Dirac's development, then repeats the geometric algebra translation using a (-,-,-,+) signature. Finally, the same translation is carried out using a (+,+,+,-) signature. The result is a purely real multivector Dirac Equation with no imaginaries.

The Dirac Equation in Geometric Algebra

The Stern Gerlach Apparatus

The Stern Gerlach experiment demonstrates separation of components of a molecular beam via the force on magnetic dipoles in a magnetic field gradient. Most presentations of the Stern Gerlach experiment are simple cartoons or pleasant animations, which leave the real student hungry for detail. Fortunately, several schools, such as MIT, University of Wisconsin, Singapore National University, University of Potsdam, University of Zurich, and RWTH Aachen have replication of the Stern Gerlach experiment part of the standard physics curriculum. MIT and University of Wisconsin have locally produced replications, while the other schools I looked at were using variations on a trainer made by Phywe GmbH. (Phywe link requires cookies to be active.)

There are two major differences between the original Gerlach Sterns versus the modern replicants.
First, the modern replications use potassium, rather than silver, as the atomic source. Like silver, potassium has a single unpaired electron in the outer shell. Potassium (63.4 C) has a much lower melting point than silver (962 C), with the result that a 12W power supply is adequate for the furnace, and third degree burns are harder to obtain. However, potassium is more chemically reactive than silver, and requires attention in handling, operations and cleanup. (Glauss' work also has a nice picture of the magnetic pole faces.)
The second major difference is that instead of a passive witness plate, as used in the original experiment, PHYWE uses a Langmuir-Taylor surface ionization sensor. In this detector, neutral potassium atoms hit a heated tungsten filament, and become ionized. These ions are accelerated by a 50V field, and impact a collector. Picoamp beam currents are routinely measured over a small area. This device does not provide a two dimensional display of beam intensity. Instead, a horizontal traverse is made by moving the sensor. This one dimensional slice is only available in one plane. University of Zurick has a nice writeup, also showing the potassium oven as well as the Langmuir-Taylor probe.

A few more links.
A pleasant, slightly technical article from the Lindau council about Stern and Gerlach. This article has photos of the original apparatus, as well as some technical dimensions.
Another pleasant popular article, this from Physics Today, with some technical information.
Lisa Felker's Senior Project at RWTH-Aachen, done concurrently with Benjamin Glauss, referenced above. Like the lab manual from Phywe, and Benjamin Glauss' senior project, this has nice mathematical detail concerning the beam interaction with the divergent field, and nice quality curves for beam current profiles at different magnet current settings. From the data presented, these various authors calculate the magnetic moment for the potassium atom within a few percent of standard values.

The Lorentz Field

In the geometric algebra presentation of classical electromagnetics, we have a multivector whose vector portion is the electric field, whose bivector portion is the magnetic field, and whose scalar portion is a measure of deviation from the Lorentz gauge. In this note, I propose viewing this Lorentz field Phi as of equal status as the electric and magnetic fields. I provide wave equations for E, B, and Phi, and point out the coalescent nature of the Lorentz field. This presentation is not done in geometric algebra, but rather conventional vector notation to allow easy comparison to standard texts, such as Griffiths.

Lorentz Field in Electromagnetics

Pauli Equation and Geometric Algebra

This is the second set of notes looking at fundamental equations of quantum mechanics,

Wolfgang Pauli was adamant about keeping the spin axis distinct from the coordinate space. Perhaps he was influenced by considerations of four dimensional space, where we can have two independent, orthogonal planes of rotation. Perhaps he viewed the electron as a point particle, and felt that a zero dimensional point particle, lacking extent, could not rotate, generate a magnetic field or possess angular momentum. Unlike Louis de Broglie, Pauli was not open to the idea of an electron in continuous motion (action), self-interacting, following a curved path even in the absense of external magnetic fields. Regardless of how he felt, the spin matrices he used in the development of the Pauli Schrodinger equations are a direct match for geometric algebra.

Interestingly enough, all traces of the sigma matrices disappear from the actual set of wave equations.

In effect, the sigma matrices and the geometric algebra were but a scaffolding to incorporate spin. Having served its purpose, it is quietly removed. From this point of view, I think I can better understand Wolfgang Pauli. Slightly restating his position, he made no assumptions about the nature of spin. It could be local geometric circulation. It could be some isospace separate from our experience. From the point of view of the wavefunctions, the origin does not matter.

Pauli Equation and Geometric Algebra

Schrodinger's Equation in Geometric Algebra Format

I'm starting a series of notes following the steps of Hestenes, Doran and others in writing quantum mechanics in geometric algebra form. This first note is rather simple. The spinless Schrodinger equation is merely a complex field, scalar plus trivector. I think the better value of this particular note is the step by step translation to operator format for a single particle in an electromagnetic field.

Schrodinger's Equation in Geometric Algebra Format

Extending Electromagnetism

These note explore the extension of electromagnetism by use of the geometric and wedge products with multivector potentials.

Extending Electromagnetism via Geometric and Wedge Products

Wedge Products and Differential Forms

These are crib notes covering the use of the wedge product with derivative and differential terms. I am fascinated by the fact that the dimensionality of space interacting with the wedge product limits the complexity we can have in our mathematical descriptions.

Derivative and Differential Wedge Multivector Products.

Various Geometric Products

As I gain more experience with geometric algebra, I revisit my formula summary sheets, and update them with my current understanding. This is an update formula and code dump for three dimensional Euclidean geometry. Code is at Tests.GA3DE_3_0_0.ginac.cp.

Geometric Product, Wedge Product, Regressive Product and Various Unary Operators.

Dimensional Analysis of Multivector and Wedge Products

Geometric algebra defines composite structures of scalars, vectors, bivectors and higher order terms. When two multivectors are multiplied, if the internal units are different, such as meters for the vectors, meters squared for the bivectors, and so on, then the resulting product has mixed units in some of the product terms. By contrast, when using the wedge product, the resulting product has the same spatial unit arrangement as the two incoming factors. Executive summary:

Mixed Units in Geometrical Products

Electromagnetic Duality in 3D Geometric Algebra

This is a posting looking at duality in three dimensional electromagnetism, from the point of view of Geometric Algebra. I present the standard Maxwell Equations, followed by a brief discussion of parity, and the axial versus polar vector problems. I then present the standard dualities of electromagnetism, leading to the complex number format for the Maxwell equations. Next is a presentation of geometric algebra in three dimensional Euclidean space. I then finish with the Maxwell equations translated into multivector format, and discussion of duality within this format.

Electromagnetic Duality in 3D Geometric Algebra

Idempotents and Nilpotents Illustrated Using Modular Numbers

This note follows Garret Sobczyk's introductory material in Chapter 1 of New Foundations in Mathematics, ISBN 978-0-8176-8384-9. I provide snippets of C code, and a step by step walkthrough of the process of obtaining the idempotents and some nilpotents in a modular arithmetic system.

Idempotents and Nilpotents Illustrated Using Modular Numbers

A C program demonstrating these techniques is Modular_Numbers_7.c

Exercises with Nilpotents and Idempotents

This is a set of online notes and exercises with Nilpotents and Idempotents. Some items of interest to me are generating different nilpotents from using sandwich products around a multivector, as in z_{new} = z*M*z, generating nilpotents using commutating terms in geometric algebra, such as z_{new} = z*(a + b e_x e_y e_z), and identifying factors of zero, as in P_+ P_- = 0 => P_+ = A z, P_- = z B.

Exercises with Nilpotents and Idempotents

Extreme Utility of Nilpotents and Idempotents

Idempotents (mathematical objects which square to themselves) and Nilpotents (mathematical objects which square to zero) are powerful mathematical tools found in quantum mechanics, as well as in algebraic descriptions of spacetime. This note discusses idempotents and nilpotents in the context of fundamentals of mathematics, and illustrates their utility in finite dimensional spacetime, as well as their role linearizing complex operations.

Extreme Utility of Nilpotents and Idempotents

Nilpotents and Idempotents in 2D and 3D Euclidean Geometric Algebra

I present general formulas for Nilpotents (non-zero expressions which square to zero) and Idempotents (expressions which square to themselves) in 2D and 3D Euclidean Geometries. Rather than being simple a number/vector recombination, it proves that idempotents can easily have scalar, vector and bivector components. Formulas are provided for general idempotents annihilator pairs in 2D and 3D.

Nilpotents and Idempotents in 2D and 3D Euclidean Geometric Algebra

Garret Sobczyk's 2x2 Matrix Derivations

Using matrices to represent geometric algebras is known, but not necessarily the best practice. While I have used small computer programs to scan through candidate matrices to find representations, I have not been able to derive such matrices from first principles. Garret Sobczyk, however, has. I repeat his derivation here, for 2x2 matrix representation of the 2D geometric algebra, including more intermediate steps for easier understanding.

Garret Sobczyk's 2x2 Matrix Derivations

Onward to the Fourth Dimension!

A funny thing happened on the way to the fourth dimension. . .

So I have been thinking about the relationship between Clifford Algebras and matrix representations of these algebras. My initial belief has been that the matrix representations are a useful, but coincidental mapping. However, looking at the two dimensional case, I began to suspect that there may be more than coincidence in the mapping. Specifically, the two dimensional case showed a relationship between rotary transformations and linear translations, where each of the four algebra elements was both an element and an operator.

As I examined the three dimensional Geometric (Clifford) Algebra, it became clear that 3x3 matrices could not represent 3D Euclidean Clifford Algebra due to the absense of bivectors which square to negative one. However, in 4x4 matrices, six fundamental, and at least 48 representations were readily available. Now, in each of the representations, each element has a non-zero determinant, which is inherently necessary for the higher order multivector products to have non-zero determinant. This in turn is related to the highest order multivector term having a hypervolume equal to the determinant of it's representation.

In effect, from the unit scalar, through vectors, through bivectors, including the trivector, each representation for the three dimensional elements is algebraically a quadvector in fourspace. From the coincidental, but useful mapping point of view, this is no big deal. From the literal realities point of view, this is interesting indeed. Even more fun, is the categorizing of the six fundamental representation as two independent sets of three, with the two sets dual to the other. Regardless of set identification, the idea of three dimensional reality as a sort of downward projection of a four dimensional greater reality is fascinating.

As I scan the matrix space for 4x4 matrices, I find 21 matrices sets (+/- factors between pairs) with zero trace, and non-zero determinant which square to one. In a similar fashion, I find only six pairs (+/- factors between pairs) which square to negative one. In Euclidean Geometric algebra, vectors and quadvectors square to one, while bivectors and trivectors square to negative one. Given the single scalar, four vectors, six bivectors, four trivectors, and single quadvector structure of this algebra, we see that faithful representation is impossible using 4x4 matrices, as we need ten independent elements which square to negative one, but only six are available.

(Updated Jan 20, 2016.) We have an interesting set of 4x4 matrices, listed below, which implements Minkowski spacetime.

In the matrices below, I have 16 mutually orthogonal matrices. Ten of these, being the unit matrix, and nine others, square to +1. The nine non-unit matrices are mutually anti-commutative, and their pair wise products produce six other orthogonal matrices, which square to -1.

    Rank Order Matrix Printout 

[  1  0  0  0  ]
[  0  1  0  0  ]
[  0  0  1  0  ]
[  0  0  0  1  ]

       x                 y                 z                 t 
[  0 -1  0  0  ]  [ -1  0  0  0  ]  [  0  0  0  1  ]  [  1  0  0  0  ]
[ -1  0  0  0  ]  [  0  1  0  0  ]  [  0  0  1  0  ]  [  0 -1  0  0  ]
[  0  0  0  1  ]  [  0  0 -1  0  ]  [  0  1  0  0  ]  [  0  0 -1  0  ]
[  0  0  1  0  ]  [  0  0  0  1  ]  [  1  0  0  0  ]  [  0  0  0  1  ]

      y  z              z  x              x  y              t  z              t  y              t  x
[  0  1  0  0  ]  [  0  0 -1  0  ]  [  0  0  1  0  ]  [  0  0  0  1  ]  [ -1  0  0  0  ]  [  0  0  0 -1  ]
[  1  0  0  0  ]  [  0  0  0  1  ]  [  0  0  0  1  ]  [  0  0 -1  0  ]  [  0 -1  0  0  ]  [  0  0  1  0  ]
[  0  0  0  1  ]  [ -1  0  0  0  ]  [  1  0  0  0  ]  [  0 -1  0  0  ]  [  0  0  1  0  ]  [  0 -1  0  0  ]
[  0  0  1  0  ]  [  0  1  0  0  ]  [  0  1  0  0  ]  [  1  0  0  0  ]  [  0  0  0  1  ]  [  1  0  0  0  ]

     x y z             x y t             z x t             y z t
[  0  0  0 -1  ]  [  0  0  1  0  ]  [  0  0 -1  0  ]  [  0  1  0  0  ]
[  0  0 -1  0  ]  [  0  0  0 -1  ]  [  0  0  0 -1  ]  [ -1  0  0  0  ]
[  0  1  0  0  ]  [ -1  0  0  0  ]  [  1  0  0  0  ]  [  0  0  0 -1  ]
[  1  0  0  0  ]  [  0  1  0  0  ]  [  0  1  0  0  ]  [  0  0  1  0  ]

     x y t z
[  0 -1  0  0  ]
[  1  0  0  0  ]
[  0  0  0 -1  ]
[  0  0  1  0  ]

Source code Study_The_Nine.c

My current plan is to do some comparisions between the 2D Euclidean Algebra, the 4x4 simple representation, and the 2x2 'folded' representation. The fact that the 2x2 matrix representations require non-zero determinants seems to put each of the representation matrices on a same footing, as far as dimensional units are concerned.

After this, I intend to ponder the many Minkoswki implementations in 16x16 straight-forward matrix representation, as well as in the 4x4 representations. I would also like to better understand why 4x4 matrices don't support Euclidean four space, but do support Minkowsi.

Finally, I want to spend some more time pondering the possibility of Minkowski space being an assembly error, where a bivector was mistakenly used for time. At the very least, I should be able to get a nice scifi shortstory. At the best, there may be something really good here.

3D Euclidean Geometric Algebra and Matrix Representation

We cannot represent 3D Euclidean Geometric Algebras using 3x3 matrices. The determinant of the negative unit matrix is negative, and cannot be obtained as a square of 3x3 matrices with real elements. Consequently, we must venture into the 4x4 matrices to represent our three dimensional space of interest. As each 4x4 matrix has 16 degrees of freedom, and we only require 8 for our 3D multivectors, we anticipate multiple valid representations. Here is a list of six representations for 3D Euclidean Geometric Algebra using 4x4 matrices. Another 42 are easily made by sign permutations on the x, y and z vectors.
Set 1
       1               x               y               z
[ 1  0  0  0 ]  [ 0 -1  0  0 ]  [-1  0  0  0 ]  [ 0  0  0  1 ]
[ 0  1  0  0 ]  [-1  0  0  0 ]  [ 0  1  0  0 ]  [ 0  0  1  0 ]
[ 0  0  1  0 ]  [ 0  0  0  1 ]  [ 0  0 -1  0 ]  [ 0  1  0  0 ]
[ 0  0  0  1 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]  [ 1  0  0  0 ]

      xy              zx              yz              xyz
[ 0 -1  0  0 ]  [ 0  0  1  0 ]  [ 0  0  0 -1 ]  [ 0  0 -1  0 ]
[ 1  0  0  0 ]  [ 0  0  0  1 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]
[ 0  0  0  1 ]  [-1  0  0  0 ]  [ 0 -1  0  0 ]  [ 1  0  0  0 ]
[ 0  0 -1  0 ]  [ 0 -1  0  0 ]  [ 1  0  0  0 ]  [ 0 -1  0  0 ]

Set 2
       1               x               y               z
[ 1  0  0  0 ]  [ 1  0  0  0 ]  [ 0  1  0  0 ]  [ 0  0 -1  0 ]
[ 0  1  0  0 ]  [ 0 -1  0  0 ]  [ 1  0  0  0 ]  [ 0  0  0  1 ]
[ 0  0  1  0 ]  [ 0  0 -1  0 ]  [ 0  0  0  1 ]  [-1  0  0  0 ]
[ 0  0  0  1 ]  [ 0  0  0  1 ]  [ 0  0  1  0 ]  [ 0  1  0  0 ]

      xy              zx              yz              xyz
[ 0  1  0  0 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]  [ 0  0  0  1 ]
[-1  0  0  0 ]  [ 0  0  0  1 ]  [ 0  0 -1  0 ]  [ 0  0  1  0 ]
[ 0  0  0 -1 ]  [-1  0  0  0 ]  [ 0  1  0  0 ]  [ 0 -1  0  0 ]
[ 0  0  1  0 ]  [ 0 -1  0  0 ]  [-1  0  0  0 ]  [-1  0  0  0 ]

Set 3
       1               x               y               z
[ 1  0  0  0 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]  [-1  0  0  0 ]
[ 0  1  0  0 ]  [ 0  0  0  1 ]  [ 0  0 -1  0 ]  [ 0 -1  0  0 ]
[ 0  0  1  0 ]  [ 1  0  0  0 ]  [ 0 -1  0  0 ]  [ 0  0  1  0 ]
[ 0  0  0  1 ]  [ 0  1  0  0 ]  [ 1  0  0  0 ]  [ 0  0  0  1 ]

      xy              zx              yz              xyz
[ 0 -1  0  0 ]  [ 0  0 -1  0 ]  [ 0  0  0  1 ]  [ 0  1  0  0 ]
[ 1  0  0  0 ]  [ 0  0  0 -1 ]  [ 0  0 -1  0 ]  [  -1  0  0  0 ]
[ 0  0  0  1 ]  [ 1  0  0  0 ]  [ 0  1  0  0 ]  [ 0  0  0  1 ]
[ 0  0 -1  0 ]  [ 0  1  0  0 ]  [-1  0  0  0 ]  [ 0  0 -1  0 ]

Set 4
       1               x               y               z
[ 1  0  0  0 ]  [ 0 -1  0  0 ]  [ 1  0  0  0 ]  [ 0  0  1  0 ]
[ 0  1  0  0 ]  [-1  0  0  0 ]  [ 0 -1  0  0 ]  [ 0  0  0  1 ]
[ 0  0  1  0 ]  [ 0  0  0  1 ]  [ 0  0 -1  0 ]  [ 1  0  0  0 ]
[ 0  0  0  1 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]  [ 0  1  0  0 ]

      xy              zx              yz              xyz
[ 0  1  0  0 ]  [ 0  0  0  1 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]
[-1  0  0  0 ]  [ 0  0  1  0 ]  [ 0  0  0 -1 ]  [ 0  0 -1  0 ]
[ 0  0  0  1 ]  [ 0 -1  0  0 ]  [-1  0  0  0 ]  [ 0  1  0  0 ]
[ 0  0 -1  0 ]  [-1  0  0  0 ]  [ 0  1  0  0 ]  [-1  0  0  0 ]

Set 5
       1               x               y               z
[ 1  0  0  0 ]  [-1  0  0  0 ]  [ 0  1  0  0 ]  [ 0  0  0  1 ]
[ 0  1  0  0 ]  [ 0  1  0  0 ]  [ 1  0  0  0 ]  [ 0  0 -1  0 ]
[ 0  0  1  0 ]  [ 0  0 -1  0 ]  [ 0  0  0  1 ]  [ 0 -1  0  0 ]
[ 0  0  0  1 ]  [ 0  0  0  1 ]  [ 0  0  1  0 ]  [ 1  0  0  0 ]

      xy              zx              yz              xyz
[ 0 -1  0  0 ]  [ 0  0  0  1 ]  [ 0  0 -1  0 ]  [ 0  0  1  0 ]
[ 1  0  0  0 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]  [ 0  0  0  1 ]
[ 0  0  0 -1 ]  [ 0 -1  0  0 ]  [ 1  0  0  0 ]  [-1  0  0  0 ]
[ 0  0  1  0 ]  [-1  0  0  0 ]  [ 0 -1  0  0 ]  [ 0 -1  0  0 ]

Set 6
       1               x               y               z
[ 1  0  0  0 ]  [ 0  0  0  1 ]  [ 0  0 -1  0 ]  [-1  0  0  0 ]
[ 0  1  0  0 ]  [ 0  0  1  0 ]  [ 0  0  0  1 ]  [ 0 -1  0  0 ]
[ 0  0  1  0 ]  [ 0  1  0  0 ]  [-1  0  0  0 ]  [ 0  0  1  0 ]
[ 0  0  0  1 ]  [ 1  0  0  0 ]  [ 0  1  0  0 ]  [ 0  0  0  1 ]

      xy              zx              yz              xyz
[ 0  1  0  0 ]  [ 0  0  0 -1 ]  [ 0  0 -1  0 ]  [ 0 -1  0  0 ]
[-1  0  0  0 ]  [ 0  0 -1  0 ]  [ 0  0  0  1 ]  [ 1  0  0  0 ]
[ 0  0  0  1 ]  [ 0  1  0  0 ]  [ 1  0  0  0 ]  [ 0  0  0  1 ]
[ 0  0 -1  0 ]  [ 1  0  0  0 ]  [ 0 -1  0  0 ]  [ 0  0 -1  0 ]

To identify vectors, which square to positive one, I wrote a program treating each cell of the 4x4 matrix as a location which could be -1, 0 or +1. In effect, this defines each possible matrix as a sixteen digit trinary number. In this fashion, I identified 5436 matrices which square to one. To be more selective, I then further required each candidate have a non-zero determinant, and twelve zeroes. This reduced the vector list to 76, but looking at the list, there were a number of entries with trace 2 or -2, which would not be orthogonal to the unit vector. Consequently, I further restricted the list by requiring trace = 0, which lead to the short list of 42 vector candidates. (Douglas Adams fans should take note.) Of these 42 entries, half are negatives of the other half, so we really have 21 unique entries. Next, I formed all 21 x 21 products, looking for antisymmetric pairs whose product squared to negative one. These products can be either bivectors or trivectors, depending upon the context of the basis vectors chosen. Examing the feeders for each bivector/trivector candidate, I identified six sets of positive representations for 3D Euclidean Clifford algebras.

More details are in 3D Euclidean Geometric Algebra and Matrix Representation.

2D Euclidean Geometric Algebra and Matrix Representation

When using quaternions and complex numbers, we become familiar with two interpretations of these items, one as a number, and the other, as an operator. A similar situation exists with multivectors and geometric algebra. Usually, practicioners of GA are using a vector-like notation, and have rulebooks describing the multiplication table of elements, and are interested in the relationships between multivectors and their various products at an application level.

I am currently re-examining GA with an eye toward what the basis vectors *really are*, rather than what they do. As a tool in this investigation, I am examining the matrix representations of the basis elements, and treating the implied coordinate transformations as a reality, as opposed to a book-keeping convenience.

There is somewhat of a chicken and the egg circular reference in this situation. Because geometric algebra is associative, and has a multiplication table, we can find a matrix representation for the elements of this algebra. Now that I am examining these matrix elements, I begin to suspect things are the other way around. Each basis matrix has a clear geometrical meaning, usually involving reflections or rotations. Reflections, in turn, look like a rotation through 180 degrees in a transverse higher dimensional space. I suspect that the elements of GA are these fundamental rotations potentially projected from a higher space. I suspect that the associative nature of GA is the result of the matrix representation of these fundamental rotational elements.

2D Euclidean Geometric Algebra and Matrix Representation

Sign Conventions, Metrics, and Geometric Algebra

We have a large number of possible sign conventions for geometric algebra (2^(2^n)) , as well as a larger number different metrics (3^(2^n)). To help form my opinions about what I like, I write small programs to explore these different possibilities. My previous work in this section was seriously flawed, due to careless sign errors invalidating the products for anything other than standard numerical order. (Wrong indices were used for calculating the sign when re-arranging the printing order of the equations.) These invalid programs have been removed, and replaced with a correctly written set.

These program are written in C to create generic geometrical multivector products in 4D, with choice of /+1/0/-1/ for each metric, choice of +/- 1 for each multivector component convention, and a nice printout of the generic multivector product, as well as the standard collection of vector*vector, vector*bivector, vector*trivector, vector*quadvector, bivector*trivector and so on expressions.

A demonstration program in C is Cliff_4E.c

The fuller collection of programs and outputs is Clifford Equation Makers.tar.gz

Preferred Canonical Form for 3D Euclidean Geometric Algebra

Having gained more experience with geometric algebra, I have formed an opinion about my preferred canonical form. I prefer the cyclic bivector format, as opposed to the ascending numerical basis format, as it clearly shows scalar product terms in the products of vectors and bivectors. A demonstration program using the GiNaC library is CL3R3.ginac.cp

Preferred Canonical Form for 3D Euclidean Geometric Algebra

Curvature State Multivectors in Geometric Algebra

The Frenet-Serret formulas in classical 3D analytic geometry define a curve in terms of pathlength, curvature (deviation from a line) and torsion (deviation from a plane). These formulas easily extend to higher dimensions, with the addition of higher order curvatures. This note takes these concepts of deviation, and uses geometric algebra to find a surprisingly simple multivector which encodes the instantaneous state of a curve.

Curvature State Multivectors in Geometric Algebra

Two Points of View on EM Using Geometric Algebra

Geometric Algebra is a superior replacement for vector algebra. Here is a formula dump for two versions of EM in GA. First, a three dimensional model where the electric field is a vector field, while the magnetic field is a bivector field. Second, a four dimensional model where both E and M fields (as well as our apparent coordinates) are bivectors, with one axis for E in the time direction, while both B component are spacelike.

Two Points of View on EM Using Geometric Algebra

Component Equations for Geometric Algebra

Geometric Algebra is an approach to multidimensional physics and geometry based upon associative, non-commutative, directed geometric products. This algebra replaces the cross product of three dimensions, and the quaternions of four dimensions, with a much more general set of concepts.

Usually, practitioners of GA (Geometric Algera) avoid component level work, preferring to use symbolic multiplication in the same manner as vector arithmetic operators prefer to avoid components, using vector symbols instead.

I find for myself, however, that I need to be able to explain concepts to a computer to be sure that I understand these concepts myself. Accordingly, I need to be able to write code working with GA at the component level.

Below is a multiplication table and set of component equations for the Euclidean 3D Multivector products. Each bit in the numbers below indicates a directional basis, so the directional unit basis are e.1, e.2 and e.4 in the table below. The scalar term is e.0, which commutes with all other terms. The bivector terms (directed areas) are e.3, e.5 and e.6, and the pseudo-scalar (volume element) is e.7.

 e.0   e.1   e.2   e.3   e.4   e.5   e.6   e.7  
 e.1   e.0   e.3   e.2   e.5   e.4   e.7   e.6  
 e.2  -e.3   e.0  -e.1   e.6  -e.7   e.4  -e.5  
 e.3  -e.2   e.1  -e.0   e.7  -e.6   e.5  -e.4  
 e.4  -e.5  -e.6   e.7   e.0  -e.1  -e.2   e.3  
 e.5  -e.4  -e.7   e.6   e.1  -e.0  -e.3   e.2  
 e.6   e.7  -e.4  -e.5   e.2   e.3  -e.0  -e.1  
 e.7   e.6  -e.5  -e.4   e.3   e.2  -e.1  -e.0  
c.e0 =  + a.e0*b.e0 + a.e1*b.e1 + a.e2*b.e2 - a.e3*b.e3 + a.e4*b.e4 - a.e5*b.e5 - a.e6*b.e6 - a.e7*b.e7 ;
c.e1 =  + a.e0*b.e1 + a.e1*b.e0 - a.e2*b.e3 + a.e3*b.e2 - a.e4*b.e5 + a.e5*b.e4 - a.e6*b.e7 - a.e7*b.e6 ;
c.e2 =  + a.e0*b.e2 + a.e1*b.e3 + a.e2*b.e0 - a.e3*b.e1 - a.e4*b.e6 + a.e5*b.e7 + a.e6*b.e4 + a.e7*b.e5 ;
c.e3 =  + a.e0*b.e3 + a.e1*b.e2 - a.e2*b.e1 + a.e3*b.e0 + a.e4*b.e7 - a.e5*b.e6 + a.e6*b.e5 + a.e7*b.e4 ;
c.e4 =  + a.e0*b.e4 + a.e1*b.e5 + a.e2*b.e6 - a.e3*b.e7 + a.e4*b.e0 - a.e5*b.e1 - a.e6*b.e2 - a.e7*b.e3 ;
c.e5 =  + a.e0*b.e5 + a.e1*b.e4 - a.e2*b.e7 + a.e3*b.e6 - a.e4*b.e1 + a.e5*b.e0 - a.e6*b.e3 - a.e7*b.e2 ;
c.e6 =  + a.e0*b.e6 + a.e1*b.e7 + a.e2*b.e4 - a.e3*b.e5 - a.e4*b.e2 + a.e5*b.e3 + a.e6*b.e0 + a.e7*b.e1 ;
c.e7 =  + a.e0*b.e7 + a.e1*b.e6 - a.e2*b.e5 + a.e3*b.e4 + a.e4*b.e3 - a.e5*b.e2 + a.e6*b.e1 + a.e7*b.e0 ;

A simple program to build these tables and relations is Clifford_Product.c, while a sanity check on the associative properties is Test_Euclidean.c.

A much more comprehensive list of products is at WorkingFormulasForGeometricAlgebra.html.

As I gain more experience with geometric algebra, I am forming more opinions about style. A short program demonstrating generic GL3 product, as well as products of vector*vector, vector*bivector, vector*trivector, and bivector*trivector is CL3.ginac.cp.

Modelling the Electron As a 4D Oscillator

I present a toy model of the electron, consisting of an enhanced Parson ring, with luminal circulation in orthogonal planesets in 4D spacetime. This is a work in progress, and revisions will occur, but I find it sufficiently interesting to post in its incomplete state.

Modelling the Electron as a 4D Oscillator

Ramanujan's Challenge

Around 1910, Ramanujan, devotee of Mahalakshmi of Namakkal, posed a number of puzzles and challenges in the Journal of the Indian Mathematical Society , one of which was to evaluate \sqrt{1 + 2 \sqrt{1 + 3 \sqrt{1 + 4 \sqrt{1 + 5\sqrt{ . . .}}}}} This note walks through one solution of this puzzle, hopefully expressing my deep appreciation of this perceptive and inspired genius..

Ramanujan's Challenge

Summertime Science Fiction and Back of the Envelope

Terry Pratchett and Stephen Baxter have released "The Long Mars", the third book in the Long Earth series. This book is a fine bus ride companion, being little snippets easily interrupted and resumed. This book overall is nothing exciting. The best insight from this book is that stepping spaces are gravitationally coupled, and that the step-space for Earth versus the step-space for Mars do not necessarily align.

In the Universe as a Simulation theme, the Baryon Imbalance number is the ratio mismatch of the initial number of matter versus anti-matter in the initial universe. According to Ning Bao and Prashant Saraswat, this ratio is between 6.5 to 5.9 E-10. Now, having taught a few computer courses, I recognise this number as being very close to the imbalance between positive versus negative values in 32 bit computers. We have a slight asymmetry in signed, twos complement numbers where we can go one count more negative than positive. For 32 bit numbers, the range is 2147483647 to -2147483648, and the imbalance is 1/2^32 = 2.32830643654e-10. Numerically scaling by e, to get a pre-desired result, has e/2^32 = 6.32899307753e-10, within the range quoted above. My scifi alter-ego loves the idea that we are in a simulation, where a vendor substituted a cheaper binary processor in place of the specified trinary processor, and we are the accidental result of this unauthorized substitution.

The concept of our universe being the interior of a rotating black hole in 5 space has gained significant traction during the last twenty years. I am very appreciate of "The Universe is Only Spacetime" by John A. Macken for many of the insights he presents. I especially like his treatment of the connection between gravitational potential, and escape velocity as the paradigm to look at gravity, rather than the point of view of acceleration and gravitation potential gradient. He points out that the escape velocity from the center of the earth is higher than the escape velocity from surface of the earth at the north pole, which in turn is higher than the escape velocity at the equator. Let's use this approach to the formation of a black hole in five-space, and how it would appear to the observers inside at later times. Being a sci-fi fan, I use the analogy of an illegal trash dump, where our villian has continued to dump refuse. At the center of the dump, the escape velocity is increasing with each load until - uh oh - we hit criticality. Treating lightspeed as a limit, the innermost radii begins to bubble outward, with the interior empty due to the prohibition of crossing the luminal barrier. This is the big bang initiation for this new island universe. The wavefront propagates outward at increasing speed as overlayers fall into the event horizon. This is the inflationary epoch. Once the event horizon has consumed the mass of the illegal garbage dump, inflation stops, being starved of new mass, and the system begins a new life as a quasi stable black hole on the outside, brand new universe on the inside. Interior properties of the membrane are set by the mass, charge and rotation of the blackhole; this will generally be different for each universe. As the universe really is the membrane of the black hole, dimensionality is down by one. Our five dimensional black hole hosts a four dimensional universe. Our four dimensional universe has its own black hole decendents which have three dimensional universes, and so on. Given that the black holes have angular momentum, one of the directional degrees of freedom will not be symmetrical, such as our time, versus r, theta and phi. Some fun here, is that true four dimensional space can support two orthogonal rotations spaces. . .

Cartesian Ovals

Cartesian ovals were first described by Rene Descartes, as a generalization of the ellipse. Instead of the sum of distance from two foci being a constant, he allowed the sum to be a generalized linear relationship. Hugyens and Newton studied these curves for their application in diffractive optics. As we come more to the present day, we find Maxwell taking an interest in these curves at age 14. Prior to Maxwell, and rediscovered by Maxwell, Chasle found a third focus. More recently, and my primary source for these notes, Benjamin Harrison in the 1887 edition of his Differential Calculus, provides a geometric study of the Cartesian ovals. This note presents the Cartesian ovals, and identifies the focii algebraicly, and provides the explicit linear relationships connecting the three foci.

Cartesian Ovals

From the Ellipse to the Ogg Curve

The ellipse is commonly presented in parametric form using sines and cosines. It is easy, but wrong, to assume that this is related to polar format. This informal note presents the parametric ellipse, then shows the conversion to CRC format polar form, then to double angle polar form. From the double angle polar form of the ellipse, I introduce the closely related Ogg curve, which has connections to the harmonic-geometric mean, and elliptic integrals of the second kind.

From Ellipse to Ogg

General Mean and the Arithmetic-Geometric Mean

This note first develops the General Mean for two numbers, the investigates some variations on the AGM process. The Arithmetic-Harmonic mean converges to the simple AGM as do any General Means with opposite signed powers. The Geometric-Harmonic means converges, but not to anything I recognize.

The General Mean and Variations on the Arithmetic-Geometric Mean

Notes on the Arithmetic-Geometric Mean

These are some informal notes on the Arithmetic Geometric Mean function, and the connection to elliptic integrals of the first and second kind. The primary references for this material are the entertaining article by Gert Almkvist and Bruce Berndt in Americal Mathematical Monthly, Vol. 95, No. 7 (Aug-Sept, 1988), pp. 585-608, and ``The Simple AGM Pendulum'' by Mark B. Villarino, as well as the standard wikipedia pages for elliptic integrals.

Notes on the Arithmetic-Geometric Mean

James Ivory's Historic Paper from 1796

As I delve more deeply into the history of the neglected Elliptical Functions, I am made deeply appreciative of the Google Books scanning effort, which has made usable copies of the scholarly journals available without travel to an academic library. As one good turn deserves another, I have typeset James Ivory's paper from 1796 - " A New Series for the Rectification of the Ellipsis; together with some Observations on the Evolution of the Formula (a^2 + b^2 - 2 a b \cos \phi)^n "

This paper is significant as a predecessor to the Landen and Gauss transforms.

A New Series for the Rectification of the Ellipsis (1796)

Numerical Inverse Elliptic Integrals of the Second Kind

The elliptic integral of the second kind can be used to measure distance along a unit ellipse, measured from the minor radius. This function is also found in electromagnetism, as well as physics, yet does not have a consensus defined inverse function. This is like having arcsin, but not sine functions in your mathematical toolkit. In the absense of a formal inverse function, several people have implemented a simple numerical inverse function. J. P. Boyd uses Newton's method and a clever initialization to invert elliptic integrals of the second kind, published in``Numerical, Perturbative and Chebyshev Inversion of the Incomplete Elliptic Integral of the Second Kind'', in Applied Mathematics and Computation (January 2012). This approach was used by Moiseev Igor and the Google Elliptic team implementing elliptic functions in Maple, where I first learned of this approach. The Google function is invE = inverselliptic2(E,m,tol) at Their source code for matlab is at My preference is to use c, so here is a gsl compatible, c implementation of the inverse Elliptic Integral of the Second Kind.

GSL compatible inverse Elliptic Integral of the Second Kind in c

Length Along a Sine Curve

A simple formula for the length along a sine curve is presented, using elliptical integrals of the second kind with imaginary parameter.

Length Along a Sine Curve

Dirac's Monopole Trick

P. A. M. Dirac's monopoles mimic radial charges, with the addition of a singular string attached. This note presents such fields, using the lecture notes of Professor Jose Figueroa as a starting point. I suspect that the electric field, and Faraday's electric field lines, may have a Dirac basis, as opposed to the radial Coulomb basis.

Dirac Radial Field from Curled Vector Potential

Electromagnetic Duality in SI Units

As noted by Heaviside, electric and magnetic fields can be transformed into each other by an abstract rotation of 90 degrees, leaving the Maxwell equations unchanged. Larmor extended this to a continuous rotation. However, this requires the presense of magnetic monopoles. This note presents their work, using SI units.

Electromagnetic Duality in SI Units

Spherical Arcs Illustrated using Quaternion Division

Quaternion division is commonly illustrated using spherical arcs on a sphere. This note turns things around, to show how to draw spherical arcs using quaternion division. We start with standard quaternion definitions, then show the math and standard c code for drawing great arcs on spheres. While illustrated using three-space, a very similar extension applies to four-space.

Spherical Arcs Using Quaternion Division

Dual Orthogonal Rotations in Four-Space

The quaternion product produces coupled rotations in orthonal planes in four-space, being a rotation in a (time, vector) plane as well as a rotation in the normal three-space plane. This note presents the geometric interpretation for unit quaternion multiplication for both pre and post multiplication, as well as for conjugated pre and post products. The note ends with a simple explanation for the 'sandwich' quaternion formula for space rotations.

Dual Rotation and Quaternions

Hyperbolic Product Preserving Transforms

I want to explore scenarios where two items vary, preserving their product. The first scenario is electromagnetism, varying epsilon and mu. while keeping the product epsilon*mu constant. The simplest way, of course, is to just use a factor and the inverse. This note however, show a nice way to carry out this operation using an angular parameter.

The Hyperbolic Transform

Exercises with Magnetic Monopoles

Magnetic monopoles are a natural extension to electrodynamics. In this set of notes, I look at the angular momentum of the fields associated with a pure electric charge, and a pure magnetic monopole. Using a purely classical approach, I obtain the standard result that a pure monopole and a pure electric charge will have a component of angular momentum independent of separation. When integrating the angular momentum using cylindrical coordinates, I gain an insight not seen with delta function or spherical integration approaches. I find that half the spin of this system is concentrated in the planes between the two charges. As the separation between charges approaches zero, this spin concentration becomes immense, being a planar delta function. Next, I look at duality of electric and magnetic charges under the Maxwell equation. I find that the maximum spin for a electron/monopole mix is too small to account for the known electron spin. This conclusion does not rule out inherent spin due to duality in the electron, but rather states there must be other sources for spin, such as dual monopole creating a dipole, or magnetic field due to circulation of electronic charge.

Magnetic Monopoles

The Parson Ring Model of the Electron

In 1915, Alfred Lauck Parson published "A Magneton Theory of the Structure of the Atom" in Smithsonian Miscellaneous Collection, Pub 2371. In his paper, he proposed a spinning ring model of the electron, where the magnetic force associated with the current ring provided the binding forces of chemical bonds. This model received attention from Arthur H. Compton, Clinton Davisson, Lars O. Grondahl, David L. Webster, and H. Stanley Allen, but fell out of favor due to the rise of quantum mechanics. This model has been periodically rediscovered, most recently by Suichi Iida, W. Bostick, David Bergman, J. Paul Wesley, and Philip Kanarev. This paper provides a closed form solution for the electric and magnetic potentials of a spinning charged ring, demonstrates *why* the ring must rotate at the speed of light, and discusses the strengths and weaknesses of the Parson model.

The Parson Ring Model of the Electron

The Voltage Potential and Electric Field of a Charged Ring

This note provides a step by step derivation of an elliptic integral closed form solution for the voltage potential and and electric field associated with a charged filament. At the end of the note is a listing of a quick numerical verification of closed form and discrete sum models.

Charged Ring Potential and Field.

Homopolar Generator Design Exercises

This note illustrates the design of disk and drum style homopolar generators using the FEMM open source finite element solver of David Meeker. Along the way, we show the utility of the vector A potential for modelling and explaining homopolar generator characteristics.

Homopolar Generator Design Exercises

Pseudo-Random Number Generators for PLCs

Programmable Logic Controllers occasionally need random number generators for software testing or for adaptive response. The Linear Congruential Generator (LCG) is easy to implement, and works well. Here are implementations and discussions of LCGs for both Seimans S7-200 family PLCs, and the Allen Bradley MicroLogix family PLCs.

LCGs for PLCs

Vector Formulas for Curvature and Torsion in Three-space

I've previously extended the Frenet-Serret formulas to use quaternions in four-space. However, it seems I've never documented the same extension to vectors in three-space. Here then, are some very useful formulas extending curvature and torsion as vectors in three-space, as opposed to simple signed numbers as found in the standard Frenet-Serret formulas.

Vector Curvature and Torsion In 3D

Parametric Formulas for Villarceau Circles

At every point on a torus, four perfect circles intersect. Two of these circles are the toroidal and poloidal circles commonly used for coordinates on a torus. The other two circles are the Villarceau circles, created by slicing the torus at an angle bitangent to the interior opening of the torus. These circles can be used as an alternative coordinate system for the torus. These circles are also of technological interest for high frequency, resonant, air core transformers.

Parametric Formulas for Villarceau Circles

Small C Program Creating Wireframe Villarceau Circles

Hunting the Elusive Pigtailed Electrocrab!

An illusionist going by the handle lifehack2012 has posted a number of youtube videos showing small motors, lights and DVMs apparently powered by a permanent magnet and coil combinations. Assuming a trickster at work, we can duplicate his effects by concealed batteries in the DVM for the DC voltage measurement, (where the coil acts as a closing switch), concealed battery in the DC motor (using a short rotor, or using only one of two arc magnets, (with the coil acting as a closing switch again), and a lighting demonstration using an open coil with hairline wires to run the light. Naturally, an armchair approach denouncing these claims as tricks is not as much fun as actually building a non-working replication, and then denouncing these claims as tricks.

Hunting the Elusive Pigtailed Electrocrab!

Step by Step From A to B Field

Elliptic integrals are very useful for magnetic field calculations in cylindrical symmetry. Here is a step by step example of calculating B fields from A potentials using K(k) and E(k). Along the way, we see some amazing cancellations in the calculations.

A to B with Elliptic Integrals

Discrete Groups via Multiplication Tables

I've always wanted to add a chapter to the textbooks using a multiplication table approach to group theory. Nathan Carter has provided such a tool with his Group Explorer program. In these notes, I am using GAP and Group Explorer to illustrate the smallest groups, with a heavy emphasis on multiplication tables, which were the tool used by Galois, Cayley and others when developing the theory of groups.

Discrete Groups via Multiplication Tables

Trinary Logic

What could be more fun than explicitly listing all sixteen dual input binary logic functions? Why listing all 19683 dual input trinary logic functions!

In this note, I list the 27 single input trinary gates, which include three inverters, two rotators, three static levels and a whole slew of information losers. After that, I run through 19683 different dual input trinary gates, identifying the associative, commutative, and both associative and commutative gates. The 63 'both' gates are broken into three families of just three members, for static level, equality and rotation gates, and then 9 families of six members covering functions such as single trit multiplication and modulo three addition.

Free new nomeclature:
Enumerating Trinary Logic

Reverse Engineering Willis Linsay's Stepper

Steven Baxter and Terry Pratchett have provided a science-fiction gem with "The Long Earth". Unfortunately, the Stepper assembly diagram by Richard Shailer has numerous errors and omissions, making replication a frustrating experience. Likewise, an uncredited stepper photo found on "" has errors and irrelevancies. The following document attempts to improve the state of the documentation for DIY stepping technology.

Willis Linsay's Stepper

Interior Partitioning The Tetrahedron

We can generate embedded polyhedra by a simple technique. Between any two vertices which make an edge, we create a new vertex for the embedded polyhedra in the middle of that edge. Joining those new vertices generates the new solid. For the case of the cube, this process immediately results in a truncated cube, the cuboctahedron. Curiously enough, we can also generate the cuboctahedron by two stages of dividing the tetrahedron. The end of the first stage results in an octohedron. Dividing the octahedron results in a cuboctahedron. While the tetrahedron and octohedron are stiff structures, the cube and cuboctahedron are not. Internally bracing the cuboctahedron with a twelve point star does achieve a stiff structure with cartesian orientation and stackability.

Picture and commentary

Reflections on Trusting Trust

One of the most influential essays I've read is "Reflections on Trusting Trust", written by Ken Thompson, published in Communications of the ACM, August 1984, Volume 27, Number 8. This is a Turing Lecture by one of the cofounders of the C programming language, and a significant developer of Unix. Many PDFs of this cult classic are on the web. However, the scanned images increase the ambiguity of the program listings provided. Here is a complete version of his program listing

Figure 1

illustrating a self replicating C program.

To compile,

"gcc replicator.c -o replicator".

To run, "./replicator > moose.c".

To verify equality. "md5sum replicator.c moose.c".

I very much appreciate Ken's admission and explanation of the backdoor he placed into the early Unix systms, as well as his cautions about embedded backdoors in compilers, microcode, and hardware design.

Text To Speech for SpeakJet, VoiceBox Shield and Arduino

The SpeakJet is an artificial speech IC found on the VoiceBox Shield for the Arduino, available at This chip really is a phoneme generator, and needs the programmer to translate speech into phonemes, and then into numerical codes to send to the chip via a serial link before speech actually occurs. In a minimal configuration, this chip requires a serial link with CTS at 9600 baud (one data wire, one CTS from CPU, as well as ground), and provides recognizable speech. The default demo "All your base are belong to us" was pleasant and easily understood. However, the effort to create new phrases was rather steep. SpeakJet provides a free application - PhraseALator - to convert text to their numerical codes. However, words not in their dictionary are ignored, and left to the user to provide. I really like my robots to speak, yet I am very lazy. So, what to do?

The happy answer is to examine open source text to speech systems, looking for existing text to speech which I can modify. One such answer is the Festival Light (flite) software from Carnegie-Mellon. After compiling their software (used in many Asterisk PBX systems, as an aside), I use the t2p application to convert text to phonemes. I then convert their phonemes to SpeakJet codes using a sed script (beware - this is a Linux command line) - Flite2Speakjet.sed - provided in the link previous. Now, the codes provided don't modify pitch, and are not comprehensive, yet they get me much further toward recognizable speech than the official solution provided.

Sample sequence of commands

t2p "Now is the time for all good men to come to the aid of their country" > moose.txt
sed -f Flite2Speakjet.sed moose.txt > rawcodes.txt

I then use a text editor to place the codes into the Arduino program, and then begin modifying by adding pitch and pauses until I am satisfied.

Know Limits - No Limits

I was recently asked by Balu Kumar to provide a short speech prior to the First Lego League Robotics Competition for elementary and middle schools hosted by Westwood High School (our local high school). I very much respect Dean Kaman, who founded First, and National Instruments, who provided a simplified version of LabView for the competitors. However, in general, I tend to reject any restrictions on possible solutions for problems, such as use of Lego kits as the only mechanical basis, rather than custom designed components. While we have to know our limits, I prefer no limits. This became the theme of this particular address. Pictures are courtesy of Hubble and NASA.

Force Balanced Transmission Lines

Eric Dollard posed a transmission line puzzle.

************* Original Posting ***********************

I have a D.C. transmission line, the conductors are 2 inches in 
diameter, spacing is 18 feet.
How many ounces of force are developed upon a 600 foot span of 
this line, for the following;

1. 1000 ampere line current.

2. 1000 KV line potential?
Here is my answer.

Tachyonic Neutrinos and Excellent Science

I am very impressed with CERN's professionalism in verifying and publicizing the tachyonic nature of neutrinos. I have done nothing in this area, but I am so pleased with their work, that I want to publicly thank these many people.

Like any major event, there have been prophets who correctly called reality. In this case, George Sudarshan, Chodos, Hauser, Kosteleck, Ehrlich and Eue Jin Jeong are some names to look for.

Chodos, I believe, makes the correct assertion that the left hand only helicity of neutrinos, and the right hand only helicity of anti-neutrinos, guaranteed luminal or tachyonic speeds, and that the presence of neutrino flavor oscillation locked out luminal only speeds leaving strictly superluminal speeds for neutrinos. Because his argument is so neat, I've spent some time to understand his points, and I'm hoping to be able to communicate his arguments.

Neutrinos have an inherent spin, and consequently can be thought of as following a spiral path as they propagate. A good mental picture is to think of the tips of a propellor on an airplane. As the plane flies, the tips of the propellor trace a spiral path. Helicity is measure of the torsion of a spiraling curve. If we are stationary, watching a plane advance toward us, counter-clockwise rotation of the propellor and the closing radial distance traces out a right hand thread, in the sense of screw. This is positive torsion, positive helicity. Now, assume we change our speed from stationary to faster than the airplane. The airplane is now separating from us, as we leave the airplane behind. From our point of view, the trajectory of the propellor tips has changed from a counter-clockwise motion approaching to a counter-clockwise motion receding. The apparent pitch of the spiral, from our point of view, has become negative, and is described as a left handed screw with negative torsion (from our point of view).

We can directly measure high energy neutrinos, and we indirectly infer high and low energy neutrinos when looking at particle decays. The experimental fact is that we see only left-hand neutrinos, and only right-hand anti-neutrinos. If neutrinos travelled at subluminal speeds, a change of reference velocity would guarantee a mix of left and right handed neutrinos. The lower in energy, the closer to 50/50 the randomized mix should be. Because we see *none*, we know neutrinos had to be luminal or beyond.

Now for the fun stuff here. Ordinarily, when we work with mass, we are dealing with stable particles. (Think electrons, protons, etc.) Mass for these particles is a real number, corresponding to an inverse spatial distance in natural units. Unstable particles, on the other hand (think muons, neutrons, etc.), get an imaginary component of mass proportional to the inverse particle lifetime. Particles with mass, even imaginary mass, cannot propagate at light speed. Consequently, when the solar neutrino paradox of 1/3 neutrino flux came up, when physicist proposed neutrino flavor oscillations, this implied neutrino mass, and that, in turned, ruled out luminal speeds. (Neutrino flavor oscillations have been experimentally verified using reactor generated neutrinos, emitted as electron neutrinos, with time correlated detection of electron and muon neutrinos at remote detectors. Japanese Kat experiment, Minnesota experiment.)

Chodos argument from 1985 is thus: Neutrinos can't be subluminal, can't be luminal, must be superluminal.

First verification was supernova 1987A, where neutrinos were detected prior to optical spotting. (Found in retrospect.) Arguments about the delayed photons propagating from the supernova core prevented this observation from being conclusive, but certainly provided indication. Consequently, experiments which generated time resolved, spatially resolved neutrino beams began to look for time of flight measurements. Fermilab MINOS measured superluminal speeds, but the uncertainty in the measurements were less than six standard deviations, and consequently was not deemed definitive. CERN, in turn, has followed up, and reduced measurement uncertainties to the six sigma standard.

Implications for future supernova detection: The supernova events have a large neutrino pulse at fairly constant energy during the collapsing phase transformation (flash), followed by rapidly cooling neutrinos from the hot neutron core. As high energy neutrinos travel slower than low energy neutrinos, (think of proximity to light speed being the high energy condition), we will see the time reversed rising sizzle, then flash for supernova events. Being specific, if we see an increasing neutrino flux coming from Betelguese or Eta Carinae, we would then later see the high energy neutrino flash followed by the optical event.

This would be a very interesting verification, to say the least.

Some references:
The neutrino as a tachyon, Chodos, Alan, Hauser, Avi I., Kostelecky, V. Alan, Phys. Lett. B150 (1985) 431.

Neutrino mass^2 inferred from the cosmic ray spectrum and tritium beta decay, Ehrlich, Robert, Phys. Lett. B493 (2000) 229-232, arXiv:hep-ph/0009040.

Eue Jin Jeong: arXiv:hep-ph/9704311 v4, 1997

Virtual Particles and Four-Space Trajectories

In four-space, trajectories with constant curvature, torsion and lift are trapped on a hypersphere of fixed radius. To moving observers, such as ourselves, as we move along the time axis, we will see a transient disturbance as the trapped particle passes our time plane. For particles with specific ratios of curvature:torsion:lift, we will see a pair of particles form, separate, re-approach and disappear. For most cases, however, we will see a scatter of a large number of particle pairs, which last no longer than the transit time of our time motion over the diameter of the trapped particle hypersphere. The mathematics of the constant curvature trajectories is given in Curves of Constant Curvatures in Four Dimensional Spacetime. To show these curves in four dimensions, the program RK4.c is provided. This program compiles with any C compiler, and produces two files. Curves.xyzt is a four dimensional coordinate set intended to be used with hyper.c, as described below. Curves.xyt is a projection into three-space, suitable for use with the truss.c and flyby.c programs, also referenced below.

Frenet-Serret Formulas In Quaternion Format

The three dimensional Frenet-Serret formulas describe a trajectory using pathlength (deviation from a point) as a parameter, and specifying curvature (deviation from a line) and torsion (deviation from a plane) as a function of pathlength. Two curves with the same curvature and torsion histories are congruent, despite origin, translation or rotations. It is tempting to describe physics by having laws specify curvature and torsion. In practice, however, the time history is essential, as different time histories and forces can result in similar spatial curves. Consequently, if one wants to describe physics by curvature and torsion, one must move to four dimensional spacetime, and accept another curvature, which I call lift, measuring deviation from a volume. It turns out that the quaternion divisional algebra is a natural fit for the Frenet-Serret equations extended to four-space. It also turns out that the left handed space form has a pleasing simplicity. Even more fun, it is easy to extend curvatures from scalar to vectors, with an interesting alignment occuring in fourspace between curvature and lift. Quaternion Curvatures presents the left handed, four dimensional Frenet-Serret equations, initially scalar form, later vector curvature form. In addition to the Frenet forms, formulas for curvatures paramaterized by an arbitrary parameter, such as proper time, or angular position, are provided.

Superluminal Weber Force Laws Simulations

The Weber force law is solved for orbits using the technique shown in Clemente and Assis, Int-J-Theor-Phys-V30-p537-545(1991), as well as Assis - Weber's Electrodynamics 1994. Having verified agreement with low speed orbits with significant angular momentum, I then go the the extremes of tachyonic behavior for a zero angular momentum pair of particles. The solution has repeating behaviors criticized by Helmholtz, but which I view as fascinating. Specifically, we see two particles collide at 1.414c, pass transparently through each other at speed, accelerate to infinite speed in a finite distance, change direction at infinite speed (which corresponds to zero kinetic energy for tachyons), fall through zero radius again at 1.414c, then expand outward as classical particles, slowing to zero speed, then repeating the fall toward zero again.This exercise does not describe reality as we know it, as Weber's law does not use delayed potential, nor was mass scaled relativistically. However, this exercise has provided insight into tachyonic behavior, with a critical speed not of c, but 1.414c.

Equivalent Magnetic Force Laws

Equivalent force laws have been a source of conflict among electrical students since the time of Ampere, Maxwell and Heaviside. Periodically, a new batch of enthusiasts discover alternative force laws, but aren't aware that these force laws cannot be distinguished using macroscopic closed current sources for magnetic fields. To distinguish between various proposed force law requires electron scale modelling, which is a topic for my next posting. The pdf above provides MKS representation of five different force laws, shows equivalent macroscopic observables, yet different differential force elements. Source code for the open sourced MagneticForces.c is also provided.

Flyby - An Immersive, Interactive, 3D Wireframe Plotter

Flyby was initially written as a Macintosh application in the 1990s, to allow translation through a data set, as well as rotations. For stiff problems, where multiple resonances exist on widely different timescales, it is useful to be able to zoom in to see small oscillations which are superimposed upon slow changes. Flyby served me well when studying trajectories. Flyby.c is an open source, Linux/X-windows port in C with minimal dependencies.

Edit 23 January 2015. John Hanniball of noted that the previously posted version of flyby.c did not correctly use divide by z for perspective function. I had incorrectly posted one of my experiments using radial scaling, as with projection on a sphere rather than a rectangular plane. I have left the radial lines commented out in the code, and corrected the perspective function for conventional z scaling. Thanks John!

(Compile with gcc, command gcc flyby.c -o flyby -lX11 -lXdmcp -lXau -lm )

Useful Formulas for Elliptic Integrals

Elliptic Integrals are usually tabulated in canonical form, rather than in the form found when solving problems. Useful Elliptic Integral Formulas Sheet is the set of formulas I find useful when working with circular current loops.

Magnetic Field Calculation Utilities

Close form solutions for a circular current loop's magnetic fields have been around since before Maxwell. However, the use of elliptic integrals seems to intimidate potential users. Closed Loop Formulas for A and B with Code is a simple example of closed form solutions for both the vector potential "A" and the magnetic field "B", with verifying source code for the integrals and simulation in simple C.

Thank-you to Terry Sewards for pointing out a missing rho in an earlier copy of this paper.

Plotting Utilities

I need simple wire frame plotters in three and four dimensions when I'm working with trajectory simulations of fundamental particles. The archive includes a statically linked X11 port and source file for the *hyper* 4D plotter and the *truss* 3D wireframe plotter, as well as sample input files. These programs are descendents of the NASA Truss-3D program from the seventies, and Leen Ammeraal's excellent guide to computer graphics from that same time frame.

This is a good point to advertise . I very much appreciate small, simple programs and operating systems.

Plasma Striations

Tesla coils are a popular demonstration. We often use fluorescent bulbs and neons as interactive loads for the Tesla coils, and these fluorescents often show a banding pattern of light and dark. Here are a few videos demonstrating these striations, and some thoughts about their cause.

Plasma Striations

Single Layer Air Core Solenoids

Spring semester 2011, the students in my AC circuits class built a variety of air core solenoids to be used as Tesla coils to light neons and fluorescent tubes. This is a nice example of Radio Shack hobby level technology.

PVC Form Single Layer Solenoids

Permutation Sequences

This note, and referenced programs Lexical.c and stdperm.c illustrate some well known methods of enumerating all possible permutations associated with a set.

Mutual Inductance via Elliptic Integrals in MKS Units

Coaxial circular windings can have mutual inductance and field calculations simplified by use of complete elliptic integrals or AGM functions. Here is a step by step classical derivation, followed by a C numerical double integration. Both work well, but the classical form calculates much faster. This note has been corrected on March 6, 2011 to correct a missing 4 pi divisor as pointed out by Clifford Curry. Thanks!

Classical Calculation for Mutual Inductance of Two Coaxial Loops in MKS Units

"Magnetic Hematite"

A novelty sold at local fairs are 'Snake Eggs', made in China, billed as magnetized hematite. The first observation is that the residual field in these magnets is quite strong, seeming comparable to neodynium/boron magnets. The second observation is that the material a tough, impact tolerant, ceramic. The third, is that this material is a good insulator. This is clearly an interesting material for permanent magnets motors. So, it is time to investigate.

My tasks here are to

  1. Identify the products, sources and factories for this product.
  2. Ascertain the actual material used. Hematite is not naturally magnetic.

  3. I measured the density of twelve of the BearHaversack magnets by using an A&D Model HJ-150 scale to measure weight, and a small beaker to measure volume. To isolate magnetic effects, I used an eight inch tall piece of styrofoam packing to keep the magnets away from the ferrous material in the base of the scale. To verify accurate measurement of the mass of the magnets, rather than mass and magnetic attraction to ferrous materials in the base and supports, the magnets were doubled over to form a quadrapole, rather than dipole, and the magnets were re-measured in multiple directions and orientations while observing the same measured mass. The total mass was 180.5g, the volume (measured by water displacement in a beaker), was 38 mL. The density is 4.75 g/mL. (As opposed to 5.6 for hematite.) CY-Magnetics calls out a density of 4.8 to 4.9 for their Hard Ceramic Ferrite materials.

  4. CY-Magnetics' ceramic magnets have a Curie temperature of about 450 C. Red hot is about 520 C. Heating in an oven did not get hot enough to demagnetize the sample. Heating with a propane torch resulted in brittle failure due to too high a rate of heating. Instrumented kiln heating looking for magnetic drop is probably required to measure an accurate Curie temperature.

  5. The surface residual magnetic field was measured using a Sypris/FWBell FH-520 (177101) Hall probe. This probe has a nominal sensitivity of 100mV/T when run at an excitation of 25 mA. I did not do a Helmholtz calibration on this particular probe. The particular probe has a 3.5 mV offset, and was run at 22.9 mA, for an estimated sensitivity of 91.3 mV/T. Measurements were made with the probe white side up and then in the same place with the probe white side down, the numbers subtracted and divided by two to reduce the offset voltage. The BearHaversack magnets had a residual field of 0.17T to 0.26T, highest near edges, lower in middle of faces. By contrast, my neodynium magnets measured 0.52T. These numbers are consistent with a Y10 ceramic material for the BearHaversack material, and a half-magnetized N27 neodynium material.

Conclusion - This really great magnetic material is not hematite. It happens to be a really great magnetic material, probably barium-strontium ferrite ceramic.

Future work - I want to make samples of magnetite via the Massurt method both for ferrofluid fun and for characterization of magnetite's magnetic properties.

Arduino Based Gauss Level Three Axis Magnetic Sensor

I've posted a small program to read the HoneyWell HMC5843 triple axis sensor using the I2C interface of the Arduino 2009 board. This sweet sensor is used as a solid state compass in cell phones, and is not really suited for high field (motors and magnets) work. It is, however, ideal for low fields.


Project 42

The Answer is 42.


Complex numbers, quaternions and octonions are division algebras, where multiplication and magnitudes can be defined in such a way that the magnitude of a product is also the product of the magnitude of the two multiplying terms. This type of product then allows us to define division. My fascination has been the fact that there are so many different formulas in these two, four, and eight dimensional spaces that also satisfy the norm relationship above. Initially, I used brute force to enumerate working algebras, finding 2^3 solutions for the complex family (comps), 2^8 solutions for the quaternion family (quads), and 2^19 families for the octonion family (octs). These individual solutions are merely choices for the polarity (sign) of the product terms in the defining basis multiplication table.

The encoding of the basis vectors as binary numbers, and the product base being given by XOR is worth illustrating numerically, as some interesting interpretations can be made about dimensionality and multiplication. For traditional quaternions, we have numbers and three spatial dimensions. Borrowing notation from spacetime, I'll call t=00 as the numbers (scalars), i=01 as one space axis, j=10 as another space axis, and k=11 as a third. The multiplication table is

Right Hand Quaternion Unit Vector Multiplication Table

Prefactor Postfactor | Binary format
| |
| 1 i j k | t*i = 00^01 = 01 = i
| \----------------------- | t*j = 00^10 = 10 = j
1 | 1 i j k | t*k = 00^11 = 11 = k
| |
i | i -1 k -j | i*j = 01^10 = 11 = k
| | i*k = 01^10 = 10 = j
j | j -k -1 i |
| | j*k = 10^11 = 01 = i
k | k j -i -1 |

When we extend to traditional octonions, we have
      Left Hand Octonion Unit Vector Multiplication Table

Prefactor Postfactor
| 1 i j k E I J K
| \-----------------------------------------------
1 | 1 i j k E I J K t = 000 Scalar
i | i -1 -k j I -E +K -J i = 001 Vector
j | j k -1 -i J -K -E I j = 010 Vector
k | k -j i -1 K J -I -E k = 011 Area
E | E -I -J -K -1 i j k E = 100 Scalar
I | I E K -J -i -1 k -j I = 101 Area
J | J -K E I -j -k -1 i J = 110 Area
K | K J -I E -k j -i -1 K = 111 Volume

Product base formed by XOR of two factors. Example i*K => 001^111 = 110 = J

Polarity (sign) determined separately.

The interesting interpretation of the above, seen in Clifford algebra and geometric algebra, is that the quaternion table above is *not* a four dimensional structure, but rather a two dimensional structure, where the multiplication terms involving i and j give rise to an areal term k. In a similar fashion, complex numbers are really dealing with a one dimensional space, and octonions with a three dimensional space. To get a real space-time (four true dimensions), will require sedenions.

Knowing that the basis multiplication table can be encoded as binary numbers XORed together, and seeing the power of two number of solutions, I decided that I should examine the solutions as a digital logic problem. Given that the basis logic was XOR based, I was pleased to find Reed-Muller XOR implementations of the sign or polarity logic found above.

Having found digital logic solutions for normed algebras in two, four and eight dimensions, my next target was 16 dimensions. Sedenions are known to not be normal. While I can find numerical special cases where two integer sixteen vectors and a sixteen vector product satisfy the norm relations (based upon any integer being the sum of four squares), there is no general formula. Doing the sixteen bit digital exercise, despite knowing unlikely success, led to an interesting result. In my approach, I used one bit to determine an active high/active low default state for a bit. I then used higher order bits to determine participation of free variables in the sign of the term in the multiplication table. The interesting result, is that while I had conflicting definitions for active high/active low default bit states, I had a consistent set of definitions for how the default state would be modified by 42 free variables.

This result has me very excited. I've always wanted to find a simple explanation for quantum superposition. My hope is to find a simple, mathematical analog to the ring oscillator or logic paradox, where a feedback path with an odd number of inversions, coupled with a propagation delay through the logic creates an inherently oscillating system. A multiplication table which is inherently oscillatory, gives rise to an oscillatory metric, which in turn justifies much of our experience with quantum multivalued weirdness. Philosophically, an inherently oscillating metric structure of space is a good model for Planck scale quantum foam, and in the bigger picture, justification for 'free will', or non-predestination, on the quantum scale.

So, what do I know? I know that the base definition is inconsistent, and that there are flaws (inherent conflicts) in my model for the multiplication table logic. However, I also know, that once a suitable basis is defined, I can give 2^42 new variations on a successful basis.

My current task is to re-examine fundamentals of division algebras. I am re-evaluating the works by Hamilton, Cayley, Kirkland, Clifford, and other great mathematicians from the 1840-1890s, as well as Sylvester (1867), Hadamard (1893) and Walsh (1923) in more recent times. My most recent influence is the geometric algebra interpretation of Clifford algebras by David Hestenes.

My current working assumptions are

The general antisymmetric symbol is such an excellent tool.
       The Antisymmetric Symbol

The Fibonacci numbers are deeply related to the Golden Ratio. Here is a simple proof of the closed form equation for the n'th Fibonnaci numbers. This formula can be extended to negative integers, as well as treated as a continous function of n. This continuous function has many similarities to the force law of Roger Boscovitch.
       Fibonacci Numbers

Every trajectory in space can be described by the curvature and torsion as a function of pathlength. Pathlength differentially measures deviation or distance from a point. Curvature differentially measures deviation from a line. Torsion differentially measures deviation from a plane. The circle is a curve of constant curvature, while the spiral has constant curvature and torsion. Extending to four dimensions, we now have another curvature, "lift", which differentially measures lift out of a volume. The curve of constant curvature, torsion and lift is a trajectory on the surface of a hypersphere, consisting of circulations at two different linear frequencies in orthogonal plane sets.
       The Three Curvatures in Fourspace

Quaternions, Four Dimensional Spacetime, Frenet-Serret Equations with Vector Curvatures
       Quaternion Toolbox

These notes show the derivation of the node coordinates for a tetrahelix, then look at whether tetrahedrons can form mathematically closed hoops.
       Tetrahedral Coordinate Calculations

Tetrahelices are a chiral structure made from tetrahedrons. I learned about these structures playing with my children's GeoMags.

Extending Classical Mechanics to Allow Acceleration and Jerk in Dynamical Potentials
       Euler's Equations Extended

Angular Velocity and Angular Momentum from Different Points of View
       Angular Momentum

Quantum Mechanics and Fourier Transforms
       Quantum Mechanics

Tesla Coils as Transmission Lines
       Telegrapher's Equations for Tesla Coil Transmission Lines

Transmission Lines, Reflection, and Terminations
       Lab Notes on Coax Cable Reflections (html)

       Lab Notes on Coax Cable Reflections (pdf)

Due to spam, no e-mail address is listed. However, first name dot last name at domain is a fair bet.