docs← Back to article

Markdown for LLMs

Presumptions and fictions: pitfalls

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# Presumptions and fictions: pitfalls

> Updated 3 October 2026: `concept`, `except_when`, `claim`, `definition … sufficient`, and `default` strength have been removed, together with their special deprecation diagnostic. References below to the former behavior and corpus sources are historical. New source uses `relation`, `unless`, `duty`, a strict rule, and `defeasible`.

Wrong forms, silent outcomes, `LDC-E` diagnostics, typical mistakes of
formalizers and AI agents, and how to detect them.

## 1. The exception does not bind its variables

The range-restriction requirement applies to the generated rule wholly and separately:
every variable of its head must be bound by a positive
established-conjunct of the exception condition itself; bound only in the general rule’s `when`
is not bound. The diagnostic is `LDC-E4101` on the generated node’s name
(`<presumption>/R2`, …). The practical fix is repeating the binding
conjunct as the clause’s first premise: logically an identity (when the
general rule fires the premise is already true), while the variable moves
into bound inside the node with its own body.

## 2. A bare `unless` does not give Refuted

A bare clause generates a defeater: the application is beaten, there
are no inferences, the answer is Not established, not refuted. Proven by the section’s run:
case 02 of the `innocence` teaching package answers Not established, not refuted, not Refuted.
Whoever expected established absence of innocence writes `unless … then not
innocent(p)` (contrary form: a defeasible rule with direct priority). The
mistake is silent: `law test` is green, the meaning is wrong.

## 3. `unless` on a strict rule is a static error

The author either makes the rule `defeasible` or moves the exact
applicability condition into the strict body so no defeat is needed.
For a genuinely strict contrary inference — a separate explicit `strict`
rule; the linter demands a rationale. The AI agent appending `unless` to a
strict rule “for completeness” gets a rejection, not a warning.

## 4. A fiction with an empirical head

A fiction infers an institutional fact; the compiler warns if the head
relation has `empirical` kind. A fact about the world (“delivered”)
is a rule; a legal equation (“counts as received”) is a fiction. A mixed-up
kind is a silent level confusion: the inference looks like a world fact but
proves as an institution.

## 5. Foreign clauses in a presumption body — a loud rejection

`scope`, `effective`, source anchors, and expansion metadata have no expansion
in presumption semantics: in 0.1 the implementation must reject them statically
(`LDC-E0201`), not lower the presumption without them. Same for fiction, classification, and definition:
source anchors and metadata in their bodies are `LDC-E0201`. The
rejection is loud by design: a presumption applied wider than written is
worse than a rejection.

## 6. Rules and exception chains

Write exceptions with the `unless` clause; the order of multiple
clauses defines the priority chain ([§150](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/20-part-xix-definitions-presumptions-fictions-exceptions.ru.md#150-exception-from-exception)). Choose a defeasible rule when
its conclusion may be defeated.

## 7. A chain without an edge gives Contradiction

Two contrary clauses with one conclusion (`unless C1 then not A; unless C2
then not A`) share an identical head literal — that pair is not
opposite to each other, and defeat gives it no victory. The
chain edge carries order to the transitive closure, not to itself: without it, a
case where only the later link fires answers Contradiction instead of Refuted.
Detection: run a case with one late link; Contradiction where Refuted was
expected is a lost edge.