docs← Back to article

Markdown for LLMs

nb-07 solutions — A document is not yet a proven fact

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# nb-07 solutions — A document is not yet a proven fact

*Checkable against `law test packs/examples/language-demo/register`
(9 checked, 9 passed). Identifiers and code as written.*

## 1. Which conjunct fails without verification?

**Answer: `authentic(d, "urn:demo:northbridge:verifier", "verified")`.**

The `Accept` rule needs all five conjuncts: `edge`, `evidence_status`,
`authentic`, `available`, `current`. The stored record supplies the
document and its status, and the `support` line supplies the link — but
only a `verification` declaration with a matching document hash,
verifier URN and outcome `verified` can support the `authentic`
conjunct. With the `verification VPass` block deleted, nothing feeds
`authentic`, so `Accept` never fires and `accepted(e)` is never
derived. Record plus link are transport: they say *what the paper
claims*, never *who checked it*.

## 2. What does the missing policy line switch off?

**Answer: `evidence_policy FilePolicy` in the context; it switches off
the entire acceptance computation.**

Without the policy selection, the engine never runs `FilePolicy` at
all — the hand-asserted `edge`, `evidence_status`, `authentic`,
`available` and `current` facts are ordinary assertions with no rule
consuming them, because the only rule that would consume them
(`Accept`) is wired into the unselected policy. Support stays
transport: filed, hashed and linked, but never evaluated. One context
line is the on/off switch for the whole pipeline.

## 3. Why silence instead of an error — and what if protection were lifted?

**Answer: protection discards the assertion route rather than
forbidding it with an error, so the fact simply has no lawful source
and the question is `NEITHER`. If `residency_proof` were removed from
`protects`, the bare `assert` would become a lawful source again and
`ProofAdmits` would derive `resident_admitted(ann)`: `TRUE_ONLY`.**

Protection is a routing rule, not a type error: it says "this
predicate may enter only through the evidence pipeline". The assertion
is ignored as a source, no derivation fires, and the engine reports the
honest outcome for an unsupported question — `NEITHER`. Lifting
protection restores assertion as a source, which is exactly how the
unprotected closure facts in nb-06 enter.

## 4. Refuting document: status and the deciding word

**Answer: `FALSE_ONLY`; the deciding word is `refutes`.**

The scenario links the verified document with `support DenyDoc
refutes residency_proof(...)` instead of `supports`. A verified
refuting document runs the same pipeline in the opposite direction:
acceptance of a document that speaks *against* the claim yields an
explicit negative, hence `FALSE_ONLY` rather than the `NEITHER` of a
missing chain. One word flips the polarity of the whole result.

## How to verify

```sh
law test packs/examples/language-demo/register
```

Expected: `итого: 9 проверено, 9 прошли, 0 не прошли, 0 не исполнены`.
The deciding tests are `policy selected, authenticity pinned`
(`TRUE_ONLY`), `without pinned authenticity support is rejected`
(`NEITHER`), `without a policy support stays transport` (`NEITHER`),
`bare assertion of the protected under a policy` (`NEITHER`), and
`refuting document` (`FALSE_ONLY`).