CMPSCI 250: Introduction to Computation
David Mix Barrington and Ghazaleh Parvini
Fall 2021
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 8 August 2021