Fact-checked by Grok 2 weeks ago

SLD resolution

SLD resolution, or Selective Linear Definite clause resolution, is an in and that applies linear restricted to definite clauses, which are clauses with exactly one positive literal, using a selection function to choose literals for resolution. It enables the of answer substitutions for queries against a expressed as a set of definite clauses, forming the core mechanism for goal-directed proof search in programs. The procedure is both sound—ensuring that all derived answers are logical consequences of the program—and complete under fair selection strategies, meaning it can find all valid answers if the search terminates. Introduced as a refinement of general resolution in the early 1970s, SLD resolution builds on SL-resolution, a linear variant proposed by and Donald Kuehner in 1971 to improve efficiency by restricting resolutions to a single chain and incorporating a selection for literal . further developed it in 1974 as the operational foundation for interpreting predicate logic as a programming language, shifting focus from theorem proving to where programs are logic theories and computations are proofs. The soundness of SLD resolution was established early, while its completeness for definite programs was first proved by Robert Hill in 1974. In practice, SLD resolution powers the execution model of , the seminal language implemented in 1972 by Alain Colmerauer and colleagues, through with chronological to explore resolution paths. A computation begins with a query , a of formulas; an atom is selected, unified with the head of a program clause via a most general unifier, and replaced by the clause's body to yield a resolvent , accumulating substitutions along successful refutations to the empty clause. This approach supports variables in queries, allowing generalization and efficient handling of relational data, though practical implementations like may omit certain checks (e.g., the occurs check) for performance, potentially affecting completeness in infinite structure cases.

Foundations

Definition and Properties

SLD resolution is the core inference mechanism employed in first-order logic programming with definite clause programs, which are finite sets of definite clauses. A is defined as a disjunction of literals containing at most one positive literal, while a definite (or definite clause) is a with exactly one positive literal as the head and a (possibly empty) of positive literals in the body. SLD serves as a refinement of the general resolution principle, specifically a special case of SL-resolution adapted for definite clauses, utilizing to derive refutations from an initial goal clause expressed as a of atoms in the form \leftarrow A_1 \land \dots \land A_n, where each A_i is an atom. Developed in the as a foundational element of , SLD resolution enables the operational execution of definite programs by systematically reducing goals through steps, thereby supporting the procedural interpretation of logical specifications. It is inherently restricted to definite clauses, ensuring that clause bodies consist solely of positive literals, which aligns with the positive underlying definite programs and facilitates . SLD resolution possesses key properties of soundness and refutation-completeness with respect to Horn clauses. Soundness guarantees that any derived fact or answer obtained via an SLD-refutation is a of the program, preserving semantic correctness. Refutation-completeness ensures that for any unsatisfiable set of Horn clauses—meaning any provable —there exists an SLD-refutation demonstrating the inconsistency, thereby allowing the procedure to establish all derivable theorems within definite logic programs.

Historical Development

SLD resolution emerged in the early 1970s as a refinement of earlier resolution-based theorem proving techniques, building on the foundational work of J. Alan Robinson, who introduced the general resolution principle in 1965 to enable machine-oriented automated deduction from formulas. This general method, while complete, was computationally inefficient for practical applications, prompting researchers to develop specialized variants like linear input resolution to focus on ordered derivations and improve efficiency in programming contexts. A pivotal step toward SLD came from efforts to provide a procedural of logical clauses, particularly clauses, for computational purposes. In 1969, and Patrick J. Hayes explored semantic trees in automatic theorem proving, introducing ideas of procedural attachment that linked logical inference to executable procedures, laying groundwork for interpreting steps as program execution. Building on this, and Donald Kuehner formalized SL in 1971 as a selective linear variant of resolution, incorporating a selection function to restrict inferences to relevant literals and enhance focus in top-down derivations from definite clauses. The inference rule underlying SLD resolution was introduced by in 1974, and the name "SLD resolution," standing for Selective Linear Definite clause resolution, was given by Maarten H. van Emden in a 1974 memo at the . This development coincided with Alain Colmerauer's creation of in 1972, during which Kowalski's visit to influenced the adoption of a top-down resolution strategy based on SLD principles for tasks. The first implementation of SLD resolution occurred in the initial interpreter written in 1972 by Colmerauer and Philippe Roussel using Algol-W on an IBM 360, demonstrating its viability as an for logic programs. By 1973, refinements to incorporated SLD resolution more robustly, and David H.D. Warren's DEC-10 implementation in the mid-1970s further entrenched it as the theoretical foundation for languages, enabling efficient and unification in practical systems. This evolution marked a shift from general proving to , where SLD resolution provided a sound and complete mechanism for computing answers from logic programs.

