Trace-based verification of imperative programs with I/O
Gregory Malecha and Greg Morrisett and Ryan Wisnesky
In this paper we demonstrate how to prove the correctness of systems implemented using low-level imperative features like pointers, files, and socket I/O with respect to high level I/O protocol descriptions by using the Coq proof assistant. We present a web-based course gradebook application developed with Ynot, a Coq library for verified imperative programming. We add a dialog-based I/O system to Ynot, and we extend Ynot’s underlying Hoare logic with event traces to reason about I/O and protocol behavior. Expressive abstractions allow the modular verification of both high level specifications like privacy guarantees and low level properties like data structure pointer invariants.
Citation (BibTex)
@article{Malecha201195,
title = "Trace-based verification of imperative programs with I/O ",
journal = "Journal of Symbolic Computation ",
volume = "46",
number = "2",
pages = "95 - 118",
year = "2011",
note = "Automated Specification and Verification of Web Systems ",
issn = "0747-7171",
doi = "http://dx.doi.org/10.1016/j.jsc.2010.08.004",
url = "http://www.sciencedirect.com/science/article/pii/S0747717110001343",
author = "Gregory Malecha and Greg Morrisett and Ryan Wisnesky",
keywords = "Program verification",
keywords = "Separation logic",
keywords = "Dependent types",
keywords = "Traces",
keywords = "Imperative programming",
keywords = "Ynot ",
abstract = "In this paper we demonstrate how to prove the correctness of systems implemented using low-level imperative features like pointers, files, and socket I/O with respect to high level I/O protocol descriptions by using the Coq proof assistant. We present a web-based course gradebook application developed with Ynot, a Coq library for verified imperative programming. We add a dialog-based I/O system to Ynot, and we extend Ynot’s underlying Hoare logic with event traces to reason about I/O and protocol behavior. Expressive abstractions allow the modular verification of both high level specifications like privacy guarantees and low level properties like data structure pointer invariants."
}