Skip to content
docs
Arxo ↗

Absence, negation, and conflict

For LLMs11 sections

A question can come back established, denied, conflicted, undecided, or refused, and each of those is a different fact about the case. This stage sits after scenarios run and before review signs off: every undecided or conflicted answer in the suite needs a verdict, and every verdict needs a reason a later reader can re-check.

Read each answer through the table below. The first four rows are support states — combinations of support for and against. The last row is not an answer at all.

What the run saysStatusMeaningExample
establishedTRUE_ONLYsupport for, none againsta member is eligible; loss thirty has payout
explicit denialFALSE_ONLYsupport againsta barred applicant is not eligible
conflictBOTHsupport both ways, kept, never mergedmember and barred together
unknownNEITHERno premise of the question’s rules is fed, so nothing could firea stranger with no records
guard unmetNEITHERsome premises fed, but a body guard fails, so the rule stays silentscore twenty-nine; loss twenty-nine
refusaltool diagnosticthe setup is broken; no verdict followsa missing lock file, refused as LDC-E1104

Two rows share one status, so the status alone never closes the reading. Unknown and guard-unmet both report NEITHER; the diagnosis differs, and it comes from the states of the specific premises, never from the mere presence of facts somewhere in the case. For the unknown row, check that none of the question’s rules has a fed premise — a bystander fact about another person changes nothing. For the guard-unmet row, name the failed premise: in the fixture the guard points >= 30 with points fed at twenty-nine, in the running example the loss range from thirty through one hundred with loss fed at twenty-nine. Read the premise states to tell them apart; “facts present” alone proves neither row.

There is no denial by failure: silence never becomes denial on its own. A missing record yields NEITHER, and only three sources can write support against — a case fact, a rule head, or a declared completeness claim.

  • The completeness policy: the only way absence becomes denial is an explicit closure over one predicate, naming the domain it covers, the snapshot it reads, and the moment it holds as of. The running example closes nothing: a search over the package sources finds no closure declaration, so every silence stays undecided.
  • Which conflicted answers are genuine disputes to keep and which are modeling errors to fix. The running example shows none; the fixture keeps one on purpose.

The artifact is a verdict table plus a closure note. The table lists every NEITHER and BOTH in the suite with its verdict: expected silence, guard unmet, or genuine conflict. The closure note lists the closed predicates with their domains — or, as in the running example, states that the list is empty and silence is never denial there. The fixture verdicts read: stranger Dan, expected silence; score twenty-nine, guard unmet; member with barred flag, genuine conflict.

The employee accident insurance package, version 0.1.0, language 0.2, zero dependencies, explicit local imports, pinned to edition EAI_EDITION with materialization PINNED_UNOFFICIAL_COPY — an Adilet API copy retrieved 2026-09-13, sha256 pinned, local copy kept in the package — shows the full spread. Loss thirty is established while loss twenty-nine stays undecided: the payout rule guard fails below thirty, so the rule stays silent rather than denying. The class twenty-two premium test derives 29600 KZT on an insured sum of one million at rate 0.0296, and the penalty test derives exactly 3000 KZT — both established, both unrounded per EAI-D3. No scenario in the suite reports denial or conflict, and with no closures declared, no silence in the package can be read as denial.

The fixture mirrors the payout guard in miniature. All three rules below are checked and run; the suite output follows in the verification section:

Arxo Law
rule EligibleByMembership strict {
for a: Applicant;
when member(a);
then eligible(a);
}
rule BarredDeniesEligibility strict {
for a: Applicant;
when barred(a);
then not eligible(a);
}
rule EligibleByScore strict {
for a: Applicant;
for points: Integer;
when score(a, points) and points >= 30;
then eligible(a);
}

Reading NEITHER as no. A downstream memo that turns “loss twenty-nine stays undecided” into “payout refused at twenty-nine” invents a denial the package never derived. The mirror mistake is adding a closure to force the denial without a completeness claim to back it — the closure then certifies what nobody checked.

Both runs below were executed for this page with tool version law 0.1.0, semantics law.core/0.2:

Terminal
$ law engine check docs/handbook/files/fixtures/boundaries
check OK: docs/handbook/files/fixtures/boundaries
Output
$ law test docs/handbook/files/fixtures/boundaries
law test handbook.boundaries: мир handbook.boundaries
ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / MEMBER-ESTABLISHES-ELIGIBILITY
ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / BARRED-DENIES-ELIGIBILITY
ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / MEMBER-AND-BARRED-IS-CONFLICT
ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / SILENCE-IS-UNKNOWN
ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / SCORE-THIRTY-QUALIFIES
ok [handbook.boundaries#scenarios] tests/boundaries.lawtest / SCORE-TWENTY-NINE-STAYS-SILENT
итого: 6 проверено, 6 прошли, 0 не прошли, 0 не исполнены; код 0

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

Criterion: all six pass, each of the four support states appears at least once, and the score pair straddles — thirty established, twenty-nine undecided. The refusal row was observed on the same fixture before its lock file was generated:

Output
law test: ОТКАЗ LDC-E1104: [...] law.lock: No such file or directory (os error 2)

[translation] [...] marks the elided working path; the line reads: refused, lock file missing. A refusal carries no verdict — fix the setup instead of reading one into it.

Support states describe what the case holds for and against a statement, not how likely it is true or how reliable the records are. A closure claim ages with its snapshot: complete as of one date is not complete forever. And guard-unmet versus unknown always needs a premise reading — the status alone cannot tell them apart. The word “inapplicable” is reserved for the time page’s sense (a rule outside its window takes no part); a failed body guard is never called that here.

Continue with Readings and judgment, which keeps a disputed norm disputed instead of settling it by modeling choice.

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

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