Skip to main content

Basic Datalog

The default fixed-point engine is a bottom-up Datalog engine. It works with finite relations and uses finite table representations as hash tables as the default way to represent finite relations.

Relations, rules and queries​

The first example illustrates how to declare relations, rules and how to pose queries.

The example illustrates some of the basic constructs.

(declare-rel a ())

declares a 0-ary relation a.

(rule (=> b a))

Create the rule that a follows from b. In general you can create a rule with multiple premises and a name using the format

(rule (=> (and b c) a) name)

The name is optional. It is used for tracking the rule in derivation proofs. Continuing with the example, a is false unless b is established.

(query a)

Asks if relation a can be derived. The rules so far say that a follows if b is established and that b follows if c is established. But nothing establishes c and b is also not established, so a cannot be derived.

(rule c)

Now it is the case that a can be derived.

Relations with arguments​

Relations can take arguments. We illustrate relations with arguments using edges and paths in a graph.

The example uses the declaration

(declare-var a s)

to instrument the fixed-point engine that a should be treated as a variable appearing in rules.