A constructive approach to the problem of program correctness

  title={A constructive approach to the problem of program correctness},
  author={Edsger W. Dijkstra},
  journal={BIT Numerical Mathematics},
  • E. Dijkstra
  • Published 1968
  • Computer Science
  • BIT Numerical Mathematics
As an alternative to methods by which the correctness of given programs can be established a posteriori, this paper proposes to control the process of program generation such as to produce a priori correct programs. An example is treated to show the form that such a control might then take. This example comes from the field of parallel programming; the way in which it is treated is representative of the way in which a whole multiprogramming system has actually been constructed. 
A new approach to program verification
A new methodology to verify a given program flowchart containing single loop or multiple nested loops by using the technique of mathematical induction is described, where the cut-points are created to cut loops in the given program Flowchart. Expand
Abstraction and Verification in Alphard: Introduction to Language and Methodology
This paper attempts to capture the symbiotic influence of these two goals on the design of Alphard by interleaving the language description with the presentation of a proof technique and discussion of programming methodology. Expand
The new programming discipline
It is the perception that structured programming and the lessons to be learned from proofs of correctness can be applied in any language, including FORTRAN, and it is felt that these ideas should be promulgated to applied scientific programmers. Expand
On a measure of program structure
  • R. N. Chanon
  • Computer Science, Mathematics
  • Symposium on Programming
  • 1974
This thesis proposes a definition and a measure for program structure and evaluates the usefulness of the measure as a tool for determining and controlling structure in a program. Expand
On correct program development
The paper presents a method of correct programs' derivation using McCarthy's logic for this purpose using partial (or three valued) logic for the requirement of handling the problem of abortion. Expand
Queen ' s University , * Belfast , Ireland FIND
A proof is given of the correctness of the algorithm "Find." First, an informal description is given of the purpose of the program and the method used. A systematic technique is described forExpand
Proof of a program: FIND
A proof is given of the correctness of the algorithm “Find” and some conclusions relating to general programming methodology are drawn. Expand
Programming by action clusters
A programming discipline, aiming at the systematic construction of programs from given global requirements, which is the conversion of the global requirements into sets of action clusters (sequences of program statements), which are then used as building blocks for the final program. Expand
Towards the Verifying Compiler
  • C. Hoare
  • Computer Science
  • Essays in Memory of Ole-Johan Dahl
  • 2004
From recent enquiries among software developers at Microsoft, it is discovered that assertions are widely used in program development practice and their main role is as test oracles, to detect programming errors as close as possible to their place of occurrence. Expand
Tool support for invariant based programming
An extension to an existing mathematics editor that supports invariant based programming, which is an approach to program construction where the authors provide the program pre- and postconditions as well as loop invariants before they construct the code itself. Expand


Proof of Algorithms by General Snapshots
It is shown by an elementary example how this possibility may be used to prove the correctness of an algorithm written in ALGOL 60, i.e. expressions of static conditions existing whenever the execution of the algorithm reaches particular points. Expand
Correctness of a compiler for arithmetic expressions
Abstract : The paper contains a proof of the correctness of a simple compiling algorithm for compiling arithmetic expressions into machine language.