Skip to content
← Documentation

docs/truth-reduction.md


Reducing the taxonomy

Every surviving kind attacked until reduction fails. Supersedes the three-kind result in truth-kinds.md.

⚠️ The conditional on state is retracted by occurrence-falsification.md. Deriving state from a complete occurrence history is a computation result; it does not bear on whether state is a distinct ontological kind. The eliminations below stand.

Outcome: constraint is eliminated. Interpolability is eliminated as a primitive. Two kinds survive — state and occurrence — and their survival is conditional on partial observation.


Attack 1 — constraint reduces to state

The reduction

"Inventory must not exceed 100" is not a truth about inventory. It is a truth about a policy, and the policy is a subject:

measure(subject = policy/inventory-cap, dimension = limit) = 100

Interpolable — the policy holds between observations. Therefore a state.

Testing it against the discriminators that earned constraint its class

Violability — the discriminator I called sharp. Under the reduction, a violation is: policy.limit = 100 and inventory.level = 120. Two states, both true, no contradiction anywhere. The "violation" is a comparison between two states — derived, computed by a projection. And relation was already eliminated as a truth kind in truth-kinds.md.

So violability is not a property of a truth. It is a property of a comparison over truths, and it belongs to projection, not ontology. The discriminator does not survive.

Evidence — my claim was falsified by this repository. I wrote that evidence is meaningless for constraints because they are stipulated rather than observed. constitution.ts refutes it directly:

{ id: "recency-horizon-days", value: 30,
  where: "substrate/telemetry",              ← observer
  basis: "stated window for commit recency decay",  ← citation
  assumed: false }

where and basis are an observer and a citation under other names. A policy document is observable; I conflated "not observed in the physical world" with "not observed at all." Constraints carry evidence like anything else.

Amendment — the third separation rule collapses. I claimed constraints separate on amendment rather than on change. But a limit moving from 100 to 120 is a change of value on the policy subject — episode separation, the state rule exactly. There was never a third rule; there was the first rule wearing a different name.

The residue, dissected

What made constraints feel distinct was two flags, and neither belongs to the constraint:

  • enforced — measured: it is never read anywhere. Declared in core/fact.ts:50, plumbed through ingest.ts:170, referenced only in prose. The flag distinguishing a real constraint from an aspiration has no consumer. And semantically it is not about the limit at all: this repo's own entry says "enforced by the dispatcher; a real constraint" — enforcement is a property of the dispatcher, a state about the enforcer. The flag is on the wrong subject.
  • assumed — documented as "True when no evidence supports the value." That is a statement about evidence quality, not about the constraint. It belongs to the evidence layer.

Strip both — enforced to the enforcer, assumed to evidence — and what remains is a value on a subject. A state.

Constraint is eliminated. It was a state on a policy subject, plus a misplaced capability flag, plus an evidence-quality flag.

One dependency recorded honestly: relocating enforced routes through capability, which truth-kinds.md classified as state but marked least settled. The reduction inherits that uncertainty. It does not depend on it — the other two arguments stand alone — but it is not free of it.


Attack 2 — interpolability reduces to absent-evidence semantics

Interpolability asks: does the truth hold in an unobserved gap? Underneath it is a more primitive question:

What does the absence of an observation mean for this truth?

Kind Absence of observation means
state unchanged — it persisted; absence is ignorance
occurrence did not happen — absence is absence

This is more primitive on three counts. It is epistemic and generates the ontological property rather than the reverse. It produces the identical partition, so nothing is lost. And it is the same distinction already load-bearing in this system — the missing-versus-zero rule, where absence of a fact means nobody measured and a fact of value 0 means someone measured and found none. That rule was derived independently, for provenance, and turns out to be this one.

Formally, a state carries a frame assumption — absent evidence of change, it stays. An occurrence carries none.

Interpolability does not survive as a primitive. It survives as a consequence of absent-evidence semantics. It remains a usable test; it is not foundational.


Attack 3 — are state and occurrence one kind with a flag?

If the only difference is what absence means, that is a binary parameter, and one kind with a persists flag would carry identical information.

The criterion: two things are one kind if they share their laws. State and occurrence share none of them —

state occurrence
absent evidence unchanged did not happen
separation on change of value always
identity's third term episode ordinal occurrence ordinal
the question it answers what is it now? did it happen in this window?

A shared container type is not a shared kind. The flag does not unify them; it names the fork and then every law reads it. Not a reduction — a relabeling.


Attack 4 — state reduces to occurrence (event sourcing)

The strongest remaining attack, and a real technique: a state is the accumulation of change-occurrences. Temperature is the initial value plus every change since. Under it, only occurrences exist.

It requires two things this system does not have:

  1. A known initial state. Connectors report what they find, not what was.
  2. Complete observation of every change. This system is built on partial observation from independent connectors, and it has a Gap type precisely to record that observation failed.

Under incomplete change-observation the derived state is wrong and nothing can detect that it is wrong — the accumulation is silently short. An observed state is directly evidenced; a reconstructed one inherits every gap.

Worse, it fabricates. A thermometer observes a level, not a change. Reducing that reading to occurrences means inventing the change events that produced it — information no observer reported, which is the defect this whole audit exists to find.

But the reduction is valid in a closed system. With complete change-capture and a known origin, event sourcing genuinely eliminates state. That is not a quibble; it means:

The size of the taxonomy is a function of observational completeness. Under complete observation: one kind. Under partial observation: two.

This system is open by construction, so state survives — conditionally, and the condition is stated rather than assumed away.


Attack 5 — occurrence reduces to state

Already falsified twice, on independent grounds, and both stand:

  • Colliding deltas — simultaneous a→b and c→b of 5 produce the same net levels as one transfer of 10. Occurrences carry information levels cannot hold.
  • Heartbeat — an occurrence that changes no state at all. There is no delta to reduce to.

The first shows the reduction is lossy; the second shows it is undefined.


Where the taxonomy stands

Kind Verdict Reduces to
state survives — conditionally occurrence, only under complete observation
occurrence survives nothing — lossy and undefined in both directions
constraint eliminated state on a policy subject
relation eliminated state over a tuple
measurement eliminated category error — the evidence layer
capability eliminated state (least settled)
Criterion Verdict
interpolability eliminated as primitive — a consequence of absent-evidence semantics
absent-evidence semantics survives — and is the missing-versus-zero rule, arrived at twice

Two kinds. One criterion. Both survived direct attack; four candidates did not.

What this does not establish

The reductions that succeeded are constructive — each exhibits the target encoding. The two survivals are failures to reduce, which is weaker: no argument here shows a future reduction impossible.

capability is the soft joint. It was eliminated into state on one unusual property, and enforced was relocated through it. If capability turns out to be irreducible, constraint's elimination needs re-examination — though not reversal, since the violability and amendment arguments are independent of it.

Nothing implemented.