1 When and Where
2 What
3 How
4 Academic Integrity
5 COVID-19 Classroom Expectations
6 Schedule (that will be revised as we go)

Proving Properties of Programs with Mechanized Logic

Robby Findler & Lukas Lazarek

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.

You will need to use some specific software to solve homework assignments in this course:
  • 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)




Wed 9/22

1: Introduction & our First Properties

Fri 9/24

2: Contracts

Assignment 1


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

Assignment 2


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

Assignment 3


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

Assignment 4


Week 7

Mon 11/1

18: Lists

Wed 11/3

19: Lists, cont’d

Fri 11/5

20: Lists with Lengths

Assignment 5


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

Assignment 6


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

Assignment 7

Wed 11/24

28: Weakest Preconditions

Assignment 8a


Week 11

Mon 11/29

29: Weakest Preconditions, cont’d

Wed 12/1

30: Dafny

Assignment 8b

Fri 12/3

31: Conclusion