University of York; Department of Computer Science
A large investment is made in the development, testing, validation and verification of source code for critical applications. But there remains a semantic gap between the source code produced and the object code which is executed. Standards for the development of critical systems recognize this, and mandate either the use of a trusted compiler (one that has been proven to produce correct object code) or the demonstration that the object code is a correct refinement of the source code (a lengthy and complex process). This thesis examines: 1. the extent to which tool support is an essential ingredient in proofs of compiler correctness; 2. the extent to which these proofs may be automated; 3. the relationship between the complexity of the source language and the proof effort required; 4. the scalability of a mechanical method of compiler verification. To do this, we present the development of the proof of correctness of a compiler for a small imperative language Tosca, targeted at an imag...