CSCI (Math) 361
The phrase theory of computation refers to the study of the mathematical foundations of computation: what is an appropriate mathematical model of a computer, what types of computations are possible in the model, what types are not, the inherent complexity of certain computations, and so forth. Many concepts from the theory of computation have become of fundamental importance in other areas of computer science, such as computational linguistics, compiler design, hardware design, object-oriented design, and even the syntax of the UNIX grep and awk commands.
In this course we will investigate the interaction between various models of computation. Along the way the intimate connection between computation and language recognition will be developed. We will study several classes of abstract machine including finite automata, push-down automata, random access machines, and Turing machines along with several classes of languages such as regular and context-free languages. In addition we will examine some of those problems, such as the Halting Problem, which are not amenable to computer solution.
We will take a somewhat unusual approach to this course this semester. Rather than start with very simple machines and build our way up to Turing machines, we will begin with the fundamental notion of computability as seen from the point of what can be programmed in a very simple imperative programming language. I believe that this point of view will allow us to approach the issue of undecidability from a more intuitive point of view. Moreover, the notion of universal computer can now be approached more simply through the idea of an interpreter.
Exams: There will be two midterms and a final. All will be take-home exams. The midterms will be distributed in class on Oct. 16 and November 13. Details on the midterms will be available the week before the exam.
Grades: Each midterm will be worth approximately 20% of your grade, with the final worth 30%. Homework will make up the other 30%. In all cases, however, the judgment of the instructor determines the final grade. In particular, class participation can affect a student's final grade.
Homework: The best way to learn the material in this course is by doing; consequently, most of the work for this course will consist of working through the problems assigned for homework. Problems will be assigned and collected daily. You should do all of the problems, but only a few will be designated as problems to hand in.
Homework must be turned in at the beginning of class on the day it is due; late homework will not be accepted. However, the two lowest homework grades of each student will be dropped when computing the final grade.
Exams: You may refer to your text and to your own class notes while taking these exams, and you may talk to me. No other sources of information are permitted.
Homework: Collaboration on problems is permitted; copying of solutions is a violation of the honor code. The work you hand in should be yours. While some students find studying together quite beneficial and enjoyable, I strongly encourage you to attempt to solve homework problems on your own first as this is the only way to ensure that you have mastered the material. Students who rely too heavily on collaboration on homework may find the exams to be much more difficult than expected.
If you collaborate with, obtain help from, or give help to anyone, you must indicate the extent of the collaboration for every problem that you turn in. If you do not indicate collaboration on a problem, then I will interpret this as your indication that you did not give or receive any help on the problem. Uncited collaboration will be considered an honor code violation and evidence to that effect will be turned over immediately to the honor code committee. I take the honor code very seriously. I expect you to as well!