This is the verified code and all proof files.
The code in src is based on this Rust rewrite of the original paper implementation.
The proofs are located in proofs and can be loaded using the KeY binaries in tools.
The contracts folder contains listing of subsets of all contracts used for filtering.
The proof statistics can be found in statistics.
You can either run the respective KeY binaries in tools or take some inspiration from the justfile.
Make sure to pass -Dkey.contractOrder="<path to contract-order.txt>" to java such that the contract order file is loaded.
- Overflow proofs and annotations can be found on the branch
overflow. They have to be loaded using the second KeY binarykey-2.11.0-o-exe.jar. - To run proofs in
contracts/constructors.txttheno_statemodifier onBucketPointers::bucketStartandBucketPointers::bucketSizehas to be removed. Both methods are onlyno_statewhen using the final heap which has a soundness problem with constructors. There is currently no nicer way to do this in KeY automatically. - The methods
Tree::classify,Tree::classify_allas well asTree::buildwere left out as future work. - To run the code use the
benchbranch which has the proper fallback sorting algorithm not commented out. - The sampling function
Functions::select_nis left empty and should probably be implemented.