This course introduces the classical mathematical models used to analyse computation, including finite state automata, grammars, and Turing Machines. A computer scientist should be able to distinguish between what can be computed and what cannot. This distinction can only be made with a good scienti