The tests are closed book, but you may bring one single sided 1/2 page (8.5x11 cut in half). The spirit of this is a note page to put on equations or other items which are harder to memorize. It is not meant for trying to cram all the slides, book chapters, or knowledge from the course on a single sheet. You should know most of that without needing a sheet. Your note page will be handed in with the test. You should be prepared to answer questions from the following topic lists. You may also bring a **non-programmable** calculator to the test.

- Notation and definitions (e.g., sets, tuples, languages, etc.)
- Proofs of induction, contradiction (general idea/approach)
- Chomsky Hierarchy (up to and including boundary on CFLs)
- Regular languages: definition, characteristics (no memory), how recognized/generated
- Finite Automata (DFAs), formal definition, state diagram representation, building one to recognize a language
- Nondeterminism (NFAs), formal definition, state diagram representation, building one to recognize a language
- Equivalence of DFAs and NFAs
- Prove an "if and only if" statement
- Prove a DFA has an equivalent NFA (trivial)
- Prove an NFA has an equivalent DFA (through simulation of configurations)
- Regular expressions (concatenation, union/alternation, Kleene closure, order of operations)
- Equivalence of DFAs and Regexes (Kleene's Theorem)
- Prove a Regex has an equivalent NFA (Thomson's Construction)
- Prove an NFA has an equivalent Regex (via GNFA)
- Prove non-regularity of a language using
**Pumping Lemma** - Prove class of regular languages are also context-free (and significance) (trivial)
- Context-free languages (CFL): definition, characteristics (single stack memory), how recognized/generated
- Context-free grammars (CFG), building one to recognize a language, derivations, parse trees
- Ambiguity
- Chomsky Normal Form (CNF) (what is it, convert a CFG to CNF)
- Pushdown Automata (PDA), formal definition, state diagram representation, building one to generate a language
- Equivalence of CFGs and PDAs
- Prove a CFG has an equivalent PDA
*Don't need to be able to prove a PDA has an equivalent CFG*- Prove a language is not context-free using
**Pumping Lemma for context-free languages**

- Turing Machines (formal definition, graphical notation, configuration definition)
- Formal description, implementation description, high-level description (p. 185)
- Non-deterministic and Multitape Turing Machines, proving equivalence with TMs
- Problem/language description using set notation
- How to prove a language is decidable (present a TM that decides it)
- Theorem 4.9 and proof (Every CFL is decidable)
- Figure 4.10 (relationship among classes of langauges)
- Correspondence, one-to-one, onto, countable
- Undecidability, proving undecidability
- Diagonalization (to prove A
_{TM}is undecidable) - Reductions from A
_{TM}or other undecidable problem - Theorem 4.22
- Reducibility vs Mapping reducibility
- Theorems 5.22, 5.23, 5.28, 5.29
- Big-O analysis
- The class P definition, proving belonging in class P
- The class NP definitions (there are 2), proving belonging in class NP
- Verifier, certificate
- NTM
- Relationship between P and NP
- NP-complete (definition, how to prove)
- Cook-Levin Theorem (high-level), computation histories
- Polynomial-time mapping reduction from NP-complete problem
- Gadgets, reduction function, two-way proof
- Familiarity with all presented NP-complete problems and their proofs of NP-completeness
- CLIQUE
- VERTEX-COVER
- SAT, 3SAT, variables, literals, clauses
- HAMPATH, UHAMPATH
- SUBSET-SUM
- Theorems 7.35, 7.36
- Problems 7.18, 7.21 (with footnote from schedul) from hwk