Markdown for LLMs
Exercise 18. A third reading: reciprocity
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# Exercise 18. A third reading: reciprocity
An exercise for the [readings](/tutorials/interpretations/) page. The
page's dispute is two-sided: an out-of-town accreditation is either not
recognised or recognised. The archive's methodical council proposed
a third reading: recognised if that archive recognises ours.
**Setup.** Add the third reading to the same group. Under it, an
out-of-town accreditation with confirmed reciprocity grants access;
without confirmation, silence. Reading B still recognises accreditation
without reciprocity. With no reading selected, law stays silent as
before.
**Hint.** A reading is a set of rules included in it. A rule outside
every reading always applies, easily verified.
Below is the solution. Try it yourself first.
## Solution
The source, fragment, and relations from the page, plus one relation:
```law
language "law.core" version "0.2";
package tutorial.archive version "0.8.1";
namespace "urn:law:tutorial:archive";
entity Person;
source ARCHIVE_RULES {
kind municipal_act;
jurisdiction VELIKY_USTIN;
number "2026-14";
}
edition ARCHIVE_RULES_2026_RU of ARCHIVE_RULES {
language ru;
officiality official;
adopted @2026-01-15;
in_force [@2026-02-01, infinity);
}
fragment ARCHIVE_RULES_P4 in ARCHIVE_RULES_2026_RU {
kind paragraph;
locator "paragraph/4";
text ru official """Читатель допускается в зал редких фондов, если он состоит в реестре
исследователей и имеет действующую аккредитацию.
""";
content_hash "sha256:7f76a4311e52b9af58fcf3175f613794316583ae19c4f0767d0570774a456688";
}
relation in_researcher_registry(p: Person) kind institutional;
relation own_accreditation(p: Person) kind empirical;
relation accredited_elsewhere(p: Person) kind empirical;
relation reciprocity_confirmed(p: Person) kind empirical;
relation accredited(p: Person) kind institutional;
relation may_enter_rare_room(p: Person) kind institutional;
rule OwnAccreditationCounts strict {
for p: Person;
when own_accreditation(p);
then accredited(p);
}
@source(ARCHIVE_RULES_P4)
rule RareRoomAccess strict {
for p: Person;
when in_researcher_registry(p) and accredited(p);
then may_enter_rare_room(p);
}
```
The quoted fragment reads: "A reader is admitted to the rare-collections room if listed in the researcher registry and holding a valid accreditation."
Three dispute rules and three readings:
```law
rule ForeignAccreditationRecognized strict {
for p: Person;
when accredited_elsewhere(p);
then accredited(p);
}
rule ForeignAccreditationRejected strict {
for p: Person;
when accredited_elsewhere(p) and not_known(own_accreditation(p));
then not accredited(p);
}
rule ForeignAccreditationByReciprocity strict {
for p: Person;
when accredited_elsewhere(p) and reciprocity_confirmed(p);
then accredited(p);
}
interpretation LiteralReading of ARCHIVE_RULES_P4 {
status disputed;
label ru unofficial "прочтение А: «действующая аккредитация» — только аккредитация этого архива";
include ForeignAccreditationRejected;
}
interpretation RecognitionReading of ARCHIVE_RULES_P4 {
status disputed;
label ru unofficial "прочтение Б: аккредитация любого государственного архива признаётся";
include ForeignAccreditationRecognized;
}
interpretation ReciprocityReading of ARCHIVE_RULES_P4 {
status disputed;
label ru unofficial "прочтение В: иногородняя аккредитация признаётся при взаимности";
include ForeignAccreditationByReciprocity;
}
interpretation_group AccreditationScope {
alternatives LiteralReading, RecognitionReading, ReciprocityReading;
selection any_of;
}
```
The labels read: 'reading A: "valid accreditation" means only this archive's accreditation'; 'reading B: any state archive's accreditation is recognised'; 'reading V: out-of-town accreditation is recognised given reciprocity'.
The first test, under reading V with confirmed reciprocity:
```law
test "прочтение В: взаимность подтверждена — допуск" {
given {
context {
decision_time @2026-03-01T09:00:00+05:00;
knowledge_time @2026-03-01T09:00:00+05:00;
legal_time @2026-03-01;
timezone "Asia/Almaty";
interpretation ReciprocityReading;
}
assert in_researcher_registry(entity_ref("urn:tutorial:ivanova")) {
id "assert-reg";
origin case_input;
}
assert accredited_elsewhere(entity_ref("urn:tutorial:ivanova")) {
id "assert-elsewhere";
origin case_input;
}
assert reciprocity_confirmed(entity_ref("urn:tutorial:ivanova")) {
id "assert-reciprocity";
origin case_input;
}
}
evaluate truth(may_enter_rare_room(entity_ref("urn:tutorial:ivanova")));
expect truth_status == TRUE_ONLY;
expect evaluation_status == COMPUTED;
}
```
The test name reads: "Reading V: reciprocity confirmed — access."
## Check
Three tests in `tests/48-exercise-interpretations.lawtest`: reading V with
and without reciprocity, reading B without reciprocity. Beyond them, two
outcomes with no reading selected: an out-of-town accreditation with
reciprocity yields `NEITHER`, while cutting the `include
ForeignAccreditationByReciprocity` line out makes the rule belong to no
reading and fire always — `TRUE_ONLY` with no selection at all.
What the exercise teaches. A reading adds no rules to the language: it
**includes** ordinary rules, thereby removing them from general effect.
A rule forgotten outside a reading always applies, the quietest mistake
on this page: the compiler does not know you meant a dispute.