A formalization of properties of a simple imperative, memory-safe language.
Coq Makefile
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
Makefile
README.org
_CoqProject
basic.v
cast.v
properties.v
separation.v
structured.v

README.org

Compiling

Requirements:

To compile just hit “make”

Files

basics.v

This file sets up the basic definitions for our language. It starts by defining various types used throughout the development, including the syntax of expressions and commands. To simplify the rest of the development, this semantics is parameterized over a type of program states and a few functions over that type, so that we can instantiate it with “raw” program states (as done in the first, unstructured version of the language), and program states with restricted names (cf. structured.v). Instead of being defined relationally, as done in the paper, we opt for an executable definition, which defines an interpreter for the language that takes a starting state, a program, and a number of steps to run for, and returns the result of running that command on that state. This means that we prove our main results here by induction on the number of steps, as opposed to induction on a relation.

structured.v

This file defines the instance of the language semantics based on the free name restriction construction. It also prove the main results of the paper for that semantics.

logic.v

This file defines some basic heap-building functions, following the section on program verification, and proves some properties about them. It does not define triples, and it does not include the program verification examples.

cast.v

This file proves a weaker integrity property for an unstructured version of the semantics that features a cast operator.