Proving Theorems about LISP Functions
Journal of the ACM (JACM)
Symbolic execution and program testing
Communications of the ACM
Recursive functions of symbolic expressions and their computation by machine, Part I
Communications of the ACM
Correctness-preserving program transformations
POPL '75 Proceedings of the 2nd ACM SIGACT-SIGPLAN symposium on Principles of programming languages
The theory of parsing, translation, and compiling
The theory of parsing, translation, and compiling
The current state of proving programs correct
ACM '72 Proceedings of the ACM annual conference - Volume 1
Some transformations for developing recursive programs
Proceedings of the international conference on Reliable software
Verifying programs by algebraic and logical reduction
Proceedings of the international conference on Reliable software
Proceedings of a symposium on Compiler optimization
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
MLISP
Correctness of two compilers for a Lisp subset
Correctness of two compilers for a Lisp subset
A program verifier
Decompilation of object programs
Decompilation of object programs
Automatically proving the correctness of translations involving optimized code.
Automatically proving the correctness of translations involving optimized code.
Off-line and on-line algorithms for deducing equalities
POPL '78 Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Efficient On-Line Proofs of Equalities and Inequalities of Formulas
IEEE Transactions on Computers
On the correctness of transformations in compiler back-ends
ISoLA'04 Proceedings of the First international conference on Leveraging Applications of Formal Methods
Hi-index | 48.22 |
A system for proving that programs written in a high level language are correctly translated to a low level language is described. A primary use of the system is as a postoptimization step in code generation. The low level language programs need not be generated by a compiler and in fact could be hand coded. Examples of the usefulness of such a system are given. Some interesting results are the ability to handle programs that implement recursion by bypassing the start of the program, and the detection and pinpointing of a wide class of errors in the low level language programs. The examples demonstrate that optimization of the genre of this paper can result in substantially faster operation and the saving of memory in terms of program and stack sizes.