One file per subsystem, read alongside the code. This page is the map, and between them these files document the whole engine. A subsystem is described in exactly one place; the model the pages assume is the README, and the vocabulary is glossary.md.
Sentexes live in a record store, keyed by integer handle, and are found through an index store — derived from the records and rebuildable from them — that holds six indexes over the same sentexes: a positional trie, secondary roots (context / functor / argument), a rule index, an exception re-check index, an inverted term index, and the term roster beside it.
What ships is schema: vaelii.impl.starter loads the upper and middle contexts from
resources/kb/, and nothing contingent — no cast, no facts of a story — comes with it.
Two worked KBs below that schema exercise all this (no doc of their own), and they are
test-world data under test/vaelii/: vaelii.world-fables (children's stories as
contexts, each moral derived by a rule rather than stored as a string) and
vaelii.world-narrative (a story-understanding ontology layered over the fables —
causal / temporal / goal reasoning via predicate metadata and a goal-achievement rule).
| I want to… | Start at | Then |
|---|---|---|
| load a KB and look at it | kbs.md | web.md, catalog.md |
| assert facts and query them from Clojure | api.md | naming.md, levels.md |
| find out why my query answers nothing | troubleshooting.md | contexts.md |
| make a rule fire, and see what it concluded | inference.md | levels.md, contexts.md |
| say "usually, but not when…" | exceptions.md | nmtms.md, inherit.md |
| understand why the KB believes something | nmtms.md | preview.md, feed.md |
| resolve a contradiction | nmtms.md | solving.md, asp.md, labeling.md |
| keep a KB across restarts | storage.md | overlay.md |
| know what a word in these docs means | glossary.md | |
| build a type hierarchy that behaves | taxonomy.md | argtypes.md, inherit.md |
| reason about time, space or distance | qcn.md | time.md, space.md, stp.md |
| drive a KB from a shell or over a network | operations.md | api.md |
| read another system's KB in | foreign.md | kbs.md |
| turn English into sentexes | reading.md | llm.md |
| find the code behind a subsystem | namespaces.md | dependencies.md |
| understand what a query costs | indexing.md | density.md, anytime.md |
| see what this KB is for | commonsense.md |
Every page opens with three bullets — Covers, Not here, Assumes — so a wrong page costs a sentence rather than a section.
vaelii.core, with what it takes and returns, and the five thin entry-point namespaces beside it.assert, a KB holding facts nobody asserted.src/.genlContext spindle (head / mantle / collector), ist reification, justification placement.genl type hierarchy, isa?, disjoint / disjointMetatype.(argPreserving P n R) / (argPreservingInverse P n R), whether a claim about two kinds reaches their subkinds, the specificity that lets a stated claim undercut an inherited default, the (asymmetric P) that lets a strict one conflict instead, and how a forward rule fires on an inherited claim by naming what the claim was read from.argIsa / argGenl read as entailments as well as constraints: the type an argument declaration says a term has, minted as a derived justified sentex, both arrival directions, and why only a locally-written declaration entails. Off by default.cost tier.abduce: what would have to be true for a goal to be provable, minted as a defeasible hypothesis in a scratch context — the dead-end observer, the grant that gates it, and the isolation that makes an ignored call free.exceptWhen: how a rule states its own exception, and why the exception is never stored.unknown / thereExists, evaluated at level 6, storing nothing (and why the JTMS out slot stays reserved).preview: the belief a batch would add and take away, read off and then rolled back at the same handles.rewriteOf / sameAs / equals over one belief-following partition, and the different that keeps the unique-name assumption.dimensionOf / conversionFactor table, with an epsilon float policy.(exists ?y C) skolemized to deterministic NAT constants on forward firing, and the occurs-check in unify.totalDuration / overlapDuration computed over stored lengths and the unit table, on [lo hi] bounds so an over-approximation renders as an interval and says so.startOf / endOf bridging the numbers back onto Allen's intervals and sharpening an overlap into a figure.assumptionRules and persistent, inert labeling contexts.do/ imperatives and brave/cautious solve.watch: an application told that belief moved instead of asking again, off the settle that already computed it — one settle one event, standing queries as a filter over the moved region rather than a re-run, and what is refused because the region cannot answer it.cli driver, the headless EDN-over-HTTP daemon that is the single writer, and the zero-dep client threading an explicit connection.project.clj dependencies lein antq last reported as outdated, written by scripts/update-badges.sh --deps.Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |