Markdown for LLMs
Separate an action from a duty
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# Separate an action from a duty
## Intention
I want to name an action without automatically attributing a permission or a duty to it.
The scenes below check the boundary on a minimal case with a normative position.
## Incorrect form and why it stays silent
Declaring an action type itself prescribes nothing.
```law title="Incorrect form"
action Submit { actor: Person; }
// Этого недостаточно, чтобы возникла SubmitDuty.
```
Another incorrect form is a duty without a bearer; it is rejected with LDC-E1305 and pinned by teaches.
```text title="Incorrect form"
then duty SubmitDuty {
goal achievement {
condition submitted(p);
window [@2026-01-01, @2027-01-01);
}
};
```
## Correct form
A duty is introduced by the normative head of a separate rule.
```law
language "law.core" version "0.2";
package recipes.n.r02 version "0.1.0";
namespace "urn:recipe:n-package:02";
entity Person;
action Submit { actor: Person; }
relation registered(p: Person);
relation submitted(p: Person);
rule RecordSubmission strict {
for p: Person;
when registered(p);
then submitted(p);
}
rule SubmissionDuty strict {
for p: Person;
when registered(p);
then duty SubmitDuty {
bearer p;
goal achievement {
condition submitted(p);
window [@2026-01-01, @2027-01-01);
}
};
}
```
## Frozen execution scene
| Facts | Question | Answer |
|---|---|---|
| registered(p) | Positions | SubmitDuty SATISFIED |
| No registered(p) | Positions | SubmitDuty is absent |
| Same registered(p), SubmissionDuty rule cut out | Positions | UNDETERMINED, no positions |
```law
test "rule creates duty" {
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 registered(entity_ref("urn:recipe:n-package:02:p"));
}
evaluate positions();
expect position(SubmitDuty, SATISFIED);
}
```
```law
test "action declaration creates no duty" {
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";
}
}
evaluate positions();
expect not position(SubmitDuty, ACTIVE);
expect not position(SubmitDuty, SATISFIED);
}
```
```law
test "action without norm prescribes nothing" {
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 registered(entity_ref("urn:recipe:n-package:02:p"));
}
evaluate positions();
expect normative_status == UNDETERMINED;
}
```
## Counterfactual
`teaches` removes the required bearer `bearer p` from the normative head and requires a rejection. A scene without registered separately shows: the presence of an action declaration does not create a position.
## Boundary
The presence of a duty also does not mean liberty. Permission, prohibition, and weak permission are separate recipes in book A.
## Pitfall
A declared action without an activated rule does not produce SubmitDuty; the scenes above pin both sides.