feat(deduction-serve): Band v3-MEM — member-chain band, Socrates syllogism decided (ADR-0258) #108
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/member-chain-band"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What CORE can do now that it couldn't this morning
The classic instantiation syllogism — reserved as ADR-0257 §6.1's scope-out
when the English band merged as #107 — is decided end-to-end through the real
core chatspine, rendered over the user's own sentences:ds-en-0022, pinneddeclinedin the v2_en lane purely for want of a readingband, is promoted to
entailed— this band's designed acceptance case.Mechanism
One new module,
generate/proof_chain/member.py: a closed sentence grammar(singular
<NAME> is [not] [a|an] <CLASS>facts;all/every/eachandnouniversals) plus per-individual propositional lowering — one opaque minted
atom per (individual, class) pair, every universal instantiated at every named
individual, decided by the same verified ROBDD engine. No new decision
procedure; only the lowering is new (same discipline as the v1b categorical
decider).
Composer tier strictly after v1 → v1b → v2-EN: monotone widening, so every
previously-served argument is served byte-identically (v1 lane 28/28 unchanged).
Why it's sound
Universal instantiation at named individuals is truth-preserving in every
first-order model, so ENTAILED / REFUTED / inconsistent verdicts hold in every
model of the original argument — served at full strength. They even survive
co-reference of two distinct names, since that only adds premises and
entailment is monotone.
For this closed fragment (singular literals + A/E universals, singular
conclusion, Boolean reading) the lowering is also complete: a propositional
countermodel lifts to a first-order countermodel whose domain is exactly the
named individuals. UNKNOWN is therefore genuinely "not forced," never an
artifact of instantiating too little — and its surface still scopes itself to
the disclosed reading.
Number linking is the one semantic identification the band performs ("all
men" must bind "a man"): two attested class forms identify iff related
token-wise by a closed relation — an irregular/invariant table consulted first
(table membership makes it the sole authority for that token, which is what
keeps
specie/speciesandnew/newsunlinked), then three regular suffixrules. Under-linking costs coverage; it can never cost soundness. This is
CORE's first morphology table, flagged in ADR-0258 §5 as the artifact class that
moves into a ratified pack when the grc/he sibling bands land.
Refusal-first throughout: existential quantifiers and quantifier pronouns, bare
plurals ("Dogs are loyal"), definite descriptions, relative clauses, tense,
mixed connectives, and universal conclusions all refuse with typed reasons.
Earned, not flagged
Four new shape-bands (
en_member_single/_chain/_negative/_atomic),each earning its own SERVE license through the ADR-0199 arena:
13 bands × 720 = 9,360 cases, wrong=0, reliability 0.99087 ≥ θ_SERVE=0.99.
Ledger re-sealed at 13 bands. Arena gold is by-construction and cross-checked
against the truth-table oracle over each template's intended instantiated
formulas — no reader in the loop (INV-25). The synthetic class lexicon
deliberately exercises every row-type of the number table, so the license
certifies the linking relation, not just the sentence grammar.
New hand-authored real-English lane
evals/deduction_serve/v2_member/(26cases, content-disjoint from the synthetic lexicon) keeps that honest.
Scope-outs (deliberate, ADR-0258 §6)
Conditional–membership fusion ("If Socrates is a man then…"), existential
premises, tense and verb predicates ("Socrates runs"), identity/co-reference.
Each refuses typed today; refusal telemetry marks which band pays next.
deduction_serving_enabledstays default-off — no flag change in this PR.Files
generate/proof_chain/member.py(new),shape.py(+4 bands),render.py(+render_entailment_member),chat/deduction_surface.py(tier),evals/deduction_serve/practice/gold.py(+4 template families, solverfallback),
v2_member/cases.jsonl(new),runner.py(+split, +fallback),v2_en/cases.jsonl(ds-en-0022 promoted),contract.md(refreshed to the4-band cascade — it was two arcs stale),
report.json+verify_lane_shas.py(re-pinned),
core/cli_test.py,tests/test_member_argument_reader.py(new,41 tests), plus surface/lane/e2e test updates.
Records:
docs/adr/ADR-0258-member-chain-band.md,docs/research/member-chain-band-2026-07-23.md.[Verification]: deductive 127 passed / smoke 180 passed / warmed_session 10
passed; arena
all_bands_serve_licensed=True wrong_is_zero=True(13 bands);lanes v1 28/28, v2_en 26/26, v2_member 26/26.