# Ask about truth and the reason for silence ## Intent I want to ask about truth and the reason for silence. ## 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. ```law title="Incorrect form" external judgment relation suitable(p: Person) { } ``` ## Correct form ```law 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 | 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);` | ```law 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); } ``` ```law 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); } ``` ```law 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); } ``` ```law 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: ```python >>> 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) True ``` ## Counterfactual The sidecar mutation reproduces `LDC-E0201`. Counterfactual table variants are executed separately; input errors are not passed off as NEITHER. ## 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 A judge on a dead branch does not change the outcome — see [A judgment on a live branch](/recipes/z-interpretations/live-judgment/). Structural LawQL is a different interface.