From the course catalog:

Building reliable software through formal verification. We weave together five threads: (1) logic, for making and justifying precise claims about programs; (2) proof assistants, to construct rigorous logical arguments; (3) functional programming, both as a method of programming and as a bridge between programming and logic; (4) formal techniques for reasoning about the properties of specific programs (e.g., the fact that a loop terminates on all inputs, or that a sorting function or a compiler obeys a particular specification); and (5) type systems, for establishing well-behavedness guarantees for all programs in a given programming language (e.g., the fact that well-typed Java programs cannot be subverted at runtime).

Prerequisites: CSCI081 PO or CSCI131. Please see the syllabus for more information.

### Textbook

We’ll be using the latest edition of the Software Foundations textbook.

### Office hours

I am available for appointments via and on Friday afternoons from 1-2pm.

# Lectures

In general, Wednesdays will be devoted entirely to new material, while Mondays will focus on understanding: students will take turns explaining proofs from the homework. Homework from the previous week is typically due on Wednesday before class.

It will not be particularly useful at first, but the Coq reference manual may eventually be helpful.

Week | Monday | Presenters | Wednesday | Lecture/reading | Homework due |
---|---|---|---|---|---|

1 | Jan 20 | Preface, Basics | |||

2 | Jan 25 | Jan 27 | Induction | HW01 (Basics, presentation signups) | |

3 | Feb 1 | Reid, Austin | Feb 3 | Lists | HW02 (Induction; skip `beq_nat_refl_informal` ; skip `binary_inverse` —but give it a go if you have the time) |

4 | Feb 8 | Dan, Becki, Antony | Feb 10 | Poly | HW03 (Lists; skip `bag_more_functions` , `bag_proofs` , and `bag_count_sum` ) |

5 | Feb 15 | Austin, Antony | Feb 17 | Tactics, Logic | HW04 (Poly) |

6 | Feb 22 | Becki, Aloke | Feb 24 | IndProp | HW05 (Tactics do `trans_eq_exercise` , `beq_nat_true` , `plus_n_n_injective` , `double_induction` , `bool_fn_applied_thrice` , `filter_exercise` Logic do `and_exercise` , `mult_eq_0` , `not_implies_our_not` , `double_neg_inf` , `contrapositive` , `dist_not_exists` , `All` , `tr_rev` , `evenb_double_conv` , `excluded_middle_irrefutable` ) |

7 | Feb 29 | Eric, Aloke | Mar 2 | IndProp, Maps | Start on HW06 (IndProp) now do `ev'_ev` , `ev_ev__ev` , `le_trans` , `Sn_le_Sm__n_le_m` , `leb_complete` , `leb_correct` , `R_equiv_fR` |

8 | Mar 7 | Reid, Eric | Mar 9 | Imp | HW06 (IndProp do the above, `re_not_empty/re_not_empty_correct` , `reflect_iff` , `palindromes` , `nostutter` do all of Maps) |

Mar 14 | Mar 16 | Spring break |
|||

9 | Mar 21 | Eric, Austin | Mar 23 | ImpCEvalFun | HW07 (Imp skip `optimizer` , `short_circuit` , `add_for_loop` ) |

10 | Mar 28 | Aloke, Dan | Mar 30 | Equiv | HW08 (ImpCEvalFunskip `ceval_step__ceval_inf` ) |

11 | Apr 4 | Dan, Antony | Apr 6 | Hoare Logic | HW08 (Equivskip `equiv_classes` , `WHILE_true_nonterm_informal` , `optimize_0plus` , `better_subst_equiv` , `inequiv_exercise` , `p5_p6_equiv` , `for_while_equiv` , `capprox` ) |

12 | Apr 11 | Eric, Dan, Reid | Apr 13 | Perm, Sort | HW09 (Hoare skip `assertions` , `swap_exercise` , `repeat` ) |

13 | Apr 18 | Aloke, Austin | Apr 20 | SearchTree | HW10 (Perm, Sort skip final, optional, three-part exercise in `Sort.v` ) |

14 | Apr 25 | Becki, Antony | Apr 27 | ProofObjects, Smallstep | HW11 (SearchTree skip `unrealistically_strong_can_relate` , `lookup_relateX` ) |

15 | May 2 | Reid, Becki | May 4 | Types, Stlc | HW12 (ProofObjects, Smallstep skip `eval__multistep_inf` ) |

HW14 (Types, Stlc)—which amounts to the final—is due on Thursday, May 12th at 5pm. Seniors will be given a different final to accommodate graduation timing.