Important Dates

3/13: initial project proposal due

3/27: revised project proposal due

4/11: project check-in

4/26 at 11:59 PM: project due

Overview

CS 472 will have a final project in place of a final exam. The goal of the project is to use the techniques of the class to describe and verify an interesting program or kind of program. You can work alone or in groups of 2 or 3. Some possible project ideas include:

  1. Use the tools from class to verify a program you’re interested in.

  2. Write a program with some features we haven’t covered in class – I/O, system calls, network communication, vector operations, or anything else – and figure out how you might extend our tools to verify it.

  3. Learn a verification tool not covered in class (like Dafny or VeriFast) and verify a simple program in it.

  4. Write a tactic to automate some of the more repetitive parts of the proofs we’ve done.

If you’re interested in a more academic project, you might also find ideas in papers from conferences such as Principles of Programming Languages (POPL), Certified Programs and Proofs (CPP), or Interactive Theorem Proving (ITP).

Project Proposal

To start, you (individually or as a group) should submit a one-page proposal that contains the following information:

  • What you want to do, roughly speaking. For instance: “I plan to prove correctness of a sorting algorithm.”
  • Which languages tools you intend to use. For instance: “The algorithm will be implemented in Iris’s heap-lang, and verified using Iris.” Or “The algorithm will be implemented in Gallina, and verified using base Coq.”
  • A statement of what you think the top-level theorem will look like. For instance: {p |-> list l} sort(l) {exists l'. p |-> list l' /\ sorted l l'}.
  • Anything else you’d like to mention, like the reason why you’re interested in this particular project, other possible sources of inspiration, or more things you’d like to add if you have time.

The purpose of this proposal is to get you started on thinking about the project, and to plan out a reasonable amount of work for it. If your proposal sounds too big or too small, we’ll discuss and figure out a way to resize it. If you’re having trouble picking a topic, come by office hours and we can talk about some possibilities.

Project Check-In

By the end of the day on 4/10, you should submit the code you’ve written so far for the project, and a description of one or more problems you’ve run into (whether you’ve solved them or not). You’ll receive credit as long as you’ve made any progress; this is an encouragement to start working on the project, and an opportunity to get feedback and ask for help if you’ve gotten stuck on anything.

Final Project Submission

The project should be submitted by 11:59 PM on Friday 4/26. Your submission should include your code, as well as a readme file (text, PDF, etc.) outlining the files included, describing the most important definitions and lemmas, and mentioning what (if anything) you proposed to do but didn’t have time to finish. If you’d prefer, instead of a written readme, you can schedule a time to go over the project in person, or record a video of you describing your project. If you’re taking this option, please make sure to let me know by the start of the last week of classes (Monday 4/22).