Skip to content
docs
Arxo ↗

General rule with an exception

For LLMs7 sections

I want to lift a general rule by carrying the bound person into the exception itself.

A person bound only in the general rule body is not automatically bound in the exception.

Incorrect form
unless lost(item);

The general-rule body is not carried into the exception: p remains an unbound variable of the generated defeater.

Arxo Law
language "law.core" version "0.2";
package recipes.b.r01 version "0.1.0";
namespace "urn:recipe:b-rules:01";
entity Person;
entity Item;
relation owns(p: Person, item: Item);
relation lost(item: Item);
relation allowed(p: Person, item: Item);
rule General defeasible {
for p: Person; for item: Item;
when owns(p, item);
then allowed(p, item);
unless owns(p, item) and lost(item);
}
Facts and choiceQuestionAnswer
item with the ownertruth(allowed(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")))TRUE_ONLY / COMPUTED
item losttruth(allowed(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")))NEITHER / COMPUTED
proviso removedtruth(allowed(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")))TRUE_ONLY / COMPUTED
item with owner
Arxo Law
test "item with owner" {
given {
context {
legal_time @2026-09-13;
decision_time @2026-09-13T09:00:00+05:00;
knowledge_time @2026-09-13T09:00:00+05:00;
timezone "Asia/Almaty";
}
assert owns(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a"));
}
evaluate truth(allowed(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")));
expect truth_status == TRUE_ONLY;
expect evaluation_status == COMPUTED;
}
item lost
Arxo Law
test "item lost" {
given {
context {
legal_time @2026-09-13;
decision_time @2026-09-13T09:00:00+05:00;
knowledge_time @2026-09-13T09:00:00+05:00;
timezone "Asia/Almaty";
}
assert owns(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")); assert lost(entity_ref("urn:recipe:b-rules:01:a"));
}
evaluate truth(allowed(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")));
expect truth_status == NEITHER;
expect evaluation_status == COMPUTED;
}
exception removed
Arxo Law
test "exception removed" {
given {
context {
legal_time @2026-09-13;
decision_time @2026-09-13T09:00:00+05:00;
knowledge_time @2026-09-13T09:00:00+05:00;
timezone "Asia/Almaty";
}
assert owns(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")); assert lost(entity_ref("urn:recipe:b-rules:01:a"));
}
evaluate truth(allowed(entity_ref("urn:recipe:b-rules:01:p"), entity_ref("urn:recipe:b-rules:01:a")));
expect truth_status == TRUE_ONLY;
expect evaluation_status == COMPUTED;
}

Mutation: unless owns(p, item) and lost(item); → unless lost(item);; rejection LDC-E4101. Scenes that delete a fragment are marked explicitly in the table.

A bare unless blocks the conclusion rather than establishing its negation. The contrary form is An exception establishes negation.

Bind the same person in the exception: a variable bound only in the general rule body stays unbound in the generated defeater.

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

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