Abstract High-level language program compilation strategies can be proven correct by modelling the process as a series of refinement
steps from source code to a machine-level description. We show how this can be done for programs containing recursively-defined
procedures in the well-established predicate transformer semantics for refinement. To do so the formalism is extended with
an abstraction of the way stack frames are created at run time for procedure parameters and variables.
Received March 1999
Accepted November 2005 by C B Jones