Восемь кодовых слов Хэмминга – хороший код, поскольку ни один блок из семи бит не находится на расстоянии Хэмминга между двумя кодовыми словами, равному 1. Если бы это было так, два кодовых слова были бы на расстоянии Хэмминга 2 друг от друга. Но вы можете проверить это сами – и увидите, что нет таких двух кодовых слов, которые отличались бы на две позиции; на самом деле расстояние Хэмминга между любыми двумя кодовыми словами равно 4. Вы можете провести аналогию между этими кодовыми словами и электронами в коробке или необщительными людьми в кабине лифта. Они находятся в ограниченном пространстве и в пределах этих ограничений пытаются расположиться как можно дальше друг от друга.
Этот же принцип лежит в основе всех возможных каналов коммуникации, устойчивых к помехам. Именно так устроен естественный язык: если я напишу lanvuage вместо language («язык»), вы поймете, что я имел в виду, поскольку в английском языке это единственное слово, которое можно получить посредством замены одной буквы в слове lanvuage. Безусловно, данный принцип не сработает при употреблении односложных слов: dog, cog, bog и log – каждое из этих слов имеет свое значение в английском языке, но всплеск шума, заглушающий первую фонему, не позволит распознать, что именно имелось в виду. Однако даже в таком случае можно использовать семантическое расстояние между словами, чтобы исправить ошибки. Если вас что-то укусило, значит, это dog («собака»); если вы с чего-то упали, то это log («бревно») и так далее.
Язык можно сделать более эффективным, но при этом возникает тот же негативный побочный эффект, с которым столкнулся Шеннон. В свое время многие люди, и упертые зануды и те, кто обладал математическими наклонностями, потратили массу усилий на создание языков, которые обеспечили бы компактную и точную передачу информации без всякой избыточности, синонимии и двусмысленности – всего того, чем грешат такие языки, как английский. Священник Эдвард Пауэлл Фостер создал в 1906 году искусственный язык Ро, с тем чтобы заменить дебри английского словаря лексиконом, в котором значение каждого слова можно было логически вывести из его звучания. Пожалуй, нет ничего удивительного в том, что среди горячих приверженцев языка Ро был Мелвилл Дьюи, который создал десятичную систему классификации, обеспечивающую расположение книг на полках библиотек в строгом порядке. Лаконичность языка Ро действительно заслуживает восхищения. Многие длинные английские слова, такие как ingredient, на языке Ро становятся гораздо короче – просто cegab. Однако подобная лаконичность имеет свою цену: она сопровождается потерей возможности исправлять ошибки, присутствующей в английском языке как встроенная функция. Это как маленькая, заполненная до отказа кабинка лифта, в которой у пассажиров нет дополнительного личного пространства. Другими словами, каждое слово на языке Ро очень похоже на многие другие слова, что создает возможности для путаницы. Например, на языке Ро «цвет» – это bofab. Но если вы измените всего одну букву, получаются следующие слова: «звук» – bogab; «электричество» – bokab; bolab – «вкус». Более того, в логической структуре языка Ро слова с похожим звучанием имеют похожее значение. Это обстоятельство еще больше усугубляет ситуацию, поскольку не позволяет по контексту понять, что происходит. Слова bofoc, bofof, bofog и bofol означают «красный», «желтый», «зеленый» и «голубой» соответственно. Концептуальное сходство звучания слов имеет свой смысл, но именно это затрудняет разговор, например, о том же цвете на той же людной вечеринке: «Простите, вы сказали “bofoc” или “bofog”?»
Впрочем, некоторые современные искусственные языки устроены иначе: в них используют принципы, сформулированные Хэммингом и Шенноном. Один из самых успешных примеров такого подхода – язык ложбан; в нем действует строгое правило, согласно которому два базовых корня (ginsu) не могут быть фонетически близкими.
Представление Хэмминга о расстоянии соответствует философии Фано: величина, которая крякает как расстояние, имеет право на то, чтобы вести себя как расстояние. Но нужно ли останавливаться на этом? Множество точек, расположенных от заданной центральной точки на расстоянии, меньшем или равном 1, имеет в евклидовой геометрии свое название: круг, или, в большей размерности, сфера. Таким образом, мы должны обозначить множество строк, расстояние Хэмминга которых от кодового слова не больше 1, термином «сфера Хэмминга», в центре которой находится кодовое слово. Для того чтобы код был кодом с исправлением ошибок, ни одна строка (ни одна точка, если серьезно относиться к этой аналогии) не может находиться на расстоянии 1 от двух разных кодовых слов; другими словами, требуется, чтобы две сферы Хэмминга с соответствующими кодовыми словами в центре не имели общих точек.
Таким образом, задача конструирования кодов с исправлением ошибок имеет такую же структуру, что и классическая геометрическая задача про упаковку сфер: каким образом разместить множество сфер одинакового размера в небольшом пространстве как можно плотнее, при условии что любые две сферы никогда не пересекутся? Проще говоря, сколько апельсинов можно уложить в ящик?
Задача упаковки сфер гораздо старше кодов с исправлением ошибок; этой проблемой занимался в свое время астроном Иоганн Кеплер, в 1611 году написавший на латинском языке трактат Strena, seu de nive sexangula («Новогодний подарок, или О шестиугольных снежинках»). Название довольно причудливое, но Кеплер на самом деле обращается к общим вопросам происхождения естественных форм. Почему снежинки и пчелиные соты образуют шестиугольники, тогда как семенная камера яблока состоит из пяти частей? Почему зерна граната имеют, как правило, двенадцать плоских сторон? Кстати последний вопрос имеет самое непосредственное отношение к нашей современной жизни.