Homework is generally due at 4pm PT on Sundays. Take home midterms are due 30min before class, i.e., 2pm PT on Mondays.

Due dateFiles
08-30Day01_intro.v and Day02_types.v due at 4pm PT
09-06Day03_recursion.v and Day04_structures.v due at 4pm PT
09-13Day05_lists.v and Day06_sorting.v due at 4pm PT
09-20Day07_trees.v and Day08_sets.v due at 4pm PT
09-27Day09_levenshtein.v and Day10_expressions.v due at 4pm PT
10-04Day11_propositions.v and Day12_cases.v due at 4pm PT
10-11Day13_induction.v due at 4pm PT

Feel free to look at various chapters ahead of time, but know that we may change things before posting the homework here!

Worksheets are not for credit; they are excellent practice, though, and they resemble the kinds of problems we like to set on exams.

Office hours and mentor sessions

All times are in Pacific Time. Look in #general on Zulip for Zoom info.

Ethan 6-8pmJan 7-9pmGrace & Millie 4-6pmProf. Greenberg 4-5pm

Lecture Schedule

Please see the syllabus for general course information. The course has three parts: programming, formal proof, and paper proof.

0108-24Day01_introCoq, Emacs, how to read the book; boolean operations, truth tables, and DNA bases
0208-26Day02_typesnumbers and recursive functions
0308-31Day03_recursionmore recursive functions
0409-02Day04_structurespairs, options, lists, and trees
0509-07Day05_listslist processing
0609-09Day06_sortinginsertion sort
0709-14Day07_treesbinary search trees
0809-16Day08_setslist and tree representations of sets
0909-21Day09_levenshteinthe Levenshtein algorithm for edit distance
1009-23Day10_expressionsexpressions and interpreters

At this point, we'll have our first midterm on gradescope, about programming.

1109-28Day11_propositionsbasic formal proof; Coq tactics; equality and logical propositions
1209-30Day12_casesproofs by case analysis
1410-07Day14_existsexistential quantification
1510-12Day15_induction2induction on other structures
1610-14Day16_indpropinductive propositions
1710-19Day17_sortingpermutations and sorting
1810-21Day18_levenshteinproving the Levenshtein algorithm correct and optimal
1910-26Day19_arithmeticproofs about arithmetic expressions

At this point, we'll have our second midterm on gradescope, about formal proof.

2010-28Day20_translatingLaTeX; translating formal proofs to paper
2111-02Day21_sortingsort and levenshtein, informally
2211-04Day22_combinatoricscounting; sum rule, product rule, division rule, permutation, choose
2311-09Day23_binomialthe binomial theorem; Pascal's Identity
2411-11Day24_setsset theory
2511-16Day25_relationsrelations and functions
2611-18Day26_countabilitycardinality and (un)countability
2711-23Day27_graphsgraphs and paths and trees

And now: the take-home final.


We're using Coq 8.12.0, Emacs 27.1 (macOS, Windows), and Proof General 4.4 (installed automatically by our init.el). To configure your emacs, you might want to download init.el.


We’ll be using an experimental new volume of Software Foundations, which we're calling for now Discrete Math in Coq. Name suggestions are welcome!