From the course catalog:

A combined course on functional programming and formal proof. Students write programs over a variety of data structures, proving their programs correct with respect to precise logical specifications. Programming topics (and proof topics) range over: recursion (induction); combinatorics; algebraic data types, from lists to trees to abstract syntax trees (structural induction); parsers and interpreters (soundness properties); regular expressions (set theory and language theory).

Prerequisites: CSCI051 PO or equivalent (e.g., 4 or 5 on AP CS exam). Please see the syllabus for more information.


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!

Office hours and mentor sessions

Day Time Location
Prof. Michael Greenberg Tuesday 4–5pm (right after class) Millikan 2113 (our classroom)
Prof. Michael Greenberg Wednesday 2–5pm Edmunds 225
Mentor session Saturday 1–3pm Edmunds Lab
Mentor session Sunday 1–3pm Edmunds Lab
Mentor session Sunday 7–9pm Edmunds Lab
Mentor session Monday 7–9pm Edmunds Lab
Mentor session Tuesday 7–9pm Edmunds Lab

I'll try to keep the list of which TAs are working when on Piazza up to date.


Date Lecture Notes
1 Jan. 16 Basics
2 Jan. 18 Basics Truth tables practice sheet (solutions)
3 Jan. 23 Basics/Induction Basics due Wednesday at 5pm (submit)
4 Jan. 25 Induction
5 Jan. 30 Induction
6 Feb. 1 Induction Induction practice sheet (solutions)
7 Feb. 6 Lists Induction due Wednesday at 5pm (submit)
8 Feb. 8 Lists
9 Feb. 13 Poly Lists due Wednesday at 5pm
10 Feb. 15 Poly
11 Feb. 20 Tactics Poly due Wednesday at 5pm
12 Feb. 22 Tactics
13 Feb. 27 Review Tactics due Wednesday at 5pm
14 Mar. 1 Midterm
15 Mar. 6 Logic
16 Mar. 8 Logic
Mar. 13 Spring break
Mar. 15 Spring break
17 Mar. 20 Logic Logic due Wednesday at 5pm; how to prove it sheet
18 Mar. 22 IndProp
19 Mar. 27 IndProp
20 Mar. 29 Sort
21 Apr. 3 Sort IndProp due Wednesday at 5pm
22 Apr. 5 Combo
23 Apr. 10 Combo Sort due Wednesday at 5pm
24 Apr. 12 Sets
25 Apr. 17 Set-theoretic functions and cardinality Combo due Wednesday at 5pm
26 Apr. 19 Countability
27 Apr. 24 Graphs Sets due Wednesday at 5pm
28 Apr. 26 Trees
29 May 1 Review Graphs due Wednesday at 5pm
May 10 Final exam is 2–5pm in our classroom (Millikan 2113)