# Two incompatible duties ## Intention I want to name the incompatibility of the goals of two duties of one person. ## Incorrect form and why it stays silent ```text title="Incorrect form" // Разные имена целей first и second доказывают несовместимость. ``` A difference of text is not a proof. A scene with explicit incompatible on the templates yields a conflict; without it both duties exist without established incompatibility. ## Correct form ```law language "law.core" version "0.2"; package recipes.a.r15 version "0.1.0"; namespace "urn:recipe:a-positions:15"; entity Person; relation registered(p: Person); relation done(p: Person); relation first(p: Person); relation second(p: Person); rule A strict { for p: Person; when registered(p); then duty First { bearer p; achieve first(p) during [@2026-09-01, @2026-09-10]; }; } rule B strict { for p: Person; when registered(p); then duty Second { bearer p; achieve second(p) during [@2026-09-01, @2026-09-10]; }; } ``` ## Frozen execution scene | Facts and snapshot | Question | Answer | |---|---|---| | different goals without a proof; 2026-09-05 | `positions()` | `position(First, ACTIVE); expect position(Second, ACTIVE);` / `COMPUTED` | | explicit incompatibility; 2026-09-05 | `positions()` | `position(First, ACTIVE); expect position(Second, ACTIVE);` / `UNRESOLVED_NORMATIVE_CONFLICT` | ```law test "different goals coexist without proof" { given { context { legal_time @2026-09-05; decision_time @2026-09-05T09:00:00+05:00; knowledge_time @2026-09-30T09:00:00+05:00; timezone "Asia/Almaty"; } assert registered(entity_ref("urn:recipe:a-positions:15:p")); } evaluate positions(); expect position(First, ACTIVE); expect position(Second, ACTIVE); expect evaluation_status == COMPUTED; } ``` ```law test "explicit incompatibility conflicts" { given { context { legal_time @2026-09-05; decision_time @2026-09-05T09:00:00+05:00; knowledge_time @2026-09-30T09:00:00+05:00; timezone "Asia/Almaty"; } assert registered(entity_ref("urn:recipe:a-positions:15:p")); } evaluate positions(); expect position(First, ACTIVE); expect position(Second, ACTIVE); expect evaluation_status == UNRESOLVED_NORMATIVE_CONFLICT; expect issue(UNRESOLVED_NORMATIVE_CONFLICT); } ``` The case of the second scene is passed in full through `caseJson`; the standard incompatibility relation is given by its full StableId, not by a same-named local predicate. ```json { "assertions": [ { "evidence": [], "id": "urn:recipe:a-positions:15#assert-h14a3223b85ac0852ce472da8ca121bb261291552e0839ad764dff592b0631586", "kind": "assertion", "literal": { "args": [ { "id": "urn:recipe:a-positions:15:p", "kind": "entity_ref" } ], "kind": "literal", "polarity": "positive", "predicate": "urn:recipe:a-positions:15#registered" }, "origin": "source_asserted", "package": "urn:recipe:a-positions:15" }, { "evidence": [], "id": "urn:recipe:a-positions:15#assert-h29a06e0bbdfbbe1f4a5d94530230aec295c75efb75b5e9963f1cbada2325261a", "kind": "assertion", "literal": { "args": [ { "id": "urn:recipe:a-positions:15#First", "kind": "const_ref" }, { "id": "urn:recipe:a-positions:15#Second", "kind": "const_ref" } ], "kind": "literal", "polarity": "positive", "predicate": "urn:law:std#incompatible" }, "origin": "source_asserted", "package": "urn:recipe:a-positions:15" } ], "context": { "decisionTime": "2026-09-05T09:00:00+05:00", "knowledgeTime": "2026-09-30T09:00:00+05:00", "legalTime": "2026-09-05", "timezone": "Asia/Almaty" }, "options": {} } ``` ## Counterfactual Mutation: `bearer p;` → ``; rejection LDC-E1305. Additional counterfactuals are shown as separate scenes. ## Boundary Incompatibility applies only with one bearer and overlapping windows. A solver needs a pinned profile and a checkable certificate; here an explicit relation is used.