This course is an introduction to one of the fundamental topics in the theory of computer science: computability theory. Computability theory is concerned with determining whether there is an algorithmic solution to a problem. The study of computability uses the Turing machine as the basic computational model. A Turing machine is a random access, read-write, finite state automaton. Although the Turing machine provides a simple computational framework, the Church-Turing thesis asserts that any problem that can be solved in any algorithmic manner can be solved by a Turing machine