Derivation of verification rules for C from operational definitions

While a low-level, operational definition of a language’s semantics is a straightforward way of specifying the behaviour of programs written in that language, it is not necessarily very suitable for formal activities such as program verification. This is clearly the case with languages such as C, where the language definition is complicated by much tedious detail. However, the work described here demonstrates that a necessarily complicated semantics for C can still be used as the basis for the generation of “axiomatic” style rules. These can then be used to support verification work in a way that is both familiar and not overly complex.