And the same volume has his proof of the consistency of arithmetic:
http://www.digizeitschriften.de/download/PPN266833020_0039/P...
131 karma · joined April 15, 2014
http://www.digizeitschriften.de/download/PPN266833020_0039/P...
http://www.digizeitschriften.de/download/PPN266833020_0039/P...
Prelude> \f->(\x->f(x x))(\x->f(x x))
<interactive>:5:14:
Occurs check: cannot construct the infinite type: r0 ~ r0 -> t
...It's still a bit early if he's in LA, particularly as it's Sunday.
Upshot: you can probably get away with it if you are careful to canonicalize pointers before using them.
def fractions():
a,b,c,d = 1,0,0,1
while True:
yield a,b,c,d
if a == 1 and b == 0 and d == 1:
a,b,c,d = 1,c+1,0,1
else:
j = (c+d-1)//(a+b)
k = 2*j+1
a,b,c,d = k*a-c,k*b-d,a,b
g = fractions()
for i in range(100):
a,b,c,d = g.next()
print "%d/%d %d/%d"%(c+d,a+b,a+c,b+d)