Skip to content
← Documentation

docs/minimal-ontology.md


The minimal ontology

Final reduction. Fact itself attacked, then State and Occurrence attacked together rather than separately.

⚠️ Extended by dimension-algebra.md. The exclusivity law below is subsequently eliminated — it is entailed by truth being a function, not an extra law — which closes the open question this document ends on. Dimension reduces further, to a value space plus a persistence behaviour.

Outcome: Fact reduces to one canonical form parameterized by mode — the four families are eliminated. And State and Occurrence do not survive as primitives: they derive from a persistence law, which is promoted in their place.


Part 1 — attacking Fact

Minimal structure, by attempted removal

Each component removed in turn; truth either survives or it does not.

Component Removable? Why
evidence yes — from the truth a truth is true whether or not anyone observed it
subjects no every observational truth is about something; arity ≥ 1
dimension no a truth predicates something of its subject
value no may be degenerate (unit-valued) but not absent
ordering no needed to distinguish one truth from another of the same content

The first row is the important one. Fact conflates a truth with the record of a truth. Evidence and recordedAt are not properties of what is true; they are properties of our having come to know it. Two structures, not one:

truth  = (subjects, dimension, ordinal) → value
record = truth + evidence + recordedAt

This is not a new concept — it is the layer evidence already occupies, made structural. It also explains why measurement was a category error in truth-kinds.md: the family named after an observation method was a record-level name applied at the truth level.

The dimension/value cut is not arbitrary — and getting it wrong is the bug

An apparent reduction: dimension and value are one thing, a predication, cut at an arbitrary point. condition: degraded on X can be encoded two ways:

  • A — dimension = degraded, value = true
  • B — dimension = health, value = degraded

If the cut were arbitrary, identity would be arbitrary, since dimension is in identity and value is not. It is not arbitrary, and the two encodings are not equivalent:

  • Under A, degraded and healthy are different dimensions, so they have different identities and coexist. Recovery is unrepresentable.
  • Under B, they share an identity and form one episode with a changing value. Recovery is representable.

Law: mutually exclusive predicates are values of one dimension, never dimensions of their own.

The discriminator is exclusivity, and it is a fact about reality, not a modelling preference. This law unifies two defects previously recorded as separate:

  • conditionIdentity(condition, subject) puts the condition in identity — encoding A. This is why condition episodes merge.
  • placement:${subject}@${at} puts the place in identity. A place is a mutually exclusive predicate — a thing is in one place — so this is the same error, and it is why one package appeared in two places at once.

Two families, one law violated, one defect. They were filed as different bugs.

One canonical form

Family subjects dimension value mode
condition (X) the exclusivity class the condition state
measure (X) the metric number + unit state
placement (X) location the place state
exchange (from, to) what moved quantity occurrence

All four instantiate (subjects, dimension, ordinal) → value. The families encode arity, value type, and mode — all of which are data, not kinds.

The four fact families are eliminated. They are a fixed enumeration of parameter combinations, mistaken for a taxonomy.

And the reduction makes a falsifiable prediction: the enumeration is incomplete. If mode and arity are independent parameters, a 1-ary occurrence must be possible. It is — a heartbeat. The current families cannot express it: exchange is the only occurrence family, and moved, from and to are all required (fact.ts:54, no optionals). A heartbeat has no from and no to.

The prediction was made from the reduction and confirmed against the type. The gap is a consequence of enumerating combinations instead of parameterising them.


Part 2 — do State and Occurrence derive from a persistence law?

The law

Every truth has a persistence extent: how long one identity remains one truth.

Both distinguishing laws derive from it, rather than standing alongside it:

Extent Absent evidence means Separation
until-change unchanged — it persisted on a differing value
zero did not happen always

Persistence is upstream of both. If a truth persists until superseded, then absence of observation must mean unchanged, and two equal adjacent observations must be one truth. If its extent is zero, absence means absence, and every observation is its own truth. Neither law is independent; both are consequences.

This also corrects the ordering asserted in truth-reduction.md, which had the epistemic generating the ontological. The clean chain runs the other way:

persistence extent  →  absent-evidence semantics  →  interpolability
   (reality)              (what may be inferred)        (the test)

Interpolability was already demoted to a test. Absent-evidence semantics is now demoted to an inference rule. Persistence is the reality-level fact, and it is the only one of the three that is not about observers.

Is the parameter binary by necessity or by accident?

If intermediate extents exist, persistence is a continuum and the two kinds are two arbitrary points on it. Candidates with a bounded extent not set by change:

Case Reduces?
a visa valid 90 days yes
a DNS record with a TTL yes
a quote valid 24 hours yes
a session token expiry yes

Each looks like a third mode — the truth lapses without anyone observing a change. But the expiry is itself a truth: "this visa expires at T" is a state. So each case is two states plus a computation, and the lapse is derived, not a new extent.

Extent is therefore measured by what ends the truth, and there are exactly two answers: nothing but a differing truth (until-change), or immediately (zero). A scheduled ending is a differing truth with a known arrival time.

The binary is forced by the structure, not observed to be binary.

Verdict

State and Occurrence do not survive as primitives. They are the two values of the persistence parameter, and every law that distinguished them is a consequence of it.

The gain is not compression — one law with a binary parameter carries the same information as two kinds. The gain is explanatory:

  • Two kinds could only assert that no third kind was found, after failing to find one.
  • The persistence law explains why no third can exist: the parameter is binary by construction, because "what ends this truth" admits exactly two answers.

That converts an inductive result into a structural one, which is the strongest outcome available and the reason to promote the law rather than the kinds.


The ontology that survives

truth   = (subjects, dimension, ordinal) → value
record  = truth + evidence + recordedAt

persistence extent ∈ { until-change, zero }
  determines: identity's ordinal, separation, absent-evidence semantics

dimension = an exclusivity class; mutually exclusive predicates share one

One law. One structure. Two layers.

Concept Standing
persistence law promoted — provisional primitive
State, Occurrence its two values; the right names, not primitives
truth / record split promoted — evidence is not part of a truth
exclusivity law promoted — derived, and it explains two live defects
Fact's four families eliminated — an enumeration of parameter combinations
constraint, relation, measurement, capability eliminated previously; unchanged
interpolability a test
absent-evidence semantics an inference rule

What is still not established

  • Provisional, not proved. Everything here rests on sustained failure to reduce. The binary-by-structure argument is the one genuinely structural claim, and it depends on the reduction of bounded-extent cases holding for every such case, not the four checked.
  • capability remains the soft joint, untouched across three rounds. It is now the oldest unexamined assumption in the taxonomy.
  • The exclusivity law needs a source. It says mutually exclusive predicates share a dimension, but nothing here says how exclusivity is known. It is a fact about the domain that some observer must supply, and no mechanism exists.

Nothing implemented.