Epistemology Infrastructure: Relational Dynamical Network and Spinfoam
What crosses between parties is a perturbation, not a content.
Two models of epistemic emergence, implemented as a domain-neutral formalism in the Python package rdn: a heterogeneous dynamical network with no global clock, and a two-complex history that takes the combinatorial structure of spin foam models and reassigns it. Each refusal the account makes is enforced by a test rather than by convention.
The refusal, and what follows from it
What a party holds is reconstructed from the representations available to it, under the interpretation it holds. Nothing content-like crosses between parties; what crosses is a perturbation, which the receiving party's own law consumes. That is a familiar enough claim to state. The consequence is less familiar, and it is formal rather than rhetorical:
A model adequate to that account may not assume a space in which the states of distinct parties are located — because distances in a common medium are what a signal traverses, and the picture returns as a property of the mathematics no matter what the prose says.
Most models of communication smuggle the transmission picture back in through their mathematics: a shared state space, a common metric, a global clock, a scalar that orders one party's quantity against another's. Each is a place where a distance can be measured, and a measurable distance is a channel a content can traverse. This project is an attempt to build the models without any of them, and to make the absence checkable.
Two models, and where they meet
Model 1 · Parts IV–V
The network
A discrete-event simulator over components whose state spaces differ in structure and in whether they carry a metric, whose laws differ in kind, and whose events are their own. Components are coupled by partial maps and resolved to quiescence with per-channel multisets and no global clock.
Its outputs are runs; its characteristic results are closure under coupling and the removal test for emergence.
Model 2 · Part VI
The history
A two-complex derived from a run plus a supplied identification of elements across states. The combinatorics of spin foam models are borrowed and reassigned: faces are the histories of primitive elements, edges are couplings persisting across intervals, vertices are events at which couplings rearrange, and a boundary is a state.
Its outputs are histories; its characteristic results are the residues of an event and coarse-graining onto a transition record.
They meet at exactly one function — rdn.correspond.induce_history(run, party, identification). Everything the paper claims about the correspondence is a property of that function, which is what makes those claims testable rather than asserted.
Why the core carries no domain word
The package is called rdn and not epistemic, and the reason is a claim in the paper rather than a matter of taste. A model of this kind is a formalism: it fixes what kinds of object there are and how they compose, and asserts nothing about the world until an interpretation is assigned. The definitions of knowledge and of emergence hold under one particular design — and hold in no form for the models alone.
So knowledge is not a core function. It is one interpretation's name for a core computation, and a musical reading of the same computations names them differently and is equally entitled:
| Core computation | Epistemic reading | Musical reading |
|---|---|---|
network.stable_couplings | knowledge | — |
| intersection of coupling-identifier sets | shared knowledge | — |
network.emergent | relational knowledge | — |
history.residues(h, v).created | emergence at an event | harmonies made |
A package named epistemic whose core module was epistemic.network would assert in its own import path the thing the paper denies. Hence four strata, of which only the first is the formalism: formalism (rdn.structure, .network, .history, .correspond), strategy (how a design advances state at all), interpretation (which formal quantity gets which domain word), and design (the state sets, laws, couplings and admissible classes of a particular case). Dependencies run downward only, and a test — not a review convention — enforces it per source file.
Four figures, all generated from the code
Every figure below is produced by figures/make.py under a single recorded seed; deleting the output directory and re-running reproduces them. Resolution order is fixed in the figures because reproducibility is what matters there, and randomised in the tests because order-independence is the property under test.
The removal test, and its three outcomes
Emergence is not asserted; it is tested by deleting a component and asking whether a capacity of the whole survives. Running it on the news design gives three distinct outcomes, and the third is a control the paper itself does not run:
delete archive -> FAILS delete reader -> INEXPRESSIBLE delete editor -> HOLDS
| Deleted | Outcome | Reading |
|---|---|---|
| archive | FAILS | a restriction of the predicate exists and is no longer an invariant — the capacity depended on the archive |
| reader | INEXPRESSIBLE | no predicate on the reduced state set corresponds to the invariant at all: the strongest form of dependence, reported distinctly and never folded into failure |
| editor | HOLDS | the capacity did not depend on the editor. Failing at every node would show the invariant was carried by a proper subnetwork; passing here is what locates the dependence rather than asserting it |
The analysis parameters travel with the answer rather than being hidden — how many trials must succeed, and how many perturbations to skip before judging — because a warmup chosen to make a result appear is exactly the failure the discipline is meant to prevent. And which of a design's parameters carry a substantive claim about the case, rather than merely making a contrast legible, is machine-readable in the design module.
The refusals, and what enforces each
Each of these corresponds to a claim that fails if it fails; none is a matter of house style. Every one is held by a test, so that the discipline survives the next contributor.
| Refusal | How it is enforced |
|---|---|
| No common state space | state, input and emission are type variables with no base class carrying fields; a test asserts the state sets are of different mathematical type |
| No global clock | per-channel multisets, no timestamp, no total order over occurrences; concurrency must be independent of recording order |
| No metric | isomorphism and its absence, nothing graded — a test asserts there is no distance |
| No scalar over nodes | counts within one node's own record are permitted; comparison across nodes is not |
| No amplitude | no weight, probability or measure over histories |
| Sampling disclosed | a sampled stable set is a superset, and the return type says so |
| Undecidability disclosed | there is no “confluence: true”; the honesty types refuse to be coerced to a boolean |
| No vocabulary of conveyance | a test scans the source for it |
| No objective function in the core | a test walks the syntax tree for identifiers |
| Layers run downward only | a test, per source file |
| Raise, never repair | each error message names the condition that failed |
The last of the refusals deserves a note of its own. A utility function anywhere in the core would turn the epistemic results into results about a utility-maximising system, and the paper's claims would stop applying. So goals, preferences and rewards live behind a policy interface, on the far side of a seam: the epistemic update never calls the action layer, and a decision procedure added tomorrow changes which emissions occur and never how reconstruction works.
What is deliberately absent
These are marked as open problems in the test suite, so the absence appears in the test report rather than in a document nobody opens.
- A single history for a whole network. The correspondence is per node, and the resulting histories are joined by nothing. Inventing a joined object would be inventing a result, so the test records the absence as a strict expected failure.
- Amplitudes. A generative account would need a configuration space, a functional determining weights, and an interpretation of those weights; no candidate is supplied for any of the three. The deeper obstacle: a weight presupposes recurrence, while an account holding interpretive conditions to be historically produced is committed to the singularity of a trajectory. A design could supply an algebra by fiat and could not supply a repeated trial.
- Distance or similarity between structures. What is supplied is a reformulation rather than a solution: a common-subcomplex comparison up to isomorphism, requiring no shared vocabulary, returning a correspondence and a count — never a fraction.
- Inference of a reconstruction map from data. The map is not observable; what another node can see is what this one emits.
The package
pip install -e ".[test,figures]" pytest # 124 passed, 1 xfailed python tour.py # the whole apparatus in one screen, public API only python figures/make.py # regenerates every figure, seeded
Python 3.12 and numpy; matplotlib for the figures only. Nothing else in the core — because a dependency in the core is a dependency the formal claims inherit. Three reference designs ship with it: the paper's news instance (eight nodes, two of them generalised couplings), a music design with no network at all and no knowledge in it anywhere, and a domain-neutral toy against which the conformance tests stand — so that nothing about the formalism is tested only through the example it was written for.
What this does not establish
Three cautions travel with the central figure, and they are recorded in the code and not only here. It exhibits the definitions on one instance and establishes nothing about knowledge processes in the world. Its parameters were chosen to make a contrast legible, and a different choice yields a different picture. And every number in it belongs to the design: the model supplies no metric and no measure of discrepancy.
The source paper is a working draft. The implementation covers Parts IV, V and VI.
Governance & licence
The project is classified under Domain II (Epistemic Infrastructure) of Schedule A — coming to truly know and trust one another, rather than mistaking our own reflections for the other — with Domain I (Theoretical and Ontological) as a secondary, since the models are a formalism before they are about anything. Released under the Creative Commons Attribution-NonCommercial 4.0 licence, © 2026 Wanhong Huang, following the paper.
A formal project-approval instrument (SCS/PA/…) has not yet been issued for this project; this page describes work in progress and will be updated when one is adopted.