Skip to content
docs
Arxo ↗

nb-24 solutions — Neighbor constructs, nine mistakes and three decision tasks

For LLMs4 sections
← Back to lessonChapter 24 / 25 · Modeling practice · Worked solution

Checkable against law test packs/examples/language-demo/permits (28 checked, 28 passed, 0 failed). Tool law 0.1.0, language 0.2, semantics law.core/0.2, std 0.2.0. Identifiers and code as written.

Bob is badge-holding and fined, lives in the outer zone, and pays the fee three times at 10 EUR.

Answer:

  1. permit_eligible(Bob) is FALSE_ONLY. Badge fires BadgeEligibility, fines fire FinesRefusal (then not permit_eligible), and RefusalOverEligibility prefers the refusal (reason lex_specialis). Same shape as the suite test denial wins by priority (badge + fines → FALSE_ONLY).
  2. central_senior(Bob) is NEITHER. The classification needs central_resident (resident in the central zone); Bob lives in the outer zone, so no case matches. Same shape as classification: not from the centre — no match. (Three household members would not help either: large_household needs four, LARGE_HOUSEHOLD = 4.)
  3. fee_total_set(Bob, 10 EUR) is TRUE_ONLY and fee_total_all(Bob, 30 EUR) is TRUE_ONLY. Three payments of the same 10 EUR collapse to one set element but count three times as a list — the same ledger as set ignores duplicates: three times 10 — total 10 against list counts duplicates: three times 10 — total 30.

Run law test packs/examples/language-demo/permits: итого: 28 проверено, 28 прошли, 0 не прошли, 0 не исполнены; код 0 — all four predictions confirmed, suite green.

Decision exercise 1: the hold nobody wrote

Section titled “Decision exercise 1: the hold nobody wrote”

Checkable on a scratch copy: 14 shipped probes plus the new probe, 15 checked, 15 passed, 0 failed. The shipped suite itself stays at 14/14.

Answer: def_senior(cora) is TRUE_ONLY and cls_senior(cora) is TRUE_ONLY. The hold changes nothing: no rule names audit_hold, so the defined head still abbreviates its satisfied condition and the classified head still matches with no defeater firing. Same shape as the suite test probe: qualifying senior without fraud, both models, plus one inert fact.

The hold fits the defeasible classification, not the definition: a hold is temporary by nature, and only the classification can lose support without denying the label — NEITHER says “not sorted”, never “not a senior”. Putting the hold on the definition would demand rewriting the condition itself, and the fraud repair already showed that a defeater cannot attach to a defined head (LDC-E4112).

For Cora to read NEITHER on cls_senior, the file needs a defeater that names the hold — for example when audit_hold(a); defeat cls_senior(a); — or the qualifying facts must go: dropping any one of resident, central, big family unmatches the case. The hold alone, unmentioned, is inert under both models.

Checkable on a scratch copy: 14 shipped probes plus the new probe, 15 checked, 15 passed, 0 failed. Tool and profile as above.

Answer: the duty is ACTIVE at the window opening — the same status as the March 10 read. The goal is unmet (not duty_fee asserted) and the window has just opened, so the lifecycle has no verdict yet in either reading; the opening read adds no new information over March 10, and only the April 10 read differs (VIOLATED). Same shape as the suite test probe: fee duty active inside window, moved to decision_time @2026-03-01T09:00:00Z.

If the office abolished the window and demanded same-day payment, keep the constraint and drop the duty: with no grace period there is no lifecycle to carry, and the timeless “issued implies paid” report — one construct, one issue, no window arithmetic — says everything the rule requires. The duty’s window machinery would be dead weight; its only remaining job, distinguishing reads over time, would have no reads left to distinguish.

Decision exercise 3: the half-filed station

Section titled “Decision exercise 3: the half-filed station”

Checkable on a scratch copy: 14 shipped probes plus the new probe, 15 checked, 15 passed, 0 failed. Tool and profile as above.

Answer: Filed is TRUE_ONLY, Draft is NEITHER, and Approved is NEITHER. The EvFiled event moves the case: the vacated Draft reads silence here — the procedure stops holding the state it left rather than denying it — and Approved stays silent because the Decide transition is still gated on the missing EvDecided. The case rests in Filed: filed, unchecked by any official act, waiting.

A round-3 extension of MiniAllotment could never express this waiting: stages have no events, so there is no “filed but undecided” for a round to index — admission would derive from points the moment the facts close, with or without an official. The procedure’s answer to “where does the case rest” is a state reached by an act; the stage has no such question in its vocabulary.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.