Results 1 - 10
of
23
Constraint Logic Programming: A Survey
"... Constraint Logic Programming (CLP) is a merger of two declarative paradigms: constraint solving and logic programming. Although a relatively new field, CLP has progressed in several quite different directions. In particular, the early fundamental concepts have been adapted to better serve in differe ..."
Abstract
-
Cited by 705 (20 self)
- Add to MetaCart
Constraint Logic Programming (CLP) is a merger of two declarative paradigms: constraint solving and logic programming. Although a relatively new field, CLP has progressed in several quite different directions. In particular, the early fundamental concepts have been adapted to better serve in different areas of applications. In this survey of CLP, a primary goal is to give a systematic description of the major trends in terms of common fundamental concepts. The three main parts cover the theory, implementation issues, and programming for applications.
Information Filtering: Selection Mechanisms In Learning Systems
, 1989
"... interpreter for logic programs (Sterling & Shapiro, 1986)...................138 1 1. INTRODUCTION The most important outcome of AI research during the 70s was the general acceptance of the major role of knowledge in intelligent systems (Buchanan & Feigenbaum, 1982). Lenat and Feigenbaum (1989) call ..."
Abstract
-
Cited by 37 (8 self)
- Add to MetaCart
interpreter for logic programs (Sterling & Shapiro, 1986)...................138 1 1. INTRODUCTION The most important outcome of AI research during the 70s was the general acceptance of the major role of knowledge in intelligent systems (Buchanan & Feigenbaum, 1982). Lenat and Feigenbaum (1989) call this belief the knowledge as power hypothesis and assert it as: "The knowledge principle (KP) A system exhibits intelligent understanding and action at a high level of competence primarily because of the specific knowledge that it can bring to bear: the concepts, facts, representations, methods, models, metaphors, and heuristics about its domain of endeavor." Or as Buchanan and Feigenbaum (Buchanan & Feigenbaum, 1982) put it, "the power of an intelligent program to perform its task well depends primarily on the quantity and quality of knowledge it has about that task." Thus, it is not surprising that the general attitude toward knowledge was a greedy one - grab as much knowledge as you ca...
Parsing and Compiling Using Prolog
- ACM Transactions on Programming Languages and Systems
, 1987
"... This paper presents the material needed for exposing the reader to the advantages of using Prolog as a language for describing succinctly most of the algorithms needed in prototyping and implementing compilers or producing tools that facilitate this task. The available published material on the subj ..."
Abstract
-
Cited by 26 (2 self)
- Add to MetaCart
This paper presents the material needed for exposing the reader to the advantages of using Prolog as a language for describing succinctly most of the algorithms needed in prototyping and implementing compilers or producing tools that facilitate this task. The available published material on the subject describes one particular approach in implementing compilers using Prolog. It consists of coupling actions to recursive descent parsers to produce syntax-trees which are subsequently utilized in guiding the generation of assembly language code. Although this remains a worthwhile approach, there is a host of possibilities for Prolog usage in compiler construction. The primary aim of this paper is to demonstrate the use of Prolog in parsing and compiling. A second, but equally important, goal of this paper is to show that Prolog is a labor-saving tool in prototyping and implementing many non-numerical algorithms which arise in compiling, and whose description using Prolog is not available in the literature. The paper discusses the use of unification and nondeterminism in compiler writing as well as means to bypass these (costly) features when they are deemed unnecessary. Topics covered include bottom-up and top-down parsers, syntax-directed translation, grammar properties, parser generation, code generation, and optimixations. Newly proposed features that are useful in compiler construction are also discussed. A knowledge of Prolog is assumed.
Residuation and Guarded Rules for Constraint Logic Programming
, 1993
"... Current constraint logic programming languages provide simplification for built-in constraints (e.g., arithmetic or boolean), but do not offer constraint propagation for user-defined predicates. We present two concepts, residuation and guarded rules, for obtaining user-defined constraint propagat ..."
Abstract
-
Cited by 24 (2 self)
- Add to MetaCart
Current constraint logic programming languages provide simplification for built-in constraints (e.g., arithmetic or boolean), but do not offer constraint propagation for user-defined predicates. We present two concepts, residuation and guarded rules, for obtaining user-defined constraint propagation. Residuation is a
Coroutining and the Construction of Terminating Logic Programs
- Australian Computer Science Communications
, 1992
"... This paper investigates the role of coroutining in the termination of logic programs. We define a variant of SLD resolution, in which the execution of atoms may be suspended indefinitely, and give some basic results concerning success, finite failure and floundering. Next we discuss how correct proc ..."
Abstract
-
Cited by 23 (1 self)
- Add to MetaCart
This paper investigates the role of coroutining in the termination of logic programs. We define a variant of SLD resolution, in which the execution of atoms may be suspended indefinitely, and give some basic results concerning success, finite failure and floundering. Next we discuss how correct procedures can be combined to form new procedures using disjunction, conjunction and recursion. We argue that modes are crucial to reasoning about termination and show that cyclic modes are the basic reason for conjunctions looping. When recursion is used we identify another cause of loops: speculative binding of output variables. That is, binding output variables before it is known that a solution to a subcomputation exists. Keywords: mode, flounder, Prolog, stream and-parallelism -- 1 -- 1 Introduction
Operational Semantics of Constraint Logic Programs with Coroutining
- In Proceedings of ICLP'95, International Conference on Logic Programming
, 1995
"... The semantics of constraint logic programming languages with coroutining facilities (e.g., "freeze," suspension, residuation) cannot be fully declarative. Thus, an operational semantics has to be taken as the defining one. We give a formal operational semantics for a Prolog-like language with cut an ..."
Abstract
-
Cited by 14 (1 self)
- Add to MetaCart
The semantics of constraint logic programming languages with coroutining facilities (e.g., "freeze," suspension, residuation) cannot be fully declarative. Thus, an operational semantics has to be taken as the defining one. We give a formal operational semantics for a Prolog-like language with cut and entailment-based conditional. Our approach is derived from those used for concurrent calculi. We use congruence laws and tree-rewriting rules to define the semantics. We model the execution of a program by a sequence of abstract-tree rewriting steps. This semantics serves as a defining tool for the language designer and as the interface between the language designer and implementor; it allows the programmer to check his intuition with a formal execution model and it gives him a performance measure for the execution of programs. We have used the semantics to make precise, for the first time, the critical interaction between sequential execution (including backtracking and cut pruning) and c...
Dynamic Predicates in Functional Logic Programs
- Journal of Functional and Logic Programming
, 2004
"... In this paper we propose a new concept to deal with dynamic predicates in functional logic programs. The definition of a dynamic predicate can change over time, i.e., one can add or remove facts that define this predicate. Our approach is easy to use and has a clear semantics that does not depend on ..."
Abstract
-
Cited by 14 (6 self)
- Add to MetaCart
In this paper we propose a new concept to deal with dynamic predicates in functional logic programs. The definition of a dynamic predicate can change over time, i.e., one can add or remove facts that define this predicate. Our approach is easy to use and has a clear semantics that does not depend on the particular (demand-driven) evaluation strategy of the underlying implementation. In particular, the concept is not based on (unsafe) side effects so that the order of evaluation does not influence the computed results—an essential requirement in non-strict languages. Dynamic predicates can also be persistent so that their definitions are saved across invocations of programs. Thus, dynamic predicates are a lightweight alternative to the explicit use of external database systems. Moreover, they extend one of the classical application areas of logic programming to functional logic programs. We present the concept, its use and an implementation in a Prolog-based compiler. 1 Motivation and Related Work Functional logic languages [11] aim to integrate the best features of functional and logic languages in order to provide a variety of programming concepts to the programmer. For instance, the concepts of demand-driven evaluation, higherorder functions, and polymorphic typing from functional programming can be combined with logic programming features like computing with partial information (logical variables), constraint solving, and non-deterministic search for solutions. This combination leads to optimal evaluation strategies [2] and new design patterns [4] that can be applied to provide better programming abstractions, e.g., for implementing graphical user interfaces [13] or programming dynamic web pages [14]. However, one of the traditional application areas of logic programming is not yet sufficiently covered in existing functional logic languages: the combination
A typed foundation for directional logic programming
- In Proc. Workshop on Extensions to Logic Programming
, 1992
"... Abstract. A long standing problem in logic programming is how to impose directionality on programs in a safe fashion. The benefits of directionality include freedom from explicit sequential control, the ability to reason about algorithmic properties of programs (such as termination, complexity and d ..."
Abstract
-
Cited by 11 (1 self)
- Add to MetaCart
Abstract. A long standing problem in logic programming is how to impose directionality on programs in a safe fashion. The benefits of directionality include freedom from explicit sequential control, the ability to reason about algorithmic properties of programs (such as termination, complexity and deadlock-freedom) and controlling concurrency. By using Girard’s linear logic, we are able to devise a type system that combines types and modes into a unified framework, and enables one to express directionality declaratively. The rich power of the type system allows outputs to be embedded in inputs and vice versa. Type checking guarantees that values have unique producers, but multiple consumers are still possible. From a theoretical point of view, this work provides a “logic programming interpretation ” of (the proofs of) linear logic, adding to the concurrency and functional programming interpretations that are already known. It also brings logic programming into the broader world of typed languages and types-as-propositions paradigm, enriching it with static scoping and higher-order features.
A near-Horn Prolog for Compilation
- Computational Logic: Essays in Honor of Alan
, 1989
"... Near-Horn Prolog is a logic programming language which extends Prolog to handle non-Horn clauses. It was designed with the goal of minimizing the performance loss for programs with very few non-Horn clauses, while preserving the Prolog format. In this paper, we present a version of near-Horn Prolog ..."
Abstract
-
Cited by 9 (4 self)
- Add to MetaCart
Near-Horn Prolog is a logic programming language which extends Prolog to handle non-Horn clauses. It was designed with the goal of minimizing the performance loss for programs with very few non-Horn clauses, while preserving the Prolog format. In this paper, we present a version of near-Horn Prolog that provides a stronger proof system than used by previous near-Horn procedures, and takes advantage of the preprocessing capability of compilers to reduce the accompanying performance penalty. In fact, for a sizable class of non-Horn programs the added inference rule strength incurs no performance penalty at all. In addition to describing this variant, called Inheritance near-Horn Prolog, we prove its soundness and (classical) completeness. 1 Introduction Prolog has been a very successful realization of the concept of logic programming, becoming a serious alternative to LISP as an AI language and enjoying considerable commercial success. However, it has also been clear that a single lan...
Termination of Logic Programs with block Declarations Running in Several Modes
- Proceedings of the 10th Symposium on Programming Language Implementations and Logic Programming, LNCS
, 1998
"... We show how termination of logic programs with delay declarations can be proven. Three features are distinctive of this work: (a) we assume that predicates can be used in several modes; (b) we show that block declarations, which are a very simple delay construct, are sufficient; (c) we take the sele ..."
Abstract
-
Cited by 9 (5 self)
- Add to MetaCart
We show how termination of logic programs with delay declarations can be proven. Three features are distinctive of this work: (a) we assume that predicates can be used in several modes; (b) we show that block declarations, which are a very simple delay construct, are sufficient; (c) we take the selection rule into account, assuming it to be as in most Prolog implementations. Our method is based on identifying the so-called robust predicates, for which the textual position of an atom using this predicate is irrelevant. The method can be used to verify existing programs, and to assist in writing new programs. As a byproduct, we also show how programs can be proven to be free from occur-check and floundering.

