The categorical abstract machine
Science of Computer Programming
TIM: A simple, lazy abstract machine to execute supercombinators
Proc. of a conference on Functional programming languages and computer architecture
PLDI '88 Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation
Partial polymorphic type inference and higher-order unification
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Journal of the ACM (JACM)
On laziness and optimality in lambda interpreters: tools for specification and analysis
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Warren's abstract machine: a tutorial reconstruction
Warren's abstract machine: a tutorial reconstruction
A notation for lambda terms. A generalization of environment
Theoretical Computer Science
Implementing typed intermediate languages
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Contributions to the Theory of Logic Programming
Journal of the ACM (JACM)
Higher order unification via explicit substitutions
Information and Computation
Lightweight Lemmas in &lgr;Prolog
Proceedings of the 1999 international conference on Logic programming
An Efficient Unification Algorithm
ACM Transactions on Programming Languages and Systems (TOPLAS)
Tradeoffs in the Intensional Representation of Lambda Terms
RTA '02 Proceedings of the 13th International Conference on Rewriting Techniques and Applications
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
Explicit substitutions in the reduction of lambda terms
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
An Explicit Substitution Notation in a lambda Prolog Implementation
An Explicit Substitution Notation in a lambda Prolog Implementation
Journal of Functional Programming
Proof search specifications of bisimulation and modal logics for the π-calculus
ACM Transactions on Computational Logic (TOCL)
A Proof Search Specification of the π-Calculus
Electronic Notes in Theoretical Computer Science (ENTCS)
Hi-index | 0.00 |
The logic programming paradigm provides the basis for a new intensional view of higher-order notions. This view is realized primarily by employing the terms of a typed lambda calculus as representational devices and by using a richer form of unification for probing their structures. These additions have important meta-programming applications but they also pose non-trivial implementation problems. One issue concerns the machine representation of lambda terms suitable to their intended use: an adequate encoding must facilitate comparison operations over terms in addition to supporting the usual reduction computation. Another aspect relates to the treatment of a unification operation that has a branching character and that sometimes calls for the delaying of the solution of unification problems. A final issue concerns the execution of goals whose structures become apparent only in the course of computation. These various problems are exposed in this paper and solutions to them are described. A satisfactory representation for lambda terms is developed by exploiting the nameless notation of de Bruijn as well as explicit encodings of substitutions. Special mechanisms are molded into the structure of traditional Prolog implementations to support branching in unification and carrying of unification problems over other computation steps; a premium is placed in this context on exploiting determinism and on emulating usual first-order behaviour. An extended compilation model is presented that treats higher-order unification and also handles dynamically emergent goals. The ideas described here have been employed in the Teyjus implementation of the $\lambda$Prolog language, a fact that is used to obtain a preliminary assessment of their efficacy.