Your proposal for a language leads me to suspect that you have not seen:
NOTES ON THE 'MAGIC CUBE'
Mathematical Sciences and Computing
Polytechnic of the South Bank
London, SE1 0AA, England
which you can get by sending him $3. The fourth printing runs 36 pages. It is
definitely worth the money.
Cube quality: I have handled about a dozen Hungarian import versions of the
cube with enormous variation in quality. They were all the colortab-on-black
variety. They sell out here in the discount stores like K-Mart for less than $9. I
have also seen a colortab-on-white version which is not substantially different
in quality from the Hungarian versions. My advice is to pick and choose as best
you can from the ones on the shelf, regardless of what kind you get.
As for your language proposal, I like the RLUDFB abbreviations given by
Singmaster and generally used in Europe to your T plus whole cube moves.
They mean rotate the (Right, Left, Up, Down, Front, Back) surface 90o
clockwise. I also use rludfb for the inverses of them. However since
(fortunately) these two notations have a null intersection, there is no
disadvantage in mixing them. For consistency, however, I suggest ijk for
counterclockwise moves, and IJK for clockwise ones. This does little violence to
the quaternion origins where lower case is generally used anyway. The ' for
inverse notation is fine; in fact I frequently prefer R' to r when I write down
algorithms. The mappings then are, substituting f for your T:
F = f' R = F[J] r = f[J] = R' L = F[j] l = f[j] = L' U = F[i] u = f[i] = U' D = F[I] d = f[I] = D' B = F[ii] b = f[ii] = B'
It also solves the problem that I was having of saying IJK in English since there
is no way to say it in "Singmaster".
I didn't follow your Pons Asinorum checkerboard solution because I didn't
understand the Z in Q, but in the mixed notation I think it is:
or, if Q = rrll; QjQkQ Your "quite pretty" is (lrfb)^3 = (lr (lr)[j])^3
I propose the following grammer for RCML (Rubik Cube Manipulation
algorithm ::= definition* move* definition ::= letter = algorithm ; move ::= letter | move' | move^digit | move[algorithm] | (algorithm) digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
where the letters RLUDFBrludfbIJKijk are predefined as noted above.