Inference Mechanism

The SLD Inference Rule

The SLD inference rule, central to SLD resolution in logic programming, enables the systematic reduction of goals using definite clauses from a program P, which consists of Horn clauses of the form H \leftarrow B_1 \wedge \cdots \wedge B_m where H and each B_j are atomic formulas and m \geq 0. A goal is represented as a conjunction G = \leftarrow L_1 \wedge \cdots \wedge L_n, where the L_i are literals (atomic formulas in this context, as negation is not handled). The rule selects a literal L_i from the current goal and resolves it against a head H of a clause in P. Formally, the rule is stated as follows: Given goal G = \leftarrow L_1, \dots, L_{i-1}, L_i, L_{i+1}, \dots, L_n and clause C = H \leftarrow B_1, \dots, B_m (with variables renamed apart to avoid clashes), if \theta = \mathrm{mgu}(L_i, H) exists, then the derived goal is G' = \theta (L_1, \dots, L_{i-1}, B_1, \dots, B_m, L_{i+1}, \dots, L_n), where the empty body (m = 0) simply removes L_i after . This derivation step replaces the selected literal with the clause body under the most general unifier, preserving while reducing the . The process relies on unification to match the selected literal with the clause . An SLD derivation is a finite or infinite sequence G_0, G_1, \dots starting from an initial G_0, where each G_{k+1} is obtained from G_k by applying the SLD with some selection of literal and choice of . The linear nature of the rule ensures that only one new is introduced per step, focusing the search along a single of goal reductions. Success occurs via an SLD refutation: a finite ending in the empty \square, with the computed substitution being the composition \theta_1 \theta_2 \cdots \theta_r restricted to the variables of G_0; failure arises if no unifiable exists for any remaining literal before reaching \square. This inference mechanism, introduced by to interpret predicate logic procedurally, underpins the operational semantics of languages like , ensuring goal-directed computation through repeated resolution steps.

Unification Process

In unification, the process seeks a substitution \theta that renders two terms s and t identical, such that s\theta = t\theta. A most general unifier (MGU) is the least restrictive such substitution, meaning any other unifier \sigma satisfies \sigma = \theta \circ \rho for some substitution \rho. This concept ensures that unification preserves generality in logical inferences, avoiding overly specific bindings that could limit further derivations. The unification algorithm, originally formulated for resolution-based systems, operates by iteratively resolving differences between terms. It begins by initializing an empty and identifying the disagreement set—the pairs of corresponding subterms that differ. For each disagreement pair involving a V and a non-variable term U, if V does not occur in U (via the occurs check, which prevents cycles like X = f(X)), the algorithm binds V to U and applies this to the terms, updating the disagreement set. repeats until no disagreements remain or a arises (e.g., distinct constants). This yields the MGU if successful, and the occurs check is crucial for terminating in finite time and avoiding infinite structures. A representative example illustrates the process: unifying p(X, a) and p(b, Y) proceeds by disagreeing on the first argument (X vs. b) and second (a vs. Y). Binding X/b resolves the first, then Y/a the second, with no occurs check violation, producing the MGU \theta = \{X/b, Y/a\}. Such steps operate over the Herbrand universe, the set of all ground terms constructible from the function symbols in the language, ensuring unification aligns with the Herbrand base for semantic completeness. Disagreement sets guide efficient scanning, often implemented via pointer-based methods in practice. In SLD resolution, unification is applied at each step to a selected literal with a program clause head, yielding an MGU that instantiates the resolvent. Substitutions from successive steps are composed, where \theta_1 \circ \theta_2 applies \theta_2 first followed by \theta_1, accumulating bindings to form the overall computed while maintaining consistency. This , along with the occurs , underpins the of SLD derivations in definite programs.

