Exam Details
- Where and When: 8:00 am - 10:00 am Monday, December
9th in CF 226.
- Coverage: The exam is cumulative. It covers
material from Lectures 1 through 36.
- Notes: You can bring two
double-sided 8.5x11” sheets of hand-written notes.
Resources
- References:
- (you are here) This study guide,
which lists the course outcomes as well as the Goals for each lecture;
my goal is for the exam to be a fair assessment of the extent to which
you’ve achieved the course-level outcomes, and the per-lecture Goals
provide much more granular specification of my interpretation of
these.
- The course textbooks
- My typed and handwritten notes from each lecture
- Sources of practice problems
- The Racket practice problems from
the midterm study guide.
- The in-class exercises (linked as
ws
from each day’s
lecture on the Schedule table).
- The exercises from BoP Chapters 1-2 and 4-10; odd numbered exercise
solutions are in the back of the book.
- Exercises from TC chapters 1-5. Note that not all topics were
covered; you will not be responsible for problems on topics that weren’t
at least touched upon in lecture.
Course Outcomes
Here are the course-level outcomes. I will refer to these when
writing the exam.
- Thorough understanding of the mathematical definitions of concepts
important to computer science, including sets, tuples, lists, strings,
formal languages, functions and relations.
- The ability to prove basic theorems involving these mathematical
concepts including proofs by contradiction and inductive proof
- The ability to employ effectively the functional programming style
in a functional programming language
- Solid understanding of the Chomsky hierarchy, including regular and
context free languages, and their corresponding accepting machines and
describing grammars
- Basic understanding of Turing machines and computability
- Basic understanding of important algorithms, including conversion of
finite automata to different forms, conversion of grammars to
machines
- Basic understanding of LL(k) and LR(K) grammars and the parsing
techniques used for LL(1) grammars
Per-Lecture Outcomes
Here are the per-lecture outcomes (Goals). I will refer to these when
writing the exam.
Sets 0
- Describe what a set is and how a set’s contents and members are
denoted (\(\{\ldots\}\),\(\in\) )
- Know the notation for natural numbers (\(\mathbb{N}\)), integers (\(\mathbb{Z}\)), rational numbers (\(\mathbb{Q}\)), real numbers, and the empty
set (\({\varnothing}\) or \(\emptyset\), or occasionally \(\{\}\)).
Racket 0
- Know how to interpret and write expressions in prefix operator
notation
- Know how to interact with the Racket interpeter in DrRacket
- Know how to represent and work with basic data types (booleans,
numbers, strings) in racket.
Sets 1
- Define sets using set-builder notation.
- Calculate the cardinality of a set.
Racket 1
- Know how to define and use functions in Racket using
lambda
- Know how lexical scope works in Racket, and how to introduce local
variables using
let
and let*
.
- Know how to express conditionals using
if
and
cond
Racket 2
Know how to create and work with dotted pairs using
cons
, car
, cdr
, and
cadr
and friends
Know how create and interact with lists, including the
list
function
Be able to implement simple recursive list processing functions
in Racket
Know how to create recursive helper methods to carry information
through the recursion
Sets 2
Know the definition of subset, power set.
Compute a Cartesian Product of two or more sets
Understand the notation and meaning for: union, intersection,
difference, and complement
Be able to draw and interpret Venn diagrams
Logic 1
- tell whether an English sentence or a mathematical expression is a
logical statement.
- articulate the meanings of logical AND, OR, NOT, conditional
statements and biconditional statements.
Logic 2
- articulate the meanings of logical AND, OR, NOT,
conditional statements and biconditional statements.
- use truth tables to calculate truth values of logical
statements
- use truth tables to verify logically equivalent statements
Logic 3
- use truth tables to calculate truth values of logical
statements
- use truth tables to verify logically equivalent statements
- be able to interpret and use universal \((\forall)\) and existential \((\exists)\) quantifiers
Logic 4
- Be able to translate English sentences involving quantifiers,
logical operators, and statements into logical symbols and back.
- Be able to negate statements expressed symbolically.
- Know how to read a mathematical definition, and know a few common
and useful ones:
- even, odd,
divides, parity
Direct Proof
- Be able to use direct proof to prove statements involving
definitions including even, odd,
divides, parity.
- Be able to prove statements that require consideration of multiple
cases.
- Know when and how to apply “without loss of generality” to treat
similar/symmetric cases.
Contrapositive Proof
- Know how to use contrapositive proof to show \(P \Rightarrow Q\) by showing that \(\neg Q \Rightarrow \neg P\).
Proof By Contradiction
- Know how to prove statements, including conditional statements, by
contradiction.
Proving Non-Conditional
Statements
- Know how to prove if-and-only-if statements and equivalence
statements
- Know how to prove existentially quantified statements
- Know how to disprove statements in general
- Know how to disprove universally quantified statements and
conditional statements by counterexample
Proof by Induction
- Know the intuition and logical reasining underlying proof by
induction.
- Know the meaning of base case, inductive
hypothesis, and inductive step (or
inductive case) in the context of proof by
induction.
- Be able to apply proof by induction
- Be able to apply proof by strong induction
- Know the definition of the Fibonacci sequence
(Midterm Exam Cutoff Here)
Relations 1
- Know the definition of a relation on a set.
- Be able to apply the definitions of the following properties of
relations:
- Reflexive
- Symmetric
- Transitive
Relations 2
- Be able to recognize when a relation is an equivalence
relation
- Know how to identify the equivalence classes in a
set given an equivalence relation on that set.
Functions
Know the definition of a function.
Know how to identify a function’s domain,
codomain, and range.
Be able to define and apply the definitions of the following
properties of functions, and prove or disprove these properties of
functions:
- injective
- surjective
- bijective
Know the definition of an identity function and
an inverse function.
21 - Theory Intro
- Get a general idea for the meaning of computability
theory and understand the Halting problem
- Get a general idea for the meaning of complexity
theory
- Understand the purpose of automata theory as a tool
for studying computability and complexity
- Get a general idea for what an automaton is.
22 - Languages and DFAs
- Know the definition of and notation for alphabet,
symbol, string, and
language.
- Know how to interpret a diagram of a finite
automaton (FA)
- Know the formal definition of a FA
- Know how to determine if a finite automaton is
deterministic
23 - DFAs and Regular Languages
Be able to construct a DFA that accepts simple languages
Know how to perform the following regular
operations on languages:
- Union
- Concatenation
- Closure (star)
Know the definition and construction for regular
languages, and know that they are closed under the union
operation.
24 - NFAs
- Know the definition of a nondeterministic finite automaton
(NFA)
- Know how to determine if a string is accepted by an NFA, and the
definition of the language accepted by an NFA
- Be able to design an NFA that accepts simple regular languages
25 - NFA to DFA, Regular
Closure
- Know how to convert a DFA to an NFA
- Be able to prove that regular languages are closed under regular
operations including union, concatenation, and star.
26 - Regular Expressions
Know the definition of regular expressions
Be able to construct regular expressions for a given language,
and be able to describe the language represented by a regular
expression.
27 - Context-Free Grammars 1
- Know the definition of a context-free grammar.
- Know how to apply grammar rules to derive a string in a grammar’s
language
28 - Context-Free Grammars 2
- Know the definition of leftmost and rightmost derivation
- Know how to determine whether a grammar is ambiguous
- Know the basic problem setup for parsing, and know what of LL(k) and
LR(k) stand for
29 - Parsing 1
- Know how to identify and remove left recursion from a grammar
- Know how to identify and remove common prefixes from a grammar
- Know how to interpret and translate aritmetic expressions into/out
of Reverse Polish notation
30 - Parsing 2
- Know how to compute the NULLABLE and FIRST sets for basic
grammars.
- Be prepared to implement an LL(1) recursive descent parser given a
grammar and LL(1) parse table.
31 - Pushdown Automata
- Know the definition of a Pushdown Automaton (PDA)
- Know how to run computation steps of a PDA
- Know how to determine if a string is accepted by a PDA
- Know the distinction between a deterministic PDA and a
nondeterministic PDA
32 - The Regular Pumping Lemma
- Be able to prove that a language is not regular using the Pumping
Lemma for Regular Languages
34 - Turing Machines
- Know the definition, computation, and termination of a Turing
machine
- Be able to design a Turing machine to accept a language
35 - Computability
- Understand meaning and implications of the Church-Turing
Thesis, and why it’s called a Thesis rather than a
Theorem.
- Know and be able to apply the definition of
decidable in the context of languages.
- Be able to use reductions to prove problems are undecidable.