1 The Penrose-halting theorem
What we’ll call the ‘Penrose-halting theorem’ concerns the ‘self-halting’ problem: to compute whether any given computer will halt when its own machine number is input. To state and prove the theorem we first make some definitions.Footnote 1
By Turing Machine (TM) I mean any mechanical computational device implementing an algorithm, within the scope of the Church–Turing thesis, not only those of the type explicitly introduced by Turing. Let T
$_m$
be the mth TM in a particular computable enumeration of some class of TMs (assumed computationally equivalent to Turing’s).
For clarity of presentation I will use a ‘black box’ scheme for defining TMs: for instance, machines to compute
$x+1$
and
$2\times x$
could be represented by

respectively. Such boxes can be compounded to define new TMs, each component taking as its input the output of the preceding box. For instance, the TM Q defined as

obviously computes
$2x+1$
.
Let
$A[m$
] denote the result of TM A acting on input
$m\in \mathbb {N}$
:
$A[m$
] will either be the natural number output, or that
$A[m]$
fails to halt (in which case the value of
$A[m$
] is undefined). So, for our example TM,
$Q[m]=2m+1$
(defined for all
$m\in \mathbb {N}$
).
A partial self-halting computer (PSHC) is any TM with the following description:

where 0 and 1 are the only possible outputs. That is, if P halts then it accurately informs us whether or not T
$_m$
is a ‘self-halter’. Of course, if P were to halt for all values of m then it would, per impossibile, solve the self-halting problem, so it must be the case that every PSHC fails to halt for some
$m\in \mathbb {N}$
.Footnote
2
For any TM

define

where a diamond represents a decision based on its input (here, whether or not the input is 0), and loop is some specific routine that loops endlessly. Note that the only output that A* can have is 0; otherwise it fails to halt.
With these definitions in place, we can prove the Penrose-halting theorem Footnote 3 [Reference Penrose7, pp. 64–66]. Let P be a PSHC, and consider P*, with input p*, its own machine number. If P[p*] is 1 then (i) P*[p*] halts by definition of P, but (ii) by definition of A*, P*[p*] ends in loop and so does not halt; a contradiction. If P[p*] is 0 then (i) P*[p*] does not halt by definition of P, but (ii) by definition of A*, P*[p*] halts on its 0 out arrow; a contradiction. Since P[p*] is neither 1 nor 0, and these are its only possible outputs, for any PSHC P, P[p*] does not halt, hence P*[p*] does not halt either. □
On the basis of (his version of) this theorem Penrose argues (in our terms) against a computationalist theory of cognition: ‘we have a well-defined procedure, whichever [PSHC P] is given to us, for finding a corresponding k for which we know that T
$_k(k)$
defeats P, and for which we can therefore do better than the algorithm’ [Reference Penrose7, p. 65]. (By ‘defeats’ he means that P[p*] fails to halt.) That is, we can determine on the basis of the theorem that for all PSHC P, P*[p*] fails to halt. But no PSHC computes for all such P whether P*[p*] halts; in particular, it follows from the theorem that for any PSHC P, P[p*] is undefined—but inputting p* into P is to attempt to determine whether P*[p*] halts. Apparently, then, we can do something that no TM can do!
But this argument is question begging: our ability to see that P*[p*] does not halt is predicated on the information that P is a PSHC, so that the theorem applies. But the PSHC is simply given P*’s machine number p*, and no information that it is the machine number of a PSHC. To compare abilities, both TM and person must be presented with the same task: for instance, given some m—and no other information about T
$_m$
—determine whether T
$_m$
[m] halts. Of course, that is enough (in principle) to determine concretely which TM in the enumeration T
$_m$
is, since it’s computable. Thus to apply the theorem we would have to determine whether T
$_m$
is a P* for some PSHC P. Not surprisingly this problem is uncomputable: no general mechanical procedure to determine whether a TM is a PSHC exists, as we shall now show.
We prove that PSHC-hood is not computable by showing that if it were, then there would be a PSHC that can exploit the Penrose-halting theorem to determine that its own P*[p*] halts, contrary to the theorem! That is, we suppose (for reductio) that the following TM exists:

First, recalling that loop is a specific routine, we observe that whether T
$_m$
is T
$_n^*$
for some T
$_n$
is computable: simply determine whether the lone arrow on which T
$_m$
halts is of the form

Moreover, since the enumeration of TMs is computable, the value of n is also computable: it is the machine number of the machine obtained from T
$_m$
by removing this circuit. Thus the following TM exists:

It thus follows from our supposition that

