Why an exception does not reduce to `else`
Almost every norm has an exception, and almost every exception has its own. A programmer would record this as a chain of branches and an order of checks: special cases first, then the general one. Law DSL does not do that, and not out of stubbornness. An exception in law comes in three different kinds, and branching with order mixes them into one, silently. This article shows the three kinds on one case and explains why seniority of a norm must have a named ground.
Three outcomes on the same facts
Section titled “Three outcomes on the same facts”General norm: a researcher who is on the register and accredited is admitted to the rare-holdings room. Ivanova is on the register and accredited. Add one circumstance at a time to the case and see what each does.
| Circumstance | What the act says | Answer on “admission” |
|---|---|---|
| — | general norm | TRUE_ONLY |
| reader’s ticket suspended | the ground of admission has fallen away | NEITHER |
| unpaid debt | the archive refuses | FALSE_ONLY |
| debt, but seniority of norms is not declared | two norms contradict | BOTH |
All four rows are scenes from the tutorial on defeat and priority, which the engine executes on every check. The last row is obtained from the same package with the seniority declaration cut out: the gate compiles the page twice and compares both answers.
A program with branches would give the same thing on the second and third rows: “no.” In law these are two different answers with different consequences. Suspension of the ticket does not mean Ivanova may not enter the room. It means that the ground on which she was admitted has fallen away, and the archive must sort it out. Debt means the archive must refuse. In the first case the question “is there another ground?” is in place; in the second it is not.
First kind: the ground has fallen away
Section titled “First kind: the ground has fallen away”An exception of the first kind asserts nothing. It removes support from someone else’s conclusion and is silent about the opposite. In the language this is a rule of a special kind: it has no conclusion of its own, only a target of defeat. The general norm must then be written as a norm “as a general rule,” not “always”: a strict norm cannot be taken by defeat, and the compiler will refuse anyone who tries. That is intentional. The author must say in advance that the norm has exceptions, and say it in the norm itself.
The answer on a defeated norm is NEITHER. Not “no,” but “there is no
ground.” If the package has another norm that grants admission otherwise,
it will fire, and the answer will be “yes.” Branching with order cannot do
that: having entered the exception branch, the program has already
answered.
Second kind: the opposite is established
Section titled “Second kind: the opposite is established”An exception of the second kind itself asserts something. The norm on debt does not merely cancel admission, it refuses: it has its own conclusion, and that conclusion is negative. Now a reader with a debt has two conclusions at once: the general norm grants admission, the special one refuses.
Here the language does what a program cannot: it preserves the
conflict. The answer is BOTH, and that is not a fault but an exact
description of an act in which two norms contradict and seniority between
them is not established. Branching with order would have resolved the
conflict by which check stands earlier, and nobody would have learned of
it.
Seniority with a named ground
Section titled “Seniority with a named ground”For a winner to be determined, the author declares a priority: the special norm of refusal is senior to the general norm of admission. And must name the ground of seniority: special before general, later before earlier, higher before lower. The ground is not a comment. It is what a lawyer will produce in a dispute about why one norm defeated another, and what can be contested.
After the declaration the answer becomes FALSE_ONLY: refusal is
established, and it is visible by which norm and on which ground.
A programmer should notice what is absent here: order of writing. Rearrange the norms in the file in any order — the answer does not change. Seniority lives in an explicit declaration, not in what stands higher. In code the order of branches is priority, and it is invisible: nobody writes in a comment “this branch stands first because the special norm is senior to the general one,” and if they do, the compiler does not check it. Here it does: priority over a nonexistent norm, a cycle of priorities, priority over a strict norm — static refusals.
How to choose the kind of exception
Section titled “How to choose the kind of exception”The question that answers for the choice does not sound technical: must the organ refuse, or must it sort it out? A suspended ticket requires sorting out — that is defeat. Unpaid debt requires refusal — that is a norm with a negative conclusion and a priority. A third option, “it will somehow resolve itself,” the language does not offer: a conflict without priority reaches the answer whole.
There is also a short form for a frequent case: an “unless” proviso directly in the norm. It expands into the same defeat or into the same opposite norm with a priority, and the author chooses which of the two, rather than receiving one of them by default.
What this gives the author
Section titled “What this gives the author”Three things a chain of branches does not have.
- Each exception is a separate record with its own address in the act. It can be found, shown, contested, and removed without touching the general norm.
- A conflict of norms is visible. If the act is contradictory or the
author forgot seniority, the answer will be
BOTH, not a quiet choice of one side. - The order of the text means nothing. Two norms can be written in any files and any order; seniority is declared and checked.
The price: the author must decide in advance which norms admit exceptions, and name the grounds of seniority. That is not a technical price. Those are the decisions a lawyer takes anyway; now they are recorded.
The next article is about why “must return” does not mean “returned”: a legal result can create a duty without creating a fact. How defeat and priority are written — tutorial 04; how a proviso and a presumption are written — the tutorial on presumptions.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.