Operational Aspects

Computational Interpretation

In logic programming, SLD resolution interprets definite clause programs computationally via , where an initial goal representing a query is reduced step by step until it is either satisfied or fails, simulating a proof search from the query backward to the program's clauses as axioms. This process aligns the declarative semantics of clauses with a procedural mechanism for theorem proving and query answering, as originally proposed in the context of predicate logic as a programming language. The execution model of SLD resolution starts with an initial clause G_0, typically a conjunction of atoms to be derived from the P. At each step, a literal A is selected from the current G_i, and a A' \leftarrow B_1, \dots, B_n from P is chosen such that there exists a most general unifier \theta for A and A'; the next G_{i+1} is then (G_i - \{A\}) \theta \cup \{B_1 \theta, \dots, B_n \theta\}. This reduction continues until the becomes the empty clause (denoted \square), indicating success and a refutation, or until no further resolution is possible, indicating failure. Along a successful derivation, substitutions \theta_1, \theta_2, \dots, \theta_k are accumulated, and the computed answer substitution is their composition \theta = \theta_1 \circ \theta_2 \circ \dots \circ \theta_k, which binds variables in the original query to values satisfying it relative to P. The search space of all possible SLD derivations from G_0 forms the SLD , with nodes representing goals and edges corresponding to steps under a fixed for literals. SLD is refutation-complete for definite programs, meaning that if P \cup \{ \leftarrow G_0 \} has a refutation (i.e., G_0 is a of P), then the SLD contains at least one finite successful leading to \square, ensuring that an exhaustive fair search will find a proof if one exists. This completeness property underpins the reliability of SLD as a query evaluation mechanism in systems like , though practical implementations often employ specific search strategies to navigate the tree efficiently.

Resolution Strategies

In SLD resolution, the search process explores the SLD derivation , where nodes represent or subgoals, and branches arise from the selection of literals within a goal and the choice of applicable clauses from the . This encapsulates all possible derivations for a given query, with paths leading to success (empty ), failure, or infinite loops depending on the 's properties. The and of resolution depend on the used to traverse this tree, as well as the selection functions that guide literal and clause choices. Common strategies include , which is the default in systems like and employs chronological to explore branches sequentially. In this approach, the search commits to the deepest path first, selecting the leftmost literal in the goal (per Prolog's standard selection function) and trying clauses in top-down program order before upon failure. While space-efficient, risks non-termination on programs with infinite branches, such as left-recursive rules, potentially missing solutions or looping indefinitely. Breadth-first search, by contrast, explores all goals at a given depth before proceeding deeper, ensuring completeness by systematically examining the entire finite SLD tree without favoring any path prematurely. However, it is memory-intensive, as it requires storing all pending subgoals, making it impractical for large programs. Iterative deepening combines elements of both by performing successive depth-first searches with increasing depth bounds, achieving completeness akin to breadth-first while maintaining the space efficiency of depth-first; this strategy is asymptotically optimal in time and space for brute-force searches in tree-structured spaces. Selection functions play a crucial role in these strategies, determining which literal in the current goal is resolved next—typically the leftmost for simplicity and efficiency in —and which clauses are considered, often in the order they appear in the program. For , strategies must be fair, meaning every finite branch in the SLD tree is eventually explored, avoiding biases that could omit solutions; unfair selections, like those in standard depth-first, may fail this in infinite trees despite .

Extensions and Variants

SLDNF Resolution

