core/docs/research/verb-predicate-band-2026-07-24.md
Shay d181ae30f9 feat(deduction-serve): Band v5-VP — verb-predicate arguments, decided (ADR-0260)
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.
2026-07-24 12:51:36 -07:00

4.3 KiB

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.