docs← Back to article

Markdown for LLMs

Presumptions and fictions

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# Presumptions and fictions

> Updated 3 October 2026: `concept`, `except_when`, `claim`, `definition … sufficient`, and `default` strength have been removed, together with their special deprecation diagnostic. References below to the former behavior and corpus sources are historical. New source uses `relation`, `unless`, `duty`, a strict rule, and `defeasible`.

**In one sentence:** a presumption is a default holding until rebutted
(desugaring: a defeasible rule + an exception defeater/contrary rule +
priority), a fiction is an order to count one thing as another,
inferring an institutional fact (`deem`). The author takes a
presumption when the norm needs “counts as, unless proven otherwise” and an
explicit place for the burden of rebuttal; a fiction when “counts as
delivered/received” with no “if” at all.

The language specification treats a presumption as a default with a named
burden of rebuttal — it expands into a defeasible rule, an exception, and
priority — and a fiction as an order to count one thing as another, inferring
an institutional fact.

## 1. When to use and when not to

| Instead | Selection rule |
|---|---|
| `presumption` vs `definition` | A definition is what a concept is (sufficient/necessary/exact); a presumption is what counts given a ground, until rebutted. A definition has no burden of rebuttal and no exception priority; a presumption has both. “Is” is a definition; “counts as, if” is a presumption |
| `presumption` vs `defeasible rule + unless` | A presumption expands into exactly that, but with named nodes `<name>/R1`, `/R2`, … and a duty to show the expansion. A one-off exception is a bare rule with `unless`; a repeatable proof scheme (“burden on the carrier”) is a presumption |
| `presumption` vs `classification … defeasible` | A classification supports a class or stays silent; a presumption carries an exception with priority. `defeater` as a classification strength is inadmissible: the class is either supported, or the exception is a separate rule |
| `fiction … deem` vs `rule … then` | A fiction infers an institutional fact; the compiler warns if the fiction head is empirical. A fact about the world is a rule with an empirical head; a legal equation (“counts as received”) is a fiction. Strength (`strict`/`defeasible`) after the name is mandatory — the core does not pick it |
| `unless C` vs `unless C then not A` | The bare form is a defeater against `A` (application beaten, Not established, not refuted); the contrary form is a defeasible `not A` rule with direct priority (victory, Refuted). Verified by runs: this section’s presumption with a bare `unless` answers Not established, not refuted, not Refuted |

## 2. Minimal example

Package `research.presumption.innocence`: an accused counts as innocent until a final
conviction enters force.

```law
presumption Innocence(p: Person) {
    when accused(p);
    presume innocent(p);
    unless final_conviction(p);
}
```

Case 01 facts: `accused(ivan)`. Query: `evaluate truth(innocent(ivan))`.

Actual engine answer:

```text
law test research.presumption.innocence: мир research.presumption.innocence
  ok   [research.presumption.innocence#authored] tests/01-accused-presumed.lawtest / urn:query:research-presumption-01
  ok   [research.presumption.innocence#authored] tests/02-conviction-rebuts.lawtest / urn:query:research-presumption-02
итого: 2 проверено, 2 прошли, 0 не прошли, 0 не исполнены; код 0
```

`law engine check` — `check OK`, no warnings: the exception
`final_conviction(p)` binds `p` by a positive conjunct of the exception condition
itself (a variable bound only in the general rule’s `when` does
not count as bound).

Sensitivity: adding the `final_conviction(ivan)` fact changes the answer
from Established to Not established, not refuted (the conviction-rebuts test) — the
`Innocence/R2` defeater beat the `Innocence/R1` application.
Exactly Not established, not refuted, not Refuted: a bare `unless C` clause generates a
defeater, not a contrary rule; only `unless … then not innocent(p)`
would give the opposite conclusion (compare the EU261 corpus form below, where
the contrary clause is present).

Second package `research.fiction.deemed_receipt` — a service fiction: a document
delivered to the registration address counts as legally received on the
delivery date (`deem legally_received(d, date)`). Case 01 answers
Established, the case without the delivery fact — Not established, not refuted: a fiction
fires only from its premise, silence equates nothing. Runs — 2/2, `check
OK`.

## 3. Example by domain

