Proving Properties of Programs with Mechanized Logic
1 When and Where
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.
2 What
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.
3 How
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:
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.
Iowa Agda Library: this is also already installed on the VM
We may add one more software package here to be used near the end of the quarter. It will be announced in class.
4 Academic Integrity
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.
5 COVID-19 Classroom Expectations
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.
6 Schedule (that will be revised as we go)
When |
| What |
| Homework |
Wed 9/22 |
| 1: Introduction & our First Properties |
| |
Fri 9/24 |
| 2: Contracts |
| |
| ||||
Week 2 | ||||
Mon 9/27 |
| 3: Property-based Testing |
| |
Wed 9/29 |
| 4: Does Blame Work? |
| |
Fri 10/1 |
| 5: Blame & Property-based Testing, cont’d |
| |
| ||||
Week 3 | ||||
Mon 10/4 |
| 6: Randomized-test Driven Development |
| |
Wed 10/6 |
| 7: Randomized-test Driven Development, cont’d |
| |
Fri 10/8 |
| 8: R-tDD: lec06.rkt & lec06-heap.rkt, cont’d |
| |
| ||||
Week 4 | ||||
Mon 10/11 |
| 9: Type Systems |
| |
Wed 10/13 |
| 10: Type Systems, cont’d |
| |
Fri 10/15 |
| 11: Type Systems, cont’d & Intro to Agda |
| |
| ||||
Week 5 | ||||
Mon 10/18 |
| 12: Intro to Proofs (using Booleans) in Agda |
| |
Wed 10/20 |
| 13: Constructive Proofs |
| |
Fri 10/22 |
| 14: More on Proofs with Booleans |
| |
| ||||
Week 6 | ||||
Mon 10/25 |
| 15: Natural Numbers |
| |
Wed 10/27 |
| 16: Natural Numbers, cont’d |
| |
Fri 10/29 |
| 17: Natural Numbers, cont’d |
| |
| ||||
Week 7 | ||||
Mon 11/1 |
| 18: Lists |
| |
Wed 11/3 |
| 19: Lists, cont’d |
| |
Fri 11/5 |
| 20: Lists with Lengths |
| |
| ||||
Week 8 | ||||
Mon 11/8 |
| 21: Binary Search Trees |
| |
Wed 11/10 |
| 22: Binary Search Trees, cont’d |
| |
Fri 11/12 |
| 23: Binary Search Trees, cont’d |
| |
| ||||
Week 9 | ||||
Mon 11/15 |
| 24: Pairing a Value with a Property |
| |
Wed 11/17 |
| 25: Division |
| |
Fri 11/19 |
| 26: Evidence |
| |
| ||||
Week 10 | ||||
Mon 11/22 |
| 27: Merge Sort |
| |
Wed 11/24 |
| 28: Weakest Preconditions |
| |
| ||||
Week 11 | ||||
Mon 11/29 |
| 29: Weakest Preconditions, cont’d |
| |
Wed 12/1 |
| 30: Dafny |
| |
Fri 12/3 |
| 31: Conclusion |
|