Decidability & the Halting Problem

Decidable vs. recognizable, and why the halting problem is undecidable.

The idea

Decidability classifies languages by whether a Turing machine can settle membership in them. A language is a set of strings; a machine is a procedure; the two ways of pairing them must be kept distinct.

A machine decides a language $L$ when it halts on every input and accepts exactly the strings of $L$. A machine recognizes $L$ when it accepts exactly the strings of $L$ but may run forever on strings outside $L$. The accepted strings are the same in both cases; what differs is whether a no ever comes back. A decider always answers, while a recognizer asked about a non-member may run forever, revealing nothing. Every decider is a recognizer; the converse fails.

The language that witnesses the failure is the acceptance problem

$A_{TM} = \{ \langle M, w \rangle : M \text{ accepts } w \},$

where $\langle M \rangle$ denotes a finite description of the machine $M$, written out as a string. A machine recognizes $A_{TM}$ by simulating $M$ on $w$ and accepting if the simulation accepts; if $M$ loops, the simulation loops, which recognition permits.

Theorem (Undecidability of the acceptance problem).

The language $A_{TM} = \{ \langle M, w \rangle : M \text{ accepts } w \}$ is Turing-recognizable but not decidable: no Turing machine halts on every input $\langle M, w \rangle$ and accepts exactly when $M$ accepts $w$.

The theorem does not say that deciding acceptance is hard, or that no one has yet found the algorithm: no such algorithm exists.

Ways to work on it

Not sure where to start? Take the ten-question placement test.