Functional modelling [17,29] enables functional reasoning methods to be applied to programs written in imperative languages. It is, however, the view of many workers [4, 24] that it is not the notation in which a program is written, but the sheer size of a program which prohibits the application of reasoning and proof techniques.The beauty of Projection is that simple aspects of programs have correspondingly simple models, irrespective of the size and complexity of the overall imperative program.We describe the Projection technique, showing how it allows for the manageable application of functional language technology to 'real' imperative programs. We demonstrate how Projection may facilitate the development of a proof of a program in terms of its constituents and how Projection may allow programmers to select the safety-critical sections of programs for particular attention.We briefly discuss the connection between Projection and Slicing, introduced by Weiser [34,35], and give examples of the functional programming techniques made available to imperative programmers by virtue of functional modelling. Specifically, we use formal proof [23, 24, 4], Transformation [5, 9] and Partial Evaluation [14, 16, 31]. We claim that the Projection of functional models lends itself to the analysis and proof of existing computer software written in imperative programming languages.
Read full abstract