exists. Call it X.
Suppose that T
$_m$
is T
$^*_n$
and T
$_n$
is a PSHC: by definition the B subroutine outputs
$n\neq 0$
, which is input to the S subroutine; and since
$T_n$
is a PSHC, S outputs 1 by definition—hence X outputs 0. Otherwise X does not halt: either
$T_m$
is not T
$^*_n$
for any n, so B outputs 0, and X enters an endless loop; or it is, but T
$_n$
is not a PSHC, so S outputs 0 and again X enters an endless loop.
(i) That is, X outputs 1 if T
$_m$
is T
$^*_n$
and T
$_n$
is a PSHC, otherwise it does not halt—X would be a positive solution of the ‘PSHC*-hood problem’.Footnote
4
(ii) If X outputs 1 for input m then T
$_m[m]$
halts; trivially, since the antecedent is false for any m.
(iii) If X outputs 0 for input m then the S subroutine gave output 1. Thus (a) T
$_n$
is a PSHC by definition of S; and (b) the B subroutine output was n, so T
$_m$
is T
$^*_n$
by definition of B. Hence from the Penrose-halting theorem, T
$_m[m]$
does not halt.
(iv) From (ii) and (iii) X is a PSHC.
Let x* be the machine number of X*.
(v) From (i) and (iv), if x* is input into X then the output of X is 0.
(vi) From (iv) and the Penrose-halting theorem, if x* is input into X then X does not halt.
But this is a contradiction, so neither X* nor X exist, so S does not exist (since B does), and contrary to our supposition PSHC-hood is not computable. □
Since according to this corollary to the Penrose-halting theorem no machine has this ability, it is question begging to assume that we possess such an ability, in an argument attempting to show that our cognitive capacities outstrip the computable. But without such an ability we are in no position to use the Penrose-halting theorem to determine that an arbitrary TM A self-halts; to appeal to the theorem one first has to determine that A is P* for some PSHC P, and that in turn first requires that P be identified as a PSHC. So there is no reason to think that our ability to recognize self-halting includes the ability to determine for an arbitrary PSHC P—when not already identified as such—whether P*[p*] halts; no reason to think that we can outperform a TM in this regard.
2 Discussion
Readers familiar with arguments of the type given by Penrose will recognize a familiar pattern in the foregoing. Appeal to Gödel’s incompleteness theorems and their correlates in incomputability results goes back even earlier than [Reference Lucas6] famous argument (Penrose believes that his argument succeeds where Lucas’s fails). The reply given here is in essence that given in response in [Reference Benacerraf1] (if my argument is correct, then Penrose’s does not fare better then Lucas’).Footnote 5 But although my point has been made (numerous times) previously, I believe my formulation provides a very direct and clear account of what goes wrong in the concrete form that Penrose’s argument takes.
To support that claim, let me conclude by showing how to deal with two responses that can be made on Penrose’s behalf. First, Penrose himself goes on to recognize a similar point to ours; there is ‘an algorithm for generating [P*], given [PSHC P]’ [Reference Penrose7, p. 65], thereby ‘improving’ on P. That is, given a PSHC P, the machine number of a TM (namely P*) that does not self-halt, yet ‘defeats’ P, is computable. However, Penrose is ambivalent about what to make of this observation; on the one hand it seems to undermine his argument, while on the other perhaps such a TM does not know that the machine halts. Certainly, the Penrose-halting theorem means that such a computation cannot be incorporated in a PSHC P that identifies P* as a non-self-halter! But once again, who is to say that we can? For us to determine that P* is a non-self-halter via the theorem would require us to identify P as a PSHC, and it is question begging to suppose we can. Moreover, no reason is given to think that there is any behavior of which we are capable given the machine number of P*, that a TM is not equally capable. So I find this response unconvincing.
Second, Molyneux, in correspondence, offered a different way of taking Penrose’s original argument, which I will reformulate, making explicit a hidden assumption, as follows. First, for reductio, suppose that in regards to determining self-halting I am a PSHC, P: I can’t always tell, but given a TM, if I say it halts on its own machine number then it does, and if I say it doesn’t then it doesn’t. So if I know that p is my machine number, and if I further know that I am a PSHC, then I infer from the Penrose-halting theorem that P*[p*] does not halt. However, it follows from the theorem that P[p*] does not halt, so P does not recognize that P*[p*] fails to halt: and since by supposition I ‘am’ P for purposes of determining self-halting, I do not recognize that P*[p*] does not halt. Contradiction: therefore I am not P as supposed, for any P.
But of course the argument makes two suppositions, not one. Instead of concluding that I am not a PSHC, I can instead conclude that I do not know that I am, for then I cannot apply the theorem to myself. And such self-ignorance is what the argument entails for TMs, which we can see as follows. Suppose that I am a TM. First, note that the corollary we proved earlier does not immediately rule out my knowing that P is a PSHC; the non-existence of TMs solving the general problem of identifying PSHCs does not preclude TMs that partially solve the problem. So second, we model the attempted use of such a partial solution by my PSHC to apply the Penrose-halting theorem, and see that it must fail. Suppose that a subroutine of my algorithm P for determining self-halting (a) computes whether input a is c* for some TM, and if so (b) attempts to compute whether C is a PHSC, and if so (c) outputs ‘A is a non-self-halter’ (then halts), in accordance with Penrose-halting. That is completely possible, and consistent with P’s being a PSHC. So assuming it is, then the theorem tells us that if p* is input into P, then P does not halt. However, p* is c* for a PHSC, namely for p, so the computation would have halted if steps (a)–(c) were successfully completed. Since steps (a) and (c) are computable, the only way the algorithm can fail to give an output is if step (b) fails to halt, which therefore must happen when p* is input into the subroutine; which is to say when I attempt to compute whether P is a PSHC. Or in yet other words, neither I nor any other TM can compute whether our own algorithm for determining self-halting is a PSHC, if that information is used as part of our computation of self-halting. (In essence, this is a second corollary of the Penrose-halting theorem.)Footnote 6
The question, of course, is whether or not I am a computer (specifically with respect to determining self-halting). The argument we are considering derives a contradiction by assuming that I can determine that P*[p*] fails to halt by appeal to the Penrose-halting theorem; even though, in accordance with the same theorem, my algorithm P cannot. But I can only appeal to the theorem if I can successfully determine that P is in fact a PSHC; the contradiction entails that a TM cannot, as we just saw. Is there any reason to suppose that I can? None is given in [Reference Penrose7].Footnote 7 And since a TM cannot, and what is at stake is whether I am a TM, it is again question begging to assume that I can.
So we have seen the flaw in two attempts to leverage the Penrose-halting theorem for an argument against a computationalist account of cognition. They both fail for the same reason; the theorem entails that a TM is incapable of determining whether a TM is a PSHC, and so given what is at stake it is question begging to assume that we can. Quite possibly such arguments could be formulated in other ways, but the argument here is strong evidence that they will fail for much the same reason.Footnote 8