This course covers foundational results in theoretical computer science. Approximately the first half of the course will focus on finite automata and computability theory, with the remainder focused on complexity theory.
The required textbook for this course is Introduction to the Theory of Computation, 2nd Edition, Michael Sipser, 2006. Most of the topics covered in this course, and many of the problem set problems, will be drawn from this text.
Grades in the course will be based on six biweekly problem sets, two exams, and participation. The participation grade will be based on your attendance and involvement in class as well as the quality of your work when it is your turn to help grade problem sets. If you want full participation points, come to class, pay attention, ask good questions, and be thoughtful with your grading.
In determining your final grade, here is the relative weight for these factors:
Problem sets  40% 
Midterm  25% 
Final  25% 
Participation  10% 
A few tips for doing well in this course without excessive amounts of stress:
Office hours for this course will be held from 2:00 to 3:00 pm on Tuesdays, in my office. If we get backed up, office hours can continue as late as needed.
To ask me small logistical questions, I prefer that you grab my attention immediately before or after class. For substantive content questions, I prefer that you bring them to office hours. Use email only when the above two options are not applicable.
The following rules will help keep the problem set submission and grading process running smoothly:
There will be two exams in the course: a midterm and a final. The midterm covers automata and computability theory and the final covers complexity theory (i.e., it is not cumulative).
At least one question from the problem sets will be included on each exam. This question will be too difficult to figure out from scratch during the exam, so students should aim to understand their answers to every problem set problem they submit.
Material Covered by Midterm
The midterm covers lectures 1 to 10 and problem sets 1 and 2. From the lectures, you are expected to know all important definitions, to understand the proofs for any result that explicitly compares the strength of different language classes/computational models, and be comfortable with all important techniques (e.g., the pumping lemmas, mapping reducibility, etc.). You are not, however, expected to know all the examples covered in lecture. For the problem sets, you should understand and be able to provide an answer for every assigned problem.
I take academic integrity seriously. Your work on your problem sets should be the work solely of you and your collaborators. No other sources are allowed. That is, do not look up answers online, in other textbooks, etc. You must writeup your problem set work in your own words and list every collaborator.
Needless to say, during exams no outside resources may be consulted.
Every student in the class will take turns grading problem sets. When it is your turn, we will meet, along with the other grader(s) for the problem set, at 1:00 pm on the Tuesday after the problem set is due, to review the problems and construct a grading rubric. You will then have a set period of time to grade your assigned problems according to the rubric and submit the grades.
My goal is for every student to only grade one problem set and have at least one other student helping with the problem set. The exact schedule will depend on enrollment.
We will discuss the details of this process as we get closer to the first problem set being due.
The PhD qualifying exam includes a segment on theory of computation. It is based on the material covered in COSC 545 (which is summarized in the schedule below along with the corresponding chapters of the Sipser textbook). To help your review, here is a summary of what you are expected to know from this material for the qualifying exam:
Below is the tentative schedule for the course. Pending topics will be added and existing topics modified as the course progresses. Problem sets will be posted on the schedule as they become available. The readings column lists the chapters from the Sipser textbook that cover the corresponding lecture's material.
Class Number  Date  Description  Readings 
Part 1: Automata Theory  
1  1/11  Intro; finite automata  1.1 
2  1/18  Nondeterminism; regular languages;
 1.2, 1.3 
3  1/23  Pumping lemma for regular languages; contextfree grammars; Chomsky normal form  1.4, 2.1 
4  1/25  Pushdown automata; pumping lemma for contextfree languages  2.2, 2.3 
Part 2: Computability Theory  
5  1/30  Turing machines  3.1 
6  2/1  Decidable languages; file lookup machine;
 4.1 
7  2/6  Undecidable and Unrecognizable languages  4.2 
8  2/8  Reducibility  5.1, 5.3, 6.3 
9  2/13  Linearbounded automata; PCP  5.1, 5.2 
10  2/15  Advanced topics in computability theory: recursion theorem; midterm review; pset 2 due (Graders: Brad and Chris)  6.1 
11  2/22  Midterm
 
12  2/27  Advanced topics in computability theory: decidability of logical theories, Godel's incompleteness theorem, and the computational complexity of information  6.2, 6.4 
Part 3: Complexity Theory  
13  2/29  Time complexity; TIME and NTIME complexity classes  7.1 
14  3/12  The classes P and NP  7.2, 7.3 
15  3/14  NPcompleteness; the CookLevin theorem;
 7.4 
16  3/19  More NPcomplete problems  7.4, 7.5 
17  3/21  Space Complexity; SPACE and NSPACE complexity classes  8.0 
18  3/26  Savitch's Theorem; PSPACE and PSPACECompleteness  8.1, 8.2, 8.3 
19  3/28  Games and Generalized Geography;

8.3 
20  4/2  L and NL, NLCompleteness, and NL = coNL  8.4, 8.5, 8.6 
21  4/4  Hierarchy Theorems  9.0, 9.1 
22  4/11  Intractable Problems;
 9.0, 9.2 
23  4/16  No Class.  
24  4/18  Approximation Algorithms  10.1 
25  4/23  Probabilistic Computation, BPP  10.2 
26  4/25  Open (Lecture Overflow and/or Advanced Topic) pset 6 due (Graders: Me)  
27  4/30  Review for final examination  
5/10  Final Exam; 4:00  6:00pm; ICC 213 