Lecture topics and relevant textbook references, as well as any additional
in-class handouts, will be posted here. You are encouraged to take some time before each lecture to
look at the textbook section that will be covered; this will make your class time a lot more
productive.
### Part 1 - Automata and regular languages

May 25 - Course introduction; informal description of finite automata (Lecture 1)
May 26 - Key definitions and concepts; formal definition of a DFA (Lectures 2 and 3)
May 27 - The product construction; closure properties of regular languages (Lecture 4)
May 28 - Introduction to nondeterminism (Lecture 5, and this additional handout
about computation trees for NFAs)
May 31 - **No class - Memorial Day!**
June 1 - The subset construction for converting an NFA to a DFA (Lecture 6)
June 2 - Epsilon transitions; more closure properties of regular languages; intro to regular expressions (Lectures 6 and 7)
June 3 - Converting a regular expression to a finite automaton; simplifying regular expressions (Lectures 8 and 9)
June 4 - Converting a finite automaton to a regular expression; limitations of finite automata (Lectures 9 and 11)
June 7 - The pumping lemma and nonregularity (Lectures 11 and 12)
June 8 - DFA state minimization (Lectures 13 and 14)
June 9 - Final session on automata; decision problems (additional handout), other odds and ends.
June 10 - **Prelim 1**, covering all the material on finite automata and regular languages up to and including June 8th's class.
### Part 2 - Context-free languages

June 11 - Introduction to Context-Free Grammars and Pushdown Automata (Lecture 19)
June 14 - Brief discussion of ambiguity in grammars (Lecture 26); balanced parentheses (Lecture 20)
June 15 - Chomsky and Greibach normal forms for CFGs; properties of parse trees for CNF grammars (Lectures 21 and 22)
June 16 - The pumping lemma for CFLs (Lectures 22)
June 17 - NPDAs; converting a CFG to a NPDA (Lectures 23 and 24)
June 18 - Converting a NPDA to a CFG (Lectures 24 and 25); a few words about DPDAs and DCFLs (Supplementary Lecture F)
June 21 - Closure properties for CFLs; CKY algorithm (Lecture 27)
June 22 - Practical issues arising when CFLs are used in compilers
(Mostly this additional handout and also Lecture 26)
June 23 - **Prelim 2**, covering all the material on context-free languages up to and including June 21st's class.
### Part 3 - Effective computability and Turing Machines

June 24 - Introduction to Turing Machines; the Church-Turing thesis (Lecture 28; also see the **Resources** section
for links relating to some of the topics discussed)
June 25 - More examples of TMs; Recursive and r.e. languages (Lecture 29)
June 28 - Alternative models of TMs (Lecture 30 and additional handout on nondeterministic TMs);
Universal TMs and diagonalization (Lecture 31)
June 29 - Undecidability of the Halting Problem (Lecture 31); Other decidable and undecidable problems (Lecture 32)
June 30 - More undecidable problems; Reductions (Lecture 33)
July 1 - Rice's Theorem (Lecture 34); The example we did was Misc. Exercise 113, p. 344 (solution p. 370)
July 2 - Undecidable problems about CFLs (Lecture 35)
July 5 - **No class** in the morning. Optional review session in the afternoon, 2 pm Hollister 362.
July 6 - **Final Exam**, 2-4:30 pm, Hollister 362.

The textbook is divided into sections called Lectures; the references given below are to these sections.