Skip to content
docs
Arxo ↗

Choosing a construct

For LLMs11 sections

After vocabulary fixes what the model talks about, construct choice fixes how each norm behaves: what the machine establishes by itself, what it checks without deriving, and what stays silent. This stage sits before rule drafting and after vocabulary. Every close call it settles goes on a decision record in the next stage.

  • The reviewed vocabulary from the previous stage.
  • The included inventory rows with their content units.
  • The decision record template for close calls.
  • Ask the deciding question first: may the system establish this by itself? If the act merely requires things to be so, the answer is a check; if the act makes it so by its word, the answer derives.
  • Route each norm through the table below and name the rejected neighbor.
  • For close neighbors, write the distinguishing scenario before drafting: the smallest fact set that yields different answers under each candidate.
  • Prefer the weaker behavior that still satisfies the act: derive only what the act establishes, and check the rest.
The act saysBehavior neededConstructThe machine
this follows, alwaysestablish the conclusion with no exceptionsstrict rulederives
this follows, unless exceptedestablish the conclusion, removablydefeasible rule with an escapederives, removably
remove support, asserting nothingblock without denyingdefeatersilences, never denies
this is one who dots, and backabbreviate with two-way meaningexact definitionderives and checks the converse
sort into a class, with exceptionsqualify defeasiblydefeasible classificationderives, removably
with this there must be thatcheck, derive nothingconstraintreports, never derives
this counts as thatrecognize an institutional factfictionderives an institutional fact
one value from inputscomputefunctionderives a value
inputs route to outputs by rowsroute under a hit policydecision tablederives a value
events move a case through statestrack a lifecycleproceduremoves state, derives nothing
repeated derivation in roundsindex the derivationderivation stagederives per round
  • The construct for each norm, with the rejected neighbor named in the construct map.
  • Which close calls need a decision record. In the running example the tariff shape needs one (EAI-D1); the records themselves are written in the next stage.

The artifact is a construct map: each norm paired with its construct and its distinguishing scenario. The scenario pairs below are the map’s core; each row is read as same facts, then the one fact that tells the neighbors apart.

NeighborsSame factsDiscriminating factOutcomes
escape versus denial versus defeatera resident driversuspension, or outstanding fines, or a fraud flagsilence, or denied, or support removed without denial
exact definition versus defeasible classificationa qualifying senior-parking applicanta fraud flagstays established under the definition; returns to neither under the classification plus defeater
constraint versus consequence rulean issued permit with the fee unpaidthe fee fact itselfan issue reported beside the standing fact versus a total derived with nothing reported
function versus decision tablea twelve-month applicationoverlapping rowsone computed value versus the routed row; an overlap complains under the unique policy
procedure versus derivation stagea station in review, an allotment in roundsa filing event versus the round indexthe event moves the case versus round two reading round one
plain fact versus admission versus closurea resident on filea verified document edge versus register completenessasked directly versus admitted through conjuncts versus absence-becoming-denial inside the domain

The running example maps all five touched articles to strict rules (plus two assumed inputs — the insured sum under Article Sixteen and the risk-class attribution under Article Seventeen point 3), since none admits exceptions. The map reads:

NormConstructWhy not the neighbor
Employer duty, Article Eightstrict rule from employment facts to the institutional dutyno exception in the article; nothing to check without deriving
Tariff rows, Article Seventeentwenty-two strict rules, one per classeach row carries its own source label; recorded as EAI-D1
Premium, Article Seventeenthree strict rules: base as insured sum times rate, then base-or-floor split on one comparisonthe amount must be derived; a constraint would check without producing it — recorded as EAI-D4
Payout, Article Nineteenstrict rule with inclusive guardsthe bounds are applicability conditions in the body; below thirty the rule stays silent rather than denying
Penalty, Article Ninestrict computation rule, unpaid times rate times dayssame as the premium: derive, not check

The class twenty-two premium test and the thirty-versus-twenty-nine payout pair are the distinguishing scenarios made executable: they are the facts that would read differently under the rejected neighbors.

The costliest mistake is writing a rule where the act needs a check: an issued document that must have a return term, written as a rule, would establish a term nobody assigned. Its mirror is checking where the act establishes: a constraint on the premium would leave the amount underived. When in doubt, return to the deciding question.

The stage is done when the suite passes seven of seven and the boundary pair straddles: thirty percent qualifies while twenty-nine does not. Observed run with tool version law 0.1.0, semantics law.core/0.2:

Output
law test kz.corpus.employee_accident_insurance: мир kz.corpus.employee_accident_insurance
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-EMPLOYER-MUST-INSURE
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-MINING-CLASS-22-PREMIUM
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-LOSS-THIRTY-QUALIFIES
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-LOSS-TWENTY-NINE-IS-NOT-INSURER-PAYOUT
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-SPECIAL-LATE-PAYMENT-PENALTY
ok [kz.corpus.employee_accident_insurance#authored] tests/goals.lawtest / GoalEstablishedCapacityLossHasPayout-world
ok [kz.corpus.employee_accident_insurance#authored] tests/goals.lawtest / urn:kz:corpus:clir:employee-accident-insurance#GoalEstablishedCapacityLossHasPayout
итого: 7 проверено, 7 прошли, 0 не прошли, 0 не исполнены; код 0

[translation] The header line names the tested world; the summary line reads: seven checked, seven passed, zero failed, zero unexecuted, exit code zero.

Criterion: all seven lines read ok, and the two boundary tests disagree in the expected direction. A construct change that collapses the boundary pair fails here.

The machine checks the form of the choice, never its fidelity to the act: a strict rule where the act allows exceptions still passes. Close calls stay author judgment, which is why they need records.

Continue with Recording decisions, which writes the records for the close calls found here.

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

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