# Special rule over general ## Intention I want to pin the superiority of a special rule explicitly. A special rule with more conditions but no priority still leaves BOTH. ## Incorrect form and why it stays silent ```text title="Incorrect form" // У Special больше условий; priority отсутствует. ``` The number of conditions does not create superiority. Without an edge both opposite supports remain. ## Correct form ```law language "law.core" version "0.2"; package recipes.b.r05 version "0.1.0"; namespace "urn:recipe:b-rules:05"; entity Person; relation eligible(p: Person); relation special(p: Person); relation allowed(p: Person); rule General defeasible { for p: Person; when eligible(p); then allowed(p); } rule Special defeasible { for p: Person; when eligible(p) and special(p); then not allowed(p); } priority SpecialWins { prefer Special over General; reason lex_specialis; } ``` ## Frozen execution scene | Facts and choice | Question | Answer | |---|---|---| | special case | `truth(allowed(entity_ref("urn:recipe:b-rules:05:p")))` | `FALSE_ONLY` / `COMPUTED` | | priority removed | `truth(allowed(entity_ref("urn:recipe:b-rules:05:p")))` | `BOTH` / `COMPUTED` | | general case | `truth(allowed(entity_ref("urn:recipe:b-rules:05:p")))` | `TRUE_ONLY` / `COMPUTED` | ```law test "special case" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00+05:00; knowledge_time @2026-09-13T09:00:00+05:00; timezone "Asia/Almaty"; } assert eligible(entity_ref("urn:recipe:b-rules:05:p")); assert special(entity_ref("urn:recipe:b-rules:05:p")); } evaluate truth(allowed(entity_ref("urn:recipe:b-rules:05:p"))); expect truth_status == FALSE_ONLY; expect evaluation_status == COMPUTED; } ``` ```law test "priority removed" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00+05:00; knowledge_time @2026-09-13T09:00:00+05:00; timezone "Asia/Almaty"; } assert eligible(entity_ref("urn:recipe:b-rules:05:p")); assert special(entity_ref("urn:recipe:b-rules:05:p")); } evaluate truth(allowed(entity_ref("urn:recipe:b-rules:05:p"))); expect truth_status == BOTH; expect evaluation_status == COMPUTED; } ``` ```law test "general case" { given { context { legal_time @2026-09-13; decision_time @2026-09-13T09:00:00+05:00; knowledge_time @2026-09-13T09:00:00+05:00; timezone "Asia/Almaty"; } assert eligible(entity_ref("urn:recipe:b-rules:05:p")); } evaluate truth(allowed(entity_ref("urn:recipe:b-rules:05:p"))); expect truth_status == TRUE_ONLY; expect evaluation_status == COMPUTED; } ``` ## Counterfactual Mutation: `rule General defeasible` → `rule General strict`; rejection LDC-E4105. Scenes that delete a fragment are marked explicitly in the table. ## Boundary The lex_specialis ground names an accepted priority rule. Automatic proof of nested scopes is not claimed here. Different money values are [Different amounts are not opposites](/recipes/b-rules/values-not-opponents/). ## Pitfall More conditions do not create superiority: without a priority edge, the special rule leaves BOTH.