We present a formal model of memory that both captures the low-level
features of C's pointers and memory, and that forms the basis for an
expressive implementation of separation logic. At the low level, we
do not commit common oversimplifications, but correctly deal with C's
model of programming language values and the heap. At the level of
separation logic, we are still able to reason abstractly and
efficiently. We implement this framework in the theorem prover
Isabelle/HOL and demonstrate it on two case studies. We show that the
divide between detailed and abstract does not impose undue
verification overhead, and that simple programs remain easy to
verify. We also show that the framework is applicable to real,
security- and safety-critical code by formally verifying the memory
allocator of the L4 microkernel.
@InProceedings{Tuch_KN_07,
author = {Harvey Tuch and Gerwin Klein and Michael Norrish},
title = {Types, Bytes, and Separation Logic},
booktitle = {Proc.\ 34th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL'07)},
pages = {97-108},
year = {2007},
editor = {Martin Hofmann and Matthias Felleisen},
address = {Nice, France},
month = Jan
}