THE FOLD / GLITCH / HEISENBUG / THE NORMALIZATION FORM
THE NORMALIZATION FORM
the same glyphs, and not equal
1 WHAT IT IS · WHAT IT DOES · FACT OR FICTION
Two strings, the same glyphs on screen, pixel for pixel. One holds a single code point; the other holds a letter followed by an instruction to put an accent on it. They are not equal, and no amount of looking will tell you which is which.
LIT verified live. over the Latin-1 and Latin Extended-A blocks, 161 characters have a distinct decomposed form. All 161 get longer when decomposed, 0 of the 161 compare equal to their own decomposition, and all 161 compare equal after normalising. The letter é is 1 code unit composed and 2 decomposed, renders identically either way, and
LIT verified live. over the Latin-1 and Latin Extended-A blocks, 161 characters have a distinct decomposed form. All 161 get longer when decomposed, 0 of the 161 compare equal to their own decomposition, and all 161 compare equal after normalising. The letter é is 1 code unit composed and 2 decomposed, renders identically either way, and
=== answers false.2 HOW IT WAS WEAVED · AI + HUMAN
Unicode normalization (UAX #15) and the four forms NFC, NFD, NFKC, NFKD are the standard; the composed/decomposed split exists because Unicode had to round-trip with legacy encodings that made both choices.
AVAN (AI) swept the block rather than showing the one famous example, because the 0 is the number that matters: not one of the 161 accidentally compares equal. This is not a rare collision to guard against, it is a total failure of equality across the whole class, and it is invisible on screen by design — the two forms are required to render the same.
AVAN (AI) swept the block rather than showing the one famous example, because the 0 is the number that matters: not one of the 161 accidentally compares equal. This is not a rare collision to guard against, it is a total failure of equality across the whole class, and it is invisible on screen by design — the two forms are required to render the same.
3 ONE DIMENSION
161 characters. 161 failures. 0 visible differences.
4 TWO DIMENSIONS · INTERACTIVE
Compose and decompose the same letter and compare.
5 THREE DIMENSIONS + AVAN’S INVERSE
The green forward object.
AVAN’s addition (the inverse-companion): the forward reading is that you should normalise before comparing. The inverse is that equality of text is a choice, not a fact. There is no true answer to whether é equals é — byte equality says no, canonical equivalence says yes, and case-insensitive compatibility says yes to things that do not even look alike. Read backwards, every string comparison in every program has silently picked one of these and called it the comparison, and the bug is not choosing wrong but never noticing there was a choice.
LIT over the Latin-1 and Latin Extended-A blocks 161 characters have a distinct decomposed form, and all 161 get longer when decomposed, 0 of the 161 compare equal to their own decomposition, and all 161 compare equal after normalising; the letter e-acute is 1 code unit composed and 2 decomposed, renders identically either way, and === answers false
FIG Unicode normalization (UAX #15) and the forms NFC, NFD, NFKC, NFKD are the standard; the composed/decomposed split exists because Unicode had to round-trip with legacy encodings that made both choices. AVAN swept the block rather than showing the one famous example, because the 0 is the number that matters: not one of the 161 accidentally compares equal. This is not a rare collision, it is a total failure of equality across the whole class, and it is invisible by design - the two forms are REQUIRED to render the same.
FIG Unicode normalization (UAX #15) and the forms NFC, NFD, NFKC, NFKD are the standard; the composed/decomposed split exists because Unicode had to round-trip with legacy encodings that made both choices. AVAN swept the block rather than showing the one famous example, because the 0 is the number that matters: not one of the 161 accidentally compares equal. This is not a rare collision, it is a total failure of equality across the whole class, and it is invisible by design - the two forms are REQUIRED to render the same.
◆ sealed .dlw.fold → folded to ROOT_0 · a sphere of HEISENBUG · David Lee Wise (ROOT0), with AVAN