Models of computation
Turing machines, register machines, partial recursive functions and the λ-calculus, and the equivalence of these models.
The classical formalizations of the notion of computable function. The course defines Turing machines, unlimited register machines, LOOP and WHILE programs, primitive and partial recursive functions and the λ-calculus, develops each model far enough to program non-trivial functions in it, and proves that all of them compute the same partial functions. It closes with Kleene's normal form theorem and a discussion of the Church–Turing thesis. Primitive recursive coding of finite sequences, introduced along the way, is used throughout the rest of the curriculum.
Contents
- 1
Algorithms and partial functions
Historical motivation for a formal notion of computability, partial functions and their notation, and the coding of finite objects by integers.
- 1.1 The Entscheidungsproblem
- 1.2 Features of an algorithm
- 1.3 Partial functions
- 1.4 Coding finite objects by integers
- 1.5 Exercises
- 1.6 Notes and references
- 2
Turing machines
Formal definition of Turing machines, configurations and computations, input and output conventions, and two machines verified in detail.
- 2.1 Definition
- 2.2 Computing functions
- 2.3 First example: the successor function
- 2.4 Second example: addition
- 2.5 Exercises
- 2.6 Notes and references
- 3
Programming Turing machines
Auxiliary symbols, sequential composition of machines, translation invariance, multi-tape machines and their simulation by single-tape machines.
- 3.1 Auxiliary symbols: a doubling machine
- 3.2 Translation invariance
- 3.3 Sequential composition
- 3.4 Multi-tape machines
- 3.5 Other variants
- 3.6 Exercises
- 3.7 Notes and references
- 4
Register machines
Unlimited register machines (URM), their operational semantics, examples, concatenation of programs, and closure of URM-computable functions under composition.
- 4.1 Definition
- 4.2 Examples
- 4.3 Combining programs
- 4.4 Closure under composition
- 4.5 Goto programs and assembly languages
- 4.6 Exercises
- 4.7 Notes and references
- 5
Primitive recursive functions
Definition of the primitive recursive functions and predicates, and their closure under definition by cases, bounded sums and products, bounded quantification and bounded minimization.
- 5.1 Definition
- 5.2 First closure properties
- 5.3 Predicates
- 5.4 Bounded sums, products and quantifiers
- 5.5 Bounded minimization
- 5.6 Arithmetic functions and primes
- 5.7 Exercises
- 5.8 Notes and references
- 6
Coding finite sequences
Primitive recursive coding of finite sequences of integers, operations on codes, course-of-values recursion, and Gödel's β-function.
- 6.1 Prime power coding
- 6.2 Course-of-values recursion
- 6.3 Gödel's β-function
- 6.4 Exercises
- 6.5 Notes and references
- 7
The Ackermann function
A total computable function which is not primitive recursive. Monotonicity properties, the majorization theorem, and a diagonal argument.
- 7.1 Definition and computability
- 7.2 Monotonicity
- 7.3 Majorization
- 7.4 A diagonal argument
- 7.5 Exercises
- 7.6 Notes and references
- 8
Minimization and partial recursive functions
The minimization operator, the partial recursive functions, recursive functions and predicates, and the statement of Kleene's normal form theorem.
- 8.1 The minimization operator
- 8.2 Partial recursive functions
- 8.3 Examples
- 8.4 Regular minimization
- 8.5 Kleene's normal form
- 8.6 Exercises
- 8.7 Notes and references
- 9
LOOP and WHILE programs
Structured programs with bounded and unbounded loops. The LOOP-computable functions are the primitive recursive functions, and the WHILE-computable functions are the partial recursive functions.
- 9.1 Syntax and semantics
- 9.2 Programming in LOOP
- 9.3 LOOP programs compute the primitive recursive functions
- 9.4 WHILE programs compute the partial recursive functions
- 9.5 WHILE programs and register machines
- 9.6 Exercises
- 9.7 Notes and references
- 10
The λ-calculus
λ-terms, free variables and substitution, α-equivalence, β-reduction, normal forms, the Church–Rosser theorem, and reduction strategies.
- 10.1 Terms
- 10.2 Free variables and substitution
- 10.3 β-reduction
- 10.4 Confluence
- 10.5 Reduction strategies
- 10.6 Exercises
- 10.7 Notes and references
- 11
Computing with λ-terms
Church numerals, arithmetic, booleans and pairs in the pure λ-calculus, Kleene's predecessor, fixed-point combinators, and the λ-definability of the partial recursive functions.
- 11.1 Church numerals and arithmetic
- 11.2 Booleans, conditionals and pairs
- 11.3 The predecessor
- 11.4 Fixed-point combinators
- 11.5 λ-definability of the partial recursive functions
- 11.6 Exercises
- 11.7 Notes and references
- 12
Equivalence of the models
Arithmetization of Turing machines, proof of Kleene's normal form theorem, simulation of register machines by Turing machines, and the universal partial recursive function.
- 12.1 Arithmetization of Turing machines
- 12.2 Kleene's normal form theorem
- 12.3 From register machines to Turing machines
- 12.4 Proof of the equivalence
- 12.5 The universal function
- 12.6 Exercises
- 12.7 Notes and references
- 13
The Church–Turing thesis
Formulation and status of the Church–Turing thesis, Turing's analysis of human computation, Gandy's principles, physical and complexity-theoretic variants, and the use of the thesis in proofs.
- 13.1 Status of the thesis
- 13.2 Turing's analysis
- 13.3 Evidence
- 13.4 Variants
- 13.5 Using the thesis in proofs
- 13.6 Notes and references