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 (ImpCEvalFun skip ceval_step__ceval_inf ) |
11 | Apr 4 | Dan, Antony | Apr 6 | Hoare Logic | HW08 (Equiv skip 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.