# CMPSCI 250: Introduction to Computation

### Spring 2020

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