query-engine/examples/scripts/skolem_chase.ech

23 lines
684 B
Plaintext
Raw Normal View History

2026-04-14 10:24:37 +02:00
# Skolem chase: deterministic labeled nulls for existential variables.
#
# With the Skolem variant, re-applying a rule with the same frontier
# bindings reuses the same null value, so the chase terminates even for
# rules that introduce existentials. Compare this with the oblivious
# variant, which generates a fresh null each round and hits the step
# limit.
#
# NOTE: the REPL uses the restricted chase by default. To run with the
# Skolem variant, use the Rust API:
#
# let result = skolem_chase(instance, &rules);
fact Person(alice).
fact Person(bob).
fact Person(carol).
# Every person has an id (existential Y).
rule Person(?X) -> HasId(?X, ?Y).
run.
query HasId(?X, ?Y)?