Gödel, Escher, Bach An Eternal Golden Braid by Douglas R. Hofstadter

(Dana P.) #1
This feature will allow us to write tests in FlooP for such properties as
wondrousness and the Tortoise property-tests which we did not know
how to program in BlooP because of the potential open-ended ness of the
searches involved. I shall leave it to interested readers to write a FlooP test
for wondrousness which does the following things:

(1) If its input, N, is wondrous, the program halts and gives the
answer YES.
(2) If N is unwondrous, but causes a closed cycle other than
1-4-2-1-4-2-1-... , the program halts and gives the answer
NO.
(3) If N is unwondrous, and causes an "endlessly rising progres-
sion", the program never halts. This is FlooP's way of answer-
ing by not answering. FlooP's nonanswer bears a strange
resemblance to joshli's nonanswer "MU".

The irony of case 3 is that OUTPUT always has the value NO, but it is always
inaccessible, since the program is still grinding away. That troublesome
third alternative is the price that we must pay for the right to write free
loops. In all FlooP programs incorporating the MU-LOOP option, nonter-
mination will always be one theoretical alternative. Of course there will be
many FlooP programs which actually terminate for all possible input val-
ues. For instance, as I mentioned earlier, it is suspected by most people who
have studied wondrousness that a FlooP program such as suggested above
will always terminate, and moreover with the answer YES each time.

Terminating and Nonterminating FlooP Programs

It would seem extremely desirable to be able to separate FlooP procedures
into two classes: terminators and nonterminators. A terminator will eventually
halt no matter what its input, despite the "MU-ness" of its loops. A nonter-
minator will go on and on forever, for at least one choice of input. If we
could always tell, by some kind of complicated inspection of a FlooP
program, to which class it belonged, there would be some remarkable
repercussions (as we shall shortly see). Needless to say, the operation of
class-checking would itself have to be a terminating operation-otherwise
one would gain nothing!

Turing's Trickery

The idea springs to mind that we might let a BlooP procedure do the
inspection. But BlooP procedures only accept numerical input, not pro-
grams! However, we can get around that ... by coding programs into
numbers! This sly trick is just Godel-numbering in another of its many
manifestations. Let the fifty-six characters of the FlooP alphabet get the
"codons" 901, 902, ... ,956, respectively. So each FlooP program now gets

BlooP and F100P and GlooP 42&

Free download pdf