Abstract
Stimulated by concerns of software certification especially as it relates to mobile code, formal structures such as specifications and proofs are beginning to play an explicit role in computing. In represent- ing and manipulating such structures, an approach is needed that pays attention to the binding operation that is present in them. The language λProlog provides programming support for a higher-order treatment of abstract syntax that is especially suited to this task. This support is realized by enhancing the traditional strength of logic programming in the metalanguage realm with an ability for dealing directly with binding structure. This paper identifies the features of Prolog that endow it with such a capability, illustrates their use and and describes methods for their implementation. Also discussed is a new realization of Prolog called Teyjus that incorporates the implementation ideas presented.
Acknowledgements
B. Jayaraman, K. Kwon and D.S. Wilson assisted in the design of the Prolog abstract machine and L. Headley, D.J. Mitchell, S.-M. Perng and G. Tong helped in the implementation of the Teyjus system. Support for this work has been provided by NSF at different stages under the grants CCR-8905825, CCR-9208465, CCR-9596119, CCR-9803849 and CCR-0096322.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
References
M. Abadi, L. Cardelli, P.-L. Curien, and J.-J. Lévy. Explicit substitutions. Journal of Functional Programming, 1(4):375–416, 1991.
A. W. Appel and A. P. Felty. Lightweight lemmas in λProlog. In International Conference on Logic Programming, pages 411–425. MIT Press, November 1999.
P. Brisset and O. Ridoux. Naive reverse can be linear. In K. Furukawa, editor, Eighth International Logic Programming Conference, pages 857–870. MIT Press, June 1991.
P. Brisset and O. Ridoux. The compilation of λProlog and its execution with MALI. Publication Interne 687, IRISA, 1992.
G. Dowek, T. Hardin, and C. Kirchner. Higher-order unification via explicit substitutions. Information and Computation, 157:183–235, 2000.
A. Felty. Implementing tactics and tacticals in a higher-order logic programming language. Journal of Automated Reasoning, 11(1):43–81, August 1993.
J. Hannan and D. Miller. From operational semantics to abstract machines. Mathematical Structures in Computer Science, 2(4):415–459, 1992.
G. Huet. A unification algorithm for typed λ-calculus. Theoretical Computer Science, 1:27-57, 1975.
G. Huet and B. Lang. Proving and applying program transformations expressed with second-order patterns. Acta Informatica, 11:31–55, 1978.
K. Kwon, G. Nadathur, and D.S. Wilson. Implementing polymorphic typing in a logic programming language. Computer Languages, 20(1):25–42, 1994.
J. Lamping. An algorithm for optimal lambda calculus reduction. In Seventeenth Annual ACM Symposium on Principles of Programming Languages, pages 16–30. ACM Press, 1990.
J.-J. Lévy. Optimal reductions in the lambda-calculus. In J.P. Seldin and J.R. Hindley, editors, To H.B. Curry: Essays on Combinatory Logic, Lambda Calculus and Formalism, pages 159–191. Academic Press, 1980.
C. Liang. Let-polymorphism and eager type schemes. In TAPSOFT ’97: Theory and Practice of Software Development, pages 490–501. Springer Verlag LNCS Vol. 1214, 1997.
S. Michaylov and F. Pfenning. An empirical study of the runtime behavior of higher-order logic programs. In D. Miller, editor, Proceedings of the Workshop on the λProlog Programming Language, pages 257–271, July 1992. Available as University of Pennsylvania Technical Report MS-CIS-92-86.
D. Miller. A logic programming language with lambda-abstraction, function variables, and simple unification. Journal of Logic and Computation, 1(4):497–536, 1991.
D. Miller. Unification under a mixed prefix. Journal of Symbolic Computation, 14:321–358, 1992.
D. Miller. A proposal for modules in λProlog. In R. Dyckho, editor, Proceedings of the 1993 Workshop on Extensions to Logic Programming, pages 206–221. Springer-Verlag, 1994. Volume 798 of Lecture Notes in Computer Science.
D. Miller, G. Nadathur, F. Pfenning, and A. Scedrov. Uniform proofs as a foundation for logic programming. Annals of Pure and Applied Logic, 51:125–157, 1991.
G. Nadathur. A proof procedure for the logic of hereditary Harrop formulas. Journal of Automated Reasoning, 11(1):115–145, August 1993.
G. Nadathur. An explicit substitution notation in a λProlog implementation. Technical Report TR-98-01, Department of Computer Science, University of Chicago, January 1998.
G. Nadathur. A fine-grained notation for lambda terms and its use in intensional operations. Journal of Functional and Logic Programming, 1999(2), March 1999.
G. Nadathur, B. Jayaraman, and K. Kwon. Scoping constructs in logic programming: Implementation problems and their solution. Journal of Logic Programming, 25(2):119–161, November 1995.
G. Nadathur, B. Jayaraman, and D.S. Wilson. Implementation considerations for higher-order features in logic programming. Technical Report CS-1993-16, Department of Computer Science, Duke University, June 1993.
G. Nadathur and D. Miller. Higher-order logic programming. In D. Gabbay, C. Hogger, and A. Robinson, editors, Handbook of Logic in Artificial Intelligence and Logic Programming, volume 5, pages 499–590. Oxford University Press, 1998.
G. Nadathur and D.J. Mitchell. System description: Teyjus—a compiler and abstract machine based implementation of λProlog. In H. Ganzinger, editor, Automated Deduction-CADE-16, number 1632 in Lecture Notes in Artificial Intelligence, pages 287–291. Springer-Verlag, July 1999.
G. Nadathur and F. Pfenning. The type system of a higher-order logic programming language. In F. Pfenning, editor, Types in Logic Programming, pages 245–283. MIT Press, 1992.
G. Nadathur and G. Tong. Realizing modularity in λProlog. Journal of Functional and Logic Programming, 1999(9), April 1999.
G. Nadathur and D. S. Wilson. A notation for lambda terms: A generalization of environments. Theoretical Computer Science, 198(1-2):49–98, 1998.
G.C. Necula. Proof-carrying code. In 24th Annual ACM Symposium on Principles of Programming Languages, pages 106–119. ACM Press, January 1997.
F. Pfenning. Logic programming in the LF logical framework. In G. Huet and G.D. Plotkin, editors, Logical Frameworks, pages 149–181. Cambridge University Press, 1991.
F. Pfenning and C. Elliott. Higher-order abstract syntax. In Proceedings of the ACM-SIGPLAN Conference on Programming Language Design and Implementation, pages 199–208. ACM Press, June 1988.
F. Pfenning and C. Schürmann. System description: Twelf-a meta-logical framework for deductive systems. In H. Ganzinger, editor, Proceedings of the 16th International Conference on Automated Deduction (CADE-16), pages 202–206, Trento, Italy, July 1999. Springer-Verlag LNAI 1632.
O. Ridoux. MALIv06: Tutorial and reference manual. Publication Interne 611, IRISA, 1991.
N. Shankar. Proof search in the intuitionistic sequent calculus. In D. Kapur, editor, Automated Deduction-CADE-11, number 607 in Lecture Notes in Computer Science, pages 522–536. Springer Verlag, June 1992.
D.H.D. Warren. An abstract Prolog instruction set. Technical Note 309, SRI International, October 1983.
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2001 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Nadathur, G. (2001). The Metalanguage λprolog and Its Implementation. In: Kuchen, H., Ueda, K. (eds) Functional and Logic Programming. FLOPS 2001. Lecture Notes in Computer Science, vol 2024. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-44716-4_1
Download citation
DOI: https://doi.org/10.1007/3-540-44716-4_1
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-41739-2
Online ISBN: 978-3-540-44716-0
eBook Packages: Springer Book Archive