docs← Back to article

Markdown for LLMs

Choose a sanction amount

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

Download this articlePlain text ↗
# Choose a sanction amount

## Intention

I want to bind the sanction amount to explicitly given mitigating circumstances.

Unknown mitigation does not pick a number.

## Incorrect form and why it stays silent

```text title="Incorrect form"
// Смягчающее обстоятельство неизвестно: автоматически назначают 100.
```

Absence of information about mitigation is not a negative fact. The numbers 100 and 40 are a synthetic unit scale chosen by the author of two rules, not a built-in tariff.

## Correct form

```law
language "law.core" version "0.2";
package recipes.zh.r04 version "0.1.0";
namespace "urn:recipe:zh-violation:04";

entity Person;
relation enrolled(p: Person);
relation done(p: Person);
relation mitigated(p: Person);
relation amount(p: Person, units: Integer);
relation paid(p: Person, units: Integer);
rule Ordinary strict { for p: Person; when enrolled(p) and not mitigated(p); then amount(p, 100); }
rule Reduced strict { for p: Person; when enrolled(p) and mitigated(p); then amount(p, 40); }
rule Impose strict { for p: Person; for units: Integer; when amount(p, units);
    then duty Fine { bearer p; achieve paid(p, units) during [@2026-09-01, @2026-09-10]; };
}
```

## Frozen execution scene

| Facts and snapshot | Question | Answer |
|---|---|---|
| mitigation established; 2026-09-13 | `truth(amount(entity_ref("urn:recipe:zh-violation:04:p"), 40))` | `truth_status == TRUE_ONLY;` |
| mitigation refuted; 2026-09-13 | `truth(amount(entity_ref("urn:recipe:zh-violation:04:p"), 100))` | `truth_status == TRUE_ONLY;` |
| no information; 2026-09-13 | `positions()` | `not positions_present();` |
| paid on the reduced scale; 2026-09-13 | `positions()` | `position(Fine, SATISFIED);` |

```law
test "established mitigation selects lower tariff" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:04:p")); assert mitigated(entity_ref("urn:recipe:zh-violation:04:p"));
    }
    evaluate truth(amount(entity_ref("urn:recipe:zh-violation:04:p"), 40));
    expect truth_status == TRUE_ONLY;
    expect evaluation_status == COMPUTED;
}
```

```law
test "refuted mitigation keeps base tariff" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:04:p")); assert not mitigated(entity_ref("urn:recipe:zh-violation:04:p"));
    }
    evaluate truth(amount(entity_ref("urn:recipe:zh-violation:04:p"), 100));
    expect truth_status == TRUE_ONLY;
    expect evaluation_status == COMPUTED;
}
```

```law
test "no data creates no position" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:04:p"));
    }
    evaluate positions();
    expect not positions_present();
    expect evaluation_status == COMPUTED;
}
```

```law
test "payment on reduced scale satisfies" {
    given {
        context {
            legal_time @2026-09-13;
            decision_time @2026-09-13T09:00:00+05:00;
            knowledge_time @2026-09-30T09:00:00+05:00;
            timezone "Asia/Almaty";
        }
        assert enrolled(entity_ref("urn:recipe:zh-violation:04:p")); assert mitigated(entity_ref("urn:recipe:zh-violation:04:p")); assert paid(entity_ref("urn:recipe:zh-violation:04:p"), 40);
    }
    evaluate positions();
    expect position(Fine, SATISFIED);
    expect evaluation_status == COMPUTED;
}
```

## Counterfactual

Diagnostic mutation `then amount(p, 40);` → `then amount(p, "forty");`: LDC-E2104. Semantic differences are pinned as separate scenes.

## Boundary

enrolled here means an established ground for imposing a sanction; the elements and causal link are given by the previous layer. Money units, rounding and upper bounds are covered by the calculation recipes. Two opposite facts about mitigation need a separate resolution.