# Precedent: factors, precedent — argue and court absent as forms **In one sentence:** the `factors` + `precedent` link answers the question "which past decision binds in this case and how the new case differs from it": the vocabulary pins a line's closed factor set with an attributed side and a court preorder, a precedent holds one decision's factor sets and its outcome, and the compiler generates an executable holding and priorities from the precedent. Take them when the outcome must follow from case similarity (a fortiori), not from statutory-norm text. Honest executability-status pin: the profile **executes** on the installed `law` (semantics `law.core/0.2`). A trial package with `factors`/`precedent` gives `check OK`, `law test` passes. There is NO `argue` keyword in the grammar (verified against the grammar), and there is no separate `court` declaration either — `court` exists only as an item inside `precedent`. Hence "argue" and "court" in this directory are described as absent forms (see `boundaries.md`), and the examples build on `factors`/`precedent`. Past decisions bind through case similarity: vocabularies of factors, precedents with outcomes, compiler-generated holdings and priorities. No other page covers precedent — this catalogue closes that gap. ## 1. When to take it and when not to | Instead of | Selection rule | |---|---| | `precedent` vs a plain `rule defeasible` | A rule reads facts directly; a precedent reads case similarity: binding checks two set inclusions `X_s ⊆ Y_s` and `Y_s̄ ⊆ X_s̄`, and mismatch is named by name (`distinguishedBy`, `missing`). One decision applied to changing cases is `precedent`; a one-off norm over facts is `rule` | | `prefer over` in a precedent vs `priority` between rules | Which general (statutory) rule beats the holding is known by the author, not the compiler: holding-over-statute priority is declared as a `prefer over` item inside `precedent`. Compiler-generated holding-vs-holding priority of the same vocabulary comes from court rank and dates — never written by hand | | `ratio` vs the winning side's full set | Without `ratio` the result model binds (all of `X_s`); with `ratio` the compiler additionally builds a ratio rule under the `/reason_model` reading (`contested` status), and the reading choice decides which outcome binds. The court named the ground — write `ratio`; it did not — do not invent | | `factors`/`precedent` vs `sources` + `interpretation` + `rule` + `priority` | Holdings and distinguishing are expressible in base means. The profile is taken when its named answers are needed: binding statuses, `constraint`, base consistency, `agreesWithRules` checkability. Only the conclusion needed — base forms suffice | ## 2. Minimal example Package `research.precedent.forced_holding`: a one-line vocabulary, a general defeasible rule, a π-side precedent with `prefer over`. ```law entity Deal { label ru-KZ official "Сделка"; } relation ad_clear(c: Deal) kind empirical { label ru-KZ official "объявление ясно и определённо"; } relation terms_open(c: Deal) kind empirical { label ru-KZ official "условия оставлены открытыми"; } relation is_offer(c: Deal) kind institutional { label ru-KZ official "объявление есть оферта"; } factors OfferLine { label ru-KZ official "словарь линии «объявление как оферта»: за оферту — ясность; против — открытые условия"; for c: Deal; domain ad_clear(c); plaintiff ad_clear; defendant terms_open; courts HIGH; LOW; } rule AdIsNotAnOffer defeasible { label ru-KZ official "Общее правило: ясное объявление само по себе офертой не является"; for c: Deal; when ad_clear(c); then not is_offer(c); } precedent P1 of OfferLine { label ru-KZ official "Ясное объявление без открытых условий есть оферта (учебное решение)"; court HIGH; decided @2020-06-01; plaintiff ad_clear; outcome is_offer(c); prefer over AdIsNotAnOffer; } ``` Case facts: `ad_clear(urn:case:research:precedent:deal1)` with `origin case_input`. Query: `evaluate truth(is_offer(...))` at `legal_time @2026-01-01`. Observed engine answer (installed `law`, semantics `law.core/0.2`): ```text law test research.precedent.forced_holding: мир research.precedent.forced_holding ok [research.precedent.forced_holding#authored] tests/01-bound.lawtest / urn:query:research-precedent-01 ok [research.precedent.forced_holding#authored] tests/02-factor-missing.lawtest / urn:query:research-precedent-02 итого: 2 проверено, 2 прошли, 0 не прошли, 0 не исполнены; код 0 ``` `law engine check` — `check OK`, no warnings. Sensitivity: removing the `ad_clear` fact changes the expectation from `TRUE_ONLY` to `NEITHER` (`tests/02-factor-missing.lawtest`) — the example is not vacuous: without the plaintiff factor neither the holding domain nor the general rule fires. Nearest wrong outcome (verified by run during this research): writing the general rule with `strict` strength instead of `defeasible` makes the same `01-bound` test give `FALSE_ONLY` instead of `TRUE_ONLY` — a strict rule beats the generated holding regardless of the generated priority. The reverse would be the mistake: expecting `prefer over` to outrank any rule strength. ## 3. Example by domain - **Law (common):** US advertisement-offer cases (package `us.caselaw.advertisement_offers`, United States) — the `OfferFactors` vocabulary, three precedents `Lefkowitz`, `Carlill`, `Leonard`, courts of three jurisdictions incomparable, `prefer over` only on `Lefkowitz` against the general rule (see `corpus-forms.md`). - **Law (KZ, a normative resolution as precedent):** package `kz.corpus.np_bank_loan_disputes` (Kazakhstan) — four vocabularies (`VinaKreditoraFactors`, `VinaDolzhnikaFactors`, `SnizhenieNeustoykiFactors`, `NesorazmernostZalogaFactors`) and five precedents of one court `VS_RK`, each with `ratio` and `prefer over`. - **Teaching case (binding):** `research.precedent.forced_holding` — the holding beats the general rule via `prefer over`, answer `TRUE_ONLY` (`check OK`, `law test` 2/2). - **Teaching case (distinguishing):** `research.precedent.distinguished` — the same vocabulary; a case with an extra defendant factor quenches the holding via `not_known`, the strict general rule gives the answer (`FALSE_ONLY`), while a clean case binds (`TRUE_ONLY`). ## 4. How the engine answers Table — observed runs of this directory's examples (installed `law`, semantics `law.core/0.2`; `truth`-kind queries, i.e. baseline execution of the generated holdings): | Facts | Question | Answer | Why | |---|---|---|---| | `ad_clear` | `is_offer` | `TRUE_ONLY` | the `P1/holding` holding fired, the `P1/over/AdIsNotAnOffer` priority beat the general rule | | no facts | `is_offer` | `NEITHER` | the holding domain and the general rule stay silent; the profile would call the precedent `INAPPLICABLE` with `missing` (not verified via a `precedent` query) | | `ad_clear` + `terms_open` | `is_offer` | `FALSE_ONLY` | the holding stays silent (`not_known(terms_open)` unmet — distinguishing), the strict general rule decides | | `ad_clear`, general rule `strict` | `is_offer` | `FALSE_ONLY` | a strict rule beats the generated holding regardless of priority (research finding) | Beyond the table, per the profile (these statuses were not run via a `precedent` query during the research — "not verified" marks): - The profile's own answer is available ONLY via the `precedent` query kind: `value` — the `factors` Map (Y), `precedents` (each status, `distinguishedBy`, `missing`), `constraint`, `caseBase`, `agreesWithRules`; result kind — `GRAPH` with an empty proof-graph root. - In `why_not` a missing plaintiff factor gives `NEITHER`: the holding stays silent with its whole body at once (domain + `X_s` + `not_known` complement), the profile would call this `INAPPLICABLE` with `missing` by name (not verified via a `precedent` query). - Statuses for a precedent with a side-`s` outcome under fact situation `Y = (Y_π, Y_δ)`: | Condition | Status | Supplement | |---|---|---| | `X_s ⊆ Y_s` and `Y_s̄ ⊆ X_s̄`, in force at `legalTime` | `BINDING` | — | | `Y_s̄ ⊄ X_s̄` | `DISTINGUISHED` | `distinguishedBy = Y_s̄ \\ X_s̄` | | `Y_s̄ ⊆ X_s̄` but `X_s ⊄ Y_s` | `INAPPLICABLE` | `missing = X_s \\ Y_s` | | both inclusions hold, but on a side-s̄ judgment factor outside `X_s̄` there is no adjudicated assertion | `JUDGMENT_PENDING` | open question | | case earlier than `decided` / from the `overruled` date on | `NOT_YET` / `OVERRULED` | window `[decided, T)` | - Binding conflict: a higher or equal later court with the opposite outcome dominates; the total is `FORCED_FOR` / `FORCED_AGAINST` / `CONFLICT` / `UNCONSTRAINED`. Base consistency: a pair `A` (for `s`), `B` (for `s̄`) with `A_s ⊆ B_s` and `B_s̄ ⊆ A_s̄` makes `consistent = false`. - Normative lowering form, with deterministic identifiers: `rule

