An algorithm for optimal lambda calculus reduction
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
PEPM '91 Proceedings of the 1991 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Convergence of program transformers in the metric space of trees
Science of Computer Programming - Special issue on mathematics of program construction
The size-change principle for program termination
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Occam's Razor in Metacompuation: the Notion of a Perfect Process Tree
WSA '93 Proceedings of the Third International Workshop on Static Analysis
A Roadmap to Metacomputation by Supercompilation
Selected Papers from the Internaltional Seminar on Partial Evaluation
Semantic definitions in REFAL and the automatic production of compilers
Semantics-Directed Compiler Generation, Proceedings of a Workshop
The Universal Resolving Algorithm: Inverse Computation in a Functional Language
MPC '00 Proceedings of the 5th International Conference on Mathematics of Program Construction
Grammar-Based Data-Flow Analysis to Stop Deforestation
CAAP '94 Proceedings of the 19th International Colloquium on Trees in Algebra and Programming
Compiling with proofs
Output-constraint specialization
ASIA-PEPM '02 Proceedings of the ASIAN symposium on Partial evaluation and semantics-based program manipulation
Principles of inverse computation and the Universal resolving algorithm
The essence of computation
From type inference to configuration
The essence of computation
Program Adaptation via Output-Constraint Specialization
Higher-Order and Symbolic Computation
Automatic type inference via partial evaluation
PPDP '05 Proceedings of the 7th ACM SIGPLAN international conference on Principles and practice of declarative programming
Forward slicing of multi-paradigm declarative programs based on partial evaluation
LOPSTR'02 Proceedings of the 12th international conference on Logic based program synthesis and transformation
An universal resolving algorithm for inverse computation of lazy languages
PSI'06 Proceedings of the 6th international Andrei Ershov memorial conference on Perspectives of systems informatics
Partial inversion of constructor term rewriting systems
RTA'05 Proceedings of the 16th international conference on Term Rewriting and Applications
Hi-index | 0.00 |
Abramov and Glück have recently introduced a technique called URA for inverting first order functional programs. Given some desired output value, URA computes a potentially infinite sequence of substitutions/restrictions corresponding to the relevant input values. In some cases this process does not terminate.In the present paper, we propose a new program analysis for inverting programs. The technique works by computing a finite grammar describing the set of all input that relate to a given output. During the production of the grammar, the original program is implicitly transformed using so-called driving steps. Whereas URA is sound and complete, but sometimes fails to terminate, our technique always terminates and is complete, but not sound. As an example, we demonstrate how to derive type inference from type checking.The idea of approximating functional programs by grammars is not new. For instance, the second author has developed a technique using tree grammars to approximate termination behaviour of deforestation. However, for the present purposes it has been necessary to invent a new type of grammar that extends tree grammars by permitting a notion of sharing in the productions. These dag grammars seem to be of independent interest.