This directory contains the Coq representation of Haskell's containers
library, as well as our specifications and proofs.
Our ICFP'18 paper "Ready, set, verify! applying hs-to-coq to real-world Haskell code (experience report)" and its extended version describe the verification of the this library.
The most important components of this work are in the lib and theories
directories:
libcontains the pre-translated Coq representation of Haskell'scontainerslibrary.theoriescontains our specifications and proofs forcontainerslibrary. A more detailed documentation about it can be found here.
You can compile the files of the above two directories by running the boot.sh
script in this directory (which will invoke Make for these two directories, as
well as for their dependencies). You do not need to compile the hs-to-coq tool
for this, but you will need Coq 8.8.1 and the ssreflect plugin.
You can regenerate files in the lib directory yourself by running make clean; make from this directory (you will need to compile the hs-to-coq tool for
doing that, for detailed instructions check here), or by
running the boot.sh in the examples directory.
Other notable components in this directories are:
- the
editsfile and themodule-editsdirectory (organized in the same structure as thelibdirectory) record all the edits we make for the translation. manualcontains all the manually translated modules,hs-speccontains all the properties we translated from Haskell's QuickCheck properties, andextractioncontains the extraction of our translation back to Haskell.