# A constructive approach to the problem of program correctness

@article{Dijkstra1968ACA, title={A constructive approach to the problem of program correctness}, author={Edsger W. Dijkstra}, journal={BIT Numerical Mathematics}, year={1968}, volume={8}, pages={174-186} }

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.

## 245 Citations

Proof of a Program : C

- Computer Science
- 2000

A proof is given of the correctness of the algorithm "Find" and an informal description of the purpose of the program and the method used.

Abstraction and Verification in Alphard: Introduction to Language and Methodology

- Computer Science
- 1976

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.

The new programming discipline

- Computer ScienceSoftw. Pract. Exp.
- 1976

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.

On a measure of program structure

- Computer ScienceSymposium 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.

On correct program development

- Computer ScienceICSE 1979
- 1979

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.

Queen ' s University , * Belfast , Ireland FIND

- Computer Science
- 1971

A proof is given of the correctness of the algorithm "Find" and an informal description of the purpose of the program and the method used.

Programming by action clusters

- Computer Science
- 1969

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.

Tool support for invariant based programming

- Computer Science12th Asia-Pacific Software Engineering Conference (APSEC'05)
- 2005

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.

Transformational Programming and the Derivation of Algorithms

- Computer ScienceISCIS
- 2010

The transformational programming, method of algorithm derivation starts with a formal specification of the result to be achieved, plus some informal ideas as to what techniques will be used in the implementation, which is transformed into an implementation by means of correctness-preserving refinement and transformation steps.

## References

SHOWING 1-2 OF 2 REFERENCES

Proof of algorithms by general snapshots

- Computer Science
- 1966

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.

Correctness of a compiler for arithmetic expressions

- Computer Science
- 1966

Abstract : The paper contains a proof of the correctness of a simple compiling algorithm for compiling arithmetic expressions into machine language.