datalog: semi-naive saturator + delta sets (Phase 5, 114/114)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 56s

dl-saturate! is now semi-naive: tracks a per-relation delta dict,
and on each iteration walks every positive body-literal position,
substituting the delta of its relation while joining the rest
against the previous-iteration DB. Candidates are collected before
mutating the DB so the "full" sides see a consistent snapshot.
Rules with no positive body literal (e.g. (p X) :- (= X 5).)
fall back to a one-shot naive pass via dl-collect-rule-candidates.

dl-saturate-naive! retained as the reference implementation; 8
differential tests compare per-relation tuple counts on every
recursive program. Switched dl-tuple-member? to indexed iteration
instead of recursive rest (eliminates per-step list copy). Larger
chains under bundled conformance trip O(n) membership × CPU
sharing — added a Blocker to swap relations to hash-set membership.
This commit is contained in:
2026-05-08 08:13:07 +00:00
parent 7ce723f732
commit d964f58c48
7 changed files with 425 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
# datalog scoreboard
**106 / 106 passing** (0 failure(s)).
**114 / 114 passing** (0 failure(s)).
| Suite | Passed | Total | Status |
|-------|--------|-------|--------|
@@ -9,3 +9,4 @@
| unify | 28 | 28 | ok |
| eval | 15 | 15 | ok |
| builtins | 19 | 19 | ok |
| semi_naive | 8 | 8 | ok |