Models of Computation and the Church-Turing Thesis
Anchor (Master): Soare 2016 *Turing Computability: Theory and Applications* (Springer) Ch. 1-3 and the historical notes (the equivalence of models, the Church-Turing thesis as a thesis, the universal machine and the acceptable numbering, s-m-n and the recursion theorem); Odifreddi 1989 *Classical Recursion Theory, Volume I* (North-Holland) Ch. I-II (acceptable numberings, the isomorphism theorem of Rogers, the Blum axioms separating computability from complexity); Rogers 1967 *Theory of Recursive Functions and Effective Computability* (McGraw-Hill) Ch. 1-5
Intuition Beginner
Suppose you want to settle, once and for all, what counts as a "step-by-step procedure" — the kind of thing a person with unlimited paper, unlimited time, no cleverness, and no insight could carry out by blindly following rules. Cooking from a recipe, doing long division, looking a word up alphabetically: each is a finite list of instructions you apply without ever needing a flash of inspiration. The question this unit answers is what the outer boundary of that idea is. Which tasks can be done by some such procedure at all, and which can be done by none?
To make the question sharp you need a precise model of "blindly following rules." The most famous one imagines a long paper tape divided into cells, a reading head that sits over one cell, and a tiny rulebook. The head looks at the symbol under it, checks its current mood (one of finitely many internal states), and the rulebook tells it: write this symbol, move one cell left or right, switch to that mood. Nothing else. That austere device is a Turing machine, and the surprising claim is that anything you could compute with any honest procedure, you could compute with one of these.
The strangeness is that there are many other ways to pin down "procedure" — building number-functions from a few starter pieces, a machine with counters instead of a tape, even a calculus of pure substitution. They look nothing alike. Yet they all carve out exactly the same collection of computable tasks. When that many independent attempts agree, you start to believe the boundary is real and not an artifact of one design.
What you carry forward: there is a robust line between the computable and the not-computable, the same line no matter which honest model you pick, and the belief that this line captures the everyday notion of "doable by a procedure" is the Church-Turing thesis.
Visual Beginner
A Turing machine is a head over a tape plus a rulebook. Below, a machine that adds one to a number written in tally marks runs for a few steps. The tape holds marks (here 1) and blanks (_); the head position is shown by the caret.
rulebook (state q reads symbol -> write, move, new state):
q0 reads 1 -> write 1, move Right, stay q0 (scan past the marks)
q0 reads _ -> write 1, move Right, halt (append one mark, stop)
start: _ 1 1 1 _ _ state q0
^
step 1: _ 1 1 1 _ _ state q0 (read 1, move right)
^
step 2: _ 1 1 1 _ _ state q0
^
step 3: _ 1 1 1 _ _ state q0
^
step 4: _ 1 1 1 1 _ HALT (read _, wrote 1, stop)
^
input = three marks (the number 3)
output = four marks (the number 4)Read it top to bottom. The head starts on the leftmost mark in state q0. Each time it reads a mark it leaves it alone and steps right, staying in q0. When it finally reads a blank it writes one new mark and halts. Three marks became four: the machine computed "add one."
| step | symbol read | action | result |
|---|---|---|---|
| 1 | 1 |
write 1, move right |
head over 2nd mark |
| 2 | 1 |
write 1, move right |
head over 3rd mark |
| 3 | 1 |
write 1, move right |
head over blank |
| 4 | _ |
write 1, halt |
a 4th mark appears |
The whole "program" is the two-line rulebook. Everything a Turing machine ever does is a rulebook this plain, run long enough.
Worked example Beginner
We build the function "double a number" out of starter pieces, the second great model, and watch it agree with a machine. The starter pieces are: the constant zero, the "add one" operation (call it for successor), and the rule that lets you define a function by saying what it does at zero and how it grows by one step at a time. That last rule is recursion: to define you give and a way to get from .
Step 1. Define doubling by recursion. Set . Set — that is, double of is two more than double of .
Step 2. Unfold it at . We need , so first .
Step 3. Compute upward. . Then . Then . Then .
Step 4. Check against a machine. A Turing machine that copies every mark once (reads a mark, goes to the far end, writes a mark, comes back) turns three marks into six. Same answer, .
What this tells us: two models that share no parts — a tape device and a recipe built from zero, successor, and recursion — computed the very same function. The next sections make "built from these pieces" and "computed by a machine" precise, and state why every honest model lands on the same class of functions.
Check your understanding Beginner
Formal definition Intermediate+
A Turing machine is a tuple with a finite set of states, a finite tape alphabet containing a distinguished blank , an input alphabet , an initial state , a set of halting states, and a partial transition function . A configuration records the tape contents (a function equal to off a finite set), the head position, and the state. The one-step relation rewrites a configuration by applying to the (state, scanned symbol) pair: write the new symbol, move the head one cell or , enter the new state. A computation on input is the (finite or infinite) sequence of configurations starting from on surrounded by blanks; halts on if the sequence reaches a state in [Soare Ch. 1].
A partial function is Turing-computable if some , started with encoded on its tape, halts with encoded as output exactly when is defined, and fails to halt when is undefined. A total such is computable. A set is computable (decidable) if its characteristic function is computable; it is computably enumerable (c.e.) if it is the domain of some partial computable function, equivalently the range of a computable function or the empty set.
The partial recursive functions are generated from the basic functions — the zero function , the successor , the projections — by three operations: composition, primitive recursion (define and ), and the -operator (minimisation: is the least with true and all smaller values defined, undefined if no such ). The functions built without are the primitive recursive functions, all total; is what introduces partiality and non-termination. Register (counter) machines, -calculus, and while-programs each generate a class of partial functions by their own operational semantics. The basic theorem, stated next, is that all of these classes coincide.
Counterexamples to common slips Intermediate+
"A computable function must be total — it always returns a value." Partial computable functions are central, not pathological: the -operator and unbounded loops produce functions undefined on some inputs (the machine runs forever there). Restricting to total functions loses the enumeration , since "is total?" is itself undecidable.
"Computable and computably enumerable are the same." A set is computable iff both it and its complement are c.e. (Post). The halting set is c.e. but not computable; its complement is not even c.e. The c.e. sets are the projections of computable relations, a strictly larger class than the decidable sets.
"Primitive recursive equals computable." Every primitive recursive function is computable and total, but the Ackermann function is computable, total, and not primitive recursive. Minimisation genuinely enlarges the class, and it is exactly the source of both the extra total functions and all the partial ones.
"The Church-Turing thesis is a theorem about Turing machines." The equivalence of Turing machines with the partial recursive functions is a theorem. The thesis is the further identification of that mathematically fixed class with the informal notion of effective calculability; the informal side cannot enter a proof.
Key theorem with proof Intermediate+
The signature result is the existence of a universal machine and the s-m-n theorem, which together turn programs into data and data into programs. Fix a computable bijective Gödel numbering of Turing machines, so machine computes the partial function , and let enumerate all unary partial computable functions.
Theorem (universal function and s-m-n). (i) There is a partial computable function of two arguments — equivalently a single universal Turing machine — with for all (with both sides simultaneously defined or undefined). (ii) For all there is a primitive recursive injection with $$ \varphi^{(n)}_{s^m_n(e, \bar y)}(\bar x) = \varphi^{(m+n)}_e(\bar y, \bar x) $$ for all , all parameter tuples , and all .
Proof. (i) A universal machine is given an index and an input . It decodes into the finite transition table of machine — possible because the numbering is computable, so the lookup "what does machine do in state reading symbol ?" is a computable function of . then maintains, on its own tape, an encoding of a configuration of machine : the simulated tape contents, head position, and state. At each round reads off the simulated scanned symbol, consults , and rewrites the encoded configuration accordingly. halts exactly when the simulated machine enters a halting state, leaving encoded as output; if machine runs forever on , so does . Hence with matching domains.
(ii) Fix and the parameters . Given an index for an -ary function, define a new machine that, on input , first writes the fixed constants onto the tape in the first argument positions, shifts into the remaining positions, and then runs machine . Each step of this construction — prepending fixed constants, shifting input, and concatenating the transition table of — is a uniform editing operation on the Gödel code of , hence a primitive recursive function of and ; let be the resulting index. By construction on input behaves as machine on , so . The editing distinct codes never collide, so may be taken injective.
Bridge. This theorem is the foundational reason a fixed numbering of programs behaves like a programming language: the universal function is an interpreter, and is exactly partial evaluation — freezing some inputs of a program to produce, computably and uniformly, the index of the specialised program. This is exactly the mechanism by which computability theory treats indices as first-class data, and it generalises the everyday move of currying a function. The pair builds toward the recursion (fixed-point) theorem, where s-m-n supplies the self-reference, and it appears again in the halting problem 42.04.02, where lets a single machine simulate all others so that diagonalising against produces an undecidable set. The central insight is that "program" and "input" are interchangeable once both are natural numbers; putting these together, the universal machine plus s-m-n is what makes the enumeration an acceptable numbering, the structure every later construction in the chapter silently uses.
Exercises Intermediate+
Advanced results Master
The universal function and s-m-n are not features of one numbering but the defining structure of an acceptable numbering, and the theorems below show how rigid that structure is, how it produces self-reference, and where it stops — at the boundary with complexity.
Theorem 1 (acceptable numberings; Rogers' isomorphism theorem). Call a numbering of the unary partial computable functions acceptable if it admits a universal function and satisfies the s-m-n theorem. Any two acceptable numberings are computably isomorphic: there is a computable bijection with [Odifreddi Ch. II]. Thus the standard is canonical up to a computable permutation of indices; no theorem of the subject depends on the particular Gödel coding chosen, only on acceptability. The proof builds by a back-and-forth construction, at each stage extending a partial computable injection using s-m-n to translate indices each way and the padding lemma to supply fresh targets, exactly as Myhill's theorem builds a computable bijection between two one-one-equivalent sets.
Theorem 2 (the recursion / fixed-point theorem). For every total computable there is an index — a fixed point — with [Rogers Ch. 11]. The proof is a diagonal use of s-m-n: from the partial computable obtain an index , then satisfies . The theorem licenses programs that refer to their own index, the precise sense in which "a program may use its own source code" is legitimate, and it is the engine behind Kleene's normal form and many undecidability proofs, including the index-set form of Rice's theorem.
Theorem 3 (Kleene normal form). There is a primitive recursive predicate — " codes a halting computation of machine on input " — and a primitive recursive output extractor such that $$ \varphi_e(x) \simeq U_{\mathrm{out}}\bigl(\mu c,[,T(e, x, c),]\bigr). $$ Every partial computable function is therefore a single application of to a primitive recursive predicate: one unbounded search suffices [Soare Ch. 2]. The predicate is decidable because checking that is a valid, terminating computation history is a bounded verification, and this is the exact technical sense in which "running a program for a witnessed finite number of steps" is computable while "deciding whether it ever halts" is not.
Theorem 4 (the Blum axioms; computability is not complexity). A complexity measure is a family (e.g. number of steps of machine ) satisfying Blum's two axioms: is defined iff is, and the predicate is computable [Odifreddi Ch. II]. Every reasonable resource — time, space — is such a measure, and the speed-up and gap theorems show the measures behave wildly (some functions admit no best program). The point for this unit is structural: the bare notion of computability fixed by the equivalent models says nothing about cost. Resource-bounded computation — the polynomial-time class, versus , the big-O calculus — is an additional layer built on top of an already-fixed model, and it is the subject of 25.03.01, not of the computability theory developed here.
Synthesis. The acceptable numbering is the central insight that organises the entire chapter: the universal function makes one machine simulate all machines, s-m-n makes specialisation computable, and together — by Theorem 1 — they pin the numbering down to a computable permutation, so every later result is independent of the coding. This is exactly why the recursion theorem holds in every acceptable numbering and why diagonalisation against is well defined: the fixed-point construction is nothing but s-m-n applied to itself, and it generalises the self-reference of Gödel's incompleteness sentences 42.01.09 pending into a tool that works for arbitrary program transformations. The Kleene normal form is dual to the universal function — one compresses all computation into a single over a decidable predicate, the other expands an index back into a running simulation — and putting these together gives the c.e. sets as exactly the projections that seed the arithmetical hierarchy 42.04.05. The bridge from this fixed model to its undecidable consequences is the halting problem 42.04.02, where supplies the self-application that diagonalisation needs; and the bridge away from it, into resource theory, is the Blum axioms, which show that complexity is structure added on top of computability, the foundational reason the big-O world of 25.03.01 is a genuinely separate subject rather than a refinement internal to this one.
Full proof set Master
Proposition 1 (universal partial computable function exists). There is a partial computable with for all .
Proof. By Kleene normal form (Theorem 3) there is a primitive recursive predicate and a primitive recursive with . Define . The right side is built from a primitive recursive predicate by one application of followed by a primitive recursive function, hence partial recursive in the pair , hence partial computable. For each fixed the search terminates iff machine halts on , and then returns its output, so with matching domains.
Proposition 2 (s-m-n). For each there is a primitive recursive with .
Proof. Define an effective code transformation that, from and constants , produces the index of the machine which writes into the first argument slots and then runs machine . Concretely, on the Gödel code of prepend a fixed initial segment of states that print the numerals and reposition the head, then splice in 's transition table with states renamed by a fixed offset. Each operation is a primitive recursive function of since it is a bounded edit of finite code; let be the result. By construction the new machine on simulates on , giving the stated identity with matching domains. Choosing the offset to encode faithfully makes injective.
Proposition 3 (recursion theorem). Every total computable has a fixed point with .
Proof. Consider the partial computable function , well defined since is total computable, is total computable, and supplies . Let be an index with , and set . Then for all , $$ \varphi_n(y) = \varphi_{s^1_1(v,v)}(y) \simeq \varphi^{(2)}v(v, y) = \psi(v, y) \simeq \varphi{f(s^1_1(v,v))}(y) = \varphi_{f(n)}(y), $$ using s-m-n at the first and the definition of at the last step. Hence .
Proposition 4 (the halting set is c.e. but not computable — preview of 42.04.02). The set is computably enumerable and not computable.
Proof. is the domain of the partial computable function , hence c.e. If were computable, then defined by if and otherwise would be total computable, with index , so . Evaluate at : if then , impossible; if then , yet is defined, so , contradiction. Hence is not computable. The argument is the diagonalisation that 42.04.02 develops in full.
Proposition 5 (Rogers' isomorphism, statement and proof sketch). Any two acceptable numberings are related by a computable bijection with .
Proof. Acceptability gives total computable translators with and , obtained by feeding one numbering's universal function through the other's s-m-n. By the padding lemma each numbering supplies, computably and uniformly, infinitely many indices of any given function, so and can be thinned to injections with computable ranges. A back-and-forth construction interleaves and : at each stage extend the partial bijection by matching a least unmatched index on one side to a fresh padded index on the other realising the same function. The construction is computable, total (every index is eventually matched), and bijective, and it preserves the computed function at every step, so .
Connections Master
The halting problem
42.04.02is the first and decisive consequence of the model fixed here: it diagonalises against the enumeration using the universal function of this unit. The set is c.e. but undecidable (proved in skeleton as Proposition 4), and co-produced unit42.04.02develops the reduction theory — many-one and Turing reducibility, as -complete — on top of the universal machine and s-m-n established here. That unit owns the undecidability results; this unit owns the model they are stated against.Representability and Gödel's first incompleteness theorem
42.01.08pending depend on this fixed notion of computability: a consistent, computably axiomatised theory extending Robinson arithmetic represents exactly the computable relations, so the c.e./computable distinction drawn here becomes the / distinction inside arithmetic. The co-produced unit42.01.08pending uses the recursion theorem and the enumeration from this unit to build the self-referential sentence; the diagonal lemma there is the arithmetised twin of the fixed-point theorem proved here as Proposition 3.The arithmetical hierarchy
42.04.05is the upward continuation of the computable/c.e. dichotomy: the computable sets are , the c.e. sets are , and alternating the unbounded quantifier (the logical shadow of the -operator) climbs to and . That unit relativises the universal function and s-m-n of this unit to oracles, turning the bare model into the Turing-degree structure; the Kleene normal form proved here is the base case of the hierarchy's quantifier-counting.Algorithmic complexity and big-O
25.03.01sits deliberately outside this unit: it adds a Blum complexity measure (Theorem 4) on top of the already-fixed model, asking not whether a function is computable but at what resource cost, and develops , , and the polynomial hierarchy. The connection is by contrast and layering — computability theory says whether, complexity theory says how expensively — and the Blum axioms are the exact interface that keeps the two subjects separate while letting each build on the same Turing machine.
Historical & philosophical context Master
The decade 1931-1936 produced three independent analyses of effective calculability that turned out to coincide. Alonzo Church, working with Stephen Kleene, proposed in 1936 that the effectively calculable functions are precisely the -definable functions, shown equal to the general recursive functions of Jacques Herbrand and Kurt Gödel; on that basis Church exhibited an unsolvable problem of elementary number theory and the undecidability of first-order validity [Church 1936]. In the same year Alan Turing, then unaware of Church's work, analysed computation by reducing a human computer following fixed rules to the operations of an abstract machine reading and writing a tape, and proved the unsolvability of the Entscheidungsproblem; Turing's appendix established that his machine-computable functions are exactly Church's -definable ones. Emil Post independently described a closely related "worker following instructions" model the same year.
Gödel, initially reluctant to accept any single formal definition as capturing the informal notion, was persuaded by Turing's machine analysis specifically — he regarded it, unlike the equational or -calculus definitions, as a direct conceptual analysis of "mechanical procedure" rather than a technical stipulation. The convergence of -definability, general recursiveness, and Turing computability onto one class is the evidence for what Kleene later named the Church-Turing thesis: the identification is not a theorem, since one side is informal, but the robustness of the class under wholly different formalisations, together with Turing's analysis of what a rule-following agent can do, is taken as compelling. Kleene's Introduction to Metamathematics (1952) systematised the recursive-function side, the normal form theorem, and the enumeration; Hartley Rogers' 1967 text fixed the modern theory of acceptable numberings and index sets, and Manuel Blum's 1967 axioms separated the resource-free notion of computability from the complexity theory that grew from it.
Bibliography Master
@article{church1936unsolvable,
author = {Church, Alonzo},
title = {An unsolvable problem of elementary number theory},
journal = {American Journal of Mathematics},
volume = {58},
number = {2},
year = {1936},
pages = {345--363}
}
@article{turing1936computable,
author = {Turing, Alan M.},
title = {On computable numbers, with an application to the {Entscheidungsproblem}},
journal = {Proceedings of the London Mathematical Society},
volume = {s2-42},
number = {1},
year = {1937},
pages = {230--265}
}
@article{post1936finite,
author = {Post, Emil L.},
title = {Finite combinatory processes---formulation 1},
journal = {The Journal of Symbolic Logic},
volume = {1},
number = {3},
year = {1936},
pages = {103--105}
}
@article{kleene1936general,
author = {Kleene, Stephen C.},
title = {General recursive functions of natural numbers},
journal = {Mathematische Annalen},
volume = {112},
year = {1936},
pages = {727--742}
}
@article{blum1967machine,
author = {Blum, Manuel},
title = {A machine-independent theory of the complexity of recursive functions},
journal = {Journal of the ACM},
volume = {14},
number = {2},
year = {1967},
pages = {322--336}
}
@book{soare2016turing,
author = {Soare, Robert I.},
title = {Turing Computability: Theory and Applications},
series = {Theory and Applications of Computability},
publisher = {Springer},
year = {2016}
}
@book{rogers1967theory,
author = {Rogers, Hartley},
title = {Theory of Recursive Functions and Effective Computability},
publisher = {McGraw-Hill},
year = {1967}
}
@book{odifreddi1989classical,
author = {Odifreddi, Piergiorgio},
title = {Classical Recursion Theory, Volume I},
series = {Studies in Logic and the Foundations of Mathematics},
volume = {125},
publisher = {North-Holland},
year = {1989}
}