SLDNF resolution extends the SLD resolution mechanism to accommodate negation as failure in normal logic programs, where clauses may include negative literals of the form not(P), with P being a of atoms. In this framework, positive literals are resolved using standard SLD steps, while a negative literal not(P) succeeds if the subgoal P fails to derive, meaning no refutation exists for P under SLD resolution. This operational treatment of negation allows systems like to handle incomplete information by inferring the absence of facts when exhaustive search yields no proof. The SLDNF inference rule mirrors SLD for positive goals but introduces branching for . Specifically, when a negative literal not(A) is selected—provided A is to avoid floundering—the attempts an SLD for A; the negation succeeds (and the overall goal proceeds) only if this derivation finitely fails, yielding an empty refutation tree, whereas it fails if any successful derivation for A is found. For non- negative literals, SLDNF requires them to be before selection to prevent floundering, where the computation halts without committing to success or . This rule operationalizes as a search for rather than classical , enabling practical computation in top-down evaluators. SLDNF resolution is sound with respect to Clark's semantics, correctly deriving only logical consequences of the program's , where predicates are interpreted as if-then equivalences and as failure aligns with the . However, it is not complete for arbitrary normal programs due to issues like floundering and loops in ; completeness holds for stratified programs, where dependencies form a layered without through , ensuring the least Herbrand model coincides with the perfect model. In such cases, SLDNF captures the model semantics for queries without floundering, alternating between success and failure sets in a fixed-point manner. These properties make SLDNF the foundational for in , though it requires careful program design to avoid incompleteness.

Modern Extensions

Modern extensions of SLD resolution have addressed limitations in handling and in programs, particularly the incompleteness of SLDNF for non-stratified , by integrating advanced semantics and mechanisms. The model semantics, introduced by Gelfond and Lifschitz in 1988, provides a declarative foundation for non-monotonic reasoning in programs, enabling SLD-like procedures to compute models as fixed points of a reduct transformation, which extends the least model semantics of definite programs to disjunctive and normal programs. This integration allows resolution-based solvers to identify multiple models, supporting (ASP) where SLD resolution variants, such as credulous resolution, perform goal-directed search over answer sets without full grounding. In disjunctive logic programs, which generalize normal programs by allowing disjunctions in rule heads, SLD-like resolution has been extended through procedures such as near-Horn Prologs. These methods incorporate to handle disjunctive heads, mimicking SLD's linear while ensuring under the well-founded semantics for disjunctive programs. For instance, the D-SLS strategy builds on SLD by delaying loops and managing unfounded sets, providing a top-down evaluation that avoids the inefficiencies of bottom-up approaches in disjunctive settings. To mitigate infinite loops and redundant computations in recursive queries, tabling techniques via SLG resolution have become a cornerstone extension, implemented in systems like XSB . SLG resolution, a linear variant of SLS resolution, memoizes subgoals and answers during SLD-style derivations, computing the well-founded model for general logic programs by suspending and resuming calls as needed. This approach ensures termination for a broader class of programs, including those with negation, and supports advanced features like call-answer subsumption for efficiency. Constraint Handling Rules (CHR) represent another extension, augmenting SLD resolution with multi-headed guarded rules for constraint simplification and propagation in . CHR programs execute via committed-choice semantics that interleave with Prolog's SLD resolution, allowing dynamic constraint stores to handle domains like numerical s or custom solvers without altering the core unification process. This integration enables CHR to serve as a host language for implementing extensions, where rules fire on the current store during SLD derivations. Recent developments have hybridized SLD resolution with probabilistic and paradigms to tackle uncertainty and scalability. In programming, systems like ProbLog extend SLD resolution to compute marginal probabilities over logic programs by annotating facts with probabilities and using SLD derivations to enumerate explanations, as in the ProbLog inference engine which lifts SLD trees into probabilistic queries. For neural proving, post-2020 works integrate with SLD, such as DeepProofLog, which employs stochastic SLD resolution to define distributions over proofs, guiding neural networks in learning resolution strategies for tasks. These hybrids enhance SLD's applicability in uncertain domains like completion, where neural guidance prunes search spaces while preserving logical soundness.

Applications and Examples

Illustrative Examples

