In this course we will study mathematical models of computation. The developed theory will provide answers to many fundamental questions in computer science, such as . . . How much additional "computing power" (if any) is afforded by adding a stack to a finite-state machine? How much additional computing power is obtained by replacing the stack with a RAM? Are there computational problems that cannot be solved by any program running on any machine? This course will develop answers to these and other questions.
Many concepts from the theory of computation are 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. Thus, although our primary focus will be of a theoretical nature, it is important to remember that the ideas developed have practical impact.
1. Design finite automata and regular expressions for regular languages.
2. Convert between finite automata and regular expressions for regular languages.
3. Determine closure properties of regular languages.
4. Apply the pumping lemma for regular languages to determine if a language is regular.
5. Design grammars and push-down automata for context-free languages.
6. Convert between grammars and push-down automata for context-free languages.
7. Demonstrate that a grammar is ambiguous.
8. Design Turing machines for simple languages and functions.
9. Design problem reductions to determine the undecidability of languages.
There will be three exams:
| Exam I: | October 27 in class |
| Exam II: | November 26 in class |
| Final exam: | December 8, 9:30 |
Working through homework problems on your own is critical to doing well on quizzes and tests. Homework will be assigned and collected on a weekly basis. The homework assignments will NOT be graded based on correctness. Rather the TA will record the number of problems that were "completed" (either correctly or incorrectly). Completing a problems requires demonstrating a non-trivial attempt at solving the problem. The judgment of whether a problem was "completed" is left to the TA.
If at the end of the course a student has not completed at least 70% of the homework problems then the final letter grade will be decreased by one (e.g. A to B, B+ to C+, etc.).
The solutions to the homework will be made available each week. It is the student's responsibility to check their solutions for correctness and to resolve any questions with the instructor or TA.
Any requests for regrading of exams or quizes must be given to the TA (for quizes) or instructor (for exams) in writing accompanied by the exam/quiz. Such requests must be made within one week after the exam/quiz has been returned. Only submit requests when you observe what appears to be a clear error in the grading. Do not abuse this avenue.
All exams are closed book and closed notes. Anyone caught cheating on an exam or quiz will automatically fail the course.
Collaboration on homework problems is permitted; copying of solutions is not. The work you hand in should be your own. While some students find studying together to be 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. Generating original solutions, as will be done on an exam, is much different and more difficult than verifying solutions. The bottom line is that if you are copying homework then you will likely perform poorly on tests and quizzes.