casting hypergraphs onto bitmap σ-algebras
An interactive companion to the paper (PDF). Everything on this page runs in your browser: the ledger, the queries, the planner, the proofs. Nothing is sent anywhere.
The two-minute version. The page below is the same story, made touchable.
Maya asks her new AI agent one simple question: find me the suppliers that are a risk to me. The agent knows nothing about the database, so it explores: suppliers, then items, then countries of origin, then risk data. Every hop multiplies the join paths. The context window fills. The agent has quietly become a query planner — and a bad one.
Panel 1: left is a simulation of pointer-chasing on an unknown schema (four relations, branching factor shown live). Right is this paper's answer. The rest of the page builds it.
The ledger below is a tiny supply chain: who supplies what from where, which
countries carry risk flags, who is suspended, and a materials chain for a recall.
One fact — Acme supplies cells to Osaka from Japan — is one
hyperedge: a single row set across role-marked bit columns
(rel/supplies/+/acme is a different column from
rel/supplies/-/acme, so direction is stored, not inferred). A source
that denies a claim writes a row too: disagreement is data, never an overwrite.
Click any observation to light its row across the columns. The hypergraph is never stored as a shape — it is this incidence matrix.
Panel 2: 18 observations, one column per vocabulary term. Teal = set bit, red = a denial's polarity bit. Rows are hyperedges; columns are the terms; reading either way is the same matrix (the dual views of the paper, §2).
Because every term is a bit column, the three σ-algebra axioms are machine
instructions: the empty set is the all-zeros vector, complement is NOT,
union is OR — and intersection follows by De Morgan. Build a query
by clicking facts (click twice for NOT). The answer is computed by
AND over whole columns and counted by a popcount. No model runs at
answer time.
And it is fast. The number from the talk track — two one-million-row columns intersected and counted in a fraction of a millisecond — is not our hardware's number. Measure it on yours:
A defective resin lot lot-L7 is recalled. Which shipments are exposed?
Keep a mask of everything reached so far and grow it one relation-step at a time:
Ft+1 = Ft OR N(Ft). After t
steps the frontier is the complete set of things reachable in ≤ t
steps — not a sample, not an estimate. Anything outside it is provably
unaffected at that depth.
Panel 4: each row is one frontier mask over the entities;
each step is one fixed sequence of AND/OR over the
rel/consumes columns.
To a single yes/no bit, never mentioned and actively denied look identical: both are 0. They mean very different things. Because assert and deny are separate columns, every claim gets two counts and so an interval: belief (the fraction of evidence supporting it) to plausibility (one minus the fraction denying it). The gap between them is exactly the silence. Move the sliders.
Panel 5: teal = belief, grey = ignorance (silence), red = denied mass. The first two presets are indistinguishable to a single bit; the interval separates them, and conflict (narrow but central) stays visible instead of averaging away. In our tiny ledger this is live: Japan's risk flag is asserted by a news wire and denied by an auditor — contested, not 50 percent.
Answering is narrowing: start from everything, apply one constraint per pass. On the drill-down ultrametric every productive pass at least halves the distance to the answer, so the Banach fixed point theorem guarantees a unique fixed point, reached from any starting order. Shuffle Maya's constraints and watch every order land on the identical mask.
Panel 6: if the constraints are jointly unsatisfiable the process ends at the all-zeros mask — a definite no such observation, reported as such. There is no state in the space that corresponds to an invented fact.
The agent never writes a query. Cactus Needle 3 (121M parameters, running in this tab under WebAssembly) reads the question and emits a typed tool call against a closed schema — the Jev contract: messy intent in, a typed decision out, never free text. The call is type-checked against the vocabulary before a single bit is read; a malformed or invented query cannot exist. Then the engine answers it by the arithmetic of section 3.
Panel 7: the walkthrough. The planner proposes; the type checker disposes; set arithmetic answers. Try the strict variant: requiring risk to be asserted and not denied changes the answer, because Japan's flag is contested — polarity is part of the question.
The paper's claims are properties, so they are testable. The button below runs the property suite in your browser: the three σ-algebra axioms and De Morgan on random masks and on this page's ledger, bit-exact agreement with set semantics, measure additivity, the four metric axioms of the belief–plausibility distance, the ultrametric strong triangle, and the one-half contraction per filtration descent. The same suite, in Python, ships with the paper (test_properties.py).