core/docs/analysis/field-reasoner-wedge-design-and-falsification-2026-06-04.md
Shay 991be784fa docs: field-reasoner wedge design + falsification dossier
Source-grounded design of the field<->symbol coherence-gate wedge, corrected by
an 11-agent adversarial review into a falsifiable experiment with a sanctioned
negative outcome (field stays a servant -> C3 two code-disjoint symbolic
readings). Records the substrate ledger (the CL(4,1) field has one exact strength
relevant to reasoning -- the conformal distance metric -- and no solver/incidence
machinery), the corrected design, the three adversarial verdicts, the falsifiable
experiment (ablation + per-class diversity), and the phased path.
2026-06-04 19:22:16 -07:00

25 KiB
Raw Blame History

The field-reasoner wedge — design, adversarial correction, and the falsification it must pass

This is the load-bearing research record that turns the deferred keystone of the universal-structure plan (universal-structure-and-field-symbol-coherence-gate-2026-06-04.md) into a concrete, falsifiable experiment. It is planning-and-research only: it assigns no ADR number, changes no serving path, and introduces no capability claim.

Provenance. Compiled from (a) a first-hand read of the CL(4,1)/field/binding-graph/ reliability-gate substrate, and (b) an 11-agent adversarial research workflow (4 substrate mappers + 2 external-literature researchers → 1 design synthesis → 3 adversarial verifiers → 1 integrator). Every load-bearing claim below is confirmed against source with a file:line citation. The recommended design returned "revise" on all three adversarial lenses (decoration/independence, sub-enumeration, wrong=0); their required fixes are folded in.

The one-sentence finding. The CL(4,1) field has exactly one exact native strength relevant to reasoning — the conformal distance metric — and none of the incidence, solver, or independent-reading machinery a metric reasoner needs; so the inevitable next move is not "make the field the reasoner," it is the cheapest honest test of whether a metric encoding buys any genuine reading-independence at all, wired so a negative result cleanly lands the field back as a servant without polluting wrong = 0.


1. The inevitable next level

The architecture has exhausted the cheap moves and pinned the next one. Four constraints intersect to a single design shape:

  1. The only verified reasoning capability today is propositional entailment (ROBDD, generate/proof_chain/entail.py, holdout 500/500 wrong=0 vs an independent truth-table oracle). A clean geometric decoder of logic was already shown to be O(2^n) truth-table enumeration in algebraic clothing — the field cannot earn its reasoning role on combinatorial logic. Redirect to a metric-continuous domain (distance, proportion) where CGA has real purchase.
  2. Independence must live in the reading, not the solving. Two solvers over the same extracted structure is fake independence; the wrong=0 risk lives in comprehension. For quantitative/NL problems the reading (text → structure) is the unsound step — unlike logic, whose input is already a formula (independence there is cheap: two parsers).
  3. wrong = 0 is structural, not aspirational. Whatever the field produces is admitted only through a checkable gate.
  4. The dormant reliability-gate lever checker="t2_precision" (core/reliability_gate/gate.py:22,48-53) can fire only when two structurally-distinct derivations converge on one commitment_key — and no genuinely-independent second derivation exists.

Their intersection collapses the design space to one shape: an independent metric reading of quantitative-relational problem text, packaged as the field-side OperatorEvidence for the existing verify_tier2_agreement seam, scored against a third, code-disjoint gold registered as a new INDEPENDENT_GOLD_LANE. And the inevitable first step is the cheapest falsifiable version of it — because every heavier design and the null branch off its result.


2. What the substrate actually supports today (source-verified ledger)

