The aim of this textbook is to provide undergraduate students with an
introduction to the basic theoretical models of computability, and to
develop some of the model's rich and varied structure. Students who
already have some experience with elementary discrete mathematics will
find this a well-paced first course, and a number of supplementary
chapters introduce more advanced concepts. The first part of the book is
devoted to finite automata and their properties. Then, material on
pushdown automata provides a broader class of models and enables the
analysis of context-free languages. In the remaining chapters, Turing
machines are introduced and the book culminates in discussions of
effective computability, decidability, and Gödel's incompleteness
theorems. Plenty of exercises are provided, ranging from the easy to the
challenging. As a result, this text will make an ideal first course for
students of computer science.