89 breaking releases

0.97.0 Apr 7, 2024
0.96.0 Jan 7, 2024
0.95.0 Nov 19, 2023
0.92.0 Jun 30, 2023
0.3.0 Mar 27, 2018

#89 in Algorithms

Download history 530/week @ 2024-01-28 405/week @ 2024-02-04 365/week @ 2024-02-11 393/week @ 2024-02-18 371/week @ 2024-02-25 278/week @ 2024-03-03 279/week @ 2024-03-10 256/week @ 2024-03-17 179/week @ 2024-03-24 295/week @ 2024-03-31 328/week @ 2024-04-07 227/week @ 2024-04-14 180/week @ 2024-04-21 227/week @ 2024-04-28 290/week @ 2024-05-05 183/week @ 2024-05-12

896 downloads per month
Used in chalk-rust-ir


19K SLoC

The core crate for Chalk.

See Github for up-to-date information.


An alternative solver based around the SLG algorithm, which implements the well-formed semantics. For an overview of how the solver works, see The On-Demand SLG Solver in the chalk book.

This algorithm is very closed based on the description found in the following paper, which I will refer to in the comments as EWFS:

Efficient Top-Down Computation of Queries Under the Well-founded Semantics (Chen, Swift, and Warren; Journal of Logic Programming '95)

However, to understand that paper, I would recommend first starting with the following paper, which I will refer to in the comments as NFTD:

A New Formulation of Tabled resolution With Delay (Swift; EPIA '99)

In addition, I incorporated extensions from the following papers, which I will refer to as SA and RR respectively, that describes how to do introduce approximation when processing subgoals and so forth:

Terminating Evaluation of Logic Programs with Finite Three-Valued Models Riguzzi and Swift; ACM Transactions on Computational Logic 2013 (Introduces "subgoal abstraction", hence the name SA)

Radial Restraint Grosof and Swift; 2013

Another useful paper that gives a kind of high-level overview of concepts at play is the following, which I will refer to as XSB:

XSB: Extending Prolog with Tabled Logic Programming (Swift and Warren; Theory and Practice of Logic Programming '10)

While this code is adapted from the algorithms described in those papers, it is not the same. For one thing, the approaches there had to be extended to our context, and in particular to coping with hereditary harrop predicates and our version of unification (which produces subgoals). I believe those to be largely faithful extensions. However, there are some other places where I intentionally diverged from the semantics as described in the papers -- e.g. by more aggressively approximating -- which I marked them with a comment DIVERGENCE. Those places may want to be evaluated in the future.

Glossary of other terms:

  • WAM: Warren abstract machine, an efficient way to evaluate Prolog programs. See http://wambook.sourceforge.net/.
  • HH: Hereditary harrop predicates. What Chalk deals in. Popularized by Lambda Prolog.


~70K SLoC