Homework is generally due at 4pm PT on Sundays.

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 and Day14_exists.v due at 4pm PT
10-18Day15_induction2.v and Day16_indprop.v due at 4pm PT
10-25Day17_sorting.v and Day18_levenshtein.v due at 4pm PT
11-01Day19_latex.tex and Day20_translating.tex due at 4pm PT
11-08Day21_sorting.tex and Day22_combo.tex due at 4pm PT
11-15Day23_binomial.tex and Day24_sets.tex due at 4pm PT
11-22Day25_relations.tex and Day26_countability.tex due at 4pm PT
11-29Day27_graphs.tex 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.

Guides are meant to give you an overview of proof techniques.

Office hours and mentor sessions

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

Ethan 9-11am
Jan 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

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

1910-26Day19_latexmathematical typesetting in LaTeX
2010-28Day20_translatingtranslating formal proofs to paper
2111-02Day21_sortingsort, 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 72-hour take-home final. The final will be released at 12:01am on Tuesday, December 1st. Submission will be open until 11:59pm on Thursday, December 3rd. You may use the book and any other resource from this class---notes, homeworks, Zulip, etc.---along with Wikipedia. Other sources of help are not permitted.


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!