- **Law (EU):** package `eu.transport.air_passenger_rights` (EU air passenger rights, Regulation 261/2004)
  — `presumption PassengerUninformedUnlessCarrierProves` (see the
  [corpus forms](/constructs/presumption-fiction/corpus-forms/)): the burden of proving notification is on the
  carrier, the exception is contrary (`unless … then not
  passenger_treated_as_uninformed`). An exemplary pair to the teaching
  example: it shows what distinguishes a bare clause from a contrary one.
- **Law (Germany):** package `de.bgb.besitz_eigentum` (German Civil Code, possession and ownership) —
  `presumption VermutungDesEigentumsFuerDenBesitzer`: possession
  as the ground of the ownership assumption.
- **Religion/custom:** possession and causation presumptions in Islamic tort —
  package `sa.civil_transactions.tort_enrichment` (Saudi civil transactions, tort)
  `presumption DirectActorCausedDamage`.
- **Science (teaching doctrine):** package `chem.rules` (doctrine chemistry rules)
  — `presumption ChloridePresumedSoluble`: “counts as
  soluble until…” works outside law too.
- **Legal history:** package `gb.corpus.calendar_act_1750` (Calendar Act 1750, Great Britain)
  — `fiction FairOrMartPreservesNaturalDay
  strict`: a fair holds to the natural day — equation without
  “if”, a pure fiction.

## 4. How the engine answers

Table — actual runs of this section’s teaching packages:

| Facts | Question | Answer | Why |
|---|---|---|---|
| `accused` | `innocent` | Established | the generated presume-rule `Innocence/R1` fired |
| `accused`, `final_conviction` | `innocent` | Not established, not refuted | the `Innocence/R2` defeater beat the application; no contrary inference |
| `delivered(doc, date)` | `legally_received(doc, date)` | Established | the fiction inferred the institutional fact |
| no facts | `legally_received(doc, date)` | Not established, not refuted | the fiction premise not established; equation from silence is not taken |

- Presumption desugaring: the defeasible `accused(p) => innocent(p)`
  rule (`/R1`), the exception defeater/contrary rule (`/R2`, …), exception
  priority over the presumption. The compiler must show the expansion
  (in this research the expansion was not captured separately
  — the behaviour is stated from the language description).
- Defeat: an application beaten by a defeater publishes no
  status literals; later strata do not see it.
- A fiction with an empirical head is a compiler warning; strength
  after the name is mandatory.

## Exception chains and definition modes

An exception from an exception adds another `unless` clause to the
ordered rule chain. The chain edge works by closure, not by pair: the
“next link over previous” priority is generated
unconditionally and carries order to the transitive closure — without
the edge the later link would lose victory over the general rule, and the
case would answer Contradiction instead of Refuted. Surface syntax is allowed
only if the generated priority graph is acyclic.

Definition modes: `necessary` gives a necessary constraint; `exact` adds
a strict deriving rule. A definition does not apply contraposition: the
reverse direction becomes an inference only when the author writes a separate
rule. Generated nodes carry the `was_derived_from` provenance edge to the
qualification symbol.

## 5. Common mistakes

1. The exception binds its variable only through the general rule’s `when` —
   `LDC-E4101` on the generated node’s name: repeat the
   binding conjunct as the clause’s first premise (pitfalls, item
   1).
2. Expecting Refuted from a bare `unless`: a defeater gives Not established, not refuted
   (pitfalls, item 2).
3. `unless` on a strict rule is a static error: either `defeasible`, or the
   exact applicability condition in the body (pitfalls, item 3).
4. A fiction with an empirical head is a warning; a fiction infers the
   institutional (pitfalls, item 4).
5. `scope`/`effective`/source-anchor/metadata in a presumption body is
   `LDC-E0201` in 0.1: the expansion is undefined, the rejection loud
   (pitfalls, item 5).

## 6. References

- Neighbour pages: [definitions](/constructs/definition/),
  [defeasible rules](/constructs/rule-defeasible-unless/),
  [constraints](/constructs/constraint/), [priority](/constructs/priority/).
- The pitfalls page lists the diagnostics (`LDC-E4101`, `LDC-E0201`,
  `LDC-E1302`) with wrong forms and fixes.