This is an introductory course on computability theory, the branch of mathematical logic concerned with classifying sets of natural numbers by how much extra information is needed to describe them by computer programs. The computational strength of a set is intimately tied to the complexity of its definition, thus, more generally, computability theory is the study of definable sets of natural numbers. Any countable mathematical object, such as a countable ring or a countable graph, can be coded by a set of natural numbers. A continuous function on the reals, for example, can be coded by a set of natural numbers too. Thus the techniques and results of computability theory can be applied to describe the complexities of all manner of mathematical objects.

The computational strength of a set is measured by its

*Turing degree*. The collection of all Turing degrees has a rich structure and is the central object of study in computability theory. This course introduces the basic theory of the Turing degrees. Time permitting, the course also surveys contemporary research directions that connect to other areas of mathematics, such as reverse mathematics and algorithmic randomness.

Spring 2021 (Monday, January 25 to Friday, March 19; Monday, April 26 to Friday, May 7)

The following prerequisites are preferable but not essential.

- A basic knowledge of first-order logic.
- Familiarity with a formal model of computation, such as Turing machines, register machines, while programs, or similar.
- A basic knowledge of undecidability, such as many-one reducibility and the undecidability of the halting problem.

Core topics:

- Review of computable functions, computably enumerable sets, and undecidability.
- Turing reducibility.
- The arithmetical hierarchy.
- Basic structure of the Turing degrees.
- Basic structure of the computably enumerable Turing degrees.
- Trees and diagonally non-computable functions.

Additional topics and applications:

- Reverse mathematics.
- Algorithmic randomness.