# Prohibition: prohibition as forbearance sugar **In one sentence:** `prohibition` is a duty with a forbearance goal: "not to do action `A` in a window" reads as "maintain the absence of `A`", and an established fact `A` inside the window gives the prohibition itself `VIOLATED`. The author takes it when the act's vocabulary says "is prohibited" / "is not allowed": the form matches the source's vocabulary, and the semantics match maintaining the absence of the action. ## 1. When to take it and when not to | Instead | Selection rule | |---|---| | `prohibition` vs `constraint` | A prohibition has an addressee, a window, and a PENDING/`ACTIVE`/`VIOLATED`/`EXPIRED` lifecycle; a constraint has a verdict with no addressee and no window. Someone to refrain, and a time to do it in — prohibition; a composition check — constraint | | `prohibition` vs `duty … goal maintenance` with an absence condition | Do not duplicate: a prohibition already reads as maintaining the absence of the action. A paired duty next to it gives a second `VIOLATED` for the same breach — the `positions` answer carries two breaches instead of one | | `prohibition` vs `then not action` | Bare negation gives support `f` with no addressee, window, or cycle; a prohibition gives a position with a lifecycle. "Do not do" with an addressee and a deadline — prohibition; stating "not complied with" — negation (see the [negation page](/constructs/negation-and-status/)) | | `prohibition` vs the other party's `liberty` | Structurally only forbearance and liberty over the same action conflict: the pair is considered for one subject and overlapping windows; priority gives the loser `DEFEATED`, without it — `UNRESOLVED_NORMATIVE_CONFLICT` | ## Grammar: prohibition and forbearance (EBNF verbatim from the language grammar) The `prohibition` form — the addressee, the beneficiary, the action, and the window: ```ebnf prohibition_conclusion = "prohibition", [ identifier ], "{", { prohibition_item }, "}" ; prohibition_item = "bearer", expression, ";" | "beneficiary", expression, ";" | "action", expression, ";" | "window", interval_expression, ";" | "violation_policy", reference, ";" | metadata_item ; ``` The semantic base of the form — the forbearance goal ("to maintain the absence of the action"): ```ebnf forbearance_goal = "forbearance", "{", "action", expression, ";", "window", interval_expression, ";", { goal_item }, "}" ; ``` Position statuses and lifecycle live on the [lifecycle page](/constructs/lifecycle-statuses/); windows as intervals and their computation — on the [deadline-calendar page](/constructs/deadline-calendar/); window syntax is not duplicated here. ## 2. Minimal example Package `examples/no-subcontract/`: a contractor under a signed agreement brings in no subcontractors in March 2026. ```law rule SubcontractingRule strict { for s: Supplier; for c: Customer; when contract_signed(s, c); then prohibition NoSubcontracting { bearer s; beneficiary c; action subcontracts(s); window [@2026-03-01, @2026-03-31]; }; } ``` Case facts 01: `contract_signed(alpha, omega)` + `subcontracts(alpha)`. Query: `evaluate positions()` at `legal_time @2026-03-15`. The engine's actual answer: ```text law test research.prohibition.no_subcontract: мир research.prohibition.no_subcontract ok [research.prohibition.no_subcontract#authored] tests/01-action-violates.lawtest / urn:query:research-prohibition-01 ok [research.prohibition.no_subcontract#authored] tests/02-quiet-complies.lawtest / urn:query:research-prohibition-02 итого: 2 проверено, 2 прошли, 0 не прошли, 0 не исполнены; код 0 ``` `law engine check` — `check OK`, no warnings. Case 01 gives `position(NoSubcontracting, VIOLATED)` — an established action fact inside the window breaches the prohibition directly. Sensitivity: deleting the `subcontracts` fact changes the observation from `VIOLATED` to `ACTIVE` with the same `not VIOLATED` (file `tests/02-quiet-complies.lawtest`) — inside the window with no established action the prohibition is active, not breached (a breach needs an established counterexample). The nearest wrong model is "silence is compliance": after the window without completeness the answer would be `UNDETERMINED`, not `SATISFIED` (`SATISFIED` requires a monitoring certificate, a closure policy over the whole window, or adjudication). Second package `examples/no-doping/` — the same device in a sports regulation: a registered athlete, a banned substance, a 01.07–15.08.2026 competition window. A case with a use fact — `VIOLATED`, without — `ACTIVE`. Run — 2/2, `check OK`. ## 3. Example across domains - **Law (constitution):** package `tr.constitution` — Constitution of Türkiye, `then prohibition RefrainFromAbuseOfRights` under art. 14 (see `corpus-forms.md`): window `[1982-11-09, infinity)` — the breach is observed by the prohibition itself. - **Law (labour):** package `kz.corpus.labour_code` — Labour Code of Kazakhstan — a prohibition with an open window `window [since, infinity)` for a premise-bound date: the typical "prohibited while…" form. - **Sport (teaching case):** `examples/no-doping/` — a doping ban with a competition window. - **Religion/standard:** no prohibitions in this form met in the inspected fragments; the Warlpiri kinship taboos are written as constraints, not prohibitions (see the [constraint page](/constructs/constraint/)) — precisely because a taboo has no addressee with a window. The selection rule holds by addressee and window, not by domain. ## 4. How the engine answers Table — actual runs of this directory's examples (query `evaluate positions()`, observation `position(Template, STATUS)`): | Facts over the ground | Moment | Observation | Why | |---|---|---|---| | action `subcontracts` | inside the window | `position(NoSubcontracting, VIOLATED)` | an established action fact in the window breaches the prohibition | | none | inside the window | `position(NoSubcontracting, ACTIVE)`, `not VIOLATED` | no counterexample; the deadline has not passed | | action `uses_banned` | inside the window | `position(NoDoping, VIOLATED)` | the same semantics in a sports regulation | | none | inside the window | `position(NoDoping, ACTIVE)`, `not VIOLATED` | the prohibition is active, no breach | | none | after the window | `position(NoSubcontracting, UNDETERMINED)` | no completeness — silence is not compliance | - Forbearance is maintaining the absence of the action: before the window — `PENDING`, after the window without completeness — `UNDETERMINED`, not `SATISFIED`. - `normative_status` is an aggregate over all case positions: with several norms it answers `UNDETERMINED` even when the addressed observation is exact; in this directory's cases there is one norm. - The "as of" moment is the case's `decision_time` when named, otherwise `legal_time`; in this directory's tests both dates coincide. ## Prohibition windows: forms and the price of a boundary The most common corpus form is the open window `window [since, infinity)` for a premise-bound date `since` (sample — the labour code above). Window boundaries are literals, rule variables, `infinity`/`-infinity`, or terms: a term-built window (e.g. `add_calendar_period(appointed, 60 calendar_day)` from the Vienna Convention) requires a deadline policy, otherwise `MISSING_POLICY`. A bare name as a boundary (`window [moment, infinity)`) is rejection `LDC-E2115`: a boundary is a value, not a domain constant. In the record a prohibition is a `modality: "duty"` node with `goal.kind: "forbearance"`: form visible in the record, not in the theory. An explicit `@id` before the modality sets the template StableId `#`; any other annotation there is `LDC-E0201`, an id colliding with another node is `LDC-E1338`. ## 5. Common mistakes 1. Duplicating a prohibition with a paired `maintenance` duty with an absence condition: two `VIOLATED` for one breach (see `pitfalls.md`). 2. A dated boundary in `window` instead of the rule's `effective`: "no norm yet" vs "the deadline has not started" — different answers (see `pitfalls.md`). 3. Expecting `SATISFIED` after a quiet window: without a completeness certificate — `UNDETERMINED` (see `pitfalls.md`). 4. A `condition` reading the rule premise: a tautological goal is always `SATISFIED` — warning `LDC-E1371` (see `pitfalls.md`). 5. Liberty over the same action with no priority: `UNRESOLVED_NORMATIVE_CONFLICT` instead of a win (see `pitfalls.md`). ## 6. References - The language specification defines modalities, forbearance, claim and prohibition forms, the lifecycle, conflict, and defeat; this page states how to use them. - Tutorials: `/tutorials/writing-tests/` (test observations). - Details: `corpus-forms.md`, `pitfalls.md`, `boundaries.md`.