An Assessment of Techniques for Proving Program Correctness
ACM Computing Surveys (CSUR)
Structured Programming with go to Statements
ACM Computing Surveys (CSUR)
A technique for software module specification with examples
Communications of the ACM
Communications of the ACM
Certification of algorithm 245 [M1]:treesort 3:proof of algorithms—a new kind of certification
Communications of the ACM
Program development by stepwise refinement
Communications of the ACM
Communications of the ACM
A new approach to program testing
Proceedings of the international conference on Reliable software
An interactive program verification system
Proceedings of the international conference on Reliable software
A program verifier
A verified program-verifier.
Mathematical Theory of Computation
Mathematical Theory of Computation
Structured programming
Proof techniques for hierarchically structured programs
Communications of the ACM
An example of hierarchical design and proof
Communications of the ACM
Full protection specifications in the semantic model for database protection languages
ACM '76 Proceedings of the 1976 annual conference
Some classes of naturally provable programs
ICSE '76 Proceedings of the 2nd international conference on Software engineering
An interactive program verification system
Proceedings of the international conference on Reliable software
Constructing verified and reliable communications processing systems
ACM SIGSOFT Software Engineering Notes
Hi-index | 0.03 |
Techniques are presented for the design of computer programs that are proved to meet stated specifications. The design strategy is the simultaneous step-wise refinement of both the program and its proof so that at each step the program constructed so far is proved. At each step, the specifications for a single program unit are given, the unit is designed, and then proved, by automatically supportable methods, before going on to successive steps. The proof i) shows that the program unit meets its specifications, ii) exhibits any assumptions the unit makes about the problem domain, and iii) defines the specifications for units to be designed in later steps. The design process is based on the refinement of operational and data abstractions in both the program and its specifications. These abstractions are what allow the proof at each step to be supported by automatic, or interactive, program proving systems. The abstractions also keep the proofs of the individual units at an appropriate level of abstraction and also largely independent, thus significantly reducing the size of the complete proof of the entire program. These techniques of provable programming are illustrated by two examples.