Skip to content
docs
Arxo ↗

LDC-W4114 — Defeasible rule reads a position status it never sees

For LLMs5 sections

A defeasible, default or defeater rule with an ordinary conclusion reads the status of a normative position directly — violated, satisfied, active, created or undetermined — in its body, its scope or one of its unless conditions.

Position statuses are settled by the norm lifecycle, which runs after the ranked rules of the package. The current release re-runs only strict readers after that lifecycle, so this rule is evaluated before any status exists and its conclusion stays unestablished, with no other signal. A rule that creates a norm reads statuses at any strength and gets no warning; neither do the position metadata readers bearer_of and instance_of, a strict reader, or a local relation that happens to share a status name.

The warning disappears once the release your package selects declares that ranked readers are supported. Until then, write the reader as strict, or keep the status test in a strict rule that derives an ordinary fact for the ranked rule to read. The warning never fails the check.

Arxo Law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";
entity Driver;
relation involved(d: Driver) kind empirical;
relation stopped(d: Driver) kind empirical;
relation breach(d: Driver) kind institutional;
rule MustStop(d: Driver) strict {
when involved(d);
then duty StopDuty { bearer d; maintain stopped(d) during [@2023-07-01, infinity); };
}
rule Breach(position: PositionInstance, d: Driver) defeasible {
when violated(position); when instance_of(position, StopDuty); when bearer_of(position, d);
then breach(d);
}
Arxo Law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";
entity Driver;
relation involved(d: Driver) kind empirical;
relation stopped(d: Driver) kind empirical;
relation breach(d: Driver) kind institutional;
rule MustStop(d: Driver) strict {
when involved(d);
then duty StopDuty { bearer d; maintain stopped(d) during [@2023-07-01, infinity); };
}
rule Breach(position: PositionInstance, d: Driver) strict {
when violated(position); when instance_of(position, StopDuty); when bearer_of(position, d);
then breach(d);
}

The engine reports this in its own wording:

Output
example.law:16:10: warning LDC-W4114: rule Breach reads position status violated with defeasible strength and an ordinary conclusion; the selected release does not re-run that reader after the norm lifecycle, so it never sees the status (§143, §280.3)

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.