Capability Status Evidence
Exact conformal distance metric cga_inner(embed_point(a), embed_point(b)) = ½‖ab‖² REAL, exact algebra/cga.py:30-37, 65-84; docstring :11-17 ("the ONLY distance metric")
Null-preserving conformal transforms (versors act correctly on encoded points) REAL (dual-path: null input → raw sandwich) algebra/versor.py:160-186, 149-157
Parameterized conformal motions (rotor slerp / transition rotor) REAL but wired to word→word transitions, not point transforms algebra/rotor.py:75-144, 147-179
embed_point precision f32-HARDCODED — unusable at GSM8K scale; needs an f64 reimplementation algebra/cga.py:72,76,82,83; v=12345 → 12344.99996 in f32
Incidence/flat/round constructors (line/plane/sphere via wedge) ABSENT algebra/cga.py exports only cga_inner / outer_product / is_null / null_project / embed_point
meet / join / dual / cross_ratio / betweenness ABSENT (zero construction hits across algebra/field/generate/core) substrate audit
A constraint-propagation solver ABSENTfield/propagate.py is a fixed-rotor walk ("no correction, no branching"); field/operators.py::ConstraintCorrectionOperator is damped diffusion to a fixed prompt centroid, NOT algebraic constraint satisfaction (the name is a trap) field/propagate.py:1-20,47; field/operators.py:153-281
versor_condition unit-versor closure residual, NOT a constraint-satisfaction measure algebra/versor.py:189-204
Any runtime path embedding problem quantities as conformal points ABSENTembed_point used only in evals/lab/ probes substrate audit
Reasoning readers import field/algebra NONE (generate/derivation, generate/proof_chain, core/reliability_gate import zero versor_apply/cga_inner/holonomy/field.propagate) grep, confirmed
Binding-graph interlingua (SemanticSymbolicBindingGraph) EXISTS, frozen, INERT — 6 sub-collections, refusal-first, acyclic, unit-aware, SourceSpanLink provenance, INV-26 neutral; derived FROM MathProblemGraph by adapter.py (so it carries no independent reading) generate/binding_graph/model.py:397-507; adapter.py
Agreement-gate seam EXISTSverify_tier2_agreement admits iff ≥2 distinct structural_signatures collapse to one commitment_key core/reasoning/evidence.py:169-205
Independence firewall on the gate's two readers DOES NOT EXIST — the seam checks only len(set(signatures)) < 2, a free-form label-string test; INV-25 governs only the oracle, and its import check is single-level / non-transitive core/reasoning/evidence.py:180-187; tests/test_architectural_invariants.py:1115-1136
t2_precision lever WIRED, dead — nothing populates t2_verified; no serving call site passes checker="t2_precision"; no serving consumer of proposals core/reliability_gate/gate.py:22,48-53; propose.py:66-103; core/learning_arena/engine.py:80-99
Independent-gold template EXISTS, provendeductive_logic + dimensional lanes (oracle shares no SUT code; gold frozen at generation; runner counts correct/wrong/refused) evals/deductive_logic/{oracle,generate,runner}.py; evals/dimensional/{oracle,runner}.py; INDEPENDENT_GOLD_LANES at tests/test_architectural_invariants.py:1088-1106

Ledger in one line: one real native strength (the conformal distance metric); everything else load-bearing must be built, and the precision substrate must move to f64.


Design C1 — the number-line incidence reader, sealed to forward-substitutable relations, packaged as the field-side evidence for the existing t2 seam. It is the smallest design that exercises the one real substrate strength. The adversarial review did not kill it; it corrected three things that, left unfixed, would have made it decoration or breached wrong=0.

3.1 The independent reading — and the honest size of the claim

A new allowlisted bridge generate/binding_graph/field_adapter.py maps raw problem text to conformal points. Its number detection, clause segmentation, unit assignment, and relational-cue classification are an independent reimplementation keyed off relational phrase schemas ("more than", "times as many", "in total", "ratio of"), importing none of generate.derivation, generate.math_candidate_parser, generate.math_roundtrip, WORD_NUMBERS, or state/bind.

