# 033 analogy-battery — RESULT

**Tier: T3-exploratory.** Ran in full on phys GPU2 (CVD=1), tmux `c100_033`; decode 30.5 s
(1240 jobs, det_ok=True), LOCAL codex judging 1240 records (0 parse fails), analysis local.
Self-harvested in-session.

## Question
Does SONAR z-space support systematic a:b::c:? sentence analogies (word2vec-style)? For 7
transformation TYPES, is the transformation a **linear offset operator** — one vector fit on TRAIN
content that applies the transformation to held-out TEST content (disjoint vocab)?

## Headline ★ POSITIVE + SHARP LINEARITY GRADIENT + BINDING CONFIRMATION
z-space **is** a linear-analogy space for *surface/morphosyntactic* transformations and **is not**
for *content/structural* ones. A single averaged offset, fit on 60 train pairs and applied to 40
held-out pairs with **disjoint vocabulary**, reproduces the target transformation:

| transform | success (T applied) | collateral (preserved) | cos(pred,true) | offset diff_align | verdict |
|-----------|--------------------|-----------------------|----------------|-------------------|---------|
| tense     | **1.00** | 1.00 | 0.985 | 0.837 | linear |
| negation  | **1.00** | 0.975 | 0.980 | 0.839 | linear |
| question  | **1.00** | 1.00 | 0.981 | 0.900 | linear |
| number    | **0.975** | 0.975 | 0.984 | 0.793 | linear |
| **voice** | 0.50 | **0.29** | 0.853 | 0.634 | HALF-operator (morphology only) |
| sentiment | 0.11 | 0.975 | 0.837 | 0.547 | non-linear |
| entity    | 0.00 | 1.00 | 0.688 | 0.119 | null (not one transform) |
| compose (tense∘number) | **1.00** | 1.00 | 0.972 | 0.842 | linear |

Ranking by success: tense = negation = question (1.00) > number (0.975) ≫ voice (0.50) >
sentiment (0.11) > entity (0.00). The offset's `diff_align` (mean cosine of individual train
differences to their mean) predicts this ordering directly — a z-side linearity diagnostic
computed with no decoding: entity 0.12 ≪ sentiment 0.55 < voice 0.63 < number 0.79 <
tense/negation/compose 0.84 < question 0.90.

### The three failures are each mechanistically diagnostic
- **voice — surface morphology is linear, argument binding is NOT.** 40/40 predicted decodes have
  the correct passive FORM ("X was Ved by Y"), but **0/40 swap the arguments**: 38/40 keep the
  ORIGINAL agent as grammatical subject, e.g. "The lawyer chased the stranger." → offset →
  "The lawyer **was chased by** the stranger." (true target: "The **stranger** was chased by the
  lawyer."). The offset encodes "add passive morphology" as a clean linear direction but cannot
  perform the who-did-what reorganization → it produces the *semantically reversed* passive.
  This is a direct, independent confirmation of the binding block's central result (014 swap-patching,
  017 role-heatmap, 019 decoder-mirror): **z has no transferable linear role-swap operator.** Voice
  scores 0.50 on "applied" (passive form present, judge lenient) but 0.29 on "preserved" (roles
  corrupted) — it is the only transform where content preservation collapses.
- **sentiment — no polarity axis.** Only 9/40 predicted decodes changed the adjective at all and
  only 3/40 reached the negative target; the offset drifts within nearby/positive lexicon
  (delicious→delightful, elegant→elusive) rather than flipping polarity. "Make it negative" is not
  a single z-direction over this vocabulary.
- **entity — not a single transformation.** With varied name pairs the averaged offset is ~null
  (off_norm 0.019, diff_align 0.12); 40/40 predicted decodes are **byte-identical to the input**.
  Substituting an arbitrary entity for another has no consistent direction — correct by construction,
  and the clean point is that "entity substitution" as a *category* is not a linear operator (a
  FIXED A→B pair would be; a generic swap is not).

