Published online by Cambridge University Press: 15 August 2008
We report on an experience using the Coq proof assistant to develop a program verification tool with a machine-checked proof of full correctness. The verifier is able to prove memory safety of x86 machine code programs compiled from code that uses algebraic datatypes. The tool's soundness theorem is expressed in terms of the bit-level semantics of x86 programs, so its correctness depends on very few assumptions. We take advantage of Coq's support for programming with dependent types and modules in the structure of the development. The approach is based on developing a library of reusable functors for transforming a verifier at one level of abstraction into a verifier at a lower level. Using this library, it is possible to prototype a verifier based on a new type system with a minimal amount of work, while obtaining a very strong soundness theorem about the final product.
This is a revised and extended version of the paper that appeared in the 11th ACM SIGPLAN International Conference on Functional Programming (ICFP'06) (Chlipala 2006).
This research was supported in part by a National Defense Science and Engineering Graduate Fellowship and National Science Foundation Grants CCF-0524784, CCR-0234689, CNS-0509544, and CCR-0225610.
Discussions
No Discussions have been published for this article.