/holding` (defeasible, body — domain + `X_s` + `not_known` complement, `effective` — the force window, `origin` — the `P` id); `priority_rule

/over/` for each `R` from `prefer_over`; `priority_rule

/over/` against a lower court of the same vocabulary; with `ratio` — `rule

/ratio` under the `/reason_model` reading (`contested` status, choice by reading). Example sensitivity (verified by run): in `research.precedent.forced_holding` removing the `ad_clear` fact gives `TRUE_ONLY → NEITHER`, swapping the general rule's strength `defeasible → strict` gives `TRUE_ONLY → FALSE_ONLY`. In `research.precedent.distinguished` adding the `terms_open` fact gives `TRUE_ONLY → FALSE_ONLY` (distinguishing). Both examples react to exactly one fact change — not vacuous. ## 5. Common mistakes 1. General rule with `strict` instead of `defeasible` strength — the holding loses regardless of priority (`pitfalls.md`, item 1; confirmed by run). 2. Precedent factor outside the vocabulary — `LDC-E2701` (`pitfalls.md`, item 2; confirmed by run). 3. Factor on both vocabulary sides — `LDC-E2702` (`pitfalls.md`, item 3). 4. `ratio` outside the winning-side set — `LDC-E2704` (`pitfalls.md`, item 4). 5. Domain not binding all signature variables — the holding stays silent (`pitfalls.md`, item 5). 6. Expecting a persuasive precedent to beat any rival — incomparable courts give an honest conflict (`pitfalls.md`, item 6). 7. Searching for `argue` and `court` as declarations — they are not in the grammar (`pitfalls.md`, item 7). ## 6. References - Corpus: package `us.caselaw.advertisement_offers` (United States; the Lefkowitz/Carlill/Leonard line), package `kz.corpus.np_bank_loan_disputes` (Kazakhstan; four vocabularies, five `VS_RK` precedents). - Form-choice neighbours: `sources`, `interpretation`, `priority`, judgment — the selection rule in `boundaries.md`.