How Did Turing's 1936 Paper Define Computing Limits?
In 1936, Alan Turing published a landmark paper titled "On Computable Numbers, with an Application to the Entscheidungsproblem" that established the theoretical foundation of modern computer science. By inventing an abstract mathematical device now known as the Turing machine, he provided a rigorous definition of what it means for a problem to be solvable by an algorithm. Through this model, Turing proved that there are fundamental mathematical limits to what any classical computer can calculate, demonstrating that certain well-defined problems are inherently unsolvable.
The Entscheidungsproblem and the Need for Formalism
In 1928, the German mathematician David Hilbert posed the Entscheidungsproblem, or decision problem. It asked for an algorithm that could take any statement in first-order logic and determine, in a finite number of steps, whether the statement is universally valid. At the time, mathematicians lacked a formal definition of an "effective procedure" or "algorithm." Without a precise mathematical model of computation, it was impossible to prove that no such algorithm could exist.
The Turing Machine Model
To formalize the concept of mechanical computation, Turing imagined a human "computer" following a fixed set of rules with pencil and paper. He abstracted this process into a theoretical machine consisting of an infinitely long tape divided into discrete cells, a read/write head, and a finite set of internal states.
At each step, the machine reads the symbol in the current cell, consults a finite transition table based on its current state and the symbol read, writes a new symbol, moves the tape left or right by one cell, and transitions to a new state. Formally, a Turing machine can be described as a tuple \(M = (Q, \Sigma, \Gamma, \delta, q_0, q_{\text{accept}}, q_{\text{reject}})\), where \(Q\) is a finite set of states, \(\Gamma\) is the tape alphabet, and \(\delta\) is the transition function:
\[\delta : Q \times \Gamma \rightarrow Q \times \Gamma \times \{L, R\}\]
Turing argued that any calculation a human could perform systematically using finite rules could be replicated by this simple machine. This insight, alongside Alonzo Church's independent work on lambda calculus, formed the basis of the Church-Turing thesis.
The Universal Turing Machine
A crucial breakthrough in the 1936 paper was the concept of the Universal Turing Machine (UTM). Prior to this, a machine was conceived as a fixed-purpose device built to solve a single problem. Turing showed that a single machine \(U\) could be constructed to simulate any other Turing machine \(M\) on any input \(w\).
By encoding the description of \(M\) and its input \(w\) onto the tape as a sequence of symbols \(\langle M, w \rangle\), the universal machine reads the encoded rules and executes them step by step. This demonstrated that a single, general-purpose hardware architecture could run any software, laying the conceptual groundwork for stored-program computers.
Computable Numbers and Diagonalization
Turing defined a real number as "computable" if its decimal (or binary) expansion can be written down by a Turing machine. Because every Turing machine can be described by a finite string of symbols, the set of all possible Turing machines is countably infinite. However, Georg Cantor's diagonalization argument shows that the set of all real numbers is uncountably infinite.
Therefore, almost all real numbers are uncomputable. Even more importantly, Turing used a self-referential diagonalization argument to construct specific, well-defined problems that no Turing machine can solve.
The Halting Problem and Uncomputability
To prove the impossibility of the Entscheidungsproblem, Turing demonstrated that there is no general algorithm to decide whether an arbitrary Turing machine \(M\) will eventually halt on a given input \(w\), or run forever. This is known as the Halting Problem.
Suppose, for the sake of contradiction, that a Turing machine \(H\) exists such that:
\[H(\langle M, w \rangle) = \begin{cases} \text{accept} & \text{if } M \text{ halts on } w \\ \text{reject} & \text{if } M \text{ does not halt on } w \end{cases}\]
Turing showed that one could construct a new machine \(D\) that takes a machine description \(\langle M \rangle\), runs \(H(\langle M, \langle M \rangle \rangle)\), and does the opposite: if \(H\) says \(M\) halts on its own description, \(D\) enters an infinite loop; if \(H\) says \(M\) does not halt, \(D\) halts. When \(D\) is fed its own description \(\langle D \rangle\), a logical contradiction arises: \(D\) halts if and only if \(D\) does not halt.
Because \(H\) cannot exist, the Halting Problem is undecidable. Turing then reduced the Halting Problem to the Entscheidungsproblem, proving that no general algorithm can decide the validity of all first-order logic statements.
Legacy for Classical Computing
Turing's 1936 paper established that the limits of classical computation are not merely practical constraints of speed or memory, but absolute mathematical boundaries. No matter how fast or large a classical computer becomes, it cannot exceed the computational power of a Turing machine, and it remains fundamentally incapable of solving undecidable problems.