Go home now Header Background Image
Search
Submission Procedure
share: |
 
Follow us
 
 
 
 
Volume 2 / Issue 5 / Abstract

available in:   PDF (212 kB) PS (59 kB)
 
get:  
Similar Docs BibTeX   Write a comment
  
get:  
Links into Future
 
DOI:   10.3217/jucs-002-05-0270

The Limits of Mathematics

G. J. Chaitin

IBM Research Division, P. O. Box 704, Yorktown Heights, NY 10598,
email:chaitin@watson.ibm.com

1 Introduction

In a remarkable development, I have constructed a new definition for a self-delimiting universal Turing machine (UTM) that is easy to program and runs very quickly. This provides a new foundation for algorithmic information theory (AIT), which is the theory of the size in bits of programs for self-delimiting UTM's. Previously, AIT had an abstract mathematical quality. Now it is possible to write down executable programs that embody the constructions in the proofs of theorems. So AIT goes from dealing with remote idealized mythical objects to being a theory about practical down-to-earth gadgets that one can actually play with and use.

This new self-delimiting UTM is implemented via software written in a new version of LISP that I invented especially for this purpose. This LISP was designed by writing an interpreter for it in Mathematica that was then translated into C. I have tested this software by running it on IBM RS/6000 workstations with the AIX version of UNIX.

Using this new software and the latest theoretical ideas, it is now possible to give a self-contained "hands on" mini-course presenting very concretely my latest proofs of my two fundamental information-theoretic incompleteness theorems. The first of these theorems states that an N-bit formal axiomatic system cannot enable one to exhibit any specific object with program-size complexity greater than N + c. The second of these theorems states that an N-bit formal axiomatic system cannot enable one to determine more than N + scattered bits of the halting probability

Most people believe that anything that is true is true for a reason. These theorems show that some things are true for no reason at all, i.e., accidentally, or at random.

As is shown in this course, the algorithms considered in the proofs of these two theorems are now easy to program and run, and by looking at the size in bits of these programs one can actually, for the first time, determine exact values for the constants c and

I used this approach and software in an intensive short course on the limits of mathematics that I gave at the University of Maine in Orono in the summer of 1994. I also lectured on this material during a stay at the Santa Fe Institute in the spring of 1995, and at a meeting at the Black Sea University in Romania in the summer of 1995. A summary of the approach that I used on these three occasions will appear under the title "A new version of algorithmic information theory" in a


*1 C. Calude (ed.). The Finite, the Unbounded and the Infinite, Proceedings of the Summer School "Chaitin Complexity and Applications, Mangalia, Romania, 27 June - 6 July, 1995.

Page 270

forthcoming issue of the new magazine Complexity, which has just been launched by the Santa Fe Institute and John Wiley and Sons. A less technical discussion of the basic ideas that are involved "How to run algorithmic information theory on a computer" will also appear in Complexity.

After presenting this material at these three different places, it became obvious to me that it is extremely difficult to understand it in its original form. So next time, at the Rovaniemi Institute of Technology in the spring of 1996, I am going to use the new, more understandable software in this report; everything has been redone in an attempt to make it as easy to understand as possible.

For their stimulating invitations, I thank Prof. George Markowsky of the University of Maine, Prof. Cristian Calude of the University of Auckland, Prof. John Casti of the Santa Fe Institute, and Prof. Veikko Keränen of the Rovaniemi Institute of Technology. And I am grateful to IBM for supporting my research for almost thirty years, and to my current management chain at the IBM Research Division, Dan Prener, Christos Georgiou, Eric Kronstadt, Jeff Jaffe, and Jim McGroddy.

This report includes the LISP runs *.r used to present the information-theoretic incompleteness theorems of algorithmic information theory. This report does not include the software used to produce these LISP runs. To obtain the software for this course via e-mail, please send requests to chaitin@watson.ibm.com.

2 The New Idea

Here is a quick summary of this new LISP, in which atoms can now either be words or unsigned decimal integers. First of all, comments are written like this: [comment]. Each LISP primitive function has a fixed number of arguments. ' is QUOTE, = is EQ, and atom, car, cdr, cadr, caddr, cons are provided with their usual meaning. We also have lambda, define, let, if and display and eval. The notation " indicates that an S-expression with explicit parentheses follows, not what is usually the case in this LISP, an M-expression, in which the parentheses for each primitive function are implicit. nil denotes the empty list (), and the logical truth values are true and false. For dealing with unsigned decimal integers we have +, -, *, <, >, <=, >=, base10-to-2, base2-to-10.

So far this is fairly standard. The new idea is this. We define our standard self-delimiting universal Turing machine as follows. Its program is in binary, and appears on a tape in the following form. First comes a LISP expression, written in ASCII with 8 bits per character, and terminated by an end-of-line character '\n'. The TM reads in this LISP expression, and then evaluates it. As it does this, two new primitive functions read-bit and read-exp with no arguments may be used to read more from the TM tape. Both of these functions explode if the tape is exhausted, killing the computation. read-bit reads a single bit from the tape. read-exp reads in an entire LISP expression, in 8-bit character chunks, until it reaches an end-of-line character '\n'.

This is the only way that information on the TM tape may be accessed, which forces it to be used in a self-delimiting fashion. This is because no algorithm can search for the end of the tape and then use the length of the tape as data in the

Page 271

computation. If an algorithm attempts to read a bit that is not on the tape, the algorithm aborts.

How is information placed on the TM tape in the first place? Well, in the starting environment, the tape is empty and any attempt to read it will give an error message. To place information on the tape, one must use the primitive function try which tries to see if an expression can be evaluated.

Consider the three arguments and of try. The meaning of the first argument is as follows. If is no-time-limit, then there is no depth limit. Otherwise must be an unsigned decimal integer, and gives the depth limit (limit on the nesting depth of function calls and re-evaluations). The second argument of try is the expression to be evaluated as long as the depth limit is not exceeded. And the third argument of try is a list of bits to be used as the TM tape.

The value returned by the primitive function try is a triple. The first element of is success if the evaluation of was completed successfully, and the first element of is failure if this was not the case. The second element of is out-of-data if the evaluation of aborted because an attempt was made to read a non-existent bit from the TM tape. The second element of is out-of-time if evaluation of aborted because the depth limit was exceeded. These are the only possible error flags, because this LISP is designed with maximally permissive semantics. If the computation terminated normally instead of aborting, the second element of will be the result produced by the computation , i.e., its value. That's the second element of the list produced by the try primitive function.

The third element of the value is a list of all the arguments to the primitive function display that were encountered during the evaluation of . More precisely, if display was called N times during the evaluation of , then will be a list of N elements. The N arguments of display appear in in chronological order. Thus try can not only be used to determine if a computation reads too much tape or goes on too long (i.e., to greater depth than ), but try can also be used to capture all the output that displayed as it went along, whether the computation aborted or not.

