An axiomatic basis for computer programming
Communications of the ACM
Correctness-preserving program transformations
POPL '75 Proceedings of the 2nd ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Systematic Programming: An Introduction
Systematic Programming: An Introduction
Mathematical Theory of Computation
Mathematical Theory of Computation
Structured programming
Program abstraction and instantiation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Correct Architecture Refinement
IEEE Transactions on Software Engineering - Special issue on software architecture
Program developments: formal explanations of implementations
Communications of the ACM
The evolution of programs: a system for automatic program modification
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
The evolution of programs: Program abstraction and instantiation
ICSE '81 Proceedings of the 5th international conference on Software engineering
An interactive tool for program manipulation
ICSE '81 Proceedings of the 5th international conference on Software engineering
On the Transformational Implementation approach to programming
ICSE '76 Proceedings of the 2nd international conference on Software engineering
Abstracts in software engineering: part 2
ACM SIGSOFT Software Engineering Notes
A formal representation for plans in the programmer's apprentice
IJCAI'81 Proceedings of the 7th international joint conference on Artificial intelligence - Volume 2
Hi-index | 0.02 |
Dijkstra suggests in his “Notes on Structured Programming” that program schema and theorems about their correctness may describe the way that programmers understand programming. This paper follows up his suggestion by describing a general model for domains of programming knowledge in terms of schema, transformations, and derivation rules. The model is illustrated by the results of a case study of the knowledge about 10 programs which use arrays. The model and case study illustrate a methodology for constructing and proving correct programs based on knowledge which is independently expressed and partially proved in an abstract form and which can be applied in a stepwise way.