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

Due date | Files |
---|---|

08-30 | `Day01_intro.v` and `Day02_types.v` due at 4pm PT |

09-06 | `Day03_recursion.v` and `Day04_structures.v` due at 4pm PT |

09-13 | `Day05_lists.v` and `Day06_sorting.v` due at 4pm PT |

09-20 | `Day07_trees.v` and `Day08_sets.v` due at 4pm PT |

09-27 | `Day09_levenshtein.v` and `Day10_expressions.v` due at 4pm PT |

10-04 | `Day11_propositions.v` and `Day12_cases.v` due at 4pm PT |

10-11 | `Day13_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.

- Truth tables (posted 2020-08-21; solutions posted 2020-08-26)

All times are in Pacific Time. Look in `#general`

on Zulip for Zoom info.

Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday |
---|---|---|---|---|---|---|

Ethan 6-8pm | Jan 7-9pm | Grace & Millie 4-6pm | Prof. Greenberg 4-5pm |

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

Day | Date | File | Plan |
---|---|---|---|

01 | 08-24 | Day01_intro | Coq, Emacs, how to read the book; boolean operations, truth tables, and DNA bases |

02 | 08-26 | Day02_types | numbers and recursive functions |

03 | 08-31 | Day03_recursion | more recursive functions |

04 | 09-02 | Day04_structures | pairs, options, lists, and trees |

05 | 09-07 | Day05_lists | list processing |

06 | 09-09 | Day06_sorting | insertion sort |

07 | 09-14 | Day07_trees | binary search trees |

08 | 09-16 | Day08_sets | list and tree representations of sets |

09 | 09-21 | Day09_levenshtein | the Levenshtein algorithm for edit distance |

10 | 09-23 | Day10_expressions | expressions and interpreters |

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

Day | Date | File | Plan |
---|---|---|---|

11 | 09-28 | Day11_propositions | basic formal proof; Coq tactics; equality and logical propositions |

12 | 09-30 | Day12_cases | proofs by case analysis |

13 | 10-05 | Day13_induction | induction |

14 | 10-07 | Day14_exists | existential quantification |

15 | 10-12 | Day15_induction2 | induction on other structures |

16 | 10-14 | Day16_indprop | inductive propositions |

17 | 10-19 | Day17_sorting | permutations and sorting |

18 | 10-21 | Day18_levenshtein | proving the Levenshtein algorithm correct and optimal |

19 | 10-26 | Day19_arithmetic | proofs about arithmetic expressions |

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

Day | Date | File | Plan |
---|---|---|---|

20 | 10-28 | Day20_translating | LaTeX; translating formal proofs to paper |

21 | 11-02 | Day21_sorting | sort and levenshtein, informally |

22 | 11-04 | Day22_combinatorics | counting; sum rule, product rule, division rule, permutation, choose |

23 | 11-09 | Day23_binomial | the binomial theorem; Pascal's Identity |

24 | 11-11 | Day24_sets | set theory |

25 | 11-16 | Day25_relations | relations and functions |

26 | 11-18 | Day26_countability | cardinality and (un)countability |

27 | 11-23 | Day27_graphs | graphs 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!