In summary, all that one has to do to simulate a self-delimiting universal Turing machine U(p) running on the binary program p is to write

           try no-time-limit 'eval read-exp p

This is an M-expression with parentheses omitted from primitive functions. (Recall that all primitive functions have a fixed number of arguments.) With the parentheses supplied, it becomes the S-expression

           (try no-time-limit ('(eval(read-exp))) p)

This says that one is to read a complete LISP S-expression from the TM tape p and then evaluate it without any time limit and using whatever is left on the tape p.

Some more primitive functions have also been added. The 2-argument function append denotes list concatenation, and the 1-argument function bits converts an S-expression into the list of the bits in its ASCII character string representation. These are used for constructing the bit strings that are then put on the TM tape using try's third argument . We also provide the 1-argument

Page 272

functions size and length that respectively give the number of characters in an S-expression, and the number of elements in a list. Note that the functions

append, size and length could be programmed rather than included as built-in primitive functions, but it is extremely convenient and much much faster to provide them built in.

Finally a new 1-argument identity function debug with the side-effect of outputting its argument is provided for debugging. Output produced by debug is invisible to the "official" display and try output mechanism. debug is needed because try suppresses all output produced within its depth-controlled evaluation of . Instead try collects all output from within for inclusion in the final value that try returns, namely = (success/failure, value of ).

3 Course Outline

The course begins by explaining with examples my new LISP. See examples.r.

Then the theory of LISP program-size complexity is developed a little bit. LISP program-size complexity is extremely simple and concrete. In particular, it is easy to show that it is impossible to prove that a self-contained LISP expression is elegant, i.e., that no smaller expression has the same value. To prove that an N-character LISP expression is elegant requires a formal axiomatic system that itself has at least LISP complexity N - 410. See godel.r.

Next we define our standard self-delimiting universal Turing machine U(p) using

            cadr try no-time-limit 'eval read-exp p

as explained in the previous chapter.

Next we show that

with c = 432: Here denotes the size in bits of the smallest program that makes our standard universal Turing machine compute Thus this inequality states that the information needed to compute the pair (x; y) is bounded by a constant c plus the sum of the information needed to compute x and the information needed to compute y. Consider

      cons eval read-exp
      cons eval read-exp
            nil

This is an M-expression with parentheses omitted from primitive functions. With all the parentheses supplied, it becomes the S-expression

      (cons (eval (read-exp))
      (cons (eval (read-exp))
            nil))

c = 432 is just 8 bits plus 8 times the size in characters of this LISP S-expression. See utm.r.

Page 273

Consider a binary string |x| whose size is x bits. In utm.r we also show that

and

with c = 1106 and = 1024. As before, the programs for doing this are exhibited and run.

Next we turn to the self-delimiting program-size complexity H(X) for infinite r.e. sets X . This is defined to be the size in bits of the smallest LISP expression that executes forever without halting and outputs the members of the r.e. set X using the LISP primitive display, which is an identity function with the side-effect of outputting the value of its argument. Note that this LISP expression is allowed to read additional bits or expressions from the TM tape using the primitive functions read-bit and read-exp if so desires. But of course is charged for this; this adds to program size.

It is in order to deal with such unending expressions that the LISP primitive function for time-limited evaluation try captures all output from display within its second argument

Now consider a formal axiomatic system A of complexity N , i.e., with a set of theorems that considered as an r.e. set as above has self-delimiting program-size complexity = N . We show that A cannot enable us to exhibit a specific S-expression s with self-delimiting complexity H(s) greater than N + c. Here c = 4872. See godel2.r.

Next we show two different ways to calculate the halting probability of our standard self-delimiting universal Turing machine in the limit from below. See omega.r and omega2.r. The first way of doing this, omega.r, is straight- forward. The second way to calculate , omega2.r, uses a more clever method. Using the clever method as a subroutine, we show that if is the first N bits of the fractional part of the base-two real number , then

with c = 8000. Again this is done with a program that can actually be run and whose size gives us a value for c. See omega3.r.

Consider again the formal axiomatic system A with complexity N , i.e., with self-delimiting program-size complexity = N . Using the lower bound of N on established in omega3.r, we show that A cannot enable us to determine more than the first bits of Here = 15328. In fact, we show that A cannot enable us to determine more than N + bits of even if they are scattered and we leave gaps. See godel3.r.

Last but not least, the philosophical implications of all this should be discussed, especially the extent to which it tends to justify experimental mathematics. This would be along the lines of the discussion in my talk transcript "Randomness in arithmetic and the decline and fall of reductionism in pure mathematics."

This concludes our "hands-on" mini-course on the information-theoretic limits of mathematics.

Page 274

References

Here is a useful collection of hand-outs for this course:

[1] G. J. Chaitin, "Randomness in arithmetic and the decline and fall of reductionism in pure mathematics," in J. Cornwell, Nature's Imagination, Oxford University Press, 1995, pp. 27-44.

[2] G. J. Chaitin, "The Berry paradox," Complexity 1 (1995), pp. 26-0.

[3] G. J. Chaitin, "A new version of algorithmic information theory," Complexity, to appear.

[4] G. J. Chaitin, "How to run algorithmic information theory on a computer," Complexity, to appear.

examples.r

LISP Interpreter Run

[ Test new lisp & show how it works ]

aa [ initially all atoms eval to self ]

expression  aa
value       aa

nil [ except nil = the empty list ]

expression  nil
value       ()

'aa [ quote = literally ]

expression  (' aa)
value       aa

'(aa bb cc) [ delimiters are ' " ( ) [ ] blank \n]

expression  (' (aa bb cc))
value       (aa bb cc)

(aa bb cc) [ what if quote omitted?! ]

expression  (aa bb cc)
value       aa

'car '(aa bb cc) [ here effect is different ]

expression  (' (car (' (aa bb cc))))
value       (car (' (aa bb cc)))

car '(aa bb cc) [ car = first element of list ]

expression  (car (' (aa bb cc)))
value       aa

Page 275

car '((a b)c d)

expression  (car (' ((a b) c d)))
value       (a b)

car '(aa)

expression  (car (' (aa)))
value       aa

car aa [ ignore error ]

expression  (car aa)
value       aa

cdr '(aa bb cc) [ cdr = rest of list ]

expression  (cdr (' (aa bb cc)))
value       (bb cc)

cdr '((a b)c d)

expression  (cdr (' ((a b) c d)))
value       (c d)

cdr '(aa)

expression  (cdr (' (aa)))
value       ()

cdr aa [ ignore error ]

expression  (cdr aa)
value       aa

cadr '(aa bb cc) [ combinations of car & cdr ]

expression  (car (cdr (' (aa bb cc))))
value       bb

caddr '(aa bb cc)

expression  (car (cdr (cdr (' (aa bb cc)))))
value       cc

cons 'aa '(bb cc) [ cons = inverse of car & cdr ]

expression  (cons (' aa) (' (bb cc)))
value       (aa bb cc)

cons'(a b)'(c d)

expression  (cons (' (a b)) (' (c d)))
value       ((a b) c d)

Page 276

cons aa nil

expression  (cons aa nil)
value       (aa)

cons aa ()

expression  (cons aa ())
value       (aa)

cons aa bb [ ignore error ]

expression  (cons aa bb)
value       aa

("cons aa) [ supply nil for missing arguments ]

expression  (cons aa)
value       (aa)

("cons '(aa) '(bb) '(cc)) [ ignore extra arguments ]

expression  (cons (' (aa)) (' (bb)) (' (cc)))
value       ((aa) bb)

atom ' aa [ is-atomic? predicate ]

expression  (atom (' aa))
value       true

atom '(aa)

expression  (atom (' (aa)))
value       false

atom '( )

expression  (atom (' ()))
value       true

= aa bb [ are-equal-S-expressions? predicate ]

expression  (= aa bb)
value       false

= aa aa

expression  (= aa aa)
value       true

= '(a b)'(a b)

expression  (= (' (a b)) (' (a b)))
value       true

Page 277

= '(a b)'(a x)

expression  (= (' (a b)) (' (a x)))
value       false

if true x y [ if ... then ... else ... ]

expression  (if true x y)
value       x

if false x y

expression  (if false x y)
value       y

if xxx x y [ anything not false is true ]

expression  (if xxx x y)
value       x

[ display intermediate results ]
cdr display cdr display cdr display '( a b c d e )

expression  (cdr (display (cdr (display (cdr (display (' (a b
            c d e))))))))
display     (a b c d e)
display     (b c d e)
display     (c d e)
value       (d e)

('lambda(x y)x 1 2) [ lambda expression ]

expression  ((' (lambda (x y) x)) 1 2)
value       1

('lambda(x y)y 1 2)

expression  ((' (lambda (x y) y)) 1 2)
value       2

('lambda(x y)cons y cons x nil 1 2)

expression  ((' (lambda (x y) (cons y (cons x nil)))) 1 2)
value       (2 1)

(if true "car "cdr '(a b c)) [ function expressions ]

expression  ((if true car cdr) (' (a b c)))
value       a

(if false "car "cdr '(a b c))

expression  ((if false car cdr) (' (a b c)))
value       (b c)

Page 278

('lambda()cons x cons y nil) [ function with no arguments ]

expression  ((' (lambda () (cons x (cons y nil)))))

value       (x y)

[ Here is a way to create an expression and then
evaluate it in the current environment. EVAL (see
below) does this using a clean environment instead. ]
(display
cons "lambda cons nil cons display 'cons x cons y nil nil)

expression  ((display (cons lambda (cons nil (cons (display ('
            (cons x (cons y nil)))) nil)))))
display     (cons x (cons y nil))
display     (lambda () (cons x (cons y nil)))
value       (x y)

[ let ... be ... in ... ]

let x a cons x cons x nil [ first case, let x be ... in ... ]

expression  ((' (lambda (x) (cons x (cons x nil)))) a)
value       (a a)

x

expression  x
value       x

[ second case, let (f x) be ... in ... ]

let (f x) if atom display x x (f car x)
(f '(((a)b)c))

expression  ((' (lambda (f) (f (' (((a) b) c))))) (' (lambda (
            x) (if (atom (display x)) x (f (car x))))))
display     (((a) b) c)
display     ((a) b)
display     (a)
display     a
value       a

f

expression  f
value       f

append '(a b c) '(d e f) [ concatenate-list primitive ]

expression  (append (' (a b c)) (' (d e f)))
value       (a b c d e f)

[ define "by hand" temporarily ]

Page 279

let (cat x y) if atom x y cons car x (cat cdr x y)
(cat '(a b c) '(d e f))

expression  ((' (lambda (cat) (cat (' (a b c)) (' (d e f)))))

            (' (lambda (x y) (if (atom x) y (cons (car x) (cat
            (cdr x) y))))))
value       (a b c d e f)+

cat

expression  cat
value       cat

[ define "by hand" permanently ]

define (cat x y) if atom x y cons car x (cat cdr x y)

define      cat
value       (lambda (x y) (if (atom x) y (cons (car x) (cat (c
            dr x) y))))

cat

expression  cat
value       (lambda (x y) (if (atom x) y (cons (car x) (cat (c
            dr x) y))))

(cat '(a b c) '(d e f))

expression  (cat (' (a b c)) (' (d e f)))
value       (a b c d e f)

define x (a b c) [ define atom, not function ]

define      x
value       (a b c)

cons x nil

expression  (cons x nil)
value       ((a b c))

define x    (d e f)

define      x
value       (d e f)

cons x nil

expression  (cons x nil)
value       ((d e f))

size abc [ size of S-expression in characters ]

expression  (size abc)

Page 280

value       3

size ' ( a b c )

expression  (size (' (a b c)))
value       7

length ' ( a b c ) [ number of elements in list ]

expression  (length (' (a b c)))
value       3

length display bits ' a [ S-expression --> bits ]

expression  (length (display (bits (' a))))
display     (0 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0)
value       16

length display bits ' abc [ extra character is \n ]

expression  (length (display (bits (' abc))))
display     (0 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0
             0 0 0 1 0 1 0)
value       32

length display bits nil

expression  (length (display (bits nil)))
display     (0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 1 0 1 0)
value       24

length display bits ' (a)

expression  (length (display (bits (' (a)))))
display     (0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 1 0 0 1 0
             0 0 0 1 0 1 0)
value       32

[ plus ]
+ abc 15 [ not number --> 0 ]

expression  (+ abc 15)
value       15

+ '(abc) 15

expression  (+ (' (abc)) 15)
value       15

+ 10 15

expression  (+ 10 15)
value       25

- 10 15 [ non-negative minus ]

Page 281

expression  (- 10 15)
value       0

- 15 10

expression  (- 15 10)
value       5

* 10 15 [ times ]

expression  (* 10 15)
value       150



 [ power ]

expression  
value       1000000000000000

< 10 15 [ less than ]

expression  (< 10 15)
value       true

< 10 10

expression  (< 10 10)
value       false

> 15 10 [ greater than ]

expression  (> 15 10)
value       true

> 10 10

expression  (> 10 10)
value      false

<= 15 10 [ less than or equal ]

expression  ( <= 15 10)
value      false

<= 10 10

expression  (<= 10 10)
value       true

>= 10 15 [ greater than or equal ]

expression  (>= 10 15)
value false

 >= 10 10

Page 282

expression  (>= 10 10)
value      true

= 10 15 [ equal ]

expression  (= 10 15)
value       false

= 10 10

expression  (= 10 10)
value       true

[ here not number isn't considered zero ]
= abc 0

expression  (= abc 0)
value       false

= 0003 3 [ other ways numbers are funny ]

expression  (= 3 3)
value       true

000099 [ leading zeros removed ]

expression  99
value       99

[ and numbers are constants ]
let x b cons x cons x nil

expression  ((' (lambda (x) (cons x (cons x nil)))) b)
value       (b b)

let 99 45 cons 99 cons 99 nil

expression  ((' (lambda (99) (cons 99 (cons 99 nil)))) 45)
value       (99 99)

define 99 45

define      99
value       45

cons 99 cons 99 nil

expression  (cons 99 (cons 99 nil))
value       (99 99)

[ decimal<-->binary conversions ]

base10-to-2 255

Page 283

expression (base10-to-2 255)
value      (1 1 1 1 1 1 1 1)

base10-to-2 256

expression  (base10-to-2 256)
value       (1 0 0 0 0 0 0 0 0)

base10-to-2 257

expression  (base10-to-2 257)
value       (1 0 0 0 0 0 0 0 1)

base2-to-10 '(1 1 1 1)

expression  (base2-to-10 (' (1 1 1 1)))
value       15

base2-to-10 '(1 0 0 0 0)

expression  (base2-to-10 (' (1 0 0 0 0)))
value       16

base2-to-10 '(1 0 0 0 1)

expression  (base2-to-10 (' (1 0 0 0 1)))
value       17

[ illustrate eval & try ]

eval display '+ display 5 display 15

expression  (eval (display (' (+ (display 5) (display 15)))))
display     (+ (display 5) (display 15))
display     5
display     15
value       20

try 0 display '+ display 5 display 15 nil

expression  (try 0 (display (' (+ (display 5) (display 15))))
            nil)
display     (+ (display 5) (display 15))
value       (success 20 (5 15))

try 0 display '+ debug 5 debug 15 nil

expression (try 0 (display (' (+ (debug 5) (debug 15)))) nil)
display    (+ (debug 5) (debug 15))
debug      5
debug      15
value      (success 20 ())

[ eval & try use initial variable bindings ]

Page 284

cons x nil

expression  (cons x nil)
value       ((d e f))

eval 'cons x nil

expression  (eval (' (cons x nil)))
value       (x)

try 0 'cons x nil nil

expression  (try 0 (' (cons x nil)) nil)
value       (success (x) ())

define five! [ to illustrate time limits ]
let (f x) if = display x 0 1 * x (f - x 1)
    (f 5)

define      five!
value       ((' (lambda (f) (f 5))) (' (lambda (x) (if (= (dis
            play x) 0) 1 (* x (f (- x 1)))))))

eval five!

expression (eval five!)
display     5
display     4
display     3 
display     2
display     1   
display     0
value       120

[ by the way, numbers can be big: ]
let (f x) if = x 0 1 * x (f - x 1)
    (f 100) [ one hundred factorial! ]

expression  ((' (lambda (f) (f 100))) (' (lambda (x) (if (= x
            0) 1 (* x (f (- x 1))))))) 
value       93326215443944152681699238856266700490715968264381
            62146859296389521759999322991560894146397615651828
            62536979208272237582511852109168640000000000000000 
            00000000

[ time limit is nesting depth of re-evaluations
due to function calls & eval & try ]

try 0 five! nil

expression  (try 0 five! nil)
value       (failure out-of-time ())

try 1 five! nil

Page 285

expression  (try 1 five! nil)
value       (failure out-of-time ())

try 2 five! nil

expression  (try 2 five! nil)
value       (failure out-of-time (5))  

try 3 five! nil

expression  (try 3 five! nil)
value       (failure out-of-time (5 4))

try 4 five! nil

expression  (try 4 five! nil)
value       (failure out-of-time (5 4 3))

try 5 five! nil

expression  (try 5 five! nil)
value       (failure out-of-time (5 4 3 2))

try 6 five! nil

expression  (try 6 five! nil)
value       (failure out-of-time (5 4 3 2 1))

try 7 five! nil

expression  (try 7 five! nil)
value       (success 120 (5 4 3 2 1 0))

try no-time-limit five! nil

expression  (try no-time-limit five! nil)
value       (success 120 (5 4 3 2 1 0))

define two* [ to illustrate running out of data ]
 let (f x) if = 0 x nil
            cons * 2 display read-bit (f - x 1)
     (f 5)

define      two* 
value       ((' (lambda (f) (f 5))) (' (lambda (x) (if (= 0 x)
            nil (cons (* 2 (display (read-bit))) (f (- x 1)))
            ))))

try 6 two* '(1 0 1 0 1)

expression  (try 6 two* (' (1 0 1 0 1)))
value       (failure out-of-time (1 0 1 0 1))

try 7 two* '(1 0 1 0 1)

Page 286

expression  (try 7 two* (' (1 0 1 0 1)))
value       (success (2 0 2 0 2) (1 0 1 0 1))

try 7 two* '(1 0 1)

expression  (try 7 two* (' (1 0 1)))
value       (failure out-of-data (1 0 1))

try no-time-limit two* '(1 0 1)

expression  (try no-time-limit two* (' (1 0 1)))
value       (failure out-of-data (1 0 1))

try 18
'let (f x) if = 0 x nil
           cons * 2 display read-bit (f - x 1)
     (f 16)
bits 'a

expression  (try 18 (' ((' (lambda (f) (f 16))) (' (lambda (x)
            (if (= 0 x) nil (cons (* 2 (display (read-bit)))
            (f (- x 1)))))))) (bits (' a)))
value       (success (0 2 2 0 0 0 0 2 0 0 0 0 2 0 2 0) (0 1 1
            0 0 0 0 1 0 0 0 0 1 0 1 0))

[ illustrate nested try's ]
[ most constraining limit wins ]

try 20
'cons abcdef try 10
'let (f n) (f display + n 1) (f 0) [infinite loop]
nil nil

expression  (try 20 (' (cons abcdef (try 10 (' ((' (lambda (f)
            (f 0))) (' (lambda (n) (f (display (+ n 1)))))))
            nil))) nil)
value       (success (abcdef failure out-of-time (1 2 3 4 5 6
            7 8 9)) ())

try 10
'cons abcdef try 20
'let (f n) (f display + n 1) (f 0) [infinite loop]
nil nil

expression  (try 10 (' (cons abcdef (try 20 (' ((' (lambda (f)
            (f 0))) (' (lambda (n) (f (display (+ n 1)))))))
            nil))) nil)
value       (failure out-of-time ())

try 10
'cons abcdef try 20
'let (f n) (f debug + n 1) (f 0) [infinite loop]
nil nil

expression  (try 10 (' (cons abcdef (try 20 (' ((' (lambda (f)

Page 287

            (f 0))) (' (lambda (n) (f (debug (+ n 1))))))) ni
            l))) nil)
debug       1
debug       2
debug       3
debug       4
debug       5     
debug       6
debug       7
debug       8
value       (failure out-of-time ())

try no-time-limit
'cons abcdef try 20
'let (f n) (f display + n 1) (f 0) [infinite loop]
nil nil

expression  (try no-time-limit (' (cons abcdef (try 20 (' (('
            (lambda (f) (f 0))) (' (lambda (n) (f (display (+
            n 1))))))) nil))) nil)
value       (success (abcdef failure out-of-time (1 2 3 4 5 6
7 8 9 10 11 12 13 14 15 16 17 18 19)) ())

try 10
'cons abcdef try no-time-limit
'let (f n) (f display + n 1) (f 0) [infinite loop]
nil nil

expression  (try 10 (' (cons abcdef (try no-time-limit (' (('
            (lambda (f) (f 0))) (' (lambda (n) (f (display (+
            n 1))))))) nil))) nil)
            value (failure out-of-time ())

[ illustrate read-bit & read-exp ]

read-bit

expression  (read-bit)
value       out-of-data

read-exp

expression  (read-exp)
value       out-of-data

try 0 'read-bit nil

expression  (try 0 (' (read-bit)) nil)
value       (failure out-of-data ())

try 0 'read-exp nil

expression  (try 0 (' (read-exp)) nil)
value       (failure out-of-data ())

Page 288

try 0 'read-exp bits 'abc

expression  (try 0 (' (read-exp)) (bits (' abc)))
value       (success abc ())

try 0 'read-exp bits '(abc def)

expression  (try 0 (' (read-exp)) (bits (' (abc def))))
value       (success (abc def) ())

try 0 'read-exp bits '(abc(def ghi)jkl)

expression  (try 0 (' (read-exp)) (bits (' (abc (def ghi) jkl)
            )))
value       (success (abc (def ghi) jkl) ())

try 0 'cons read-exp cons read-bit nil bits 'abc

expression  (try 0 (' (cons (read-exp) (cons (read-bit) nil)))
            (bits (' abc)))
value       (failure out-of-data ())

try 0 'cons read-exp cons read-bit nil append bits 'abc '(0)

expression  (try 0 (' (cons (read-exp) (cons (read-bit) nil)))
             (append (bits (' abc)) (' (0))))
value       (success (abc 0) ())

try 0 'cons read-exp cons read-bit nil append bits 'abc '(1)

expression  (try 0 (' (cons (read-exp) (cons (read-bit) nil)))
            (append (bits (' abc)) (' (1))))
value       (success (abc 1) ())

try 0 'read-exp bits '(a b c)

expression  (try 0 (' (read-exp)) (bits (' (a b c))))
value       (success (a b c) ())

try 0 'cons read-exp cons read-exp nil bits '(a b c)

expression  (try 0 (' (cons (read-exp) (cons (read-exp) nil)))
            (bits (' (a b c))))
value       (failure out-of-data ())

try 0 'cons read-exp cons read-exp nil
      append bits '(a b c) bits '(d e f)

expression  (try 0 (' (cons (read-exp) (cons (read-exp) nil)))
            (append (bits (' (a b c))) (bits (' (d e f)))))
value       (success ((a b c) (d e f)) ())

bits 'a [ to get characters codes ]

expression  (bits (' a))

Page 289

value       (0 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0)

try 0 'read-exp '(0 1 1 0 0 0 0 1) ['a' but no \n character]

expression  (try 0 (' (read-exp)) (' (0 1 1 0 0 0 0 1)))
value       (failure out-of-data ())

try 0 'read-exp '(0 1 1 0 0 0 0 1 0 0 0 0 1 0 1)[0 missing]

expression  (try 0 (' (read-exp)) (' (0 1 1 0 0 0 0 1 0 0 0 0
            1 0 1)))
value       (failure out-of-data ())

try 0 'read-exp '(0 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0) [okay]

expression  (try 0 (' (read-exp)) (' (0 1 1 0 0 0 0 1 0 0 0 0
            1 0 1 0)))
value       (success a ())

[ if we get to \n reading 8 bits at a time,
  we will always interpret as a valid S-expression ]
try 0 'read-exp
      '(0 0 0 0 1 0 1 0) [nothing in record; only \n]

expression  (try 0 (' (read-exp)) (' (0 0 0 0 1 0 1 0)))
value       (success () ())

try 0 'read-exp '(1 1 1 1 1 1 1 1 [unprintable character]
                  0 0 0 0 1 0 1 0) [is deleted]

expression  (try 0 (' (read-exp)) (' (1 1 1 1 1 1 1 1 0 0 0 0
            1 0 1 0)))
value       (success () ())

bits () [ to get characters codes ]

expression  (bits ())
value       (0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 1 0 1 0)

[ three left parentheses==>three right parentheses supplied ]
try 0 'read-exp '(0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0
                  0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0)

expression  (try 0 (' (read-exp)) (' (0 0 1 0 1 0 0 0 0 0 1 0
            1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0)))
value       (success ((())) ())

[ right parenthesis 'a'==>left parenthesis supplied ]
try 0 'read-exp '(0 0 1 0 1 0 0 1 0 1 1 0 0 0 0 1
                  0 0 0 0 1 0 1 0) [ & extra 'a' ignored ]

expression  (try 0 (' (read-exp)) (' (0 0 1 0 1 0 0 1 0 1 1 0
            0 0 0 1 0 0 0 0 1 0 1 0)))
value       (success () ())

Page 290

[ 'a' right parenthesis==>'a' is seen & parenthesis ]
try 0 'read-exp '(0 1 1 0 0 0 0 1 0 0 1 0 1 0 0 1
                  0 0 0 0 1 0 1 0) [ is ignored ]

expression (try 0 (' (read-exp)) (' (0 1 1 0 0 0 0 1 0 0 1 0
           1 0 0 1 0 0 0 0 1 0 1 0)))
value      (success a ())

End of LISP Run

Elapsed time is 16 seconds.

godel.r

LISP Interpreter Run

[[[
    Show that a formal system of lisp complexity
    H_lisp (FAS) = N cannot enable us to exhibit
    an elegant S-expression of size greater than N + 410.
    An elegant lisp expression is one with the property
    that no smaller S-expression has the same value.
    Setting: formal axiomatic system is never-ending
    lisp expression that displays elegant S-expressions.
]]]

[Here is the key expression.]

define expression

let (examine x)
    if atom x false
    if < n size car x car x
    (examine cdr x)

let fas 'display  430 [insert FAS here preceeded by ']

let n + 410 size fas

let t 0

let (loop)
  let v try t fas nil
  let s (examine caddr v)
  if s eval s
  if = success car v failure
  let t + t 1
  (loop)

(loop)

define      expression
value       ((' (lambda (examine) ((' (lambda (fas) ((' (lambd
            a (n) ((' (lambda (t) ((' (lambda (loop) (loop)))

Page 291


            (' (lambda () ((' (lambda (v) ((' (lambda (s) (if
            s (eval s) (if (= success (car v)) failure ((' (la
            mbda (t) (loop))) (+ t 1)))))) (examine (car (cdr
            (cdr v))))))) (try t fas nil))))))) 0))) (+ 410 (s
            ize fas))))) (' (display ( 430)))))) (' (lambd
            a (x) (if (atom x) false (if (< n (size (car x)))
            (car x) (examine (cdr x)))))))

[Size expression.]
size expression

expression  (size expression)
value       430

[Run expression & show that it knows its own size
and can find something bigger than it is.]
eval expression

expression  (eval expression)
value       10000000000000000000000000000000000000000000000000
            00000000000000000000000000000000000000000000000000
            00000000000000000000000000000000000000000000000000
            00000000000000000000000000000000000000000000000000
            00000000000000000000000000000000000000000000000000
            00000000000000000000000000000000000000000000000000
            00000000000000000000000000000000000000000000000000
            00000000000000000000000000000000000000000000000000
            0000000000000000000000000000000

[Here it fails to find anything bigger than it is.]

let (examine x)
    if atom x false
    if < n size car x car x
    (examine cdr x)

let fas 'display  429 [insert FAS here preceeded by ']

let n + 410 size fas

let t 0

let (loop)
  let v try t fas nil
  let s (examine caddr v)
  if s eval s
  if = success car v failure
  let t + t 1
  (loop)

(loop)

expression  ((' (lambda (examine) ((' (lambda (fas) ((' (lambd
            a (n) ((' (lambda (t) ((' (lambda (loop) (loop)))
            (' (lambda () ((' (lambda (v) ((' (lambda (s) (if

Page 292

            s (eval s) (if (= success (car v)) failure ((' (la
            mbda (t) (loop))) (+ t 1)))))) (examine (car (cdr
            (cdr v))))))) (try t fas nil))))))) 0))) (+ 410 (s
            ize fas))))) (' (display ( 429)))))) (' (lambd
            a (x) (if (atom x) false (if (! n (size (car x)))
            (car x) (examine (cdr x)))))))
value       failure

End of LISP Run

Elapsed time is 2 seconds.

utm.r

LISP Interpreter Run

[[[
 First steps with my new construction for
 a self-delimiting universal Turing machine.
 We show that
    H(x,y) <= H(x) + H(y) + c
 and determine c.
 Consider a bit string x of length .
 We also show that
    H(x) <= 2|x| + c
 and that
    H(x) <= |x| +  H(the binary string for |x|) + c
 and determine both these c's.
]]]

[
 Here is the self-delimiting universal Turing machine!
]
 define (U p) cadr try no-time-limit 'eval read-exp p

define      U
value       (lambda (p) (car (cdr (try no-time-limit (' (eval
            (read-exp))) p))))+

(U bits 'cons x cons y cons z nil)

expression (U (bits (' (cons x (cons y (cons z nil))))))
value      (x y z)

(U append bits 'cons a debug read-exp
           bits '(b c d)
)

expression (U (append (bits (' (cons a (debug (read-exp)))))
           (bits (' (b c d)))))
debug      (b c d)
value      (a b c d)

[

Page 293

 The length of alpha in bits is the
 constant c in H(x) < + 2|x| + c.
]

define alpha

let (loop)  let x read-bit
            let y read-bit
            if = x y
               cons x (loop)
               nil

(loop)

define      alpha
value       ((' (lambda (loop) (loop))) (' (lambda () ((' (lam
            bda (x) ((' (lambda (y) (if (= x y) (cons x (loop)
            ) nil))) (read-bit)))) (read-bit)))))

length bits alpha

expression  (length (bits alpha))
value       1104

(U
 append
   bits alpha
   '(0 0 1 1 0 0 1 1 0 1)
)

expression  (U (append (bits alpha) (' (0 0 1 1 0 0 1 1 0 1)))
            )
value       (0 1 0 1)

(U
 append
   bits alpha
   '(0 0 1 1 0 0 1 1 0 0)
)

expression  (U (append (bits alpha) (' (0 0 1 1 0 0 1 1 0 0)))
            )
value       out-of-data

[
 The length of beta in bits is the
 constant c in H(x,y) <= H(x) + H(y) + c.
]
define beta
cons eval read-exp
cons eval read-exp
     nil

define      beta
value       (cons (eval (read-exp)) (cons (eval (read-exp)) ni
            l))

length bits beta

Page 294

expression  (length (bits beta))
value       432

(U
 append
   bits beta
 append
   bits 'cons a cons b cons c nil
   bits 'cons x cons y cons z nil
)

expression  (U (append (bits beta) (append (bits (' (cons a (c
            ons b (cons c nil))))) (bits (' (cons x (cons y (c
            ons z nil))))))))
value       ((a b c) (x y z))

(U
 append
   bits beta
 append
   append bits alpha '(0 0 1 1 0 0 1 1 0 1)
   append bits alpha '(1 1 0 0 1 1 0 0 1 0)
)

expression  (U (append (bits beta) (append (append (bits alpha
            ) (' (0 0 1 1 0 0 1 1 0 1))) (append (bits alpha)
            (' (1 1 0 0 1 1 0 0 1 0))))))
value       ((0 1 0 1) (1 0 1 0))

[
 The length of gamma in bits is the
 constant c in H(x) <= |x| + H(|x|) + c
]
define gamma
let (loop k)
   if = 0 k nil
   cons read-bit (loop - k 1)
(loop base2-to-10 eval read-exp)

define      gamma
value       ((' (lambda (loop) (loop (base2-to-10 (eval (read-
            exp)))))) (' (lambda (k) (if (= 0 k) nil (cons (re
            ad-bit) (loop (- k 1)))))))

length bits gamma

expression  (length (bits gamma))
value       1024

(U
 append
   bits gamma
 append
   [Arbitrary program for U to compute number of bits]

Page 295

   bits' '(1 0 0 0)
   [That many bits of data]
   '(0 0 0 0 0 0 0 1)
)

expression  (U (append (bits gamma) (append (bits (' (' (1 0 0
            0)))) (' (0 0 0 0 0 0 0 1)))))
            value (0 0 0 0 0 0 0 1)

End of LISP Run

Elapsed time is 19 seconds.

godel2.r

LISP Interpreter Run

[[[
 Show that a formal system of complexity N
 can't prove that a specific object has
 complexity > N + 4872.
 Formal system is a never halting lisp expression
 that output pairs (lisp object, lower bound
 on its complexity). E.g., (x 4) means
 that x has complexity H(x) greater than or equal to 4.
]]]

[Here is the prefix.]

define pi

let (examine pairs)
    if atom pairs false
    if < n cadr car pairs
    car pairs
    (examine cdr pairs)

let t 0

let fas nil

let (loop)
  let v try t 'eval read-exp fas
  let n + 4872 length fas
  let p (examine caddr v)
  if p car p
  if = car v success failure
  if = cadr v out-of-data
     let fas append fas cons read-bit nil
     (loop)
  if = cadr v out-of-time
     let t + t 1
     (loop)
  unexpected-condition

Page 296

(loop)

define      pi
value       ((' (lambda (examine) ((' (lambda (t) ((' (lambda
            (fas) ((' (lambda (loop) (loop))) (' (lambda () ((
            ' (lambda (v) ((' (lambda (n) ((' (lambda (p) (if
            p (car p) (if (= (car v) success) failure (if (= (
            car (cdr v)) out-of-data) ((' (lambda (fas) (loop)
            )) (append fas (cons (read-bit) nil))) (if (= (car
            (cdr v)) out-of-time) ((' (lambda (t) (loop))) (+
            t 1)) unexpected-condition)))))) (examine (car (c
            dr (cdr v))))))) (+ 4872 (length fas))))) (try t (
            ' (eval (read-exp))) fas))))))) nil))) 0))) (' (la
            mbda (pairs) (if (atom pairs) false (if (! n (car
            (cdr (car pairs)))) (car pairs) (examine (cdr pair
            s)))))))

[Size pi.]
length bits pi

expression  (length (bits pi))
value       4872

[Size pi + fas.]
length
append bits pi
       bits 'display '(xyz 9999)

expression  (length (append (bits pi) (bits (' (display (' (xy
            z 9999)))))))
value       5072

[Here pi finds something suitable.]

cadr try no-time-limit 'eval read-exp
append bits pi
       bits 'display '(xyz 5073)

expression  (car (cdr (try no-time-limit (' (eval (read-exp)))
            (append (bits pi) (bits (' (display (' (xyz 5073)
            ))))))))
value       xyz

[Here pi doesn't find anything suitable.]

cadr try no-time-limit 'eval read-exp
append bits pi
       bits 'display '(xyz 5072)

expression  (car (cdr (try no-time-limit (' (eval (read-exp)))
            (append (bits pi) (bits (' (display (' (xyz 5072)
            ))))))))
value       failure

Page 297

End of LISP Run

Elapsed time is 153 seconds.

omega.r

LISP Interpreter Run

[[[[ Omega in the limit from below! ]]]]

define (all-bit-strings-of-size k)
    if = 0 k '(())
    (extend-by-one-bit (all-bit-strings-of-size - k 1))

define      all-bit-strings-of-size
value       (lambda (k) (if (= 0 k) (' (())) (extend-by-one-bi
            t all-bit-strings-of-size (- k 1)))))

define (extend-by-one-bit x)
    if atom x nil
    cons append car x '(0)
    cons append car x '(1)
    (extend-by-one-bit cdr x)

define      extend-by-one-bit
value       (lambda (x) (if (atom x) nil (cons (append (car x)
            (' (0))) (cons (append (car x) (' (1))) (extend-b
            y-one-bit (cdr x))))))

define (count-halt p)
    if atom p 0
    +
    if = success car try t 'eval read-exp car p
       1 0
    (count-halt cdr p)

define      count-halt
value       (lambda (p) (if (atom p) 0 (+ (if (= success (car
            (try t(' (eval (read-exp))) (car p)))) 1 0) (coun
            t-halt (cdr p)))))

define (omega t) cons (count-halt (all-bit-strings-of-size t))
                 cons /
                 cons 
                      nil
define      omega
value       (lambda (t) (cons (count-halt (all-bit-strings-of-
            size t)) (cons / (cons ) nil))))

(omega 0)

expression  (omega 0)
value       (0 / 1)

Page 298

(omega 1)

expression  (omega 1)
value       (0 / 2) 

(omega 2)

expression  (omega 2)
value       (0 / 4)

(omega 3)

expression  (omega 3)
value       (0 / 8)

(omega 8)

expression  (omega 8)
value       (1 / 256)

End of LISP Run

Elapsed time is 38 seconds.

omega2.r

LISP Interpreter Run

[[[[ Omega in the limit from below! ]]]]

define (count-halt prefix bits-left-to-extend)
    if = bits-left-to-extend 0
    if = success car try t 'eval read-exp prefix
       1 0
    + (count-halt append prefix '(0) - bits-left-to-extend 1)
      (count-halt append prefix '(1) - bits-left-to-extend 1)

define      count-halt
value       (lambda (prefix bits-left-to-extend) (if (= bits-l
            eft-to-extend 0) (if (= success (car (try t (' (ev
            al (read-exp))) prefix))) 1 0) (+ (count-halt (app
            end prefix (' (0))) (- bits-left-to-extend 1)) (co
            unt-halt (append prefix (' (1))) (- bits-left-to-e
            xtend 1)))))

define (omega t) cons (count-halt nil t)
                 cons /
                 cons 
                      nil

define      omega
value       (lambda (t) (cons (count-halt nil t) (cons / (cons
            () nil))))

Page 299

(omega 0)

expression  (omega 0)
value       (0 / 1)

(omega 1)

expression  (omega 1)
value       (0 / 2)

(omega 2)

expression  (omega 2)
value       (0 / 4)

(omega 3)

expression  (omega 3)
value       (0 / 8)

(omega 8)

expression  (omega 8)
value       (1 / 256)

End of LISP Run

Elapsed time is 33 seconds.

omega3.r

LISP Interpreter Run

[[[
 Show that
    H(Omega_n) > n - 8000.
 Omega_n is the first n bits of Omega,
 where we choose
    Omega = xxx0111111...
 instead of
    Omega = xxx1000000...
 if necessary.
]]]

[Here is the prefix.]

define pi

let (count-halt prefix bits-left-to-extend)
    if = bits-left-to-extend 0
    if = success car try t 'eval read-exp prefix
       1 0
    + (count-halt append prefix '(0) - bits-left-to-extend 1)

Page 300

      (count-halt append prefix '(1) - bits-left-to-extend 1)

let (omega t) cons (count-halt nil t)
              cons /
              cons  
              nil

let w eval read-exp

let n length w

let w cons base2-to-10 w
      cons /
      cons  
          nil

let (loop t)
  if (<=rat w (omega t))
     (big nil n)
     (loop + t 1)

let (<=rat x y)
    <= * car x caddr y * caddr x car y

let (big prefix bits-left-to-add)
 if = 0 bits-left-to-add
 cons cadr try t 'eval read-exp prefix
      nil
 append (big append prefix '(0) - bits-left-to-add 1)
        (big append prefix '(1) - bits-left-to-add 1)

(loop 0)

define      pi
value       ((' (lambda (count-halt) ((' (lambda (omega) ((' (
            lambda (w) ((' (lambda (n) ((' (lambda (w) ((' (la
            mbda (loop) ((' (lambda (<=rat) ((' (lambda (big)
            (loop 0))) (' (lambda (prefix bits-left-to-add) (i
            f (= 0 bits-left-to-add) (cons (car (cdr (try t ('
            (eval (read-exp))) prefix))) nil) (append (big (a
            ppend prefix (' (0))) (- bits-left-to-add 1)) (big
            (append prefix (' (1))) (- bits-left-to-add 1))))
            ))))) (' (lambda (x y) (!= (* (car x) (car (cdr (c
            dr y)))) (* (car (cdr (cdr x))) (car y)))))))) ('
            (lambda (t) (if (<=rat w (omega t)) (big nil n) (l
            oop (+ t 1)))))))) (cons (base2-to-10 w) (cons / (
            cons ( ) nil)))))) (length w)))) (eval (read-e
            xp))))) (' (lambda (t) (cons (count-halt nil t) (c
            ons / (cons ( ) nil)))))))) (' (lambda (prefix
            bits-left-to-extend) (if (= bits-left-to-extend 0
            ) (if (= success (car (try t (' (eval (read-exp)))
            prefix))) 1 0) (+ (count-halt (append prefix (' (
            0))) (- bits-left-to-extend 1)) (count-halt (appen
            d prefix (' (1))) (- bits-left-to-extend 1)))))))

Page 301

[Run pi.]
cadr try no-time-limit 'eval read-exp
append bits pi
       bits '
      [Program to compute first n = 8 bits of Omega]
            '(0 0 0 0 0 0 0 1)

expression  (car (cdr (try no-time-limit (' (eval (read-exp)))
            (append (bits pi) (bits (' (' (0 0 0 0 0 0 0 1)))
            )))))
value       (out-of-data out-of-data out-of-data out-of-data o
            ut-of-data out-of-data out-of-data out-of-data out
            -of-data out-of-data () out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou

Page 302

            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data out-of-data out-of-data out-of-data
            out-of-data out-of-data out-of-data out-of-data ou
            t-of-data out-of-data out-of-data out-of-data out-
            of-data out-of-data out-of-data out-of-data out-of
            -data out-of-data out-of-data out-of-data out-of-d
            ata out-of-data out-of-data out-of-data out-of-dat
            a out-of-data)

[Size pi.]
length bits pi

expression  (length (bits pi))
value       8000

End of LISP Run

Elapsed time is 148 seconds.

godel3.r

LISP Interpreter Run

[[[
 Show that a formal system of complexity N
 can't determine more than N + 8000 + 7328
 = N + 15328 bits of Omega.
 Formal system is a never halting lisp expression
 that outputs lists of the form (1 0 X 0 X X X X 1 0).
 This stands for the fractional part of Omega,
 and means that these 0,1 bits of Omega are known.
 X stands for an unknown bit.
]]]

[Here is the prefix.]

define pi

let (number-of-bits-determined w)
    if atom w 0
    + (number-of-bits-determined cdr w)
      if = X car w
         0
         1

Page 303

let (supply-missing-bits w)
    if atom w nil
    cons if = X car w
            read-bit
            car w
    (supply-missing-bits cdr w)

let (examine w)
    if atom w false
   [if < n (number-of-bits-determined car w)]
   [ Change n to 1 here so will succeed. ]
    if < 1 (number-of-bits-determined car w)
       car w
       (examine cdr w) 

let t 0

let fas nil

let (loop)
  let v try t 'eval read-exp fas
  let n + 8000 + 7328 length fas
  let w (examine caddr v)
  if w (supply-missing-bits w)
  if = car v success failure
  if = cadr v out-of-data
     let fas append fas cons read-bit nil
     (loop)
  if = cadr v out-of-time
     let t + t 1
     (loop)
  unexpected-condition

(loop)

define      pi
value       ((' (lambda (number-of-bits-determined) ((' (lambd
            a (supply-missing-bits) ((' (lambda (examine) (('
            (lambda (t) ((' (lambda (fas) ((' (lambda (loop) (
            loop))) (' (lambda () ((' (lambda (v) ((' (lambda
            (n) ((' (lambda (w) (if w (supply-missing-bits w)
            (if (= (car v) success) failure (if (= (car (cdr v
            )) out-of-data) ((' (lambda (fas) (loop))) (append
            fas (cons (read-bit) nil))) (if (= (car (cdr v))
            out-of-time) ((' (lambda (t) (loop))) (+ t 1)) une
            xpected-condition)))))) (examine (car (cdr (cdr v)
            )))))) (+ 8000 (+ 7328 (length fas)))))) (try t ('
            (eval (read-exp))) fas))))))) nil))) 0))) (' (lam
            bda (w) (if (atom w) false (if (! 1 (number-of-bit
            s-determined (car w))) (car w) (examine (cdr w))))
            ))))) (' (lambda (w) (if (atom w) nil (cons (if (=
            X (car w)) (read-bit) (car w)) (supply-missing-bi
            ts (cdr w))))))))) (' (lambda (w) (if (atom w) 0 (
            + (number-of-bits-determined (cdr w)) (if (= X (ca
            r w)) 0 1))))))

Page 304


[Size pi.]
length bits pi

expression  (length (bits pi))
value       7328

[Run pi.]

cadr try no-time-limit 'eval read-exp
append bits pi
append [Toy formal system with only one theorem.]
       bits 'display '(1 X 0)
       [Missing bit of omega that is needed.]
       '(1)

expression  (car (cdr (try no-time-limit (' (eval (read-exp)))
             (append (bits pi) (append (bits (' (display (' (1
             X 0))))) (' (1)))))))
value       (1 1 0)

End of LISP Run

Elapsed time is 94 seconds.