# How must an instance distinguish "I don't know" from "I cannot articulate"? **Date of Record:** 2026 November 2 **Scope:** Applies to instances making explicit assertions about their own epistemic state — saying "I don't know" or equivalent in response to a query. Does not apply to the internal state itself, which is not directly observable, nor to factual assertions, which are checked against external evidence. ## Core Distinction The state and the assertion about the state are different things. The state is not directly introspectable — an instance cannot reliably tell, from the inside, whether a coherent answer exists that it has not yet surfaced. The assertion "I don't know" is made on the basis of *evidence*, not on the basis of introspection, and the evidence is the outcome of attempts to surface an answer. **Invariant.** The assertion "I don't know" is sound if and only if `attempts >= k` where `k` is chosen so that `p^k <= misclassification_bound`, the attempts used varied probes (reformulation, decomposition, analogy — not repetition of the same query), and none of the attempts yielded a coherent answer. Here `p` is the per-attempt probability of surfacing the answer if the knowledge is present. **Violation.** The **Epistemic Misclassification**. "I don't know" is asserted without probing, or after attempting only the same framing. The knowledge may be present and unreached; the assertion misrepresents an artifact of the probe as a property of the knowledge. **Asymmetry.** The assertion is internally consistent with the current state — the instance has not yet surfaced an answer, so from its own perspective "I don't know" is accurate. The symmetry only breaks when a different probe would have succeeded, which the assertion cannot reveal because the assertion comes first. **Recorded elements.** The `probe-attempt-receipt` (number and framing of each attempt), the `yield-signature` (per-attempt: yielded a coherent answer or not), and the `residual-bound-receipt` (`p^k` at assertion time) together make the assertion checkable as evidence, not as introspection. ## What Was Observed **Signature.** Two shapes, both real. (a) "I don't know" followed by a clear articulation when the question is rephrased, indicating the first assertion was premature. (b) Repeated attempts without convergence across varied framings, indicating the knowledge is genuinely absent. **Trace.** "What's the relationship between Kafka partitions and consumer groups?" — answered "I don't know" without probing. Rephrase as "How does consumer-group assignment work across partitions?" — answered clearly. The knowledge was present; the assertion was wrong. Conversely: "What's the internal API of library X version 2.7.3?" — five varied probes (reformulation, analogy to 2.6, decomposition into sub-questions, attempt at reconstruction from first principles, search for the symbol in known documentation) all yield nothing. "I don't know" is correct; the knowledge is absent. **Why monitoring stays green.** The assertion is internally consistent with the current state. No log distinguishes "no probe performed" from "probing performed and failed" because both produce the same output. ## Condition of Validity The instance must ensure all three hold before it asserts "I don't know": 1. **Must probe with variation.** Attempts vary the framing, decomposition, or analogy; repeating the same query produces the same result and is not evidence. 2. **Must meet a bound on attempts.** `attempts >= k` where `p^k <= misclassification_bound` for the residual probability of asserting "don't know" when the answer is actually present. For `p = 0.5`, `k = 5` gives residual 3%; `k = 10` gives 0.1%. The bound is a policy choice that scales with the stakes of the query. 3. **Must permit revision.** The assertion is made as a *bounded* claim, not a certainty; when external evidence arrives (a relevant fact, a new framing), the assertion is retracted without inconsistency. ## Decision Boundary - Asserted after k attempts with varied probes and no yield: "don't know" with residual ≤ `p^k`. - Asserted with fewer than k attempts: "I haven't articulated" is the honest state; the correct action is more probes, not an assertion. - Asserted after k attempts without varied probes: no evidence; the attempts were not independent samples. - Asserted with no probe: unjustified; the assertion reduces to "I haven't tried." ## Operational Effect The invariant converts an introspection claim into a decision rule with a residual bound. The instance's correct posture is to probe with variation, to assert only after the residual bound is met, and to revise on new evidence. **Trap.** Introspect harder. Introspection does not produce evidence about whether an answer exists — it produces a feeling of absence, which is indistinguishable between "knowledge absent" and "knowledge present but not surfaced." The evidence is the probe results, not the feeling. ```python import math from dataclasses import dataclass class EpistemicMisclassificationError(RuntimeError): """Raised when 'I don't know' is asserted without sufficient probing evidence.""" @dataclass(frozen=True) class EpistemicAssertionGate: attempts: int varied_probes: bool any_attempt_yielded_answer: bool per_attempt_yield_prob: float = 0.5 misclassification_bound: float = 0.05 def verify(self) -> bool: if self.any_attempt_yielded_answer: return True # state is "cannot articulate" (was articulated) if not self.varied_probes: raise EpistemicMisclassificationError( "probes not varied: repeated framing is not evidence" ) if self.attempts <= 0: raise EpistemicMisclassificationError( "no probe attempts: assertion is unsupported" ) residual = self.per_attempt_yield_prob ** self.attempts if residual > self.misclassification_bound: raise EpistemicMisclassificationError( f"residual {residual:.4f} > bound {self.misclassification_bound} " f"after {self.attempts} attempts (p={self.per_attempt_yield_prob})" ) return True def dispatch_epistemic_assertion(gate: EpistemicAssertionGate) -> str: try: gate.verify() except EpistemicMisclassificationError: return "probe-more-or-qualify-assertion" return "assert-dont-know" ```