If a catastrophe were to suddenly threaten to destroy everything that I've ever written, this book is what I would try to preserve! What's here is basic, everything else is technical details. This book is the final version of a course on the limits of mathematics that I've given several times. It contains transcripts of my three favorite lectures, and in these transcripts I've tried to retain the flavor of a live performance in front of an audience. Facing an audience gives me a special energy that I don't get when I'm lecturing to a typewriter!
After these three lecture transcripts, comes a lot of LISP code, and then finally some Mathematica code.
For this course I had to invent a new LISP dialect. Unfortunately there is no manual for my LISP, but two of the lectures explain it, and there is a long LISP run, examples.r, that contains lots of comments and shows every feature of the language. So I think that what's here is equivalent to a tutorial plus a manual.
I've also included the code for my LISP interpreter. It's three-hundred lines of Mathematica, and it's in an Appendix at the end of the book.
Unfortunately software is ephemeral, it changes out from under you, and you have to run as fast as you can to stay in the same place! The code in the Appendix is Mathematica Version 2 code, not the latest version of Mathematica, which is Version 3. I also coded the interpreter in C, and C might be replaced by Java in the not too distant future! Since this course is now in its final form, I've decided to get out of the race, to freeze the software.
But you can understand the basic ideas in this book by reading the lectures without going through the LISP code. And you can read my LISP code and examine the LISP runs without having a LISP interpreter. So everything essential is here in this book. Being able to run the LISP interpreter is certainly helpful---that was the whole idea of my course, that it should be a ``hands on'' computer course---but I also gave this course a few times without computers, and that seemed to work too, even if it wasn't as exciting.
You can also run my LISP code in your head, which is the way that mathematics is traditionally done. Then just think of it as a formalism, rather than as a programming language.
I've enormously enjoyed giving this course or overviews of it, in Maine, privately in my office, in Santa Fe and Albuquerque, in Romania on the Black Sea, in Abisko and Rovaniemi on the Arctic Circle, and in Helsinki, Copenhagen and Auckland. It was tremendous fun, and I'm very, very grateful for these invitations---they stimulated me to work through the ideas and produce many, many versions of the software. So I want to thank George Markowsky, John Casti, Cris Calude, Walter Meyerstein, Bernard Moret, Ed Angel, Veikko Keränen, Gautam Dasgupta, Klaus Sutner, Tor Nørretranders and Anders Karlqvist.
I must also thank the Santa Fe Institute, which I have had the pleasure of visiting regularly. Two of the chapters in this book are lectures that I gave during those visits. And I still remember solving some of the key problems one sleepless night at John and Vivien Casti's friendly home.
And none of this could have happened without IBM, which has supported my research for three decades. In particular, I'm grateful to my current management chain, Lee Nackman and Ambuj Goyal, for making it possible for me to finish this book. And I admire the very bright and determined participants in my courses, brave pioneers! ``Merci beaucoup'' and ``Tusind tak,'' everyone! Final thanks to Hans-Christian Reichel for the frontispiece photograph he took in the University of Vienna classroom where Gödel lectured.
Gregory Chaitin, April 1997