To illustrate the mechanics of SLD resolution, consider a basic logic program consisting of the definite parent(X, Y) ← mother(X, Y). and the unit mother(ann, bob). The goal ← parent(ann, bob). is processed by selecting the literal parent(ann, bob) and unifying it with the head parent(X, Y), yielding the θ = {X/ann, Y/bob}. The resolvent is then ← mother(ann, bob)., obtained by applying θ to the body. This new goal unifies directly with the fact mother(ann, bob)., resulting in the empty goal and a successful with computed answer { }. A step-by-step of this SLD forms a linear path in the SLD tree:
  1. Initial : G_0 = ← parent(ann, bob).
  2. Select literal parent(ann, bob) and resolve with parent(X, Y) ← mother(X, Y). using θ_1 = {X/ann, Y/bob}, yielding G_1 = ← mother(ann, bob).
  3. Select literal mother(ann, bob) and resolve with unit mother(ann, bob). using θ_2 = { }, yielding the empty G_2 = ← .
This refutation succeeds, confirming the goal under the program's least Herbrand model. In a failure case with the same program, the goal ← parent(ann, sue). selects parent(ann, sue) and unifies with the clause head parent(X, Y) using θ = {X/ann, Y/sue}, producing G_1 = ← mother(ann, sue). No program clause unifies with mother(ann, sue)., so the derivation terminates in failure with no computed substitution. To demonstrate resolution strategies, particularly depth-first search with backtracking, extend the program to include an additional clause parent(X, Y) ← father(X, Y). along with facts mother(ann, bob). and father(ann, sue). For the goal ← parent(ann, X)., depth-first traversal first selects parent(ann, X) and resolves with parent(X, Y) ← mother(X, Y). using θ_1 = {X/ann, Y/X} (renaming variables apart), yielding G_1 = ← mother(ann, X). This unifies with mother(ann, bob). using θ_2 = {X/bob}, succeeding with partial answer {X/bob}. Backtracking then returns to the selection point, trying the alternative clause parent(X, Y) ← father(X, Y). with θ_3 = {X/ann, Y/X}, yielding G_2 = ← father(ann, X). Unification with father(ann, sue). gives θ_4 = {X/sue}, producing another success with {X/sue}. This process explores the SLD tree depth-first, enumerating all solutions via systematic backtracking over clause choices.

Practical Applications

SLD resolution serves as the foundational inference mechanism in the Prolog programming language, which is standardized by the International Organization for Standardization (ISO) under ISO/IEC 13211, defining its operational semantics through depth-first search with leftmost selection and chronological backtracking. Modern Prolog engines, such as SWI-Prolog and GNU Prolog, implement SLD resolution with various optimizations, including just-in-time compilation and efficient unification algorithms, to enhance performance in practical computing environments. These implementations support the execution of logic programs in domains requiring declarative reasoning, with SWI-Prolog extending SLD through features like tabling for improved termination properties. In knowledge representation, SLD resolution powers expert systems built with , enabling rule-based inference for decision support in fields like and , where facts and rules are queried declaratively to derive conclusions. For , it facilitates parsing through Definite Clause Grammars (DCGs), a extension that models as logic rules, allowing efficient top-down analysis of sentences in applications such as and development. Additionally, SLD resolution underpins in tools, where -based systems check properties of software and hardware models by resolving queries against formal specifications. The efficiency of SLD resolution shines in handling recursive queries, such as those in or relationship computations, by enabling compact, declarative code that avoids explicit loops and scales well for depth-limited searches in programs. However, it faces limitations with non-termination in left-recursive or cyclic queries, a challenge mitigated in modern systems through tabling techniques that memoize intermediate results to prevent redundant computations and ensure convergence. As of 2025, SLD resolution is employed in approximately a dozen actively maintained -based systems, with ongoing adoption in planning domains—such as PDDL-compliant solvers that leverage for plan generation—and semantic web technologies, including query engines that incorporate resolution-like inference for RDF data retrieval.

Comparisons

Relation to Other Resolution Methods

