The Diagonal Method
Very well-now we apply the "twist": Cantor's diagonal method. We shall
take this catalogue of Blue Programs and use it to define a new function of
one variable-Bluediag [N]-which will turn out not to be anywhere in the
list (which is why its name is in italics). Yet Bluediag will clearly be a
well-defined, calculable function of one variable, and so we will have to
conclude that functions exist which simply are not programmable in BlooP.
Here is the definition of Bluediag [N]:
Equation (1) ... Bluediag [N] = 1 + Blueprogram{#N} [N]
The strategy is: feed each meat grinder with its own index number, then
add 1 to the output. To illustrate, let us find Bluediag [12]. We saw that
Blueprogram{#12} is the function 2N; therefore, Bluediag [12] must have
the value 1 + 2 X 12, or 25. Likewise, Bluediag [5000] would have the value
125,000,000,001, since that is 1 more than the cube of 5000. Similarly, you
can find Bluediag of any particular argument you wish.
The peculiar thing about Bluediag [N] is that it is not represented in
the catalogue of Blue Programs. It cannot be. The reason is this. To be a
Blue Program, it would have to have an index number-say it were Blue
Program # X. This assumption is expressed by writing
Equation (2) ... Bluediag [N] = Blueprogram{# X} [N]
But there is an inconsistency between the equations (1) and (2). It becomes
apparent at the moment we try to calculate the value of Bluediag [X], for
we can do so by letting N take the value of X in either of the two equations.
If we substitute into equation (1), we get:
Bluediag [X] = 1 + Blueprogram{ # X} [ X]
But if we substitute into equation (2) instead, we get:
Bluediag [X] = Blueprogram{# X} [X]
Now Bluediag [X] cannot be equal to a number and also to the successor of
that number. But that is what the two equations say. So we will have to go
back and erase some assumption on which the inconsistency is based. The
only possible candidate for erasure is the assumption expressed by Equa-
tion (2): that the function Bluediag [N] is able to be coded up as a Blue
BlooP program. And that is the proof that Bluediag lies outside the realm of
primitive recursive functions. Thus, we have achieved our aim of destroying
Achilles' cherished but na·ive notion that every number-theoretical function
must be calculable within a predictable number of steps.
There are some subtle things going on here. You might ponder this,
for instance: the number of steps involved in the calculation of
Bluediag [N], for each specific value of N, is predictable-but the different
methods of prediction cannot all be united into a general recipe for predict-
(^420) BlooP and F100P and GlooP