Ask about truth and the reason for silence
Intent
Section titled “Intent”I want to ask about truth and the reason for silence.
Wrong form and why it stays silent
Section titled “Wrong form and why it stays silent”An unknown condition is not false. A refuted conjunct closes a request to the judge, although the judgment conjunct itself remains unknown.
external judgment relation suitable(p: Person) { }Correct form
Section titled “Correct form”language "law.core" version "0.2";package recipe.m01 version "1.0.0";namespace "urn:recipe:m-queries:01";entity Person;relation seen(p: Person);relation eligible(p: Person);external judgment relation suitable(p: Person) { authority Court; }relation allowed(p: Person);rule Allow strict { for p: Person; when eligible(p) and suitable(p); then allowed(p); }Frozen execution scene
Section titled “Frozen execution scene”| Input / variant | Question | Expectation |
|---|---|---|
| 1. live branch | truth(allowed(entity_ref("urn:recipe:m-queries:p"))) | truth_status == NEITHER; evaluation_status == REQUIRES_JUDGMENT; judgment_request(suitable, Court); |
| 2. dead branch | truth(allowed(entity_ref("urn:recipe:m-queries:p"))) | truth_status == NEITHER; evaluation_status == COMPUTED; judgment_requests(0); |
| 3. explain a dead branch | why_not(allowed(entity_ref("urn:recipe:m-queries:p"))) | evaluation_status == COMPUTED; blocked_by(Allow); judgment_requests(0); |
| 4. explain the unknown | why_not(allowed(entity_ref("urn:recipe:m-queries:p"))) | evaluation_status == REQUIRES_JUDGMENT; blocked_by(Allow); judgment_request(suitable, Court); |
live branch awaits judge
test "live branch awaits judge" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; } assert eligible(entity_ref("urn:recipe:m-queries:p")); } evaluate truth(allowed(entity_ref("urn:recipe:m-queries:p"))); expect truth_status == NEITHER; expect evaluation_status == REQUIRES_JUDGMENT; expect judgment_request(suitable, Court);}dead branch computes without judge
test "dead branch computes without judge" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; } assert not eligible(entity_ref("urn:recipe:m-queries:p")); } evaluate truth(allowed(entity_ref("urn:recipe:m-queries:p"))); expect truth_status == NEITHER; expect evaluation_status == COMPUTED; expect judgment_requests(0);}dead branch explains without judge
test "dead branch explains without judge" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; } assert not eligible(entity_ref("urn:recipe:m-queries:p")); } evaluate why_not(allowed(entity_ref("urn:recipe:m-queries:p"))); expect evaluation_status == COMPUTED; expect blocked_by(Allow); expect judgment_requests(0);}unknown branch requests judge
test "unknown branch requests judge" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00Z; knowledge_time @2026-09-13T09:00:00Z; timezone "UTC"; } assert seen(entity_ref("urn:recipe:m-queries:p")); } evaluate why_not(allowed(entity_ref("urn:recipe:m-queries:p"))); expect evaluation_status == REQUIRES_JUDGMENT; expect blocked_by(Allow); expect judgment_request(suitable, Court);}Check of result fields and extra inputs:
>>> import runpy>>> checks = runpy.run_path("docs/recipes/m-queries/resources/check.py")>>> checks["why"](https://github.com/arxohq/law/blob/master/docs/recipes/m-queries/1)TrueCounterfactual
Section titled “Counterfactual”The sidecar mutation reproduces LDC-E0201. Counterfactual table variants are executed separately; input errors are not passed off as NEITHER.
Boundary
Section titled “Boundary”In scene 3 the Allow blocker has trigger NOT_SATISFIED: eligible is refuted, suitable remains UNDETERMINED, with no requests. In scene 4 both conjuncts are UNDETERMINED; the why_not root classifies the goal like truth: status REQUIRES_JUDGMENT and the judge request for suitable. That is not a refutation: the request appears even where eligible is not established.
Why-not reads ready supports and does not recompute the law. Absence of a request to the judge does not turn its condition into FALSE_ONLY.
Pitfall
Section titled “Pitfall”A judge on a dead branch does not change the outcome — see A judgment on a live branch. Structural LawQL is a different interface.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.