the succ fixed point as arithmetic infinity
authorChris <chris.barker@nyu.edu>
Tue, 17 Feb 2015 23:23:34 +0000 (18:23 -0500)
committerChris <chris.barker@nyu.edu>
Tue, 17 Feb 2015 23:23:34 +0000 (18:23 -0500)
topics/_week4_fixed_point_combinator.mdwn

index da2771a..01185c4 100644 (file)
@@ -426,18 +426,73 @@ who knows what we'd get back? Perhaps there's some non-number-representing formu
 
 Yes! That's exactly right. And which formula this is will depend on the particular way you've implemented the successor function.
 
 
 Yes! That's exactly right. And which formula this is will depend on the particular way you've implemented the successor function.
 
-Moreover, the recipes that enable us to name fixed points for any
-given formula aren't *guaranteed* to give us *terminating* fixed
-points. They might give us formulas X such that neither `X` nor `f X`
-have normal forms. (Indeed, what they give us for the square function
-isn't any of the Church numerals, but is rather an expression with no
-normal form.) However, if we take care we can ensure that we *do* get
-terminating fixed points. And this gives us a principled, fully
-general strategy for doing recursion. It lets us define even functions
-like the Ackermann function, which were until now out of our reach. It
-would also let us define arithmetic and list functions on the "version
-1" and "version 2" implementations, where it wasn't always clear how
-to force the computation to "keep going."
+Let's pick a way of defining the successor function and reason about it.
+Here is one way that is compatible with the constraints given in
+homework 2: `succ := \nfz.f(nfz)`.  This takes a Church
+number, and returns the next Church number.  For instance, 
+
+    succ 2 == succ (\fz.f(fz)) 
+           == (\nfz.f(nfz)) (\fz.f(fz))
+           ~~> \fz.f((\fz.f(fz))fz)
+           ~~> \fz.f(f(fz))
+           == 3
+
+Using logic similar to the discussion above of the fixed point for K,
+we can say that for any Church number argument to the successor
+function, the result will be the next Church number.  Assume that
+there is some Church number `n` that is a fixed point.  Then
+`succ n <~~> n` (because `n` is a fixed point) and `succ n <~~> n + 1`
+(since that's what the successor function does).  By the Church Rosser
+theorem, `n <~~> n + 1`.  What kind of `n` could satisfy that
+requirement?
+
+Let's run the recipe:
+
+    H := \f . succ (ff)
+      == \f . (\nfz.f(nfz)) (ff)
+      ~~> \h . (\nfz.f(nfz)) (hh)
+      ~~> \hfz.f(hhfz)
+
+    H H == (\hfz.f(hhfz)) (\hfz.f(hhfz))
+        ~~> \fz.f((\hfz.f(hhfz))(\hfz.f(hhfz))fz)
+        ~~> \fz.f(f((\hfz.f(hhfz))(\hfz.f(hhfz))fz))
+        ~~> \fz.f(f(f((\hfz.f(hhfz))(\hfz.f(hhfz))fz))
+
+We can see that the fixed point generates an endless series of `f`'s.
+In terms of Church numbers, this is a way of representing infinity:
+if the size of a Church number is the number `f`'s it contains, and
+this Church number contains an unbounded number of `f`'s, then its
+size is unbounded.  
+
+We can also see how this candidate for infinity behaves with respect
+to our other arithmetic operators.
+
+    add 2 (HH) == (\mnfz.mf(nfz)) (\fz.f(fz)) (H H)
+               ~~> \fz.(\fz.f(fz)) f ((HH)fz)
+               ~~> \fz.\z.f(fz) ((HH)fz)
+               ~~> \fz.f(f((HH)fz))
+               ==  \fz.f(f(((\hfz.f(hhfz)) (\hfz.f(hhfz)))fz))
+               ~~> \fz.f(f((\fz.f((\hfz.f(hhfz)) (\hfz.f(hhfz))))fz))
+               ~~> \fz.f(f(f((\hfz.f(hhfz)) (\hfz.f(hhfz)))))
+
+So 2 + (HH) <~~> (HH).  This is what we expect from arithmetic infinity.
+You can check to see if 2 * (HH) <~~> (HH).
+
+So our fixed point recipe has delivere a reasonable candidate for
+arithmetic infinity. 
+
+One (by now obvious) upshot is that the recipes that enable us to name
+fixed points for any given formula aren't *guaranteed* to give us
+*terminating* fixed points. They might give us formulas X such that
+neither `X` nor `f X` have normal forms. (Indeed, what they give us
+for the square function isn't any of the Church numerals, but is
+rather an expression with no normal form.) However, if we take care we
+can ensure that we *do* get terminating fixed points. And this gives
+us a principled, fully general strategy for doing recursion. It lets
+us define even functions like the Ackermann function, which were until
+now out of our reach. It would also let us define arithmetic and list
+functions on the "version 1" and "version 2" implementations, where it
+wasn't always clear how to force the computation to "keep going."
 
 ###Varieties of fixed-point combinators###
 
 
 ###Varieties of fixed-point combinators###