### Composition works perfectly
tense∘number: predicted = decode(z_before + offset_tense + offset_number) yields the plural-past
target at **1.00 success / 1.00 preserved** (cos 0.972). Two independently-fit linear offsets
compose additively — strong evidence these are genuine commuting operators, not memorized maps.

### Symmetry (−offset undoes T)
tense / number / negation / question: symmetry_success **1.00** (the inverse offset perfectly
recovers the source). voice 0.50, sentiment 0.54, entity 0.00 — the linear operators are cleanly
invertible; the non-linear ones are not.

## Gates (all PASS)
- **G_ceiling 0.998 ≥ 0.9** — decoding the TRUE z_after realizes T for every type (stimuli+judge sound).
- **G_baseline 0.00 ≤ 0.15** — decode(z_before) never scores as T-applied (offset, not judge leniency, drives success).
- **G_parse 0/1240** — no codex parse failures.
- **Hand spot-check 15/15** predicted judgments agree with manager reading (2 sentiment "partial"
  are borderline-lenient — adjective changed but polarity not flipped; all others exact).
- **det_ok True**; norm profile flat (z_before/z_after norms ≈0.19 every type, so mean-difference offset is well-posed).

## Predictions (frozen in PREREG_LITE) → Brier 0.2544
- **(a) P=0.85 → TRUE** — 5 transforms exceed 0.6 success (tense/number/negation/question/compose).
- **(b) P=0.55 → TRUE** — mean{tense,number,negation}=0.99 ≫ mean{sentiment,entity}=0.056.
- **(c) P=0.70 → FALSE** — voice success 0.50, not < 0.4. **The miss is a threshold-calibration
  error, not a directional one:** voice IS the structural-reorg outlier I predicted, but it fails on
  *preservation* (0.29, 0/40 arg-swap), not on the "applied" metric I gated on — the offset applies
  passive morphology, so "success" reads 0.5. Had I gated on collateral preservation (<0.4) or on
  correct argument order (0/40), (c) is decisively TRUE. Lesson: for structural transforms, "applied"
  and "content-preserved" must be scored separately (they diverge only for voice).
- **(d) P=0.45 → TRUE** — compose 1.00 > 0.4 (under-confident; composition worked perfectly).

Brier driven by the (c) voice threshold miss (0.49) and (d) under-confidence (0.30).

## Interpretation
SONAR z is a **linear-operator space for morphosyntax and clause-type** (tense, number, negation,
question-formation), including additive composition and inversion — the word2vec analogy property
holds cleanly for these. It is **not** a linear space for (i) argument-role reorganization (voice:
morphology yes, binding no — reproduces the no-binding result from a fresh, generative direction),
(ii) lexical polarity (sentiment), or (iii) arbitrary entity identity. Linearity tracks how much a
transformation is a consistent *surface/grammatical* rewrite vs a *content/structural* one.

## Limitations / what did NOT run
- Templated stimuli + single embedder (SONAR) + LLM judge → NOT a claim about embedders/LLMs in
  general (see 051/052 for the cross-embedder analogue). chrF and cos are automated cross-checks that
  agree with codex throughout; codex is the headline but hand-checked 15/15.
- Sentiment vocabulary is one antonym family; a fixed-direction sentiment set (all "good"→"bad" with
  one lexical pair) might be more linear — the negative here is about the *category*, not a claim that
  no sentiment direction exists.
- entity-sub uses varied names by design; a fixed A→B pair is expected linear (untested here).
- Judge "applied" is lenient on partial passives/synonym swaps (documented; hand-check confirms the
  lenience does not change the ordering).

## Follow-up worth funding? Y (narrow)
Voice is the cleanest generative probe yet of the binding gap: fit the passive offset, apply, and
measure argument-order fidelity as a scalar. Feeds 034 (negation operator — here 1.00, causally
steerable next), 064 (translation-as-offset), 079/081 (operator composition/emergence across rungs),
080 (causal steering along these directions). The diff_align diagnostic is a cheap pre-screen for
"is transform T a linear operator" without any decoding.
