A polymorphic type system for PROLOG.
Artificial Intelligence
Elf: a language for logic definition and verified metaprogramming
Proceedings of the Fourth Annual Symposium on Logic in computer science
TIL: a type-directed optimizing compiler for ML
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
Horn Clause Programs with Polymorphic Types: Semantics and Resolution
TAPSOFT '89 Proceedings of the International Joint Conference on Theory and Practice of Software Development, Volume 2: Advanced Seminar on Foundations of Innovative Software Development II and Colloquium on Current Issues in Programming Languages
System Description: Teyjus - A Compiler and Abstract Machine Based Implementation of lambda-Prolog
CADE-16 Proceedings of the 16th International Conference on Automated Deduction: Automated Deduction
Practical higher-order pattern unification with on-the-fly raising
ICLP'05 Proceedings of the 21st international conference on Logic Programming
ACM Transactions on Programming Languages and Systems (TOPLAS)
Towards a Type Discipline for Answer Set Programming
Types for Proofs and Programs
Eliminating redundancy in higher-order unification: a lightweight approach
IJCAR'06 Proceedings of the Third international joint conference on Automated Reasoning
Hi-index | 0.00 |
The traditional purpose of types in programming languages of providing correctness assurances at compile time is increasingly being supplemented by a direct role for them in the computational process. In the context of typed logic programming, this is manifest in their effect on the unification operation. Their influence takes two different forms. First, in a situation where polymorphism is permitted, type information is needed to determine if different occurrences of the same name in fact denote an identical constant. Second, type information may determine the form of bindings for variables. When types are needed for the second purpose as in the case of higher-order unification, these have to be available with every variable and constant. However, in situations such as first-order and higher-order pattern unification, types have no impact on the variable binding process. As a consequence, type examination is needed in these situations only for the first of the two purposes described and even here a careful preprocessing can considerably reduce their runtime footprint. We develop a scheme for treating types in these contexts that exploits this observation. Under this scheme, type information is elided in most cases and is embedded into term structure when this is not entirely possible. Our approach obviates types when properties known as definitional genericity and type preservation are satisfied and has the advantage of working even when these conditions are violated.