docs← Back to article

Markdown for LLMs

Two incompatible duties

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

Download this articlePlain text ↗
# 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.