In this paper, we examine a naive but precise relation between verification proofs of iterative programs with recursions and proofs in a predicate logic. For that purpose, a logic of total correctness of programs is introduced, which is an extension of a predicate logic and a variant of Pratt's dynamic logic equipped with program variables. Then it is shown that correctnes proofs of programs are regarded as proofs in a predicate logic. Conversely we show how programs and their correctness proofs can be obtained from proofs of their specifications. These methods provide means to examine how difference among algorithms reflects difference among proofs and vice verse. Using them, we can replace processes of programming by processes of proving specifications. Our method does not depend on specific concrete theories, so we can use our method to problem solving on abstract domain.
Cite this article
Hayao Nakahara, Proofs and Programs: A Naïve Approach to Program Extraction. Publ. Res. Inst. Math. Sci. 25 (1989), no. 3, pp. 415–489DOI 10.2977/PRIMS/1195173352