A Theory of Specifications Programs and Proofs
Using Martin-Löf's set theory as a programming logic one identifies specifications with sets and propositions and, correspondingly, programs with elements of sets and with proofs. Then, programs happen to contain something else than just what is needed to perform computations. In this work we investigate a theory in which the notion of program as a method of computation is singled out. As a first step towards a theory of specifications, we separate the notions of data type and proposition and define a calculus for program verification, where programs can be written and then proved correct. Based on this calculus, a theory of specifications is built up. A specification of a problem consists of a pair: a data type for a program and a predicate on the program. Such a specification is implemented by constructing a program of the given data type and proving that the predicate holds for that program. We are interested in a calculus of program derivation, i.e. a calculus with rules that allow the simultaneous construction of the components of implementations, rather than the separate construction of programs and proofs. The theory of specifications is built up in such a way that the program extraction process is immediate.