VFA: Verified Functional Algorithms
Perm: Basic techniques for permutations and ordering
Sort: Insertion sort
- Recommended reading
- The insertion-sort program
- Specification of correctness
- Proof of correctness
- Making sure the specification is right
- Proving correctness from the alternate spec
Multiset: Insertion sort with multisets
Selection: Selection sort, with specification and proof of correctness
- The selection-sort program
- Proof of correctness of selection sort.
- Recursive functions that are not structurally recursive
SearchTree: Binary search trees
- Sections
- Program for Binary Search Trees
- Search tree examples
- What should we prove about search trees?
- Efficiency of search trees
- Proof of correctness
- Correctness proof of the elements function.
- Representation invariants
- Preservation of representation invariant
- We got lucky.
- Every well-formed tree does actually relate to an abstraction
- It wasn't really luck, actually
- Summary: Abstract Data Types
ADT: Abstract data types
Extraction: Running Coq programs in ML
- Utilities for Ocaml integer comparisons.
- SearchTrees, extracted
- Performance tests
- Unbalanced binary search trees
- Balanced binary search trees
Redblack: Implementation and proof of red-black trees
- Required reading:
- Proof automation for case-analysis proofs.
- The SearchTree property
- Proving efficiency.
- Extracting and measuring red-black trees
- Success!
Trie: Number representations and efficient lookup tables
- logN penalties in functional programming
- A simple program that's waaay too slow.
- Efficient positive numbers
- Tries: efficient lookup tables on positive binary numbers
- Proving the correctness of trie tables
- Conclusion
Priqueue: Priority queues
Binom: Binomial queues
Decide: programming with decision procedures
- Using reflect to characterize decision procedures
- Using sumbool to characterize decision procedures
- Decidability and computability
- Opacity of Qed
- Advantages and disadvantages of reflect versus sumbool