Pascal Cuoq, Benjamin Monate, Anne Pacalet and Virgile Prevosto
Functional Dependencies of C Functions via Weakest Pre-Conditions
Software Tools for Technology Transfer, 13:5, October 2011
We present functional dependencies, a convenient, formal, but high-level, specification format for a piece of procedural software (function). Functional dependencies specify the set of memory locations which may be modified by the function (i.e the frame condition), and for each modified location, the set of memory locations that influence its final value. Verifying that a function respects pre-defined functional dependencies can be tricky: the embedded world uses C and Ada, which have arrays and pointers. Existing systems we know of that manipulate functional dependencies, Caveat and SPARK, are restricted to pointer-free subsets of these languages. This article deals with functional dependencies in a programming language with full aliasing.
We show how to use a weakest precondition calculus to generate a verification condition for pre-existing functional dependencies requirements. This verification condition can then be checked using automated theorem provers or proof assistants. With our approach, it is possible to verify the specification as it was written beforehand. We assume little about the verification condition generator and its internals. Our work takes place in the C analysis framework Frama-C, where an experimental implementation of the technique described here has been implemented on top of the WP plugin in the development version of the tool.