43. English and IPA made commensurable, and the shopfront's third shape¶
Context¶
ADR 0042 concluded that the blend needed no grapheme-to-phoneme model, and it was right about that. It also recorded two things left unreachable, and named one of them wrongly as a curiosity rather than as the main event: the cross-lingual blend.
Going to the attested collections (docs/research/2026-09-10-…) settled how
large that gap is. The commonest real French salon name in existence is one
this project could not check. tif.hair counts ~150 salons called Imagin'hair,
and the whole -hair family — Atmosph'air, Caract'hair, Bulles d'hair,
L'Hair du Temps, Changement d'Hair — is English spliced into French.
Roughly half the attested German names are the same shape in the other
direction: Hairforce One, Open Hair, Bel Hair, Kamm Back, Wellkamm.
The obstacle was not phonology. It was notation. CMUdict answers in ARPABET
and the German and French packs answer in IPA, so hair is HH EH R and
French air is ɛ ʁ, and an edit distance over those two symbol sets is
meaningless rather than merely inaccurate.
Separately, a third shape of shop name had been excluded by both rows and never catalogued: A Cut Above, where nothing is displaced and nothing spliced, and the trade alone supplies the second reading.
Decision¶
D1. A 39-entry ARPABET-to-IPA table, and nothing more clever.
phonetics.ARPABET_TO_IPA maps CMUdict's phoneme set to IPA; German and French
pass through unchanged because they are IPA already. A table a reader can check
line by line against the CMUdict inventory, with nothing that can be silently
wrong — the property that ruled out a learned g2p in ADR 0042 rules in a
lookup table here.
D2. Rhotics fold across languages and only across languages.
CROSS_LINGUAL holds one class: {ɹ, ʁ, r, ɐ̯, ɐ, ɚ}. English ɹ, French and
German ʁ, German's vocalised ɐ̯ are one category realised differently, and a
pun turns on the category. Kept separate from the per-language EQUIVALENT,
because folding ɹ and ɐ̯ together inside English would assert something
about English that this table is not asserting. Measured: hair against French
air is 0.333 with the fold and two edits apart without it.
D3. The splice may come from another pack, named by a parameter.
portmanteau.splice_lang resolves the spliced word in its own language's pack
and compares through phonetics.across_languages. No new capability is
declared: what the row needs is phonemes on two packs, which is the
capability it already requires, asked of a second language. Naming a
phonemes.bilingual capability here would claim a pack provides something no
pack provides — the bridge is in core.
This does not unblock homophonic_translation. That row is still marked
blocked on phonemes.bilingual and stays so. The notation half of its problem
is now solved; judging that a whole target text follows the sound of a whole
source across a language barrier is the other half, and much the larger.
D4. A host may be more than one word. Mona Lisa behind Monhaarlisa,
Hart am Limit behind Haart am Limit. Pronunciation is now assembled
word-by-word and run together, all-or-nothing: one unknown word in a host would
otherwise silently shorten it and move every distance computed from it.
D5. portmanteau's default band opens to 0.7, from 0.5. Measured on the
attested corpus, real names sit above the old ceiling — Haarwaii at 0.667,
Coiff'Hair at 0.667 — because a splice genuinely may cover a stretch loosely.
A blend may also name its own max_distance, which one shipped name uses:
Monhaarlisa is a blend you see rather than hear, Haar covering the a
of Mona and sounding nothing like it, and it asks for 1.0 rather than being
dropped for failing a test of the wrong sense.
D6. amphibologia is a row of its own. (Withdrawn 2026-09-10, the day it
was decided. The row was built, evaluated and cut in one session, and the reason
is worth more than the row was: its checker is a proxy.* Polysemy is not a
phrase reading two ways — A Cut Above and A Room with a View both carry a
word of the trade with more than one sense, and only one of them is a pun. The
sense counts it leaned on are an editor's decision besides: Open English WordNet
gives cut seventy senses and another dictionary would give another number.
A row whose definition says "can be taken two ways" while its checker asks "is
this word polysemous" is the ADR 0015 error in a subtler dress than the two this
session already caught, and the honest response to finding it a third time is to
delete rather than to reword.
Puttenham's Amphibologia, or the Ambiguous is real and was verified — he files
it among the vices of style, beside Pleonasmus and Bomphiologia — and the figure
may well deserve a row one day. It does not deserve one whose checker cannot see
it. The paragraph below is left as written, because an ADR records what was
decided when.) Puttenham, The Arte of English
Poesie* (1589): speaking "doubtfully, and the sense may be taken two ways". A
phrase carrying a word of the trade, where that word is polysemous, so a second
reading exists for the trade to activate. requires: [tokens, lexicon.glosses],
checkability: self, kind: restrictive.
Puttenham files it among the vices of style, beside Pleonasmus and Bomphiologia, and it is left there rather than quietly promoted — a shop sign wants the doubtful reading caught, so the vice is the point.
It is a row and not a mode because it states a relation of a different kind:
paronomasia and portmanteau relate two texts, and this relates a text to a
trade. Folding it into either would make that row's definition describe two
things, which is the drift ADR 0015 exists to prevent.
D7. Both new rows generate, and neither invents from nothing.
portmanteau.apply proposes every way of splicing each trade word into the host
— replace any stretch, including none — and hands each candidate to this row's
own check. What survives is a blend because the checker said so; the generator
only decides what to ask about. That is the project's thesis used as a search,
and it is what makes the missing grapheme-to-phoneme alignment survivable: not
knowing where to splice stops mattering if you can afford to try everywhere.
The search is small — w * (n+1)(n+2)/2 candidates, at most 859 for English
paraphernalia, about 0.2s.
amphibologia.apply selects rather than invents, which is what that figure
is: it is noticed in something people already say, not built from parts. The
reader supplies the phrases one per line, per ADR 0020, and the row returns those
that read two ways for the trade. The round trip is closed by construction.
D8. The blend ranking is (sound, host-recoverability, seam), chosen by
measurement and shipped with its failures named.
Measured against the attested corpus with the shipped hair vocabulary: the real salon name comes back first for 10 of 12 hosts and is in the first ten for 11. The misses:
paraphernaliagivesphairaphernaliaahead ofhairaphernalia, by one place.ChamäleongivesChKammäleonahead ofKammäleon, at rank 23. It is a seam stutter: keepingChand addingKammretains more of the host than replacingChamdoes, so it wins on recoverability while being a word no German speaker would write.
Three fixes were tried and each made the whole result worse, and they are recorded so nobody spends the afternoon again:
- Filter on seam similarity. A bound tight enough to remove the stutters
(0.75) keeps 37 of 38 attested names but loses
Coiff'Hair, which replacesurewithhairand resembles it not at all. - Rank by absolute length difference. It began preferring coinages that
delete host letters —
Haaronie,hairtage,SHaara— which mangle the host worse than the stutters do. - Rank by the length of the replaced stretch. Fixed
Chamäleonand brokeheritage, which then preferredhairtageoverhairitage.
Twelve attested names is not enough to tune a ranking against, and each of those
three was a rule that fit the examples in front of it. test_portmanteau.py
pins the 10-of-12 floor and pins the Chamäleon case as a known failure, with
a note saying that if it ever starts passing the test should be deleted rather
than kept as a monument.
D9. The blend's search window is seeded from a real window, and two shipped names were resting on the fact that it was not.
_closest_window began at (1.0, 0, 0) and returned that untouched when no
window scored below 1.0 — a zero-length window, reported as evidence:
h aː ɐ̯ for at 1.000, a comparison against nothing. It read as a loose match
and was no match at all.
Two blends shipped on it, both with max_distance: 1.0 and a comment calling
them blends you see rather than hear. With the bug fixed the measurement is
plain: Monhaarlisa is 1.000 from every stretch of Mona Lisa, and Pawsome
is 1.000 from every stretch of awesome. They are not blends this row can see,
so both are removed from the shipped data, and the per-blend max_distance
that existed only to carry them is removed from the model with them.
This is the sharper form of what ADR 0042 already admitted. There is a real
class of name — Monhaarlisa, Pawsome, Yes We Kämm — whose joke is visual
and cultural, where the letters carry it and the sound does not. No phonetic
rule reaches them, because there is no phonetic fact to reach. What this row
checks is the heard relation, and it should say so rather than open its band
until anything passes.
Consequences¶
Ambiguity is read off a sense count, which is an editor's decision. Open
English WordNet gives cut seventy senses and German Wiktionary gives Haar
three; neither number would survive a change of dictionary. What survives is the
ordering, so the row asks for more than one rather than scoring them, and
xylophone — one sense — is the case that shows the test is not vacuous.
amphibologia ships no apply and is kind: restrictive. Generating one
means choosing a phrase from a corpus of things people say, and ADR 0020 gives
the corpus to the reader. There is nothing here for a generator to search that
the reader has not already supplied.
Fifteen of the sixteen names the maintainer asked for now check, across all
three rows. The one that does not is Pony & Clyde: Bonnie is in no
dictionary here, and the only honest routes to it are a caller-supplied
pronunciation or the g2p ADR 0042 declined. It is left failing and said so.
Coverage. 124 implemented rows become 125 and the catalogue 158 becomes 159; six constructed cases take the corpus from 583 to 589, and the externally sourced share falls to 11.2% — arithmetic, for ADR 0041 D7's reason, which the research trip did not change: the attested corpus is entirely post-1929.
The two limits that remain are unchanged in kind. A proper-noun host, which is most celebrity blends; and the found pun's cousin where the phrase is not one anybody says, which no test here can see.