The document provides an introduction to the theory of computation. It discusses how the theory of computation deals with how efficiently problems can be solved using algorithms on computational models. The field is divided into three main branches: automata theory and language, computability theory, and computational complexity theory. The objectives of the course are to understand computational models like finite state machines, pushdown automata, and Turing machines, and to learn about the decidability and undecidability of problems. The course will cover topics like finite automata, grammars, pushdown automata, Turing machines, unsolvable problems, and computational complexity.