This course is an introduction to the theory of computing. We will look at

- formal languages and automata (Are there ways of formulating the notion of computation formally? How can we compare different models of computation?)
- computability (Are there problems that cannot be solved algorithmically? What do they look like? How can we find out whether a problem can or cannot be solved?)
- complexity (How hard is it to solve a given problem? I.e. how long does it take, how much memory is needed? Can we group problems according to how hard they are?)