Peter Olcott said:
is conclusive rather than undecidable. Thus Turing did not prove
that solving the Halting Problem is impossible, only that there is
one way to try to solve it, that does not always work.
Perhaps a contemporary dramatic version of the proof of the halting
problem will clear things up for you, Peter:
Alan Turing: Hmm, could there be a TM that recursively decides
whether or not all other TMs halt?
Alonzo Church: Well, Alan, that's a great question ... why don't you
think about it for awhile and let me know what you find out.
Alan Turing: Alonzo ... I think that what I'll do, in order to be
completely general and make no assumptions whatsoever about the
structure, is to assume that such a TM exists and to label it HALT.
You see, Alonzo, this way, I can see if the very existance of such a
program causes a contradiction without having to delve into any gory
details of 'code'.
Alonzo Church: Alan, that's a fine approach - I did something similar
when I showed that there can be no 'truth predicate' for sufficiently
powerful systems of arithmetic. Also, my friend Kurt Gödel took a
similar approach when showing that there can be no 'provability
predicate' within the system of the Principia.
Alan Turing: Thanks for the encouragement, Alonzo - I'm now convinced
that this will be a fun endeavor ... hmm, let's see:
Now, if HALT is recursive then certainly the following program will be
recursive:
D(x) {
IF HALT(x, x) = 'NO' THEN HALT
ELSE LOOP FOREVER
}
Because, as we recursion theorists know (here is where contemporary
comes into play, the label 'recursion theory' didn't come about until
much later), the composition of recursive functions is itself
recursive. So, now, could THIS be a TM?
Oh, oh, hey, Alonzo, I think I've got it ... D cannot be a TM ...
Here's why:
Let's enumerate all TMs into a table:
tm_1 tm_2 tm_3 [...]
tm_1 1 0 1 [...]
tm_2 0 0 1 [...]
tm_3 1 1 0 [...]
[...]
where (tm_x, tm_y) = 1 if tm_x(tm_y) halts and it is 0 if tm_x(tm_y)
does not halt.
Well, we have a list of TMs, let's see if it's in the list:
Is it TM_1? Well, it cannot be, because
D(TM_1) = if Halt(TM_1, TM_1) = 'No' then Halt else Loop Forever
And we can clearly see that TM_1(TM_1) halts (from the graph that I've
constructed), so D(TM_1) does not halt.
Is it TM_n? Well, it cannot be, because
D(TM_n) = if Halt(TM_n, TM_n) = 'No' then Halt else Loop Forever
And we can clearly see that if TM_n(TM_n) halts then D does not halt
and if TM_n(TM_n) does not halt then D halts.
It, therefore, cannot be any Turing Machines in the list of all Turing
Machines. D is not a Turing Machine and, therefore, Halt is not a
Turing Machine.
Woohoo!
Alonzo Church: Hey, Alan, you're no dummy!
Alan Turing: Thanks Alonzo, you're a pretty sharp cookie yourself!