Program transformation by supercompilation
on Programs as data objects
Handbook of theoretical computer science (vol. B)
Research topics in functional programming
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
Proving congruence of bisimulation in functional programming languages
Information and Computation
Proving the correctness of recursion-based automatic program transformations
TAPSOFT '95 Selected papers from the 6th international joint conference on Theory and practice of software development
Bisimilarity as a theory of functional programming
Theoretical Computer Science - Special issue on mathematical foundations of programming semantics
A Transformation System for Developing Recursive Programs
Journal of the ACM (JACM)
Deforestation: Transforming Programs to Eliminate Trees
ESOP '88 Proceedings of the 2nd European Symposium on Programming
Compiler Optimization Correctness by Temporal Logic
Higher-Order and Symbolic Computation
Distillation: extracting the essence of programs
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Distillation with labelled transition systems
PEPM '12 Proceedings of the ACM SIGPLAN 2012 workshop on Partial evaluation and program manipulation
Hi-index | 0.00 |
This paper shows that a bisimulation approach can be used to prove the correctness of unfold/fold program transformation algorithms. As an illustration, we show how our approach can be use to prove the correctness of positive supercompilation (due to Sørensen et al). Traditional program equivalence proofs show the original and transformed programs are contextually equivalent, i.e., have the same termination behaviour in all closed contexts. Contextual equivalence can, however, be difficult to establish directly. Gordon and Howe use an alternative approach: to represent a program's behaviour by a labelled transition system whose bisimilarity relation is a congruence that coincides with contextual equivalence. Labelled transition systems are well-suited to represent global program behaviour. On the other hand, unfold/fold program transformations use generalization and folding, and neither is easy to describe contextually, due to use of non-local information. We show that weak bisimulation on labelled transition systems gives an elegant framework to prove contextual equivalence of original and transformed programs. One reason is that folds can be seen in the context of corresponding unfolds.