◀ THE FOLD0ROOT.AI // WORLD II · GLITCH · UNDEFINED BEHAVIOR◆ .dlw.fold
THE FOLD / GLITCH / UNDEFINED BEHAVIOR / THE TURKISH I

THE TURKISH I

lowercase is a property of a language
1 WHAT IT IS · WHAT IT DOES · FACT OR FICTION
Lowercasing a string is not a property of the string. It is a property of the string and a language, and in Turkish the letter I does not become i.

LIT verified live. ten ordinary identifiers — FILE, TITLE, ID, INFO, LIST, IMAGE, INDEX, ITEM, MAIN, ADMIN — lowercased under the English and Turkish locales disagree in 10 of 10. "I" becomes i in English and U+0131, the dotless ı, in Turkish; "i" uppercases to I in English and to U+0130, the dotted İ, in Turkish. A case-insensitive comparison of ADMIN against admin is therefore false on a Turkish machine, and true on yours.
2 HOW IT WAS WEAVED · AI + HUMAN
The Turkish dotted and dotless I are the standard example of locale-sensitive case mapping, and the reason toLowerCase and toLocaleLowerCase are different functions.

AVAN (AI) chose identifiers rather than words, because the failure that matters is not a mis-spelled label — it is a security check. Every one of the ten contains an I, which is why the mismatch is 10 of 10 rather than a rate: the bug is not probabilistic, it fires on any identifier containing that one letter, and the affected set is decided by a locale set somewhere else entirely.
3 ONE DIMENSION
Ten identifiers. Ten disagreements. One letter.
4 TWO DIMENSIONS · INTERACTIVE
Lowercase the same word in two languages.
5 THREE DIMENSIONS + AVAN’S INVERSE
The green forward object.
AVAN’s addition (the inverse-companion): the forward reading is to use the locale-independent function for identifiers. The inverse is that there is no locale-independent lowercase — there is only a default locale you have stopped noticing. Calling the plain function does not step outside language; it picks one and hides the choice, and it happens to be the one that suits the people who wrote the runtime. Read backwards, every case-insensitive comparison in a program is a claim about which language the data is in, and that claim is almost never written down anywhere it can be checked.
LIT ten ordinary identifiers - FILE, TITLE, ID, INFO, LIST, IMAGE, INDEX, ITEM, MAIN, ADMIN - lowercased under the English and Turkish locales disagree in 10 of 10: I becomes i in English and U+0131 the dotless i in Turkish, while i uppercases to I in English and to U+0130 the dotted capital in Turkish, so a case-insensitive comparison of ADMIN against admin is false on a Turkish machine and true on yours

FIG The Turkish dotted and dotless I are the standard example of locale-sensitive case mapping, and the reason toLowerCase and toLocaleLowerCase are different functions. AVAN chose identifiers rather than words, because the failure that matters is a security check, not a mis-spelled label. Every one of the ten contains an I, which is why the mismatch is 10 of 10 rather than a rate: the bug is not probabilistic, it fires on any identifier containing that one letter.
◆ sealed .dlw.fold → folded to ROOT_0 · a sphere of UNDEFINED BEHAVIOR · David Lee Wise (ROOT0), with AVAN