Markdown for LLMs
Prohibition pitfalls
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# Prohibition pitfalls Wrong forms, silent outcomes, `LDC-E` diagnostics, typical formalizer mistakes, and how to detect them. ## 1. Duplicating a prohibition with a paired duty An established action fact inside the window gives `VIOLATED` of the prohibition itself — a paired duty next to it gives a second `VIOLATED` for the same breach, and `positions` carries two breaches instead of one. New packages do not introduce pairs. ## 2. A norm boundary in the goal window A norm in force since March 1 is written `effective [@2026-03-01, infinity);` on the rule; the goal window is the performance deadline. At `legal_time` outside `effective` there is no position at all; at `legal_time` outside `window` there is one — `PENDING` before and `UNDETERMINED`/`EXPIRED` after. Different answers: "no norm yet" and "the deadline has not started". Putting the enactment date into `window` gets `PENDING` where there should be no position. ## 3. A quiet window is not compliance After the window with no monitoring certificate, no closure policy over the whole window, and no adjudication — `UNDETERMINED`, not `SATISFIED`. Absence of proof of performance is not compliance — mirroring the achievement rule (absence of proof of non-performance is not a breach). A quiet error: a test with `expect position(X, SATISFIED)` after the window fails, and the failure reads as an engine defect. ## 4. Tautological goal A `condition` repeating the rule premise (`condition contract_signed(s, c)` with `when contract_signed(s, c)`) is established when the position is created — always `SATISFIED`, the duty requires nothing. The form is not silent: `LDC-E1371` (warning) names the goal, the condition, and the rule. A composite condition is checked leaf by leaf; `forbearance` is not part of the form — a prohibition's subject is an action, not a condition. ## 5. Liberty with no priority is conflict, not victory Forbearance and liberty over the same action for one subject with overlapping windows and no priority give `UNRESOLVED_NORMATIVE_CONFLICT`, and both positions stand. Expecting "permission defeats prohibition" by itself mistakes the direction: priority wins (`DEFEATED` for the loser), not modality. The weak-permission query and the conflict rule read the same prohibition (see the [liberty page](/constructs/liberty-immunity/)). ## 6. A window boundary is a value, not a name A bare name as a boundary (`window [moment, infinity)`) is rejection `LDC-E2115`; a term-built window with no deadline policy is `MISSING_POLICY`. Boundaries are literals, rule variables, `infinity`/`-infinity`, or terms with a policy. ## 7. Incomplete prohibition — `LDC-E1305` A `prohibition` without an addressee, without an `action`, or without a `window` is rejection `LDC-E1305` for each missing field. Detection: `law engine check` lists every missing field — read the whole list, not the first item.