docs← Back to article

Markdown for LLMs

nb-19 solutions — Unknown, presumed and deemed

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

Download this articlePlain text ↗
# nb-19 solutions — Unknown, presumed and deemed

## Exercise (article section 9)

Setup: `demo.northbridge.unknown`
(`packs/examples/language-demo/unknown/`), suite 17/17 green.
Command for every check below:

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

## Answers

1. `truth(resident(carl))` is `FALSE_ONLY`: Carl is on file and the
   closure `FileComplete` turns the missing record into an explicit
   denial inside its domain. `truth(permit_ok(carl))` is `NEITHER`:
   the closure covers `resident` only, so `Grant` has no established
   premise and `DenyListed` has none either. The declaration that
   explains the difference is the closure's `predicate resident`
   line — completeness is per predicate, never file-wide.

2. With application and unknown residence, `truth(needs_review(ann))`
   is `TRUE_ONLY` (`not_known` holds on silence) while
   `truth(cleared(ann))` is `NEITHER` (no denial, so
   `ClearWhenDenied` does not fire). After asserting
   `not resident(ann)`, only the second flips — `cleared` becomes
   `TRUE_ONLY`; `needs_review` stays `NEITHER` because residence is
   now decided (denied counts as established-against, so
   `not_known` no longer holds).

3. `truth(standing(ann))` is `NEITHER`: the presumption `Standing`
   fires on her application but the unpaid record rebuts it via
   `unless`, withdrawing the conclusion without denying it.
   `truth(received(ann))` is `NEITHER` too, but answered by the
   fiction `DeemedReceipt`: nothing was posted, and fiction needs
   its trigger — it is not a default. The fine touches only standing
   because `unless unpaid(a)` belongs to the presumption alone; the
   fiction has no `unless` and no rebuttal path.

4. With the fee record wholly absent, the constraint reports
   nothing and `late_fee` is not derived. Both mechanisms need the
   explicit denial: the constraint's `require fee_ok(a)` fires only
   against established-against support, and `LateFee`'s `not
   fee_ok(a)` condition likewise needs the denial, not mere
   silence. Difference from the suite case: `assert not fee_ok`
   supplies support-against (finding plus consequence), while total
   absence supplies nothing (neither).

5. `truth(resident(ann))` is `BOTH` — contradiction is preserved,
   neither record cancels the other. `Grant` does not fire for her:
   a rule that needs `resident(a)` established does not run on a
   disputed premise, so `truth(permit_ok(ann))` is `NEITHER`.

## Checkable tests

Questions 1–3 and 5 replay suite tests verbatim
(`closure: on file without a record is denied`,
`closure does not leak to other predicates`,
`unknown triggers review`, `silence does not clear`,
`denial clears`, `presumption holds by default`,
`rebuttal withdraws the presumption`, `fiction needs its trigger`,
`contradiction is both`). Question 4 was verified 2026-10-02 with a
scratch probe (`/tmp/nb19-probe/probe.law`, copy of the package;
`law engine test /tmp/nb19-probe/probe.lawtest --program
/tmp/nb19-probe/probe.law`):

```text
test FAIL: probe: issued, fee record wholly absent
  truth_status == TRUE_ONLY: в документе NEITHER
test FAIL: probe: issued absent-fee, issue present
  issue(CONSTRAINT_VIOLATED): в документе нет
test FAIL: probe: disputed premise and grant
  truth_status == TRUE_ONLY: в документе NEITHER
```

(All three probes fail as designed: `late_fee` is `NEITHER`, no
issue is present, and `Grant` does not fire on a disputed premise.)