docs← Back to article

Markdown for LLMs

Priority: pitfalls

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

Download this articlePlain text ↗
# Priority: 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. Items marked
“confirmed by runs” were reproduced during this research on the installed
engine.

## 1. Answer Contradiction although “it is clear which norm is special” (confirmed by runs)

The core does not count speciality by number of conditions: without a
declared `priority`, two defeasible opposite inferences are incomparable
and both preserved. Reproduction: the `research.priority.no_priority_both` teaching package
answers Contradiction on both facts; adding exactly one edge (package
`research.priority.special_over_general`) changes the answer to Refuted.
Detection: on Contradiction with two applicable opposite heads, look first for the
missing edge, not for an engine defect.

## 2. Expected Refuted, got Not established, not refuted

A bare `unless` and a defeater remove support without asserting the
opposite: after defeat the answer is Not established, not refuted, not Refuted.
Refusal is written either in the contrary form `unless C then not A` or as
a rule with a `not A` head and priority. Question check: “does the defeating
side assert anything?” — no, so Refuted has nowhere to come from.

## 3. `unless` on a strict rule

`LDC-E4110`: a strict rule has no exceptions, exception nodes are
not generated (plus warning `LDC-E1302` on non-lowering, if the form is
written anyway). Fix: make the rule `defeasible` or move the applicability
condition into the strict body.

## 4. Priority over a strict rule

`LDC-E4105`: source rank is `defeasible` with `priority …
reason lex_superior` or `priority policy`, not `strict`. `strict` is
inference strength, not act height: a strict norm of an ordinary regulation
beats a defeasible norm of the constitution without any edge.

## 5. Edge form violated

Two `prefer` clauses in one block or a block without `prefer` — `LDC-E0201`:
the second edge is written as a separate declaration (model — the
series of four edges over the art. 44 sanction limits). A side naming
no package rule — `LDC-E4108` and `LDC-E1318`: such priority never applies,
silently. Priority between heads of different predicates — warning
`LDC-E4107`: the heads never become complements, the edge is dead.

## 6. Priority ring

A statically known ring (`A` over `B`, `B` over `A`, including `prefer A
over A`) — rejection `LDC-E4104` already at `check`. A ring
where at least one edge is conditional passes statics: at runtime the
conflict group gets `PRIORITY_CONFLICT`, both sides preserved, no tie-break.
Detection: Contradiction with edges in both directions — look at the
conditional `when` clauses of the edges, not at the rules themselves.

## 7. Edge between same-polarity heads (warning, not rejection)

Two applications are opposite only on complement heads, so two
inferences of one relation never collide under any arguments — and an edge
between them expresses nothing: warning `LDC-E2142`.
Working forms: the general rule gets a guard, the special one an explicit
defeater (priority over a defeater is alive — the only lawful
case of matching polarity), or both stakes move into a decision table.
Exception: an edge between links of an `unless` chain — it
carries order to the transitive closure, not to the pair, and `LDC-E2142` no
longer sounds on it.

## 8. Defeater without a candidate; proviso with unbound variables

A defeater whose target is produced by no defeasible rule is a rejection
`LDC-E4112`: targets from strict-only rules or with no producer
cannot be attacked. A proviso binding not all head variables is `LDC-E4101`
on the generated rule name: repeat the binding conjunct as the
clause’s first premise. Both in detail — the
[defeasible-rules pitfalls](/constructs/rule-defeasible-unless/pitfalls/) (items 1–2).

## 9. Cancellation of a valued literal

A defeater cancelling a
valued literal with two or more defeasible producers of the predicate is
warning `LDC-E2144`: matching values carry away
another’s inference; cancel the valueless applicability relation instead
(in detail — the [defeasible-rules pitfalls](/constructs/rule-defeasible-unless/pitfalls/), item 4).