Journal of Symbolic Computation
Foundations of logic programming; (2nd extended ed.)
Foundations of logic programming; (2nd extended ed.)
Partial evaluation in logic programming
Journal of Logic Programming
Tutorial on specialisation of logic programs
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Sound and complete partial deduction with unfolding based on well-founded measures
FGCS'921 Selected papers of the conference on Fifth generation computer systems
Controlling generalization and polyvariance in partial deduction of normal logic programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Proving termination with multiset orderings
Communications of the ACM
A Polyvariant Binding-Time Analysis for Off-line Partial Deduction
ESOP '98 Proceedings of the 7th European Symposium on Programming: Programming Languages and Systems
Controlling Conjunctive Partial Deduction
PLILP '96 Proceedings of the 8th International Symposium on Programming Languages: Implementations, Logics, and Programs
Generating Efficient, Terminating Logic Programs
TAPSOFT '97 Proceedings of the 7th International Joint Conference CAAP/FASE on Theory and Practice of Software Development
Improving Homeomorphic Embedding for Online Termination
LOPSTR '98 Proceedings of the 8th International Workshop on Logic Programming Synthesis and Transformation
Efficiently Generating Efficient Generating Extensions in Prolog
Selected Papers from the Internaltional Seminar on Partial Evaluation
Hi-index | 0.00 |
The current state of the art for ensuring finite unfolding of logic programs consists of a number of online techniques where unfolding decisions are made at specialisation time. Introduction of a static termination analysis phase into a partial deduction algorithm permits unfolding decisions to be made offine, before the actual specialisation phase itself. This separation improves specialisation time and facilitates the automatic construction of compilers and compiler generators. The main contribution of this paper is how this separation may be achieved in the context of logic programming, while providing non-trivial support for partially static datastructures. The paper establishes a solid link between the fields of static termination analysis and partial deduction enabling existing termination analyses to be used to ensure finiteness of the unfolding process. This is the first offline technique which allows arbitrarily partially instantiated goals to be sufficiently unfolded to achieve good specialisation results. Furthermore, it is demonstrated that an offine technique such as this one can be implemented very efficiently and, surprisingly, yield even better specialisation than a (pure) online technique. It is also, to our knowledge, the first offine approach which passes the KMP test (i.e., obtaining an efficient Knuth-Morris-Pratt pattern matcher by specialising a naive one).