An axiomatic basis for computer programming
Communications of the ACM
An algebraic definition of simulation between programs
An algebraic definition of simulation between programs
Toward a man-machine system for proving program correctness
Toward a man-machine system for proving program correctness
A program verifier
A system which automatically improves programs
IJCAI'73 Proceedings of the 3rd international joint conference on Artificial intelligence
Program transformations in a denotational setting
ACM Transactions on Programming Languages and Systems (TOPLAS)
Program abstraction and instantiation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Compiling circular attribute grammars into Prolog
IBM Journal of Research and Development
Mechanical translation of set theoretic problem specifications into efficient RAM code-A case study
Journal of Symbolic Computation
A Transformation System for Developing Recursive Programs
Journal of the ACM (JACM)
Program Improvement by Source-to-Source Transformation
Journal of the ACM (JACM)
Finite Differencing of Computable Expressions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Incremental Context-Dependent Analysis for Language-Based Editors
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Formal Framework for the Derivation of Machine-Specific Optimizers
ACM Transactions on Programming Languages and Systems (TOPLAS)
Grammar-Based Definition of Metaprogramming Systems
ACM Transactions on Programming Languages and Systems (TOPLAS)
Communications of the ACM
Proving the correctness of heuristically optimized code
Communications of the ACM
The intrinsically exponential complexity of the circularity problem for attribute grammars
Communications of the ACM
Local constraints in the syntax and semantics of programming languages
POPL '78 Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Derivation of efficient DAG marking algorithms
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Transformational programming: applications to algorithms and systems
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The evolution of list-copying algorithms and the need for structured program verification
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Automatic generation of near-optimal linear-time translators for non-circular attribute grammars
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Automatic generation of machine specific code optimizers
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '84 Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
The data transform programming method: An example for file processing problems
ICSE '84 Proceedings of the 7th international conference on Software engineering
Program refinement by transformation
ICSE '81 Proceedings of the 5th international conference on Software engineering
ICSE '81 Proceedings of the 5th international conference on Software engineering
A complete axiomatic system for proving deductions about recursive programs
STOC '77 Proceedings of the ninth annual ACM symposium on Theory of computing
A normal form for compiler testing
Proceedings of the 1977 symposium on Artificial intelligence and programming languages
Knowledge about programs: A model and case study
Proceedings of the international conference on Reliable software
Program improvement by source to source transformation
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
Goal-directed program transformation
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
Integrating formal methods with system management
ICFEM'07 Proceedings of the formal engineering methods 9th international conference on Formal methods and software engineering
Correct transformation: From object-based graph grammars to PROMELA
Science of Computer Programming
Hi-index | 0.05 |
This paper extends the predicate calculus formalization of the partial correctness properties of programs (Ki, Go) to include the preservation of correctness under program transformations. The general notion of "program transformations which preserve properties" is fundamental to the theory of programming and programming languages. In the context of proofs of program correctness, transformations which preserve correctness can be used to improve less efficient, but easier to prove, programs. The basic argument in the use of correctness-preserving program transformations (hereafter CPTs) is:Assume that G is a program (with attached assertions) which has been proved correct with respect to some input-output relation Ain-Aout. Now suppose that S is some part of G, e.g. an expression, assertion, statement, etc., which is to be replaced by some other such part S' to produce the program G'. The goal is to prove that G' is also correct with respect to Ain-Aout and therefore the replacement preserves overall program correctness. Moreover, if the replacement has only a local effect, e.g. the body of a loop, then the proof of correctness-preservation should be restricted to that part of the program affected by the replacement.Section 2 reviews the current paradigm for proving program correctness. An example in section 3 illustrates CPTs in a sequence of improvements on a correct and simple, but inefficient, initial program. In section 4, the formalization of partial correctness properties of programs is recast as a semantic language definition using Knuth's semantic method (Kn1). This formalization is then used in section 5 to describe the mechanics of performing CPTs. In section 6, several questions about the formalization of sections 4 and 5 are discussed and a generalization is proposed. Finally, section 7 returns to a concrete example and suggests that the most effective use of CPTs is by identification of schematic forms. Related work is mentioned in section 8.