Per-individual propositional lowering over minted (individual, class) atoms: singular membership/predicate facts + all/every/each/no universals, instantiated at every named individual, decided by the same verified ROBDD engine. Closed-table number linking (irregular/invariant priority + three regular suffix rules) is the one semantic identification — attested-pair linking only, under-link over over-link. Composer tier strictly after v1/v1b/v2-EN: monotone widening, v1 lane byte-identical. - 4 new shape-bands (en_member_single/chain/negative/atomic) each earned SERVE at the arena: 13 bands x 720 = 9,360 wrong=0; ledger re-sealed. - New hand-authored lane evals/deduction_serve/v2_member (26/26); ds-en-0022 promoted declined->entailed (the designed acceptance case); report re-pinned; contract.md refreshed to the 4-band cascade. - Typed refusals: quantifier pronouns, bare plurals, definite descriptions, relative clauses, tense, mixed connectives, universal conclusions. - Flag posture unchanged (deduction_serving_enabled default off). [Verification]: deductive 127 / smoke 180 / warmed_session 10; arena all_bands_serve_licensed wrong_is_zero; lanes v1 28/28, v2_en 26/26, v2_member 26/26.
148 lines
8.6 KiB
Markdown
148 lines
8.6 KiB
Markdown
# ADR-0258 — Member-chain band (Band v3-MEM): singular membership + universal premises
|
||
|
||
- **Status:** Proposed
|
||
- **Date:** 2026-07-23
|
||
- **Relates to:** ADR-0257 (Band v2-EN — this is its scope-out #1), ADR-0256
|
||
(earned license), ADR-0201 (ROBDD keystone), ADR-0175/0199 (calibrated
|
||
learning / arena), ADR-0253 (dual-pack serve boundary — grc/he)
|
||
|
||
## 1. Context
|
||
|
||
ADR-0257 §6.1 reserved the classic instantiation syllogism as the next band:
|
||
|
||
> "Socrates is a man. All men are mortal. Therefore Socrates is mortal."
|
||
|
||
Band v2-EN refuses it (`membership_shape_out_of_band` — an `is a|an` clause
|
||
announces internal structure the opaque band must not flatten), Band v1b's
|
||
categorical decider has no notion of an *individual* (its terms are classes),
|
||
and the v1 propositional reader declines multi-word names. The eval lane pins
|
||
the gap: `ds-en-0022` is gold-`declined` purely for want of a reading band.
|
||
The engine underneath was never the limit.
|
||
|
||
## 2. Decision
|
||
|
||
Add a dedicated **member-argument reader + per-individual propositional
|
||
lowering** (`generate/proof_chain/member.py`), used ONLY by the deduction
|
||
serving path as a fallback tier strictly AFTER Bands v1 / v1b / v2-EN (so
|
||
every previously-served argument is byte-identical; this band only widens):
|
||
|
||
- **Closed sentence grammar** (function-word dispatch, refusal-first):
|
||
- Singular fact — `<NAME> is [not] [a|an] <CLASS>` (contractions expanded,
|
||
plus the sentential `it is not the case that <singular>` prefix). `<NAME>`
|
||
and `<CLASS>` are opaque token runs; `is` only (no tense in v1).
|
||
- Universal — `all|every|each <C1> are|is [a|an] <C2>` (affirmative A-form)
|
||
and `no <C1> are|is [a|an] <C2>` (negative E-form).
|
||
- Conclusion — final sentence, sole `therefore`-led, **singular form only**.
|
||
- **Per-individual propositional lowering:** collect the named individuals
|
||
(subjects of singular sentences, conclusion included); mint one opaque atom
|
||
per *(individual, class)* pair; each universal instantiates at EVERY named
|
||
individual — `A(C1,C2)` ⇒ `mem(i,C1) -> mem(i,C2)`, `E(C1,C2)` ⇒
|
||
`mem(i,C1) -> ~mem(i,C2)` for each `i`; singular facts are literals. The
|
||
same verified ROBDD engine decides; deterministic templates render the
|
||
verdict over the user's own sentences
|
||
(`generate/proof_chain/render.py::render_entailment_member`).
|
||
- **Number linking (the one semantic identification this band performs):**
|
||
a universal's class word is usually plural ("all men") while the singular
|
||
fact uses the singular ("a man"). Two *attested* class tokens are identified
|
||
iff related by a **closed morphology table** — a curated irregular/invariant
|
||
table (men↔man, people↔person, children↔child, …; invariants like sheep,
|
||
species, news map only to themselves) consulted FIRST, then the three
|
||
regular suffix rules (`+s`, `+es` after sibilants, `y↔ies`). Table priority
|
||
kills the over-link hazards (specie/species, new/news); anything the closed
|
||
relation cannot relate stays distinct — under-linking costs coverage
|
||
(honest UNKNOWN), never soundness. Linking is per-token, so multi-token
|
||
classes ("guard dog"↔"guard dogs") link on the head noun.
|
||
- **Four new shape-bands** — `en_member_single` (exactly 1 universal),
|
||
`en_member_chain` (≥2 universals), `en_member_negative` (any E-form),
|
||
`en_member_atomic` (0 universals); priority negative > chain > single >
|
||
atomic — each **earning its own SERVE license** through the ADR-0199 arena
|
||
at n=720/band wrong=0, sealed into the same ratified ledger (unlicensed ⇒
|
||
automatically hedged, per ADR-0256).
|
||
|
||
## 3. Why the lowering is sound (the load-bearing argument)
|
||
|
||
1. **Universal instantiation is sound.** Every first-order model of
|
||
`∀x (C1(x) → C2(x))` satisfies its instantiation at each named individual,
|
||
so any model of the premises is a model of the lowered premise set. An
|
||
ENTAILED/REFUTED/inconsistent verdict over the lowered set therefore holds
|
||
in every model of the original premises — served at full strength. Both
|
||
verdicts survive even if two distinct names co-refer: adding equality
|
||
facts only ADDS premises, and entailment is monotone.
|
||
2. **For this closed fragment the lowering is also complete.** With premises
|
||
restricted to singular literals and A/E universals (Boolean reading, no
|
||
existential import) and a singular conclusion, a propositional countermodel
|
||
lifts to a first-order countermodel whose domain is exactly the named
|
||
individuals — every universal holds because every element is a named
|
||
individual whose instantiation holds. So UNKNOWN means genuinely not
|
||
forced *within the disclosed reading* — it is never an artifact of
|
||
instantiating too little.
|
||
3. **UNKNOWN is still the one guarded verdict.** Two readings could settle
|
||
what the lowering leaves open: distinct names might co-refer, and class
|
||
words the closed relation didn't link might be the same class. The UNKNOWN
|
||
surface therefore scopes itself — *"Reading each name as one individual
|
||
and each class word at face value…"* — same discipline as v2-EN's
|
||
indivisible-clause scoping (ADR-0257 §3).
|
||
4. **Existential forms refuse out of band.** `some/most/any/…`-led sentences
|
||
assert anonymous witnesses that per-individual lowering cannot represent —
|
||
`quantifier_out_of_band`, typed. Pure categorical arguments stay with
|
||
Band v1b (tried first, unchanged).
|
||
|
||
Structural guards (closed refusal vocabulary, all typed): `quantifier_out_of_band`,
|
||
`bare_plural_out_of_band` ("Dogs are loyal" — implicit genericity is a reading
|
||
this band refuses to guess), `definite_description_out_of_band` ("is the …" is
|
||
identity, not membership), `relative_clause_out_of_band` (`that/which/who`
|
||
inside a name or class), `universal_conclusion_out_of_band` (categorical
|
||
conclusions belong to v1b), `mixed_structure_out_of_band` (`if/or/either/and`
|
||
— conditional-membership fusion is a future band), `internal_negation_unread`,
|
||
`structural_leak`, `sentence_shape_out_of_band`, plus the v2-EN sentence
|
||
discipline (`question_sentence`, `no_conclusion`, `multiple_conclusions`,
|
||
`conclusion_not_last`, `no_premises`, `empty_side`, `empty`) and the honesty
|
||
caps (`too_many_premises` at 16, `too_many_atoms` at 24 minted pairs — refuse,
|
||
never truncate).
|
||
|
||
## 4. What the earned licenses certify
|
||
|
||
Same posture as ADR-0257 §4: the license certifies READER fidelity per shape
|
||
(the engine cannot be wrong; the reader can hand it the wrong problem). The
|
||
arena corpus is synthetic names × a class lexicon chosen to exercise every
|
||
row-type of the morphology table (irregular, invariant, `+s`, `+es`, `y↔ies`);
|
||
gold is authored by construction and cross-checked against the truth-table
|
||
oracle over the template's INTENDED instantiated formulas — no reader in the
|
||
loop (INV-25). The hand-authored real-English eval lane
|
||
(`evals/deduction_serve/v2_member/`, content disjoint from the synthetic
|
||
lexicon) keeps the structural-fidelity claim honest against natural prose,
|
||
including the promoted `ds-en-0022` (declined → entailed: this band's designed
|
||
acceptance case).
|
||
|
||
## 5. Tri-language posture
|
||
|
||
Unchanged from ADR-0257 §5 — with one addition: the number-linking table is
|
||
CORE's **first morphology table**, and it is exactly the artifact class the
|
||
tri-language doctrine says must eventually enter through pack ratification
|
||
(ADR-0253). English needs ~30 closed rows; Greek/Hebrew declension is where a
|
||
curated morphology pack stops being optional. When a `grc_*`/`he_*` member
|
||
band is built, the table moves from module constants to a ratified pack; no
|
||
premature parameterization now.
|
||
|
||
## 6. Scope-outs (deliberate)
|
||
|
||
1. **Conditional–membership fusion** ("If Socrates is a man then …") —
|
||
refuses `mixed_structure_out_of_band`; a future band composes the v2-EN
|
||
connective grammar with this band's sentence readings.
|
||
2. **Existential premises/conclusions** (`some …`) — needs witness semantics;
|
||
pure categorical `some` stays with Band v1b.
|
||
3. **Tense** (`was/were`) and **verb predicates** ("Socrates runs") — refuse;
|
||
verb morphology is ADR-0257 scope-out #2's territory.
|
||
4. **Identity / definite descriptions / co-reference** — refuse
|
||
(`definite_description_out_of_band`); an equality-aware band is future work.
|
||
5. **Flag posture unchanged:** rides `deduction_serving_enabled` (default
|
||
off); no new flag.
|
||
|
||
## 7. Verification
|
||
|
||
- `uv run core test --suite deductive -q` — reader contract, surfaces,
|
||
license, all three lane splits, e2e through `ChatRuntime`.
|
||
- Practice arena: 13 bands × 720 = 9,360 cases, wrong=0 required for every
|
||
band; ledger re-sealed (`chat/data/deduction_serve_ledger.json`).
|
||
- Eval lane: v1 28/28, v2_en 26/26 (ds-en-0022 promoted), v2_member new —
|
||
wrong=0; report re-pinned (`scripts/verify_lane_shas.py`).
|