Generalization arc Phase 1.1 (Tier F, docs/plans/generalization-arc-2026-07-24.md): "All philosophers teach. Socrates is a philosopher. Therefore Socrates teaches." now reads and decides — the ADR-0258 §6.3 verb-predicate scope-out, and the reading gate for Phase 2's subject serving. generate/proof_chain/verb.py extends v3-MEM's per-individual lowering with a second atom family in one shared space: membership atoms (v3-MEM's own parsers reused verbatim) + verb atoms (individual, verb-lemma-group, object-term). Verb universals instantiate as mem(i,C) -> [~]verb(i), so a copula-minted membership fact discharges a verb rule. The ONE new semantic identification is closed 3sg agreement (verb-specific irregular table + the three regular suffix rules — deliberately NOT the noun table, which would misroute "lives"/"leaves"). Scope-tight segmentation: single-token name/class/verb/object shapes only; everything longer refuses typed (tense_out_of_band joins the closed reason vocabulary). Rendered by render_entailment_verb (member surface, UNKNOWN scoping extended to the verb reading). Rides deduction_serving_enabled (default off); pure widening — every previously-served argument byte-identical, no existing lane case changed outcome. Earned: 4 en_verb_* bands x 720 arena wrong=0 (first seal), ledger resealed at 21 bands; corpus soundness asserted against the independent truth-table oracle over each template's intended lowering (15,120 cases, INV-25). Lane: v2_verb 28 hand-authored real cases 28/28 first run; full lane 134/134 wrong=0 across five splits. Surgical single-line pin update + CLAIMS regen. Stacked on feat/generalization-phase0 (merge that first — shared verify_lane_shas.py / CLAIMS.md / generate_claims.py lane-ADR mapping). [Verification]: verb reader tests 34/34; deduction battery 86/86 (surface +5, e2e +1, lane +1) in-worktree; arena seal + oracle cross-check green; smoke + warmed_session via pre-push gate.
87 lines
4.3 KiB
Markdown
87 lines
4.3 KiB
Markdown
# Band v5-VP — verb-predicate arguments, decided (ADR-0260)
|
|
|
|
**Date:** 2026-07-24 · **Branch:** `feat/verb-predicate-band` (stacked on
|
|
`feat/generalization-phase0`) · **Arc:** generalization
|
|
(docs/plans/generalization-arc-2026-07-24.md, Phase 1.1 — Tier F)
|
|
|
|
## What CORE can now do
|
|
|
|
```
|
|
> All philosophers teach. Socrates is a philosopher. Therefore Socrates teaches.
|
|
Given: all philosophers teach; socrates is a philosopher.
|
|
Your premises entail: socrates teaches.
|
|
```
|
|
|
|
Verb sentences — the shape in which every non-logic subject states its
|
|
rules — now read and decide. The cascade's earlier bands each guard this
|
|
territory out (v2-EN refuses quantifier leads / is-a clauses / `does not`;
|
|
v3-MEM and v4-CM refuse copula-free sentences), so the tier is pure
|
|
widening on the fall-through path.
|
|
|
|
## Mechanism (ADR-0260 §2)
|
|
|
|
v3-MEM's per-individual lowering, extended with a second atom family in ONE
|
|
shared space: membership atoms *(individual, class-group)* — minted by
|
|
v3-MEM's own parsers reused verbatim — plus verb atoms *(individual,
|
|
verb-lemma-group, object-term)*. A verb universal instantiates at every
|
|
named individual as `mem(i,C) -> [~]verb(i)`, so a copula-minted membership
|
|
fact discharges a verb rule. The ONE new semantic identification is 3sg
|
|
agreement: a closed verb relation (irregular table has/goes/does first, then
|
|
+s / +es-after-sibilant / y↔ies) links "teach"↔"teaches". The noun table is
|
|
deliberately NOT reused — it would misroute "lives" (noun: life; verb:
|
|
live). Everything the relation cannot relate stays distinct: under-linking
|
|
costs coverage, never soundness.
|
|
|
|
Segmentation is scope-tight: single-token name/class/verb/object shapes
|
|
only (`<name> <verb> [<obj>]`, `does not`, sentential-not, `all|every|each|
|
|
no [the] <class> <verb> [<obj>]`); anything longer refuses typed — without a
|
|
lexicon there is no sound split of an arbitrary copula-free run.
|
|
|
|
## Earned licenses
|
|
|
|
Four new bands — `en_verb_universal`, `en_verb_chain`, `en_verb_negative`,
|
|
`en_verb_fact` — each 720/720 committed, wrong=0, first seal run; ledger
|
|
resealed at **21 bands** (12,240 + 2,880 committed). The synthetic verb pool
|
|
exercises every rule of the closed agreement relation, so the license
|
|
certifies the linking itself. Corpus soundness asserted case-by-case against
|
|
the independent truth-table oracle over each template's INTENDED lowering
|
|
(no reader in the loop, INV-25) before sealing.
|
|
|
|
Lane: `evals/deduction_serve/v2_verb` — 28 hand-authored real-English cases
|
|
(11 entailed / 4 refuted / 5 unknown / 8 declined), 28/28 first run; full
|
|
lane now 134/134 wrong=0 across five splits. Gates: verb reader tests 34,
|
|
deduction battery 86, smoke + warmed_session via pre-push.
|
|
|
|
## Wrinkles worth surfacing
|
|
|
|
1. **Adverb-as-object misreading (disclosed, not fixed):** "Lena runs
|
|
quickly" parses as verb+object ("quickly" an opaque term). Never unsound
|
|
— worst case an over-scoped UNKNOWN — but it is a real misreading the
|
|
3-token shape cannot detect without a lexicon. ADR-0260 §5.2 documents
|
|
it; the vocab-boundary instrument (plan Phase 3.1) is where a principled
|
|
fix would come from.
|
|
2. **Arity subsumption stays UNKNOWN:** "teaches" ⊬ "teaches logic" and
|
|
conversely — the face-value posture v2-EN already takes, now visible on
|
|
verbs. A human reads the intransitive as subsuming; the scoped UNKNOWN
|
|
phrasing carries the honesty.
|
|
3. **Plural verb-fact subjects read as individuals:** "dogs bark" is an
|
|
individual named "dogs" in this fragment (no copula ⇒ no plural signal in
|
|
the closed grammar). The membership analogue stays refused by v3-MEM's
|
|
bare-plural guard.
|
|
4. **`doesn't` is not expanded** by the shared tokenizer's contraction
|
|
table (only isn't/aren't/wasn't/weren't are) — so "The engine doesn't
|
|
start" still refuses via the `n't` guard, preserving the e2e
|
|
out-of-regime test byte-for-byte. Adding verb contractions is a
|
|
deliberate non-goal until the tense scope-out is faced whole.
|
|
|
|
## Stacking note
|
|
|
|
This branch stacks on `feat/generalization-phase0` (merge that PR first):
|
|
both touch `scripts/verify_lane_shas.py` / `CLAIMS.md`, and the claims
|
|
generator's `_LANE_ADR` fix lands there.
|
|
|
|
## Next (per the plan's tier assignment)
|
|
|
|
Tier O (Opus): Band v6-EX existential witnesses (Phase 1.2), then the
|
|
Phase-2 physics lane against the §4 curriculum-entailment contract — for
|
|
which this band was the gate.
|