The theoretical underpinnings of computing form a standard part of almost every computer science curriculum. But the classic treatment of this material isolates it from the myriad ways in which the theory influences the design of modern hardware and software systems. This book was my attempt to change that. It was originally published as:

Automata, Computability and Complexity:
Theory and Applications

ISBN 978-0132288064
Prentice-Hall
September, 2007

As of 2019, it is no longer in print. But it is now available as a pdf here.

If you you have any questions about how to use the book in a class, email me for more information.

A package of supplementary materials has been designed to make it easy to teach from this book. These materials include:

  • A complete set of Powerpoint slides
  • A Problems and Solutions document that contains solutions to most of the problems in the book, as well as additional problems (suitable for homework assignments or exams), most with solutions.
  • This website, which makes it easy for students to follow up on topics that are mentioned in the book.

If you would like copies of these materials, email me and I will make sure you get the materials.

The main part of the book is organized in the standard way: it begins with finite state machines and regular languages. Next it covers context-free languages and it contains an optional chapter on context-free parsing techniques. Then it introduces Turing machines and the question of undecidability. Finally, it considers the problem of practical computability by introducing time and space complexity classes. For more detail, see the Table of Contents.

Throughout the book there are links to applications of the key concepts. A substantial appendix describes many of those applications and pointers to this website describe others. The following table summarizes some of the applications that are mentioned: View Table.