docs← Back to article

Markdown for LLMs

Shift the burden after a presumption

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

Download this articlePlain text ↗
# Shift the burden after a presumption

## Intent

I want to change the party to whom the rule assigns proof.

## Wrong form and why it stays silent

```law title="Incorrect form"
priority Shift { prefer Release over Default; reason explicit_exception; } // само по себе не создаёт must_prove(b)
```

Priority resolves a clash of two conclusions about one party. The other party is assigned the burden by a standalone Transfer rule; the duty window and goal are added as in [Require an issue to be established within a deadline](/recipes/d-evidence/burden-duty/).

## Correct form

```law
language "law.core" version "0.2";
package recipes.d.r02 version "0.1.0";
namespace "urn:recipe:d-evidence:02";

entity Party;
relation dispute(a: Party, b: Party);
relation presumed(a: Party);
relation must_prove(p: Party);
rule Default defeasible { for a: Party; for b: Party; when dispute(a,b); then must_prove(a); }
rule Release defeasible { for a: Party; for b: Party; when dispute(a,b) and presumed(a); then not must_prove(a); }
rule Transfer defeasible { for a: Party; for b: Party; when dispute(a,b) and presumed(a); then must_prove(b); }
priority Shift { prefer Release over Default; reason explicit_exception; }
```

## Frozen execution scene

In the table P and Q are different entities of the page, C is a case; full identifiers are pinned in the scenes.

| Input on 13.09.2026 (a different date is named in the scene) | Question | Answer |
|---|---|---|
| ordinary allocation | `truth(must_prove(P))` | `TRUE_ONLY` / `COMPUTED` |
| party released | `truth(must_prove(P))` | `FALSE_ONLY` / `COMPUTED` |
| other party assigned | `truth(must_prove(Q))` | `TRUE_ONLY` / `COMPUTED` |
| without the transfer rule | `truth(must_prove(Q))` | `NEITHER` / `COMPUTED` |

```law
test "default burden on first party" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }
        assert dispute(entity_ref("urn:recipe:d-evidence:02:p"),entity_ref("urn:recipe:d-evidence:02:q"));
    }
    evaluate truth(must_prove(entity_ref("urn:recipe:d-evidence:02:p")));
    expect truth_status == TRUE_ONLY;
    expect evaluation_status == COMPUTED;

}
```

```law
test "presumed party released from burden" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }
        assert dispute(entity_ref("urn:recipe:d-evidence:02:p"),entity_ref("urn:recipe:d-evidence:02:q")); assert presumed(entity_ref("urn:recipe:d-evidence:02:p"));
    }
    evaluate truth(must_prove(entity_ref("urn:recipe:d-evidence:02:p")));
    expect truth_status == FALSE_ONLY;
    expect evaluation_status == COMPUTED;

}
```

```law
test "burden assigned to other party" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }
        assert dispute(entity_ref("urn:recipe:d-evidence:02:p"),entity_ref("urn:recipe:d-evidence:02:q")); assert presumed(entity_ref("urn:recipe:d-evidence:02:p"));
    }
    evaluate truth(must_prove(entity_ref("urn:recipe:d-evidence:02:q")));
    expect truth_status == TRUE_ONLY;
    expect evaluation_status == COMPUTED;

}
```

```law
test "no transfer rule leaves neither" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }
        assert dispute(entity_ref("urn:recipe:d-evidence:02:p"),entity_ref("urn:recipe:d-evidence:02:q")); assert presumed(entity_ref("urn:recipe:d-evidence:02:p"));
    }
    evaluate truth(must_prove(entity_ref("urn:recipe:d-evidence:02:q")));
    expect truth_status == NEITHER;
    expect evaluation_status == COMPUTED;

}
```

The counterfactual program differs only by the mutation named below; its scene:

```law
test "missing priority keeps both conclusions" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00Z;
            knowledge_time @2026-09-13T09:00:00Z;
            timezone "UTC";
        }
        assert dispute(entity_ref("urn:recipe:d-evidence:02:p"),entity_ref("urn:recipe:d-evidence:02:q")); assert presumed(entity_ref("urn:recipe:d-evidence:02:p"));
    }
    evaluate truth(must_prove(entity_ref("urn:recipe:d-evidence:02:p")));
    expect truth_status == BOTH;
    expect evaluation_status == COMPUTED;

}
```

```python
>>> import runpy
>>> check = runpy.run_path("docs/recipes/d-evidence/resources/check.py")
>>> check["check_variant"](https://github.com/arxohq/law/blob/master/docs/recipes/d-evidence/2)
'Д2: контрфактуал подтверждён; lawc = lawref'
```

## Counterfactual

Diagnostic mutation (check) — LDC-E4108.

Original fragment:

```law
priority Shift { prefer Release over Default; reason explicit_exception; }
```

Replacement:

```law
priority Shift { prefer Missing over Default; reason explicit_exception; }
```

The paired scenes above pin the change of outcome.

## Boundary

must_prove is a local allocation, not a created duty position. Priority of two compatible duties with different bearers does not by itself extinguish one of them. The normative position is [Require an issue to be established within a deadline](/recipes/d-evidence/burden-duty/).

The counterfactual mutation removes `priority Shift { prefer Release over Default; reason explicit_exception; }`: under the same facts, must_prove of the first party becomes BOTH.

## Pitfall

Priority alone does not move the burden: the other party is assigned by a standalone Transfer rule.