Honest downgrade (required by all three lenses): this is a second hand-written reader, not a categorically different comprehension mechanism. There is no existing quantity-preserving text→geometry map. By KnightLeveson, two architecturally-disjoint readers of the same text are exactly the regime where correlated comprehension failure persists (~half of N-version faults correlate through the shared specification). Therefore:

  • The ADR/code states independence is a hypothesis the experiment is designed to refute, never a property held by construction. Do not cite McGilchrist as evidence — design metaphor only; the only falsifiable form is the checkable gate.
  • The independence firewall is made real and transitive: a new architectural invariant follows the import graph transitively and applies to both readers feeding the t2 gate (today's _module_imports is single-level and would miss a helper that re-pulls math_roundtrip). The existing len(set(signatures)) < 2 check is a label test and proves nothing.

The geometric encoding does add one genuine marginal check the symbolic regex lacks: for an over-determined collinear configuration the read points must form a consistent set with non-contradictory distances, so a relation the regex silently accepts can produce an incoherent configuration the field refuses. That signal is real but narrow — vacuous on a single unary relation, and it does not catch a coherent misreading. The margin is measured, not asserted.

3.2 The sub-enumeration argument (sealed)

For the forward-additive / part-whole core the encoding is genuinely sub-enumeration and not the logic wedge's O(2^n) trap:

  • "A is k more than B" → translation versor T_k, A = versor_apply(T_k, B).
  • part-whole → collinear metric sum.
  • a chain of unary relations (A = B+3; C = 2A; …) is one-shot closed-form forward composition of versors — O(1) per constraint, no Boolean assignment lattice. Values live in a continuous metric space; that is the categorical difference from logic.

Required fixes that keep this true:

  1. Seal the micro-domain to forward-substitutable (triangular) relations. The property holds only where each relation pins one new unknown from already-resolved points. A coupled/over-determined system is meet-of-hyperplanes = Gaussian elimination = O(n³) and needs meet/join/dual primitives that do not exist. The generator and gold exclude coupled systems.
  2. Drop the "propagate to versor_condition<1e-6" framing. A forward chain has no iterative solve and no residual; versor_condition measures the operator's closure, not constraint satisfaction. Conflating them invites a forbidden hot-path normalizer (CLAUDE.md forbids drift repair in field/propagate.py).
  3. The win is a sub-enumeration encoding, never a solving speedup. Never pitch the field as faster than Gaussian elimination.

3.3 Correct answer read-back (the wrong=0 bug the verdicts caught)

The naive read-back — "answer = signed distance from origin via cga_inner" — is mathematically wrong for any weight-changing operator. A dilation (the multiplicative case) yields a weighted null vector: dilating x=2 by k=4 gives e1=2.0, n_o-weight 0.25, i.e. 0.25·embed_point([8,0,0]); naive distance-from-origin returns 4.0 for true coordinate 8.0. Fix: read by projective dehomogenizationanswer = e1_coefficient / n_o_weight — verified exact (8.0). This is the read-back for all operators, since composed motors change weight.

Two further metric hazards the read side must own (not the geometry):

  • cga_inner is sign-/orientation-blind (d²/2 cannot distinguish A=2B from A=2B, nor enforce betweenness order). Orientation is a separate read-side decision the geometry does not verify. Either add an explicit signed-coefficient orientation invariant or refuse all sign-ambiguous configurations.
  • "k times" via dilation-about-origin / cross-ratio needs a non-degenerate 4-point frame; collinear configs are ill-conditioned. The additive/part-whole core is the load-bearing claim; the multiplicative case is fenced as the conditioning risk.

3.4 The wrong=0 admission contract (honest)

The "three loud-failing layers" was inflated; two are decoration:

  • "Geometric coherence" on one number line is collinearity-by-construction + non- contradictory distances — it catches contradictory readings, not a single coherent wrong relation.
  • "Exact integer round-trip" is decoration as a comprehension guard (confirmed: embed_point([103]), [300], [7] each round-trip residual 0.0). A coherent misreading (300 vs 103) passes trivially. Per CLAUDE.md's schema-defined-proof-obligation rule, demote it to a float-sanity guard, not a wrong=0 layer.

The real, load-bearing protection is exactly two checks:

  1. field⟂symbol agreement on the exact commitment_key = (integer value + UnitVector dimension). Float-tolerant equality is never the admit criterion — that is precisely what sank resolve_pooled (right/wrong float readings indistinguishable).
  2. Scoring vs an independent gold — a third oracle code-disjoint from both readers, importing no field/algebra so it cannot agree with the field by construction.

Plus f64 + a pinned magnitude ceiling: an f64 reimplementation of X = x + n_o + ½|x|²·n_inf, refusing any quantity above an empirically pinned bound (GSM8K reaches thousands; ½|x|² ≈ 1e7; f64 recovers integers exactly to ~1e7, but the ceiling is pinned by measurement, not assumed). Above the ceiling → refuse.

3.5 The asymmetric refinement (the right second step, not the first)

The literature's strongest guarantee is producer/checker asymmetry (certifying algorithms / translation validation): an untrusted producer emits a witness a simpler, code-disjoint checker validates without redoing the work. Symmetric "two decodings agree" is weaker (exposed to correlated error). CORE already has an asymmetric checker for the dimensional sub-check — generate/binding_graph/units.py's unit_proof is free and code-disjoint. Use the asymmetric check where one exists (a C2-style certifying-witness for the dimensional component); reserve symmetric agreement only where no independent checker is constructible. This is the correct step after the wedge proves the field lands a coherent configuration at all — not premature surface area to build first.

3.6 If the experiment fails — the sanctioned alternative (C3)

The field stays a servant in its current cognition-turn role, and quantitative-relational capability is carried by a second fully-symbolic, code-disjoint reading (a relational-schema parser) agreeing with the existing candidate-graph reader at exact-integer commitment_keys. C3 sidesteps every float/precision/orientation hazard and is the cleanest wrong=0 story. Its honest weakness: two symbolic readers are the closest analogue to KnightLeveson's refuted-independence case. C3 is the correct landing iff the wedge shows the field shares the symbolic reader's blind spots — a success, because it answers the field-as-reasoner question with evidence instead of deferring it.


4. The falsifiable experiment (cheapest decisive test)

Build only: the f64 number-line reader + four constraint versors (additive/part-whole load-bearing; multiplicative/ratio fenced) + projective-dehomogenization read-back + the ablation/diversity instrument. Do not build the C2 certifying checker yet.

Dataset: ~150 seeded two/three-quantity problems ("k more than", "k times", part-whole), gold from a third hand-authored arithmetic oracle sharing no code with either reader, registered in INDEPENDENT_GOLD_LANES. Split into generation and a held-out set; measure on held-out only (anti-overfit firewall — never tune to the 150 templates).

Three pass/fail measurements, wired as the gate (not diagnostics):

  1. Field-alone correctness — does the field's projective-dehomogenized integer answer equal the independent gold on committed cases, wrong=0 on held-out?
  2. Ablation — run the wrong=0 gate with the field vote removed vs with it. The admitted set must CHANGE (the field must refuse ≥1 comprehension error the symbol path alone admits). Unchanged ⇒ the field is decoration → land C3.
  3. Diversity, reported PER relation class — double-fault rate / Q-statistic / coincident-failure diversity must clear a pinned threshold. Aggregate is forbidden (it could net out signal while the field is decoration on the cases that matter). Field credit only on classes where it demonstrably refuses an error the symbol path admits.

A negative result is sanctioned and expected-possible. If (1) breaches wrong=0 at scale, or (2) shows an unchanged admitted set, or (3) shows high coincident failure (Q≈1), the field is a servant here → land C3, and that result confirms the thesis that genuine reading-diversity needs a categorically different mechanism — justifying a later deeper research bet rather than this cheap wedge. No unfalsifiable "the field knows" claim is ever permitted.


5. Phased path

Each phase: entry gate · exit gate · independent gold · wrong=0 guard. No phase begins until the prior phase's exit gate is green. A lookback review runs at each boundary.

Phase 0 — foundation (build regardless of the wedge result)

  • Build: (a) f64 embed_point reimplementation + magnitude-ceiling refusal; (b) the transitive reader-disjointness invariant applied to both readers feeding the t2 gate; (c) replace the verify_tier2_agreement label-string distinctness check with a mechanistic one (distinct signatures must be provably unable to come from the same decoding pathway); (d) the independent-gold lane scaffolding (third arithmetic oracle, INDEPENDENT_GOLD_LANES registration).
  • Exit: all four shipped, full-suite green, INV-25/INV-26 still green; no serving path touched. These are net hardening even if the field never reasons.

Phase W — field-alone metric reader + decoration instrument

  • Entry: Phase 0 green; micro-domain sealed to forward-substitutable relations; projective-dehomogenization read-back implemented.
  • Exit: the three §4 measurements pass on held-out (field-alone wrong=0; ablation changes the admitted set; per-class diversity above threshold) OR they fail → land C3 and stop.
  • Independent gold: third hand-authored arithmetic oracle, code-disjoint from both readers, imports no field/algebra.
  • wrong=0 guard: exact integer + UnitVector commitment_key (no float tolerance); f64 + refuse-above-ceiling; refuse sign-ambiguous configs.

Phase 3 — activate t2_precision (the dormant lever)

  • Entry: Phase W exit green; field and symbol each emit OperatorEvidence with the same exact commitment_key and genuinely distinct signatures (proven by the non-decoration test, not by label).
  • Exit: in sealed practice, ClassTally.t2_precision rises past N_MIN+ to the chosen θ (PROPOSE=0.85 staging before SERVE=0.99); propose_from_ledger(..., checker="t2_precision") emits a proposal; and a concrete serving consumer of checker="t2_precision" exists and refuses on disagreement (close the ratify-vs-consume gap with an eval delta, not an artifact append).
  • Independent gold: the GoldTether earning t2_precision is independent of both readers (INV-25 generalized to two SUTs). Re-using the symbolic answer as gold collapses the firewall.
  • wrong=0 guard: practice scoring is gold-gated, so agree-on-wrong scores t2_verified=1, t2_agrees_gold=0 and lowers the license. The residual hazard lives in the unbuilt serving consumer: pin its contract now — admit iff (agreement AND class licensed); disagreement or field-refusal → deterministic refuse; no float tolerance anywhere. The Wilson floor at θ=0.99 demands ~657 perfect committed agreements/class — the coverage wall is the binding constraint.

Phase 4 — GSM8K on the structure (held-out / sealed)

  • Entry: Phase 3 exit green; the field reader generalizes from seeded templates to real GSM8K forward-substitutable relational cases (validate on train_sample/holdout_dev, never the 150 templates).
  • Exit: on a sealed GSM8K split, the agreement gate admits with wrong=0; ablation still shows the field changing the admitted set on real cases.
  • Independent gold: GSM8K reference answers; the gate's gold kept independent of both readers.
  • wrong=0 guard: the serving-frozen lane (scripts/verify_lane_shas.py, CLAIMS.md) — no bridge re-enables a reader without a sealed/independent wrong=0 run. The standing warning is resolve_pooled (2 right / 87 wrong): never admit a reader that cannot distinguish its right readings from its wrong ones.

Phase 5 — cross-domain anti-overfit panel

  • Entry: Phase 4 green; the field reader is a third golded domain alongside deductive_logic and dimensional.
  • Exit: registered in INDEPENDENT_GOLD_LANES with a code-disjoint oracle (forbidden-prefix entries for both readers); INV-25 sub-properties hold; INV-26 green (field→graph translation lives in the bridge, never in model.py/units.py/admissibility.py).
  • wrong=0 guard: full panel wrong=0 across all three domains; a deliberately-unsound engine must disagree with each oracle (non-vacuity).

And beyond

The deferred keystone remains deferred: a categorically different comprehension mechanism (Gentner-style structure-mapping over a path that does not pass through any lexeme extractor) that would make field⟂symbol independence real by construction rather than measured. The wedge does not deliver that; it tests whether a metric encoding buys any independence on the one real substrate strength. If Phase W lands C3, the "beyond" is a dedicated research track on the comprehension mechanism — out of the near-term sequence, never licensed to displace it.


6. Risks, honest tensions, and STOP conditions

Tensions (named, not waved):

  • Independence is architectural-only, not mechanistic. A second hand-written parser is precisely where correlated comprehension failure survives (KnightLeveson). The claim is a hypothesis the experiment refutes, not a property; the current firewall (a label-string distinctness test) does not enforce it.
  • Symmetric agreement is weaker than producer/checker asymmetry. Use the asymmetric (certifying-witness) check where one exists (dimensional unit_proof); reserve symmetric agreement only where no checker is constructible.
  • The metric is sign-/orientation-blind and the substrate has no incidence primitives. "Incidence" is faked via distance arithmetic; orientation is a read-side decision the geometry does not verify — thinning the independent signal exactly on multiplicative/ratio cases.

STOP (and land C3 or the servant null):

  1. Ablation shows an unchanged admitted set — the field is decoration.
  2. Per-class diversity collapses (double-fault high / Q≈1) — fake independence.
  3. f64 + ceiling cannot preserve exact distance at GSM8K scale — restrict to a band so narrow it is not the comprehension layer, or stop.
  4. The seal cannot hold — if real cases force coupled/over-determined systems, the sub-enumeration claim degrades to O(n³) on primitives that do not exist; do not fabricate meet/join/dual.
  5. A float coherence threshold gets reconciled with the exact admit gate by tolerance — the resolve_pooled failure mode; stop immediately, this breaches wrong=0.
  6. Any "the field knows" claim, or a McGilchrist-as-evidence citation, appears in code/ADR without the checkable gate behind it — that imports an unfalsifiable claim; revert.

Bottom line, without overclaim: the field has one real, exact strength (the conformal distance metric) and none of the reasoning machinery around it. The wedge is the cheapest honest test of whether a metric encoding buys genuine reading-independence on quantitative-relational structure. If it does — wrong=0, ablation-positive, diverse — it activates the dormant t2_precision lever as the genuine second derivation. If it does not, the field stays a servant, a second code-disjoint symbolic reading carries the next level, and that negative result is the success.