docs← Back to article

Markdown for LLMs

LDC-E4105 — A priority over a strict rule

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

Download this articlePlain text ↗
# LDC-E4105 — A priority over a strict rule

## What it means

Priorities run between defeasible rules only: strict rules state logical
consequences, not preferences, and no ordering can prefer one consequence
over another. Naming a strict rule on either side of a priority edge asks
the ordering to do what the category forbids. The compiler refuses the
edge at the priority.

The fix takes the strict rule out of the edge — restate the choice
between defeasible rules, or drop the edge if the strict conclusion was
meant to stand unconditionally. Edges between two defeasible rules stay
silent.

## Example

```law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";

relation p(x: Text) kind institutional;
relation q(x: Text) kind institutional;
relation r(x: Text) kind institutional;
rule D1 defeasible { for x: Text; when q(x); then p(x); }
rule S1 strict { for x: Text; when q(x); then r(x); }
priority P1 { prefer S1 over D1; }
```

## Fix

```law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";

relation p(x: Text) kind institutional;
relation q(x: Text) kind institutional;
relation r(x: Text) kind institutional;
rule D1 defeasible { for x: Text; when q(x); then p(x); }
rule S1 strict { for x: Text; when q(x); then r(x); }
```

## Engine message

The engine reports this in its own wording:

```text
example.law:10:10: error LDC-E4105: priority over strict rule "S1" — error (§192/§114: strict is a logical category, priorities run between defeasible)
```

## Related

- [Priority](/constructs/priority/) — how conflicts between rules are settled.
- [Strict rules](/constructs/rule-strict/) — how a strict rule reads its body.