The exam will be cummulative covering chapter 1-5.1 but roughly 2/3 of the exam will cover material from chapter the later half of the course.

- Deterministic and Nondeterministic Finite Automata
- Regular Languages and their closure properties
- Regular Expressions
- Pumping Lemma

- Construct DFA and NFA to recognize languages
- Convert NFA to DFA recognizing same language
- Given a DFA/NFA M find a regular expression R such that L(R)=L(M)
- Given a regular expression find an NFA M with L(R)=L(M)
- Use the pumping lemma to prove that a language is not regular

- Context free languages, contex free grammars, derivations, derivation trees
- Pumping Lemma for CFL
- Push down automata
- Equivalence of CFL and languages recognized by PDA
- Chomsky Normal Form

- Construct CFGs to describe languages
- Figure out what language is described by a CFG
- Use the pumping lemma to prove a language is not context free
- Construct PDA to recognize languages
- Given a CFG construct a PDA that recognizes the same language.
- Given a PDA find a CFG describing the same language (
*You need to know this is possible but do not need to know the details of how to do this*) - Given a CFG find an equivalent CFG in Chomsky Normal Form

- Turing machines
- configurations, computation histories
- Turing decidable languages
- Turing recognizable languages
- Turing enumerable languages

- construct Turning machines to recognize or decide languages

- L is Turing recognizable if and only if it is Turing Enumerable
- any language recognized by a mulitape Turing machine is recognized by a single tape Turing machine.
- Closure of Turing decidable languages under union, intersection, complement, concatination and *.
- Closure of Turing recognizable languages under union, intersection, concatination and *.

- universal Turing machine
- countable sets

- There are uncountably many language but only countably many Turing machines (DFA, PDA, CFG...)
- Decidability of acceptance, emptyness and equality for DFA.
- Decidability of acceptance and emptyness for CFG
- Undecidability of Halting Problem
- L is Turing decidable if and only if it is Turing recognizable and co-Turing recognizable.

- linear bounded Turing machines
- proving decidability of problem A by reducing it to a know decidable problem B
- proving undecidability of problem A by reducing a known undecidable problem B to A

- undecidability of acceptance, emptyness and equality problems for TM.
- decidability of acceptance problem for linear bounded TM,
- undecidability of emptyness or equality problem for linear bounded TM
- undecidability of ALL and equality problem for CFL
- for f(n) a nice function like a polynomial, 2n, nlog_2(n),
the class T_f={(A,x): A is a Turing machine and A accepts x in
f(|x|) steps} and S_f={(A,x): A is a Turing machine and A accepts using
at most
f(|x|) tape cells} are decidable. [
*Done in class*]