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.
# 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.