We meet Monday, Wednesday, Friday from 11pm to 12:20pm in Tech L251. The Schedule (that will be revised as we go) provides more details for each meeting.
Use Campuswire for discussion about the class.
In this class we will explore properties that programs can have, first focusing on stating them in a precise and checkable way. These ways will be limited to testing only a subset of the possible inputs.
As the quarter progresses, we will explore how to prove they are correct using Agda. We will be using Aaron Stump’s Book, Verified Functional Programming in Agda. Access the link while on campus to download a PDF.
You will be expected to solve homework assignments that test your understanding of the concepts and then design (in consultation with the instructor) a final project where you state and prove a property of a program.
Racket: It is easy to install, follow the instructions on the website.
Agda is less easy to install. I had success using the Haskell Platform and installing Agda via slack; I’ve also had success using the brew-based instructions on their website. In case you run into trouble, we’ve built a virtual machine with Agda already installed that you should be able to use via VirtualBox, or possibly other virtual machine software. To login, use the userid ial and with the password ial.
We may add one more software package here to be used near the end of the quarter. It will be announced in class.
All work turned in must name everyone that contributed in any way to the work.
Hew to the Provost’s Eight Cardinal Rules of Academic Integrity.
Keep your mask on at all times.
If you have any symptoms, stay home.
If you do not have any symptoms and aren’t in quarantine, come to class.
1: Introduction & our First Properties
3: Property-based Testing
4: Does Blame Work?
5: Blame & Property-based Testing, cont’d
6: Randomized-test Driven Development
7: Randomized-test Driven Development, cont’d
9: Type Systems
10: Type Systems, cont’d
11: Type Systems, cont’d & Intro to Agda
12: Intro to Proofs (using Booleans) in Agda
13: Constructive Proofs
14: More on Proofs with Booleans
15: Natural Numbers
16: Natural Numbers, cont’d
17: Natural Numbers, cont’d
19: Lists, cont’d
20: Lists with Lengths
21: Binary Search Trees
22: Binary Search Trees, cont’d
23: Binary Search Trees, cont’d
24: Pairing a Value with a Property
27: Merge Sort
28: Weakest Preconditions
29: Weakest Preconditions, cont’d