Formalizing the Unknown: A Topology of Gaps
An ontology-driven ingestion system must represent more than what it believes to be present. It must also represent which obligations are not satisfied, which interpretations remain undecided, and which explicit declarations cannot coexist.
OntoGraph calls these conditions gaps only where the canonical or executable
contract does so. Not every invalid state is collapsed into one generic
SemanticGap.
Delivery status
| Status | Boundary |
|---|---|
| Implemented | The Rust state-transition calculus emits typed SemanticGap, ProvenanceGap, MissingIdentityRoot, DanglingMediation, CircularInheritance, RigidityViolation, and DisjointPhaseConflict values for its bounded explicit profile. |
| Bounded proof | Import and active-canon fixtures expose separate provenance and semantic gap read models and non-assertive follow-up questions. |
| Planned | A unified gap inbox that groups note-ingestion gaps across source versions, measures resolution progress, and drives the general dialogue interface. |
Three independent axes
The unknown is easier to reason about when it is separated into three axes.
| Axis | Question | Representative condition |
|---|---|---|
| Interpretation | Do we know what this supplied record means in the active profile? | SemanticGap |
| Grounding | Can the claim be traced to a live assertion and source-bearing Artifact? | ProvenanceGap |
| Structural consistency | Can the explicit declarations coexist under the selected rules? | MissingIdentityRoot, RigidityViolation, DanglingMediation, CircularInheritance, DisjointPhaseConflict |
These axes are orthogonal. A claim can have perfect textual provenance and still have ambiguous meaning. A classifier can have an explicit stereotype and still lack a valid identity root. Two phase memberships can each be fully evidenced and still conflict at the same state time.
SemanticGap: meaning is not explicit enough
A SemanticGap says that the source record exists but the ontological
interpretation required by the current rule is absent or unsupported. In the
bounded calculus, a referenced classifier without one of the explicitly
supported stereotypes is a semantic gap. The engine does not guess the
stereotype from a label, collection name, URI, or graph shape.
Example: three notes mention XYZ, but none declares whether XYZ is an
enduring object, an occurrence, or merely a source-local term. The text is
known; the required interpretation is not.
ProvenanceGap: the claim has lost its grounding
A ProvenanceGap says something different. The interpretation may be clear,
but the chain back to source material is incomplete. In the current calculus,
an active canonical Evidence object must connect its Assertion to at least one
distinct live Artifact or Source identity. Removing or deactivating an endpoint
while retaining the Evidence produces a typed provenance failure.
Example: a candidate states that IP-9 authorizes maintenance, but no exact
Artifact/span or derivation can be recovered. Repeated wording, a URL, or a
confidence score cannot substitute for the missing carrier.
Missing roots and phase conflicts are not renamed gaps
Missing rigid identity and conflicting phases are semantic problems in the broad sense, but the runtime preserves their sharper types:
MissingIdentityRootmeans agufo:SubKind,gufo:Phase, orgufo:Rolehas no explicit ancestry path to agufo:Kindidentity provider.RigidityViolationmeans an explicit subtype relation places a rigid Kind or SubKind under an anti-rigid Phase or Role.DisjointPhaseConflictmeans the same identity occupies two explicitly disjoint Phases at the same explicitstateTime.DanglingMediationmeans an activegufo:Relatordoes not mediate at least two distinct live identities.
Keeping these variants distinct matters operationally: each one calls for a different question, repair candidate, and evidence requirement.
A small mathematics of incompleteness
The following notation is pedagogical, not a replacement for canonical JSON or runtime validation.
For candidate transition Delta over graph G, let:
O(G, Delta) = obligations introduced by the explicit candidate declarations
W(G, Delta) = obligations with valid, inspectable witnesses
U(G, Delta) = O(G, Delta) minus W(G, Delta)
C(G, Delta) = explicit contradictions found by the rule matrix
A bounded transition can pass only when:
blocking(U(G, Delta)) is empty
and
C(G, Delta) is empty
This makes the unknown structurally important. If U is not recorded, the
engine cannot distinguish “the evidence says no” from “no sufficient evidence
was supplied.” If C is flattened into U, it cannot distinguish missing
information from incompatible information.
The gap set is therefore not an error log to discard after parsing. It is part of the decision input: it explains why the candidate cannot advance and what kind of evidence or declaration would change that conclusion.
Gap lifecycle without truth by side effect
| Stage | Meaning |
|---|---|
| Detected | A typed rule obligation is unmet or a source/canonical gap record is present. |
| Investigating | A human or external tool gathers source-backed clarification. |
| Resolved in a new candidate | New explicit records satisfy the obligation when the complete candidate is recalculated. |
| Accepted as a tolerated gap | A governance Decision may permit a bounded use despite the gap. The gap remains visible. |
| Superseded | Later evidence or interpretation replaces the earlier candidate while preserving lineage. |
An accepted gap never becomes positive evidence merely because someone agreed to tolerate it. Likewise, a validation report never becomes a Review or a Promotion.
Why absence is as important as presence
For a high-assurance graph, a positive edge and its unmet preconditions are two
parts of the same computation. A proposed Role without a Kind root, a Relator
without two participants, and an Assertion without source grounding cannot be
evaluated safely if their missing witnesses vanish from view.
OntoGraph's design goal is therefore a graph with two inspectable perimeters: the crisp structure currently supported by explicit witnesses, and the typed set of obligations that remain unresolved. Progress is not measured by making the second perimeter disappear from the UI; it is measured by resolving it with evidence or governing its continued existence honestly.
What this direction does not claim
This topology is not a proof that OntoGraph knows every possible gap or implements all OntoUML, UFO, gUFO, or OntoClean axioms. It does not treat unknown as false, infer missing identity from labels, or allow an accepted gap decision to manufacture the missing evidence.