The Science of Deep Specification

Verified functional algorithms Andrew W. Appel

Write your program in an expressive language—Gallina—with a clean and tractable proof theory—CiC—and then prove it correct in Coq. This is a powerful way to produce verified software. Since we want our programs to be efficient, we want to implement sophisticated data structures and algorithms. Since Gallina is a purely functional language, it helps to have purely functional algorithms. In these lectures I show the principles and practice of functional algorithms, and how to verify them in Coq.

Preparation

Day one: Sorting

VFA chapters

Perm
Sort
Selection

Suggested homework

The nonoptional exercises in Perm and Sort.

Lecture recordings

Day two: Search Trees

VFA chapters

SearchTree
ADT
Extract
Trie

Suggested homework

The nonoptional exercises in SearchTree

Lecture recordings

Day three: Search Trees

VFA chapters

Redblack
Priqueue
Binom

Suggested homework

The nonoptional exercises in Redblack

Lecture recordings

Day four: Separation Logic

Lecture

Imperative programming! In the C language! With proofs in Coq!

Lecture recordings