- The CC proof compiler
- The Tree proof compiler
- The "preserves stack" relation,
exp_stack_pure_rel
- The relation between Imp environments and Stack's stacks
- The Tree plugin
- An example of the plugin being invoked
- The implication database translation proof obligation
- The compiler that changes < to <= (and its associated proof compiler)
- The multiplication wrapper helper lemma from Section <>
- The exponentiation wrapper helper lemma from Section <>
- The hoare triple for the infinite series example
- Soundness lemma for Tree
- The lemma that shows that
stk_valid_tree
, the certificate type, can be used to obtainhl_stk
, the Stack Hoare proof type - The left shift case study, compiled with the incomplete compiler
- The max case study, compiled with the incorrect optimization compiler
- The max case study, compiled with the unverified correct compiler
- The min case study, which has to be compiled with the unverified correct compiler
- The incomplete proof compiler (from our PotPie 3 Ways)
- The incorrect proof compiler (from the PotPie 3 Ways section)
- The unverified correct proof compiler
- The certificate generator in the Tree plugin
stk_valid_tree
, the certificate type- How the plugin's boolean tree checker determines that all of the functions preserve the stack
- The plugin's boolean tree checker
- Uniqueness of Identity Proofs (UIP) for
AbsEnv
, the type of assertions for Imp: note that this also lets us get UIP for the implication database for Imp, since UIP for a typeT
implies UIP forT * T
pairs, and UIP for a typeA
implies UIP forlist A
. - UIP for Imp's function environments
- An example of setting opaques for the plugin's normalization algorithm: this led to 100x speedup for the certificate generator!
- Proof compiler automation, which helps with satisfying proof obligations for both Tree and CC
- Semantics proof automation, which also helps with proof obligations
- Sound translation of a Hoare triple's precondition, one of our proof obligations
- Sound translation of a Hoare triple's postcondition, another one of our proof obligations
- Utilizing unification with Coq's options to avoid unnecessary normalization calls