Three-valued field access
A refinement predicate reads a field, but a field may have no recorded value, and Argon does not pretend otherwise. How a missing field reads is fixed by how the field is declared.
A required field f: T that has no recorded value reads unknown — the third truth value, distinct from both true and false. A predicate that reads it cannot evaluate to a definite verdict, so it too is unknown. An optional field f: T? reads None when absent, a positive value the predicate can match on. An epistemic field f: Truth4Of<T> carries its own uncertainty and reads unknown directly when unrecorded.
What that unknown then does depends on the concept’s world assumption, and the two refinement disciplines read it as exact mirror images:
- Under a defined
iff, membership requires positive evidence that the predicate holds. Anunknownpredicate does not classify — a value whose deciding field is unrecorded is neither in the extent nor an error, simply not yet a member. This matches SHACL’s violation discipline and SQL’s three-valuedNULL. - Under a primitive
where, the invariant rejects only on positive evidence of violation. A write is refused whenPevaluates to a definitefalse; anunknownpermits it, because absence of information is not a violation.
Under the closed-world default, that unknown collapses to false — the regime that makes “not in the extent” mean “false”. A concept that models incomplete knowledge, where absence means unknown rather than false, opts into the open-world reading, where unknown is preserved as its own answer.
One distinction the substrate keeps sharp: unknown means information absent — a field with no value. A predicate that cannot be evaluated at all — an unsupported form, or a type-mismatched comparison like ordering a date against an integer — is not unknown. Unsupported forms are refused at build (OE0660); anything that reaches runtime fails loudly. The system never silently permits a where write or silently empties an iff extent on a predicate it could not run.