Proving Programs and Programming Proofs

Publisher Summary Progress in applications to large-scale computer systems, depends on the design of new formal systems. This chapter raises some issues and makes a technical contribution by considering some theories of Feferman from the viewpoint of computer science, and comparing them with the theories of Martin-Lőf. The command language and assertion language of proving programs are discussed in the chapter. By “proving programs” is meant more explicitly: proving properties of programs or proving properties of the execution of programs. People speak of the “correctness” of a program with respect to its “specifications”—by this they mean that if the program gets an input of the kind it is designed for, it will produce an output having certain specified relations with the input. This notion is divided into the two notions of “total correctness” (an output is always produced and it is correct) and “partial correctness” (if an output is produced then it is correct).