docs← Back to article

Markdown for LLMs

LDC-E4103 — A strict rule reading a defeasible conclusion

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

Download this articlePlain text ↗
# LDC-E4103 — A strict rule reading a defeasible conclusion

## What it means

A strict rule runs to completion in its stratum, before any defeasible
conclusion it reads has settled: defeasible reasoning may still defeat
what the strict rule already consumed. A status-sensitive read — a bare
atom, a negation, or an enumeration over a predicate a defeasible rule
produces — therefore uses a value before both of its polarities are
known. The compiler refuses the strict rule and points at the late
producer.

The fix moves the read to a rule that runs after the producer settles,
or reads through a monotone form that does not wait on the outcome. A
strict rule over predicates no defeasible rule touches stays 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 Produce defeasible { for x: Text; when q(x); then r(x); }
rule Consume strict { for x: Text; when r(x); then p(x); }
```

## 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 Produce defeasible { for x: Text; when q(x); then r(x); }
rule Consume defeasible { for x: Text; when r(x); then p(x); }
```

## Engine message

The engine reports this in its own wording:

```text
example.law:9:6: error LDC-E4103: LATE_STATUS_PRODUCER: strict rule "Consume" reads bare "r", produced by a defeasible rule — the status is used before producers of both polarities complete (§111); in 0.1 status-sensitive consumption of defeasible conclusions from strict is unavailable (monotone supported(P) — L3)
```

## Related

- [Strict rules](/constructs/rule-strict/) — how a strict rule reads its body.
- [Defeasible rules](/constructs/rule-defeasible-unless/) — how a rule yields to an exception.