This is a list of specific tasks that students might be asked to perform on the final exam -- it is posted here as a study guide.

- First Third of Course, Chapters 1, 2, 3 (25%):
- Translate statements to and from propositional logic.
- Prove statements of propositional logic using truth tables and/or propositional proof rules.
- Translate statements to and from predicate logic.
- Prove statements of predicate logic using the four quantifier proof rules.
- Know and work with the definitions of types of relations (partial orders and equivalence relations) and properties of functions (one-to-one, onto, bijections).
- Be familiar with primality and modular arithmetic.
- Know the statements (and something of the proofs) of the Inverse Theorem, Fundamental Theorem of Arithmetic, and Chinese Remainder Theorem.

- Middle Third of Course, Chapters 4 and 9 (25%):
- Prove statements about naturals by ordinary induction.
- Prove statements about naturals by strong induction.
- Prove statements about other data types (strings, trees, etc.) by induction on the definition of the type.
- Work with a completely new inductive definition.
- Prove correctness and termination of a recursive algorithm by induction.
- Write a recursive algorithm to operate on an object of an inductively defined class, such as boolean expression trees.
- Describe the behavior of general search, depth-first
search, breadth-first search, uniform-cost search, or
A
^{*}search on an example. - Make simple arguments about a two-player game using a game tree.

- Last Third of Course, Chapters 5, 14, and 15 (50%):
- Work with formal languages defined by regular expressions.
- Prove a property of regular expressions by induction on the definition.
- Determine the behavior of a DFA on a string or set of strings.
- Use the Myhill-Nerode Theorem to argue about whether a given language has a DFA, or how many states its minimal DFA has.
- Find the minimal DFA equivalent to a given DFA.
- Understand the language of a given ordinary NFA or λ-NFA.
- Convert a λ-NFA to an equivalent ordinary NFA.
- Convert an ordinary NFA to an equivalent DFA.
- Convert a regular expression to an equivalent λ-NFA.
- Convert a DFA to an equivalent regular expression, by working through r.e.-NFA's (called "GNFA's" in lecture).
- Argue about the class of regular languages using the different equivalent definitions and various conversion algorithms.
- Understand, informally, the behavior of a two-way DFA.
- Understand, informally, the behavior of a Turing machine.
- Informally describe how a Turing machine might solve a given computational problem.
- Know the definition of Turing Recognizable and Turing decidable languages.
- Understand the argument for the unsolvability of the Halting Problem.

Last modified 18 January 2020