Computation theory is a discipline that strives to use mathematical tools and concepts in order to expose the nature of the activity that we call “computation” and to explain a broad range of observed computational phenomena. Why is it harder to perform some computations than others? Are the differences in difficulty that we observe inherent, or are they artifacts of the way we try to perform the computations? Even more basically: how does one reason about such questions?
This book strives to endow upper-level undergraduate students and lower-level graduate students with the conceptual and manipulative tools necessary to make Computation theory part of their professional lives. The author tries to achieve this goal via three stratagems that set this book apart from most other texts on the subject.
(1) The author develops the necessary mathematical concepts and tools from their simplest instances, so that the student has the opportunity to gain operational control over the necessary mathematics.
(2) He organizes the development of the theory around the three “pillars” that give the book its name, so that the student sees computational topics that have the same intellectual origins developed in physical proximity to one another.
(3) He strives to illustrate the “big ideas” that computation theory is built upon with applications of these ideas within “practical” domains that the students have seen elsewhere in their courses, in mathematics, in computer science, and in computer engineering.