Choose a sanction amount
Intention
Section titled “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
Section titled “Incorrect form and why it stays silent”// Смягчающее обстоятельство неизвестно: автоматически назначают 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
Section titled “Correct form”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
Section titled “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); |
established mitigation selects lower tariff
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;}refuted mitigation keeps base tariff
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;}no data creates no position
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;}payment on reduced scale satisfies
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
Section titled “Counterfactual”Diagnostic mutation then amount(p, 40); → then amount(p, "forty");: LDC-E2104. Semantic differences are pinned as separate scenes.
Boundary
Section titled “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.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.