Chromatic Coherence
Dark Math · Release 018

The Language-Distance Ruler

Currier A and B are the Voynich manuscript's two dialects — but is the split a change of language, or the same engine drifting? We built a ruler: a same-engine floor at zero, real language changes at the far end, and measured where A|B falls. It's a real structural seam (0.273 bits/char) — but only 31% of the way to the nearest real language boundary, about 3.2x too small to be a language. An independent blind 10-model panel, control-gated, agrees 6-0 (six of the ten cleared the gate). The seam is measured; what the system is stays unread.

The Observer's Index Lab
dark-mathvoynichlinguisticsmethodology

Release 016 found the Voynich splits into two dialects— Currier A and Currier B, straight from the transliteration’s own metadata. 017 built a meaning-free machine that fakes the whole manuscript from three letters of memory. This one asks the question those two left open: the A→B shift is real — but is it a change of language, or the same engine drifting? A raw distance between them means nothing on its own, so we don’t report one. We build a ruler.

Where we land:held open. The A-to-B seam is real but only about a third of the way to the nearest language boundary we measured — far smaller than any language gap on our ruler; a blind, control-gated 10-model panel (LLMs, not independent of shared training) agrees — the six that cleared the gate, six to nil. Measured seam, unread system.

1 · A ruler, not a number

One instrument, three kinds of mark, all measured in the same unit — D, the extra bits per letter a foreign character-model pays over the nativeone (own-code interpolated add-α n-gram, every model capped to the same word budget so nothing looks closer just from more data):

  • The floor— split Currier A into two halves, Currier B into two halves, and the meaning-free babble engine into two batches. These are one engine, two samples. They should read zero. Reported first, free-to-fail.
  • The rungs— every pair among English, Latin, German, French. These are genuine language changes, close (same family) to far (cross family). This is what a real language boundary costs.
  • The measurement— Currier A | B. Where does it fall between the two?
A number line: Currier A|B sits far below every real language change and just above the same-engine floor
Computed own-code (order-2, R=10 seeds, mean). The floor sits on zero (0.00). Every real language change is far to the right — the nearest, French | Latin, costs 0.86. Currier A | B lands at 0.273: clear of the floor, but only 31% of the way to the closest language boundary — about 3.2× short of it.

2 · What the ruler reads

Two facts, earned and marked. One: A and B are notthe same sample — at 0.273bits/char they sit far above the same-engine floor, so the A→B shift is a genuine structural change, not noise. Two: that change is far smaller than any language gap we measured.The closest pair of real languages we could find — French | Latin, which already share an alphabet and a deep common root — still costs 3.2× more. A and B are nowhere near that far apart.

And it holds when we deepen the instrument — raising the model from 2 letters of context to 3 pushes every distance up, but A | B stays low in the gap:

instrumentCurrier A|Bnearest language% into the gap
order-20.2730.86331%
order-30.3181.27025%

The read is the same both ways: whatever separates Currier A from Currier B, it is dialect-distance, not language-distance— one generative system re-tuned between scribes or sections, not two different tongues sharing a script.

3 · A second light

The ruler is the machine light. For a different kind of light we ran a blind cross-model panel— ten non-Anthropic models (OpenAI, Google, Meta, Mistral, DeepSeek, xAI, Alibaba) via the Vercel AI Gateway, each shown the same transliterated word-samples, pair order shuffled, the real question hidden among controls. Own-code (grade_gateway.py), and hard-gated: a model’s call on Currier A | B counts only if it first separates the controls — the same-split pair as one system, the two known language pairs as two. The gate did real work, discarding four models that failed in both directions (two over-split the same-system control; two called genuine languages one system). Of the six that got every control right, all six independently called Currier A | B ONE system re-tuned — six to zero, the same direction the ruler points. Two lights, two kinds, one read.

HELD — the seam is real; it is not a language wall

Verdict

Measured own-code on a floor-to-language ruler, the Currier A→B shift is a genuine structural change (0.273 bits/char, far above the same-engine floor of 0.00) but sits only 31%of the way to the nearest real language boundary — 3.2× too small to be a change of language. So the ruler discriminates: it rules out “identical” and it rules out “two languages,” landing the seam on one system, re-tuned— and a 10-model panel (LLMs, so not independent of shared training or prior Voynich scholarship), blind and control-gated, agrees 6–0. The ruler is calibrated only on between-language European pairs — it carries no within-language dialect rung — so “dialect, not language” is read by elimination, not direct calibration. We still don’t crown what that system is— the dark stays unread — but its famous internal border is now measured, and it reads as a dialect seam rather than a language wall.

Why our math sees more

Because it refuses to read a distance in a vacuum. “Currier A and B differ” is true and empty; the whole question is differ by how much, next to what.So we built the scale before we took the reading — a same-engine floor that must land on zero, real language changes for the far end — and let the measurement fall where it falls, in public, on an instrument that could have put A | B out with the languages and didn’t. That is the method: measure the dark against marks you laid down first, and read only what the ruler can hold.

Sources & method

instrument —own-code interpolated add-α character n-gram (ruler.py), orders 0..k mixed, symmetric cross-penalty D in bits/char; common budget 4000 train / 1000 test words per model; R=10 seeds, mean ± SD. Reported order-2 headline, order-3 robustness. Stdlib only.

corpora —Voynich: ZL transliteration (Zandbergen–Landini, EVA 2.0, voynich.nu), Currier A ~10.9k / B ~23.2k clean tokens. Languages: Project Gutenberg (Austen, Caesar, plus German & French plain texts), same own-code pipeline. Floor engine: the 017 babble Markov. Companions: Release 016 (structural pass) · 017 (the babble engine).

the third light — blind cross-model panel via the Vercel AI Gateway (grade_gateway.py, own-code, transliterated, control-gated), run 2026-07-07: 10 non-Anthropic models, 6 cleared the control gate, 6–0 for one system re-tuned. Independent corroboration; the ruler is the machine light and stands on its own.

method  lay the scale before the reading · floor must land on zero · languages set the far end · read only what the ruler holds

ethos  grade the held structure, not the collapsed answer · measure the dark against marks laid down first · no god number, a god hold

Dark Math  The Observer’s Index — dark = the consistent, light = the medium of observation. The unread · arc 1 · the language-distance ruler.