More Arithmetic
- The hyperoperation sequence lends itself very naturally
to an implementation in λ calculus.
Note that there are a few differences between [this] encoding of the
integers and the standard Church encoding.
- What is standardly 'ZERO' is here 'ONE' because it simplifies the rank-elevation of the hyperoperation. Consequently the resulting arithmetic is not defined over 0 but I prefer it that way; expressions such 0 to the power of 0 are indeterminate in analysis and it shouldn't be any different here. (The standard definition of the hyperoperation sequence defines the operations for 0.)
- I've also swapped the order of the arguments of the integer encodings because the equivalence of
- What is standardly 'ZERO' is here 'ONE' because it simplifies the rank-elevation of the hyperoperation. Consequently the resulting arithmetic is not defined over 0 but I prefer it that way; expressions such 0 to the power of 0 are indeterminate in analysis and it shouldn't be any different here. (The standard definition of the hyperoperation sequence defines the operations for 0.)
- λ f. λ x. f x {normally 'ONE'}
- and
- λ f. f
- irritates me ...
— from JR
let rec ONE = lambda x. lambda f. x, {NB.} TWO = lambda x. lambda f. f x, THREE = lambda x. lambda f. f (f x), FOUR = lambda x. lambda f. f (f (f x)), HYPEROP = lambda r. lambda b. r (lambda e. lambda x. lambda f. e (f (b x f)) f) (lambda h. lambda e. e b h), PLUS = HYPEROP ONE, TIMES = HYPEROP TWO, POWER = HYPEROP THREE, TETRATION = HYPEROP FOUR, PRINT = lambda n. n 'I' (lambda m. 'I'::m) in PRINT (TETRATION TWO THREE) {by JR 20/8/2009}
- Also see the other integers.