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.
The textbook is divided into sections called Lectures; the references given below are to these sections. This schedule is tentative;
you should consider all topics listed for future dates as guidelines rather than guarantees of what will be covered.
Part 1 - Automata and regular languages
- May 24 - Course introduction; informal description of finite automata (Lecture 1)
- May 25 - Key definitions and concepts; formal definition of a DFA (Lectures 2 and 3)
- May 26 - Proofs of regularity; the product construction; closure properties of regular languages (Lecture 4)
- May 27 - Nondeterminism; epsilon-transitions (Lectures 5 and 6, and additional handout about computation trees for NFAs)
- May 30 - No class
- May 31 - Formal proof for the subset construction; more closure properties; harder proofs of regularity (Lecture 6 and Ex. 26 p. 322, hint p. 352, solution p. 358)
- June 1 - Pattern matching and regular expressions; converting a regular expression to a finite automaton; inductively defined sets and proofs by structural induction (Lectures 7 and 8)
- June 2 - Simplifying regular expressions; converting a finite automaton to a regular expression (Lecture 9)
- June 3 - Limitations of finite automata; the pumping lemma (Lectures 11 and 12)
- June 6 - DFA state minimization (Lectures 13 and 14)
- June 7 - Automata wrap-up: decision problems, real-world regular expressions (additional handouts on decision
problems and UNIX regular expressions)
Part 2 - Context-free languages
- June 8 - Introduction to Context-Free Grammars and Pushdown Automata (Lecture 19), Java grammar,
introduction to JFLAP
- June 9 - Prelim 1, covering all the material on automata up to and including the 6/7 class
- June 10 - Brief intro to parse trees (Lecture 22); brief discussion of ambiguity in grammars (Lecture 26); formal proof for balanced parentheses (Lecture 20)
- June 13 - Chomsky and Greibach normal forms for CFGs (Lecture 21)
- June 14 - NPDAs; converting a CFG to a NPDA (Lectures 23, Supplementary E, 24). The JFLAP files from class are here.
- June 15 - Converting a NPDA to a CFG (Lectures 24 and 25); a few words about DPDAs and DCFLs (Supplementary Lecture F)
- June 16 - The pumping lemma for CFLs; closure properties for CFLs (Lectures 22 and 27)
- June 17 - CKY algorithm (Lecture 27); strategies for removing ambiguity from grammars (additional handout).
- June 20 - Top-down and bottom-up parsing (slides from class)
Part 3 - Effective computability and Turing Machines
- June 21 - Introduction to Turing Machines; the Church-Turing thesis (Lecture 28, see also the Resources section of this site for links. JFLAP file from class implementing the TM
described in Lecture 28. Remember you must feed it input including a left angle bracket as endmarker)
- June 22 - Prelim 2, covering all the material on CFLs up to and including the 6/20 class
- June 23 - More examples and models of TMs; Recursive and r.e. languages (Lectures 29 and 30, additional handout on nondeterministic TMs)
- June 24 - Universal TMs and diagonalization; undecidability of the Halting Problem (Lecture 31)
- June 27 - Other decidable and undecidable problems (Lecture 32)
- June 28 - Reductions; FIN is neither r.e. nor co-r.e. (Lecture 33)
- June 29 - Rice's Theorem (Lecture 34 and Misc. Exercise 113), "real-world" undecidable problems such as alias analysis (Undecidability of static analysis paper by W. Landi)
- June 30 - Reduction technique involving valid computation histories; undecidable problems about CFLs (Lecture 35)
- July 1 - Assorted fun topics in computability and complexity (slides from class; see also Resources section)
- July 4 - No class
- July 5 - Exam review
- July 6 - Final Exam 3:00-5:30 pm, Hollister 362