This course is about the concept of "computation": how it can be modelled, and what its limits are. To avoid unnecessary complexity one often chooses to study computation via simplified, but powerful, models. These models can for instance be simple programming languages (like the -calculus), or idealised computers (like Turing machines). In the course several such models will be studied, both "imperative" and "functional".
One or more models will be used to explore the limits of computation: problems that cannot be solved (within the confines of a given model), and programs that can run arbitrary programs (modelled in a certain way).
The course also includes a discussion of the Church-Turing thesis, a hypothesis which states, roughly, that a function is computable in a certain intuitive sense only if it can be defined within one of several models of computation.