SLD resolution serves as a linear, input-restricted variant of general , which was originally introduced by Robinson in as a refutation-complete method for using inferences between clauses. Unlike full resolution, which can combine any two clauses and may generate numbers of intermediate clauses, SLD restricts resolutions to a linear starting from a goal clause and program clauses (definite Horn clauses), thereby avoiding unnecessary branching and improving computational efficiency in practice. SLD resolution refines SL resolution, a developed by and Kuehner in 1971 that applies linear resolution with a selection function to full clausal logic, allowing resolutions only on selected literals to mimic . By further limiting SL resolution to definite clauses (with exactly one positive literal) and refuting goals (negative clauses), SLD ensures a goal-directed search suitable for , where queries are resolved against a program in a top-down manner. In comparison to the semantic tableau method (also known as analytic tableaux), which systematically explores disjunctions through branching paths to construct models or detect contradictions, SLD resolution maintains a linear structure focused on conjunctive goals in logic, eschewing explicit branching for disjunctive cases. This linearity aligns SLD more closely with procedures but limits its applicability to refutations involving and conjunctions, whereas tableaux handle full propositional and first-order formulas via systematic case analysis. SLD resolution shares similarities with model elimination, a procedure introduced by Loveland in that employs linear expansions and contractions in a tree-like format to eliminate models, akin to in . However, model elimination is more general, applicable to arbitrary clausal forms without the Horn clause restriction, and incorporates rules to prune redundant branches, whereas SLD's derivations remain strictly linear and input-dependent for efficiency in definite logic programs. A key limitation of SLD resolution is its only for clauses and definite programs, in contrast to the generality of full resolution methods, which achieve refutational for any unsatisfiable set of clauses. This specialization enables practical implementations like but requires extensions for non- logics.

Differences from General Resolution

SLD resolution differs from general primarily in its syntactic restrictions, which limit it to definite clauses and goals. General , introduced by J.A. Robinson in , operates on arbitrary clauses in clausal form, allowing disjunctions that include both positive and negative literals. In contrast, SLD resolution applies exclusively to clauses, specifically definite clauses (implications with a single positive literal as the head and a of positive literals as the body) and goal clauses (s of atoms without a head). This restriction ensures that resolutions occur only between a selected atom in the goal and the head of a definite clause, using unification to reduce the goal, without permitting resolutions involving negative literals directly. Efficiency advantages in SLD resolution arise from its linear structure and avoidance of unnecessary clause generation. Unlike general resolution, which can produce an number of new resolvents by resolving any pair of complementary literals across the clause set, SLD follows a single linear derivation path guided by a selection function, deriving only the necessary steps for refutation without adding clauses to the . This selective linear approach, refined from SL-resolution by and Kuehner in , minimizes search space explosion, making it computationally more tractable for goal-directed queries. In terms of applicability, SLD resolution is optimized for the procedural semantics of logic programming languages like Prolog, where it supports top-down, goal-reduction computation to compute answers via backtracking. General resolution, however, is better suited for unrestricted first-order theorem proving, handling full clausal logic including negation. SLD's design, inspired by Robinson's general resolution principle, adapts it specifically for definite programs but limits its scope; it is refutation-complete only for Horn clause sets, as proven in foundational work on logic programming semantics, and fails completeness for arbitrary clauses with negation.

