The crux of Letter Notation is the following array notation:
To write the rules for expanding such arrays, we'll use the following shorthand:
Y - represents any string of numbers seperated by commas (can also be empty).
Z - represents a string of zeros seperated by commas (can also be empty).
n,k - nonnegative integers.
x - a nonnegative number (not necessarily an integer)
i - the integer part of x
f - the fractional part of x
And now for the rules. There are 8 of them:
1. For x<1: (Y)|x = 10x
2. (Z,Y)|x = (Y)|x
3. 1|x = (1)|x = 10x
4. (Y,n+1)|x = (Y,n)|(Y,n+1)|(x-1)
5. For 1<x<2: (Y,n+1,0,Z)|x = (Y,n,2,Z)|10f
6. For x≥2: (Y,n+1,0,Z)|x = (Y,n,x,Z)|10
7. (Y,x)|10 = (Y,i+1)|(2×5f)
8. (Y,x,0,Z)|10 = (Y,i,10×f,Z)|10
And that's it for the array notation.
To get from this to letter notation, simply remember that each letter is a shorthand for a certain array:
Ex = 1|x = (1)|x
Fx = 2|x = (2)|x
Gx = 3|x = (3)|x
Hx = 4|x = (4)|x
Jx = (1,0)|x
Kx = (1,1)|x
Lx = (1,2)|x
Mx = (2,0)|x
Nx = (1,0,0)|x
And Px is a little trickier. It can actually be written as (1 (1) 0)|x, but I haven't defined that properly here. So I'll give the rules for P seperately:
Px = (1,0,1)|x for x<2
Px = (10f,[i zeros])|10
(remember: i is the integer part of x, and f is the fractional part of x).
And now we're done.