7

The book Computational Complexity: A Modern Approach by Arora/Barak provides the following:

Theorem 1.10 There exists a function $UC: \{0,1\}^* \to \{0,1\}$ that is not computable by any TM.

Theorem 1.11 HALT(The halting problem) is not computable by any TM.

Table 1.7 that shows how Theorem 1.10 can be proved using diagonalization. Essentially this table says that there exists an uncomputable function UC that can always reverse the output of any TM, therefore, function UC is uncomputable.

The proof of Theorem 1.11 essentially creates a TM $M_{UC}$ that computes UC by assuming that HALT is computable and also by using a universal TM to simulate $M_{UC}$ and thus contradicts Theorem 1.10 and concludes that HALT is uncomputable.

My question is this: Since $M_{UC}$ is a TM, it already exists as a part of Table 1.7. In this case (as explained by the note attached to this table), function UC will (by definition) reverse the output of $M_{UC}$. Thus the $M_{UC}$ does not compute function UC even if we assume that HALT is computable.

Also, it seems that $M_{UC}$ will go into a type of recursion when the input to $M_{UC}$ is a bit representation of $M_{UC}$, i.e., each simulation on a universal TM will lead to another call on the universal TM and thus lead to a type of loop. Perhaps this is the reason the proof of Theorem 1.11 invokes a call to the HALT function (which is assumed to be computable).

lgidwani
  • 81
  • 3
  • It is important to note that the statement here in Theorem 1.10 is actually too weak. What is established is a specific function $UC$ that later is used in Theorem 1.11 as you explain. Theorem 1.10 can be proved without giving any function at all: there are only countably many Turing machines and uncountably many such functions. – Hendrik Jan Jun 19 '14 at 09:33

1 Answers1

5

Since neither HALT nor UC is computable, the machine $M_{UC}$ actually does not exist. The proof by contradiction assumes that HALT is computable and then constructs a machine $M_{UC}$, which contradicts the preceding theorem. This machine is hypothetical, and the proof of Theorem 1.10 indeed shows that it doesn't exist. That's why HALT cannot be computable.

Yuval Filmus
  • 276,994
  • 27
  • 311
  • 503
  • I think the logic of the book is wrong(For your convenience, I've quoted the part of the book in the next comment)? The book wants to use logic like this, he wants to show if HALT is computable, then UC is computable, and since UC is uncomputable which conflicts with theorem 1.10, so HALT is not computable. But he doesn't successfully build $M_{UC}$ from $M_{HALT}$, because $M_{UC}$ cannot compute itself! Am I right? I think I'm right but not sure, want to confirm, thanks! – narip Nov 30 '21 at 10:48
  • PROOF: Suppose, for the sake of contradiction, that there was a TM $M_{\text {HALT }}$ computing HALT. We will use $M_{\text {HALT }}$ to show a TM $M_{U C}$ computing UC, contradicting Theorem $1.10$. The TM $M_{\mathrm{UC}}$ is simple: On input $\alpha, M_{\mathrm{UC}}$ runs $M_{\mathrm{HALT}}(\alpha, \alpha)$. If the result is 0 (meaning that $M_{\alpha}$ does not halt on $\alpha$ ), then $M_{U C}$ outputs 1 . Otherwise, $M_{U C}$ uses the universal TM $\mathcal{U}$ to compute $b=M_{\alpha}(\alpha)$. If $b=1$, then $M_{\cup c}$ outputs 0 ; otherwise, it outputs $1 .$ – narip Nov 30 '21 at 10:50
  • Under the assumption that $M_{\mathrm{HALT}}(\alpha, \alpha)$ outputs HALT $(\alpha, \alpha)$ within a finite number of steps, the TM $M_{U C}(\alpha)$ will output UC $(\alpha)$. – narip Nov 30 '21 at 10:50
  • The book's logic appears impeccable. Indeed, you can compute UC using a Turing machine with access to an oracle for the halting problem. – Yuval Filmus Nov 30 '21 at 11:03
  • I will reason why I think $M_{UC}$ is not logically correct as follows. First we input $M_{UC}$ into itself. If $M_{UC}(M_{UC})$ does not halt, then $M_{UC}(M_{UC})$ will output 1, conflict with the fact that $M_{UC}(M_{UC})$ does not halt. So $M_{UC}(M_{UC})$ must halt. Then if $M_{UC}(M_{UC})$ outputs 1, then by construction, $M_{UC}(M_{UC})$ should output 0?! If $M_{UC}(M_{UC})$ outputs 0, then $M_{UC}(M_{UC})$ should output 1?? – narip Nov 30 '21 at 13:55
  • If you assume that UC is computable and reach a contradiction, then it constitutes a proof that UC is not computable (proof by contradiction). – Yuval Filmus Nov 30 '21 at 17:12
  • But we need to build a $M_{UC}$ first... The construction is not right, we didn't succeed to construct one $M_{UC}$... – narip Dec 01 '21 at 04:25
  • You described how the machine is constructed. I don’t see any problem. – Yuval Filmus Dec 01 '21 at 06:51
  • Still a bit confused. Can you tell me the output of $M_{UC}(M_{UC})$ since you think the construction is correct(while I still think the construction is wrong..)? – narip Dec 01 '21 at 08:11
  • 3
    The proof shows that such a machine cannot exist, so your question is meaningless. This contradiction is the entire point of the argument - it implies that such a machine cannot exist, and so that the halting problem isn’t decidable, since if it were, then you could construct $M_{UC}$. This proof has been rehashed on dozens of questions on this site, answering many times the very same doubt that you raise. I suggest looking at some of them. – Yuval Filmus Dec 01 '21 at 08:19