References

  1. [1]
    [PDF] SLD Resolution - Universität Halle
    SLD Resolution involves defining most general unifiers, computing them, and defining the result of an SLD resolution step. Unification is a basic step in ...<|control11|><|separator|>
  2. [2]
    [PDF] 8a. Reasoning with Horn Clauses
    Reasoning with Horn Clauses is a foundation for logic programming, using SLD resolution, forward/backward chaining, and is the foundation of Prolog.
  3. [3]
    [PDF] Chapter 3 - SLD-Resolution - TINMAN
    The SLD-resolution principle makes it possible to draw correct conclusions from the program, thus providing a foundation for a logically sound operational se- ...
  4. [4]
    Linear resolution with selection function - ScienceDirect.com
    Linear resolution with selection function (SL-resolution) is a restricted form of linear resolution. The main restriction is effected by a selection function.
  5. [5]
    (PDF) Predicate Logic as Programming Language - ResearchGate
    PDF | On Jan 1, 1974, Robert A. Kowalski published Predicate Logic as ... Logic programming is the study of predicate logic as a programming language [7] .
  6. [6]
    [PDF] LOGIC PROGRAMMING - Department of Computing
    12. The completeness of SLD-resolution was first proved by Robert Hill [1974]. Bottom-up derivations are a special case of hyper-resolution, which is also sound.
  7. [7]
    [PDF] SLD-Resolution And Logic Programming (PROLOG)
    SLD-resolution is a variant of resolution for Horn clauses, and is the main computation procedure used in PROLOG, a logic-based programming language.
  8. [8]
    [PDF] Linear Resolution with Selection Function - Department of Computing
    The theory of efficiency which underlies our arguments for SL-resolution is investigated in Kowalski's thesis [8] and outlined further in Meltzer's lectures [17] ...
  9. [9]
    [PDF] Predicate Logic as Programming Language
    The interpretation of predicate logic as a programming language is based upon the interpretation of ... Kowalski and D. Kuehner, Linear resolution with.
  10. [10]
    [PDF] The birth of Prolog - Alain Colmerauer
    During the fall of 1972, the first Prolog system was implemented by Philippe in Niklaus Wirt's language Algol-W; in parallel, Alain and Robert Pasero created.
  11. [11]
    The birth of Prolog | History of programming languages---II
    The project gave rise to a preliminary version of Prolog at the end of 1971 and a more definitive version at the end of 1972. This article gives the history of ...
  12. [12]
    [PDF] Foundations of Logic Programming
    In the two and a half years since the first edition of this book was published, the field of logic programming has grown rapidly. Consequently, it seemed.
  13. [13]
    Foundations of Logic Programming - SpringerLink
    In stockFront Matter. Pages I-XII. Download chapter PDF · Preliminaries. John Wylie Lloyd. Pages 1-33 · Definite Programs. John Wylie Lloyd. Pages 35-69 · Normal Programs.
  14. [14]
    SLD-Resolution
    One form of this completeness is the Subsumption Theorem for SLD-resolution, a second is its refutation completeness. A third form of completeness is in terms ...
  15. [15]
    [PDF] The Semantics of Predicate Logic as a Programming Language
    We use the interpretation of predicate logic as a programming language in order to ... Thanks are due also to Ketth Clark, Alain. Colmerauer, Gerard Huet ...
  16. [16]
    [PDF] Review of Foundations of Logic Programs
    Also, regrettably, no good unification algorithm is provided. Treatment of PROLOG throughout the book is a bit erratic. No formal definition of its semantics is ...
  17. [17]
    [PDF] introduction to logic programming - UT Computer Science
    SLD-resolution is a special case of SL-resolution of KOWALSKI and KUEHNER [KK] and was pro- posed as a basis for programming in KOWALSKI [K]. The name was first ...
  18. [18]
    [PDF] Negation as failure - Department of Computing
    whose construction depends on at most n failure proofs n > 0. ....& ~ P&.... fail. A query evaluation for P succeeds ...
  19. [19]
    Completeness of SLDNF-resolution for nonfloundering queries
    We prove completeness of SLDNF-resolution for arbitrary programs, fair selection rules, and nonfloundering queries.
  20. [20]
    [PDF] The Well-Founded Semantics for General Logic Programs*
    Apr 18, 1990 · Gelfond and Lifschitz [11] define a stable model to be one that reproduces itself in a certain three stage transformation, which we call the ...
  21. [21]
    [PDF] The Stable Model Semantics for Logic Programming
    The Stable Model Semantics for Logic Programming · M. Gelfond, Vladimir Lifschitz · Published in ICLP/SLP 1988 · Computer Science, Mathematics.
  22. [22]
    Credulous resolution for answer set programming - Volume 1
    The new approach allows a top-down and goal directed resolution, in the same spirit as traditional SLD-resolution.
  23. [23]
    A case-analysis approach to disjunctive logic programming
    We describe a family of procedures, called the near-Horn Prologs, which naturally extend the standard Horn program procedure (SLD-resolution) through case- ...
  24. [24]
    [PDF] A Top-down Procedure for Disjunctive Well-founded Semantics
    Compared to Global SLS-resolution for normal logic programs, D-SLS Resolution has the following major features: 1. the underlying reasoning mechanism for D-SLS ...
  25. [25]
    [PDF] XSB: Extending Prolog with Tabled Logic Programming - arXiv
    Dec 23, 2010 · XSB's tabling is based on SLG resolution (Chen and Warren 1996), with extensions for call and answer subsumption as described below. This ...
  26. [26]
    Using Tabling in XSB: A Tutorial Introduction
    For the theoretically inclined, XSB uses SLG resolution which can compute queries to non-floundering normal programs under the well-founded semantics [49], and ...
  27. [27]
    9 CHR: Constraint Handling Rules - SWI-Prolog
    9 CHR: Constraint Handling Rules. This chapter is written by Tom Schrijvers, K.U. Leuven, and adjustments by Jan Wielemaker. The CHR system of SWI-Prolog is ...Missing: SLD | Show results with:SLD
  28. [28]
    [PDF] Constraint Handling Rules
    CHR extend the Prolog syntax by a few constructs introduced in the next sections. Technically, the extension is achieved through the term_expansion/2 mechanism.Missing: SLD | Show results with:SLD
  29. [29]
    [PDF] ProbLog: A Probabilistic Prolog and Its Application in Link Discovery
    We introduce ProbLog, a probabilistic extension of. Prolog. A ProbLog program defines a distribution over logic programs by specifying for each clause.
  30. [30]
  31. [31]
    [PDF] Approximate Inference for Neural Probabilistic Logic Programming
    Prolog's SLD-resolution theorem prover can be used to decide whether a ground goal, i.e., a conjunction of atoms g1 ∧ ... ∧ gn is logically entailed by ...
  32. [32]
  33. [33]
    [PDF] Reference Manual
    Apr 12, 2024 · SWI-Prolog extends Prolog with tabling (SGL resolution). Tabling provides better ter- mination properties and avoids repetitive ...
  34. [34]
    7 Tabled execution (SLG resolution) - SWI-Prolog
    Tabled execution, or SLG resolution, avoids re-evaluation by memoizing answers and avoids left recursion by suspending and resuming calls. It is suited for ...<|control11|><|separator|>
  35. [35]
    Fifty Years of Prolog and Beyond | Theory and Practice of Logic ...
    May 17, 2022 · SLD-resolution (Kowalski Reference Kowalski1974) based on Robinson's* principle (1965) and Kowalski's procedural semantics (Kowalski Reference ...<|control11|><|separator|>
  36. [36]
    [PDF] Prolog and Natural-Language Analysis - Microtome Publishing
    This work is the digital edition of Pereira and Shieber's Prolog and Natural-Language Analysis. (revision of October 5, 2005). The work is also available for ...
  37. [37]
    [PDF] Lecture 8 SLD-Resolution and PROLOG
    Dec 13, 2006 · We will now focus on resolution for a single Goal clause and a definite program: • SLD – resolution: Linear resolution with Selection function ...
  38. [38]
    SWI-Prolog -- Example 2: avoiding non-termination
    SLD resolution can cause infinite loops. Tabling avoids this by suspending recursive goals, creating tables, and using less memory. Without tabling, the ...Missing: queries, | Show results with:queries,
  39. [39]
    The Prolog Implementers Forum
    The Prolog implementer community is very lively, with about a dozen Prolog systems that are currently supported, most of which are under active development.
  40. [40]
    Planning.wiki - The AI Planning & PDDL Wiki: Home
    This wiki is here to provide easy access to resources related to the field of AI Planning. AI Planning is difficult to quantify under one roof.What is AI Planning? · What is PDDL? · PDDL Domain · PDDL RequirementsMissing: SLD resolution semantic web SPARQL query engines
  41. [41]
    [PDF] Evaluation of a Representative Selection of SPARQL Query Engines ...
    In this paper, we present an evaluation of the performance of five representative RDF triplestores, including GraphDB, Jena Fuseki,. Neptune, RDFox, and Stardog ...
  42. [42]
    [PDF] Resolution Theorem Proving - Machine Logic
    This observation provides an explanation for the linearity constraints in SL-resolution [Kowalski and Kuehner 1971]. In SL-. Page 71. Resolution Theorem Proving.
  43. [43]
    [PDF] A Theory of Resolution - CORE
    ... resolution step. SL- resolution is closely related to model elimination (Loveland 1969) and hence to semantic tableau. In Sections 10.2 and 10.3 we shall ...