Markdown for LLMs
Exercise 4. Suspension also closes the general room
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# Exercise 4. Suspension also closes the general room
An exercise for the [defeat and priority](/tutorials/defeaters/) page. On
the page a suspended ticket removes rare-collections room access, while
the general reading room admits a reader with a suspended ticket because
its norm is strict.
**Setup.** Change the package so that a ticket suspension also removes
general-room access. The answer to "is she admitted to the general room"
on the facts "registry, ticket suspended" must become `NEITHER`, and stay
`TRUE_ONLY` without the suspension fact. Separately explain why the
answer is not `FALSE_ONLY`.
**Hint.** Only a defeasible norm can be defeated. What will the compiler
do about it if you forget?
Below is the solution. Try it yourself first.
## Solution
```law
language "law.core" version "0.2";
package tutorial.archive version "0.3.1";
namespace "urn:law:tutorial:archive";
entity Person;
relation in_researcher_registry(p: Person) kind institutional;
relation accredited(p: Person) kind institutional;
relation reader_suspended(p: Person) kind institutional;
relation may_enter_rare_room(p: Person) kind institutional;
relation may_enter_reading_room(p: Person) kind institutional;
rule RareRoomAccess defeasible {
for p: Person;
when in_researcher_registry(p) and accredited(p);
then may_enter_rare_room(p);
}
rule SuspensionQuarantine defeater {
for p: Person;
when reader_suspended(p);
defeat may_enter_rare_room(p);
}
```
The general-room norm was strict. The first change is making it
defeasible, the second adding the defeating norm:
```law
rule GeneralReadingRoom defeasible {
for p: Person;
when in_researcher_registry(p);
then may_enter_reading_room(p);
}
rule SuspensionClosesReadingRoom defeater {
for p: Person;
when reader_suspended(p);
defeat may_enter_reading_room(p);
}
```
Why not `FALSE_ONLY`. A defeating norm removes support rather than
asserting the opposite: the archive rules say "the ticket is suspended",
not "entry is banned". A direct ban, if needed, would be a norm with
a `not may_enter_reading_room(p)` head and priority over the general
one, like the debt norm on the page.
## Check
| Facts | Question | Answer |
|---|---|---|
| registry, ticket suspended | general room | `NEITHER` |
| registry | general room | `TRUE_ONLY` |
| registry, suspended, without the `SuspensionClosesReadingRoom` norm | general room | `TRUE_ONLY` |
The page is also broken the other way: returning the word `strict`
to the general-room norm must bring the `LDC-E4112` refusal from the
compiler. A strict head cannot be defeated, and that is caught before any
execution.
What the exercise teaches. A norm's strength is not a matter of taste:
a strict norm means "no exceptions", and any exception first requires
changing the strength — a change visible in the diff, requiring grounds
in the text.