Automata and Computability
Abstract
These are my lecture notes from C8381/481: Automata and Computability
Theory, a one-semester senior-level course I have taught at Cornell University
for many years. I took this course myself in the fall of 1974 as a
first-year Ph.D. student at Cornell from Juris Hartmanis and have been in
love with the subject ever since.
The course is required for computer science majors at Cornell. It exists
in two forms: C8481, an honors version; and C8381, a somewhat gentlerpaced
version. The syllabus is roughly the same, but C8481 goes deeper
into the subject, covers more material, and is taught at a more abstract
level. Students are encouraged to start off in one or the other, then switch
within the first few weeks if they find the other version more suitable to
their level of mathematical skill.
The purpose of the course is twofold: to introduce computer science students
to the rich heritage of models and abstractions that have arisen over the
years; and to develop the capacity to form abstractions of their own and
reason in terms of them.
The course is quite mathematical in flavor, and a certain degree of previous
mathematical experience is essential for survival. 8tudents should
already be conversant with elementary discrete mathematics, including the
notions of set, function, relation, product, partial order, equivalence relation,
graph, and tree. They should have a repertoire of basic proof techniques
at their disposal, including a thorough understanding of the principle
of mathematical induction.