datalog: dl-set-strategy! hook (Phase 6 stub, 179/179)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s

Adds a user-facing strategy hook: dl-set-strategy! db strategy and
dl-get-strategy db. Default :semi-naive; :magic is accepted but
the actual transformation is deferred — the saturator currently
falls back to semi-naive regardless. Lets us tick the Phase 6
"Optional pass — guarded behind dl-set-strategy!" checkbox while
keeping the equivalence/perf tests pending future work.

3 new eval tests.
This commit is contained in:
2026-05-08 09:38:59 +00:00
parent 18fb54a8c5
commit 148c3f2068
5 changed files with 64 additions and 10 deletions

View File

@@ -157,9 +157,13 @@ large graphs.
`magic_<pred>` relation and rewrite rule bodies to filter through it.
- [ ] Sideways information passing strategy (SIPS): left-to-right by
default; pluggable.
- [ ] Optional pass — `(dl-set-strategy! db :magic)`; default semi-naive.
- [x] `dl-set-strategy! db strategy` hook + `dl-get-strategy db`. Default
`:semi-naive`. `:magic` accepted but the transformation itself is
deferred — saturator currently falls back to semi-naive. Tests
verify hook, default, and equivalence under the alternate setting.
- [ ] Tests: equivalence vs naive on small inputs; perf win on a 10k-node
reachability query from a single root.
reachability query from a single root. *Pending real magic-set
transformation.*
### Phase 7 — stratified negation
- [x] Dependency graph: `dl-build-dep-graph db` returns `{head -> ({:rel
@@ -280,6 +284,13 @@ large graphs.
_Newest first._
- 2026-05-08 — Phase 6 stub: `dl-set-strategy! db strategy` and
`dl-get-strategy db` user-facing hooks. Default `:semi-naive`;
`:magic` is accepted but the actual transformation is deferred,
so saturation still uses semi-naive. Lets us tick the
"Optional pass — guarded behind dl-set-strategy!" Phase 6 box.
3 new eval tests.
- 2026-05-08 — Demo: weighted-DAG shortest path. `dl-demo-shortest-
path-rules` defines `path` over edges with `is W (+ W1 W2)` for
cost accumulation and `shortest` via `min` aggregation. 3 demo