Readings: interpretation, group, selection and pin
In one sentence: interpretation packs a disputed chunk of theory —
rules, priorities, definitions — into a named reading of a document;
interpretation_group declares the fork (exactly_one / any_of /
compose_explicitly), and the case context (interpretation Name;) selects
which reading applies. The author takes them when one text reads
several ways: a narrow and a broad reading of an article, literal versus court.
A reading packs a disputed chunk of theory — rules, priorities, definitions — into a named variant of a document; a group declares the fork, and the case context selects which variant applies. This catalogue records the practice first.
1. When to take it and when not to
Section titled “1. When to take it and when not to”| Instead | Selection rule |
|---|---|
| Two separate packages vs two readings | A dispute over reading one document is two interpretations in one package with a group; different documents are different packages. A reading lives next to its pinned primary source (of Fragment) |
include R vs a nested rule | A ready rule takes part in a reading — include R (brings the whole canonical expansion: R/alt/N, R/unless/N, R/norm/*, R/head/N). A rule written for the reading’s sake — a nested rule (the reading’s namespace) |
status disputed vs a group | A status selects nothing: a “disputed” reading with no group always applies. A fork with a choice is only an interpretation_group; a status is metadata for the jurisdiction profile |
exactly_one vs any_of | One right answer, choice mandatory — exactly_one (without a choice the dependent queries get INTERPRETATION_REQUIRED). Both readings admissible at once — any_of (the corpus pairs below are built this way) |
A reading vs priority | Different readings of one norm are readings. A clash of two operative norms is priority. A reading does not rank; priority does not construe |
| A reading vs the judgment channel | An evaluative feature (“excessive”, “material”) is a judge or a court fact; a dispute over a norm’s meaning is a reading. Do not confuse: the judge decides a fact, the reading decides the theory |
2. Minimal example
Section titled “2. Minimal example”Package examples/two-readings/: a filing fee reads two ways —
literal (standard) and court (reduced). Full code —
examples/two-readings/package.law.
interpretation Literal { status reviewed; rule QLiteral strict { for c: Case; when filed(c); then standard_rate(c); }}
interpretation Court { status reviewed; rule QCourt strict { for c: Case; when filed(c); then reduced_rate(c); }}
interpretation_group MeaningOfRate { alternatives Literal, Court; selection exactly_one;}Case facts: filed(alpha). Selection: the context line
interpretation Literal;. Query:
evaluate truth(standard_rate(alpha)).
The engine’s actual answer:
law test research.constructs.interp_readings: мир research.constructs.interp_readings ok [research.constructs.interp_readings#authored] tests/01-literal-selected.lawtest / urn:query:research-interp-01 ok [research.constructs.interp_readings#authored] tests/02-court-selected.lawtest / urn:query:research-interp-02итого: 2 проверено, 2 прошли, 0 не прошли, 0 не исполнены; код 0law engine check — check OK, no warnings. Sensitivity:
replacing interpretation Literal; with interpretation Court; for the same
query changes the answer from TRUE_ONLY to NEITHER (rule QLiteral
blocked, another reading selected); deleting the selection line gives
INTERPRETATION_REQUIRED — held by the second package
examples/unresolved-group/tests/01-dependent-blocked.lawtest on the same
form. Every fact and every context line load-bearing.
Nearest wrong outcome: expecting that without a choice “the first”
reading wins — no: with exactly_one and no choice a dependent query
answers nothing at all; the language has no “first/last” order.
3. Example across domains
Section titled “3. Example across domains”- Law: narrow and broad readings of the Turkish Constitution’s art. 13 proviso —
package
tr.constitution— Constitution of Türkiye (NarrowGroundReading/BroadGroundReading, bothstatus disputed, groupRestrictionGroundReading, policyany_of; the broad one includes ruleGroundStatedAnywhereInConstitution). The “relevant article = the right’s own article vs any article” fork is the canonical subject of readings (seecorpus-forms.md). - Law: Iran’s Guardian Council supervision —
package
ir.constitution— Constitution of Iran (ApprobatorySupervision/InformationalSupervisionReading, bothdisputed,any_ofgroup): approbatory vs informational supervision. - History/custom: the Yasa’s tolerance —
package
mng.corpus.yasa— the Mongol Yasa (TolerationAsCommandReading/TolerationAsPracticeReading,any_ofgroup): command vs practice; three more groups of the same fork form nearby (ServiceScopeReadings,HorseTheftReadings). - Law: DPRK Constitution collectivism —
package
kp.constitution— Constitution of the DPRK (declarative ground vs exercise condition,exactly_onegroup): the same form with a mandatory selection policy. - Teaching case:
examples/unresolved-group/— the same fork plus a baseBaseRegisterrule outside the readings: a dependent query without a choice isINTERPRETATION_REQUIRED, an independent one isTRUE_ONLY+COMPUTED.
4. How the engine answers
Section titled “4. How the engine answers”Table — actual runs of this directory’s examples:
| Context | Question | Answer | Why |
|---|---|---|---|
interpretation Literal | standard_rate | TRUE_ONLY + COMPUTED | the selected reading activates its nodes |
interpretation Court | reduced_rate | TRUE_ONLY + COMPUTED | the same for the second alternative |
interpretation Court | standard_rate | NEITHER | QLiteral blocked: another reading selected |
no choice (exactly_one) | standard_rate | INTERPRETATION_REQUIRED | the group unresolved, the query depends on it |
no choice (exactly_one) | case_open (base theory) | TRUE_ONLY + COMPUTED | the query is independent of the group; demanding a choice answers the wrong question |
INTERPRETATION_REQUIREDis a RESULT status, not a document one: only dependent queries get it. Dependence is the closure over rule bodies from the blocked alternatives’ heads (the same edge extractor as stratification): direct production, transit through intermediate rules, head-reading by alternatives,collect-dependence, positional dependence.- The
INTERPRETATION_REQUIREDissue stays in the document even with an independent answer — it is a fact about the input. status(proposed…binding…rejected) alone selects nothing: the selection policy is set by the jurisdiction profile, not the reading.- Cross-rule checks (cycle, late producer,
priorities, defeater goal) run membership-aware:
a cycle across two alternatives of one
exactly_onegroup is statically unreported — it cannot realize.
5. Common mistakes
Section titled “5. Common mistakes”include Rbrought a rule without its generated nodes — previously; today the whole canonical expansion comes in (seepitfalls.md).- A qualified
include pkg::Ris rejected: an import carries the interface, not nodes; another’s rule takes part through the owner’spub interpretationandextends/alternatives(seepitfalls.md). - A nested rule with an unbound head lived to runtime — previously;
today nested members are checked with the same
LDC-E4101code under the lowering name (seepitfalls.md). status disputedwith no group — the reading always applies: status does not select (seepitfalls.md).- Expecting an answer “under the first” with no choice — with
exactly_onea dependent query givesINTERPRETATION_REQUIRED, not the first alternative’s answer (seepitfalls.md). - An independent query extinguished with the document — previously;
today it gets
COMPUTEDand itstruthStatus(seepitfalls.md). excludewithoutextendsremoves the wrong thing:exclude Rremoves the same expansion thatinclude Rbrings (seepitfalls.md).
6. References
Section titled “6. References”- The language specification defines readings, the
includeexpansion, nesting, status, groups, evaluating alternatives,extends, conflicting editions, and the context axis; this page states how to use them. - Details:
corpus-forms.md,pitfalls.md,boundaries.md.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.