January 22: The nature of computation; basic definitions and notational conventions.
Reading: Sipser, chapter 0 (pages 1-28).
January 24: How to read and edit the course wiki.
Reading: The course wiki.
January 26: Constructing and writing up proofs.
Reading: Sipser, section 1.1 (pages 31-47).
January 29: Finite automata and regular languages.
Reading: Sipser, section 1.2, through the subsection ``Equivalence of NFAs and DFAs'' (pages 47-58).
January 31: Non-deterministic finite automata.
Reading: Sipser, section 1.2, subsection ``Closure under the regular operations'' (pages 58-63).
February 2: Closure properties of regular languages.
Reading: Sipser, section 1.3 (pages 63-76).
February 5: Regular expressions; Kleene's theorem.
Reading: Sipser, section 1.4 (pages 77-98).
February 7: The pumping lemma for regular languages; the Myhill-Nerode theorem.
Reading: Sipser, section 2.1, through the subsection ``Ambiguity'' (pages 99-106).
February 9: Context-free grammars and languages; derivation trees; ambiguity.
Reading: Sipser, section 2.1, subsection ``Chomsky normal form'' (pages 106-109).
February 12: Chomsky normal form.
Reading: Sipser, section 2.2 (pages 109-122).
February 14: Pushdown automata and context-free languages.
Reading: Sipser, section 2.3 (pages 123-134).
February 16: Bar-Hillel's pumping lemma.
February 19: Pause for breath.
Reading: Handout on recursive function theory, sections 1-5.
February 21: Primitive recursive functions; composition and recursive definition.
Reading: Handout on recursive function theory, section 6.
February 23: Bounded iteration; bounded quantifiers; bounded minimization.
Reading: Handout on recursive function theory, section 7.
February 26: Pairs, sequences, and strings.
Reading: Handout on recursive function theory, sections 8 and 9.
February 28: Course-of-values recursion.
Reading: Handout on recursive function theory, sections 10 and 11.
March 2: Partial recursive functions; an encoding for functions.
Reading: Handout on recursive function theory, sections 12 and 13.
March 5: An encoding for computations; the universality theorem.
Reading: Handout on recursive function theory, section 14.
March 7: The halting predicate: a function that is not partial recursive.
Reading: Sipser, section 3.1 (pages 137-147).
March 9: Turing machines and their construction.
Reading: Sipser, sections 3.2 and 3.3 (pages 148-163)
March 12: Non-deterministic Turing machines; extensions and optional attachments.
Reading: Handout on semi-Thue processes.
March 14: Semi-Thue processes; the Post-Markov theorem.
Reading: Sipser, section 4.1 (pages 165-172).
March 16: Decidable and Turing-recognizable languages; closure properties of recursively enumerable languages.
Reading: Sipser, section 4.2 (pages 173-186).
April 2: Undecidable problems.
Reading: Sipser, section 5.1 (pages 187-198).
April 4: Reductions and reducibility; Rice's theorem.
Reading: Sipser, section 5.2 (pages 199-205).
April 6: Post correspondence problems.
Reading: Sipser, section 5.3 (pages 206-215).
April 9: Mapping reducibility.
Reading: Handout on recursive function theory, section 15.
April 11: Recursively enumerable and recursive sets; the enumeration theorem.
Reading: Handout on recursive function theory, section 16.
April 13: The parameter theorem.
Reading: Handout on recursive function theory, section 17.
April 16: Encodings for automata.
Reading: Sipser, section 6.1 (pages 217-224).
April 18: The recursion theorem.
Reading: Sipser, sections 6.2 and 6.3 (pages 224-233).
April 20: The undecidability of arithmetic.
Reading: Sipser, section 6.4 (pages 233-244).
April 23: Kolmogorov-Chaitin complexity; randomness.
April 25: Incompressibility.
Reading: Sipser, sections 7.1 and 7.2 (pages 247-263).
April 27: Time-complexity classes; variation under computational models.
Reading: Sipser, section 7.3 (pages 264-270) and section 7.4, through subsection ``Definition of NP-completeness'' (pages 271-276).
April 30: The class NP; P and NP; polynomial-time reducibility.
Reading: Sipser, section 7.4, subsection ``The Cook-Levin theorem'' (pages 276-283).
May 2: NP-completeness; Cook's theorem.
Reading: Sipser, section 7.5 (pages 283-301).
May 4: Other NP-complete problems.
Reading: Sipser, sections 8.1 and 8.2 (pages 303-309).
May 7: Space-complexity classes; Savitch's theorem.
Reading: Sipser, section 8.3 (pages 309-320).
May 9: PSPACE-completeness.
Reading: Sipser, sections 8.4 and 8.5 (pages 320-333).
May 11: The classes L and NL; student evaluations.
May 15, 9 a.m. to noon: Overview of the course; final revision of the course wiki.