О тонкостях литературного английского. В известном произведении The Hitchhiker’s Guide to the Galaxy (“Путеводитель хичхайкера по Галактике”/”Автостопом по Галактике”) Дуглас Адамс, описывая в одной из глав свершения смелых космических первопроходцев, использует следующую фразу (выделена пожирнением):

And all dared to brave unknown terrors, to do mighty deeds, to boldly split infinitives that no man had split before – and thus was the Empire forged.

Неплохой образец английского литературного юмора. Проблема, как обычно, в том, что перевести невозможно. Да, тут, на первый взгляд, представлены лишь самые доступные языковые конструкции и нет “сложных слов”. Однако перевести эту фразу на русский, даже с близким сохранением смысла, не получится. Объяснить – можно. Я попробую сделать это ниже. (Занятно, что даже и при чтении на языке оригинала нужны дополнительные данные для построения контекста, раскрывающего смысл.)

Причин этому две, и обе – чисто языковые: во-первых, во фразе заложена юмористическая аллюзия на литературный элемент поп-культуры, отсутствующий в русском языковом пространстве (см. ниже); во-вторых, фраза специально содержит спорную грамматическую конструкцию, которая возможна только в английском языке, и при этом прямо отсылает к самому предмету спора, возникающего вокруг этой грамматической конструкции. В общем, закручено и накручено.

Дословный перевод выделенного фрагмента, но с учётом общего контекста в оригинале: “смело разделять инфинитивы, которые никто не разделял прежде” – но эта фраза на русском выглядит странной и пустой. Так и должно быть, а детали придётся разбирать отдельно.

Прежде всего – “to boldly split”. Это явление, которое в английском языкознании называется split infinitive – “расщеплённый” инфинитив (можно обозначать и другими русскоязычными терминами, но здесь будет “расщеплённый”). Инфинитив – infinitive – это неопределённая форма глагола: “знать”, “читать”, “писать”. В английском языке инфинитив записывается (но не образуется, заметьте) при помощи to – примеры: to know, to write, to read. Расщепление – это практика внедрения между to и “глаголом инфинитива” одного или нескольких дополнительных слов; обычно, внедряется наречие, как и в нашем случае: to boldly split. И этот грамматический процесс относится к одному из самых спорных моментов. Причём споры, с викторианских времён, идут среди образованных носителей английского. Многие и сейчас считают такое расщепление недопустимым нарушением грамматического строя, речевой ошибкой. Но это, ещё раз, мнение спорное.

To boldly split – нетрудно перевести как “смело (или отважно) разделять”. Проблема в слове boldly. Строгие варианты такие: “boldly to split” или “to split boldly”. Но ни один, ни другой – не выглядят смешно. Прежде всего потому, что сама эта фраза – прямая отсылка к оригинальному сериалу Star Trek. Фраза-заставка к эпизодам этого классического сериала известна как “Where no man has gone before”, и используется постоянно. Этим словам, в оригинальном тексте вступления, предшествует не менее знаменитое (но уже в узких кругах) “To boldly go”.

Расщепление полностью, в версии Star Trek, будет таким: “To boldly go where no man has gone before!” – “Смело идти туда, где не ступала нога человека!”. Заметили тот самый расщеплённый инфинитив? To boldly go. Это и есть предмет аллюзии: грамматически спорная конструкция о том же boldly, расщепляющем инфинитив (многие литераторы и филологи, – особенно, в 60-х годах 20 века, – скажут, что это не “спорная”, а точно грамматически неверная конструкция).

“Путеводитель” – комическая космическая повесть. Star Trek – космический сериал, с понятной каждому английскому грамматическому пуристу речевой ошибкой в тексте вступления, зачитываемого в начале каждой серии. Думаю, теперь первый юмористический момент, – про “расщепление инфнитивов” в Star Trek, – понятен. Передать его на русском не получится, ввиду отсутствия соответствующего культурного феномена – вступления к сериям Star Trek 60-х годов.

Сама же идея о недопустимости “расщепления инфинитива” в английском, похоже, идёт из попытки насаждения языковых реалий из латыни – это было довольно популярным действием среди пуристов в викторианский период (вторая половина 19 века, в основном). Но, в латыни, понятно, расщеплять инфинитив невозможно (как и в русском) – просто потому, что в латыни для этого нет подходящего “to” (его и в английском, на самом деле, нет, но это другая история). В начале 21 века расщепление инфинитива в английском начали, под давлением языковых реалий, официально признавать допустимым.

В оксфордском словаре Фаулера (H. W. Fowler, A Dictionary of Modern English Usage, изд. 1965) есть замечательный пример фразы, в которой попытка избежать расщепления инфинитива приводит к плачевным последствиям:

The greatest difficulty about assessing the economic achievements of the Soviet Union is that its spokesmen try absurdly to exaggerate them; in consequence the visitor may tend badly to underrate them.

То есть, экономические достижения Советского Союза – “его представители абсурдно пытаются преувеличивать”, а посещающие СССР, в результате, “сильно/грубо недооценивают их”. Здесь наречия (“абсурдно”, “сильно” или “грубо”) оказываются прицеплены не к тем глаголам, что звучит несколько странно. И странность звучания помогает понять второй аспект юмора “расщепляющихся инфинитивов” в первоначальной цитате из The Hitchhiker’s Guide to the Galaxy, который в русском переводе тоже передать невозможно, по причине отсутствия в русских инфинитивах расщепимости.

(На День Космонавтики эту записку выпустить не успел – что-то завозился, – но, думаю, ещё не поздно: да и не откладывать же на следующий год, верно? С прошедшим Днём Космонавтики!)



Комментировать »

Открытый серверный ключ TLS, который указан в TLS-сертификате, на dxdt.blog начинается с подстроки DEADC0DE (в шестнадцатеричной записи, см. скриншот ниже).

Screenshot

Да, тут присутствует ещё и байт со значением 04 в самом начале, но он не имеет отношения непосредственно к ключу – это лишь указание на формат представления. 04 обозначает несжатую форму записи, когда прямо указываются две координаты точки ключа. Поэтому 04 можно отбросить. Такое значение ключа я использовал специально (это то, что называется vanity keys).

Как это значение получено? Оно получено перебором, конечно. Это не очень сложно сделать. Открытый ключ ECDSA – это точка на кривой. Точке соответствуют две координаты, одна из них (обычно, обозначают X), записывается слева. Поэтому в начале записи ключа будут идти старшие байты X-координаты. Остаётся подобрать такой секретный ключ, который даст открытый с нужной X-координатой. Секретный ключ – это натуральное число, больше двух и меньше порядка группы точек кривой (обычно, меньше тоже на два, но это детали). Нужно перебирать секретные ключи и проверять значение начальных байтов X-координаты открытого на соответствие заданной маске.

Открытый ключ – это точка-генератор G из параметров кривой, умноженная на значение секретного ключа d: [d]G. Я, используя готовую библиотеку из дистрибутива языка Go, написал быструю программу умножения на P-256 (кривая, которая используется здесь в ECDSA). Программа перебирает секретные ключи и делает это параллельно, во много потоков. Соответственно, даже на старом 16-потоковом процессоре AMD Ryzen 7, подбор ключа занял всего несколько часов. В результате подбора я получил нужный секретный ключ, который экспортировал для генерирования CSR (запрос на выпуск сертификата) и штатным способом использую при заказе TLS-сертификатов.

Вообще, для P-256 можно придумать немало открытых ключей, запись которых, в X-координате, выглядит ещё более необычно. Например:

0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBA
- цифры A и немного B,
0x1000000000000000000000000000000000000000000000000000000000000001
- единицы и нули,
0x5000000000000000000000000000000000000000000000000000000000055555
- пятёрки и нули,
0x7777777777777777777777777777777177777777777777777777777777777777
- семёрки с "неожиданной" единицей,
0x8888888888888888888888888888881888888888888888888888888888888888
- восьмёрки, но тоже с единицей.

Точки с такими X-координатами лежат на кривой P-256. Определить для них Y-координату – не представляет вычислительной проблемы. Более того, ввиду свойств данной кривой – все эти точки, действительно, являются открытыми ключами. Тут есть лишь одна проблема: по открытому ключу очень сложно, а на практике – невозможно, вычислить секретный ключ; потому что это и есть основная задача, обеспечивающая стойкость ECDSA. Конечно, подходящий секретный ключ можно угадать. В том числе, в результате перебора. Вот только перебрать даже половину от, примерно, 2^256 – нереально. Ну и записать подходящий секретный ключ просто по наитию, как поступил бы борелевский шаман, пока что тоже не вышло. Так что придётся, до поры до времени, обойтись без забавных записей, ограничившись hexspeak-вариантом с DEADC0DE. Но как только и если появится квантовый компьютер подходящей разрядности, тогда можно будет секретные ключи подобрать очень быстро.



Комментарии (2) »

В продолжение недавней темы про формирование телевизионного сигнала при помощи меандра (сигнала прямоугольной формы). Исходный импульсный сигнал генерируется микроконтроллером на частоте, значительно меньше той, на которую настроен целевой ТВ-приёмник. Однако полезный сигнал приёмник всё равно принимает – потому что на более высоких частотах приёма действуют побочные гармоники. В статье с описанием проекта приводится следующий пример: побочная гармоника, связанная с сигналом прямоугольной формы на частоте 6 МГц, может приниматься на частоте 198 МГц (это 33-я гармоника).

Известно, что прямоугольный периодический сигнал, если его записывать в терминах преобразования Фурье, раскладывается в сумму “чистых гармоник”, где частота каждой следующей кратна основной, причём, это нечётная кратность.

И вот с этим процессом отображения связано одно из самых расхожих заблуждений: мол, гармоники из записи преобразования Фурье и составляют исходный сигнал. Модель записи – переносится на моделируемый феномен. Это примерно то же самое, как если бы кто-то сказал, что в звучании слова есть буквы “акустического” письма. Возьмём современную фонетическую письменность и слово “сигнал” – есть ли в звучании этого слова “буква” “х”? Сколько “букв” “а” в звучании слова “Москва”? Где вообще буквы на спектрограмме записи звучания слова? Риторическе вопросы, ответы на которые, к тому же, зависят от языковой геолокации говорящего. Да и букв на спектрограмме нет. Запись слова – это запись слова, а не звука. Фонетически, слово не состоит из букв. Преобразование Фурье – тоже способ записи, пусть и более точный. Однако рассказы о том, что реальные ЭМ-сигналы, буквально, состоят из гармоник, а преобразование Фурье позволяет их, эти гармоники, волшебным образом вывести, кочуют из популярной статьи в популярную.

Если посмотреть на запись прямоугольного сигнала с “разложением по частотам”, полученную при помощи преобразования Фурье, то вместо одного пика на главной, расчётной, частоте, будет видно много пиков с постепенно затухающей амплитудой, которые пики, для идеального случая, соответствуют “нечётным множителям частоты”, побочным гармоникам (то есть, для идеального меандра 1 кГц – будет 3 кГц, 5 кГц и т.д.). Здесь важно учитывать, что реальный сигнал всегда очень далёк от идеального (если говорить строго, то бесконечно далёк), поэтому могут быть видны и чётные гармоники, и всякий прочий шум в частотах, но с гораздо меньшей амплитудой, вообще говоря. Впрочем, чётность здесь не так уж важна, поскольку главный вывод такой: гармоники, действительно, хорошо видны на экране анализатора спектра с преобразованием Фурье.

Почему видны гармоники? Потому что анализатор показывает такой набор гармоник разложения Фурье, которые, при их сложении, должны дать исходный сигнал, а этот сигнал – далёк от синусоиды: прибор так устроен – он не может показывать не “в гармониках”. Так что таким способом просто нельзя увидеть ничего другого. В принципе. Это равно то же самое, как и запись слов говорящего, но текстом: одно дело – звукозапись; другое дело – буквы. Чтобы точнее передавать произношение даже придумали системы фонетической транскрипции, разной степени успешности. Но увидеть что-то кроме букв или значков фонетической транскрипции – в текстовой расшифровке нельзя. Следует ли из этого обратное, что “люди говорят буквами”? Нет, не следует. Так и утверждение, что “сигнал прямоугольной формы состоит из бесконечной суммы гармоник” – не верное. Можно записать гармоники в виде суммы, которая будет приближаться к “сигналу прямоугольной формы”, но не наоборот. Заметьте, кстати, что бесконечную сумму – записать вообще не получится.

Гармоники преобразования Фурье принято записывать “синусоидами” (или “косинусоидами” – особой разницы, для наших целей, нет). Существуют ли эти непрерывные гармоники записи в самом исходном сигнале? Ведь наш исходный сигнал – прямоугольный. То есть, – во временной области, – это просто переключение уровня: плюс/минус. Как на картинке из записки про меандр и микроконтроллер – см. ниже.

Signal graph

Здесь нет никаких “синусоид”, то есть, нет никаких дополнительных гармоник. Или они есть? Потому что, как мы только что выяснили, если такой идеальный сигнал вывести на экран того или иного анализатора спектра, использующего преобразование Фурье, то гармоники там обязательно появятся, в большом количестве. Но важно не путать модель с исходным процессом. Анализатор спектра не может дать другого изображения: прямоугольный сигнал невозможно записать при помощи одной гармоники, таких гармоник потребуется много; а для точной записи идеального прямоугольного сигнала – бесконечно много. Понятно, что никакой анализатор спектра не может ни показать, ни обработать бесконечно много гармоник, а лишь некоторую их часть. Ситуация тут схожа с записью рационального числа 1/3 в виде десятичной дроби: 0.3333[3] и так далее. Но всё равно – это только запись.

Естественно, идеальный прямоугольный сигнал в реальной схеме генератора недостижим из-за инертности процессов: идеальный сигнал должен был бы “переключиться” за нулевое время, но нулевое время нельзя измерить никакими часами, в принципе. Поэтому реальные сигналы только похожи на идеальные прямоугольные. И по этой же причине, – то есть, если отказаться от требования идеальной точности, – подходит и конечное количество гармоник для записи разложения Фурье.

Почему же тогда приёмник, настроенный на побочную гармонику, принимает сигнал, который явно генерируется вместе с прямоугольными импульсами, которые действуют на существенно более низкой частоте? Потому что переключения прямоугольного сигнала воздействуют на приёмный тракт, так или иначе. Следовательно, ЭМ-колебания – создают изменения напряжения/тока в схемах приёмника. Не важно, как там устроены фильтры и что с гетеродином. Антенна всегда принимает не гармоники, а изменения ЭМ-поля, соответственно, резкие изменения уровня, в которых сконцентрирована мощность, просачиваются через фильтры, настроенные на другие частоты. Понятно, что эффективнее всего такое просачивание изменений уровня энергии происходит на частотах, предусмотренных конструкцией приёмника – приёмник так устроен, что сопротивляется именно “шумовому” воздействию, то есть, относительно легко изменяет состояние на настроенной несущей частоте, но противодействует перетеканию энергии на других частотах: это, грубо говоря, селективность приёмника. Иначе приёмник не то что не работал бы, но вообще перестал бы быть полезным, так как начал бы произвольно шуметь (хотя, возможно, сгодился бы для генерации случайных чисел). Прямоугольный сигнал, по сравнению с чистой гармоникой, концентрирует большую мощность, которая соответствует “мгновенному” изменению уровня. Конечно, бо́льшая мощность делает возможным более “широкое” просачивание. В этом и состоит фокус, в этом и причина того, что чисто “цифровые сигналы”, при прочих равных, очень “широко шумят”.

Почему тогда “чистый” синусоидальный сигнал не порождает набора гармоник в анализаторе, отображающем преобразование Фурье? Думаю, несложно догадаться о причине: это происходит потому, что для записи чистой гармоники в терминах преобразования Фурье достаточно одной этой гармоники. Но на практике, побочные утечки, – в том числе, в “чистых гармониках”, – есть всегда, какой бы формы сигнал не генерировался: меняется лишь спектральная плотность. Это лишь подчёркивает то, что преобразование Фурье – это лишь способ записи, а не свойство исходного сигнала.



Комментировать »

Для интересующихся английским языком и математикой (при чём тут математика – будет понятно ниже): на сайте The Guardian весьма занимательная задача – нужно прочитать известные идиомы и крылатые фразы на английском, но записаны эти фразы и идиомы в виде наборов цветных прямоугольников, где размеры прямоугольника соответствуют начертанию буквы, а цвета – разные для гласных и согласных (зелёный – гласные). Например, вот так, как на картинке ниже (взято из исходной статьи).

Puzzle picture

Предложения местами сложные, однако некоторые – угадываются довольно быстро (например, первая фраза). Мне удалось прочитать все 10 (надеюсь, что правильно – ответов, на момент публикации этой записки, ещё нет), так что механизм точно работает, попробуйте.

Там есть цитаты из Шекспира, да и сами исходные тексты, конечно, характерны, так сказать, для британского “литературного бэкграунда”, но это очень интересно, поскольку на конкретном примере показывает, насколько важна графическая форма слова в записи и графические же отношения между словами – а это уже чисто математический аспект.

Казалось бы, это идеальная задача для ИИ/LLM. Современная ИИ/LLM, которая, якобы, на “уровне золотой медали Международной математической олимпиады”, должна легко такую задачу решить. Ведь эти системы “обучены” на огромном корпусе текстов, в котором упомянутые фразеологизмы встречаются постоянно (ну, как бы, “Весь мир – театр” и “Не всё то золото, что блестит” – куда же чаще?). Я, конечно, загрузил текст и картинку с задачкой в ChatGPT современной версии. Откровенно говоря, я, при всём моём скептическом отношении, думал, что хотя бы с парой фраз система справится. ChatGPT не угадало ни одной фразы. Так что задача даже лучше, чем можно подумать.



Комментарии (6) »

Уравнение Бомбелли – это кубическое уравнение x^{3}=15{x}+4. Рафаэль Бомбелли – итальянский инженер-математик 16 века. Он занимался гидротехникой. В том числе, масштабными проектами по осушению заболоченных лугов. Но в истории математики Бомбелли известен главным образом как автор трактата “Алгебра”, в котором, кроме прочего, описал объект, называемый сейчас “мнимой единицей”. Именно на примере упомянутого кубического уравнения, Бомбелли в “Алгебре” показывает, как найденные им “радикалы особого (другого) вида” можно применить для разрешения противоречий, связанных с “отрицательным числом под радикалом” в формуле Кардано.

Мы решим это знаменитое (в узких кругах) уравнение несколькими способами, выведем формулу Кардано, разберёмся, бывают ли “корни из отрицательных чисел”, поймём, откуда именно проблемные сочетания с минусом берутся в формуле Кардано, и что именно это означает, если отвлечься от бравурных заявлений вида “квадратные корни из отрицательных чисел существуют, но вам об этом не рассказывают”. А кроме того, определим, почему формула Кардано обычно бесполезна с практической точки зрения.

(Это немного дополненная версия статьи, которую я ранее опубликовал на “Хабре”.)
Читать полностью



Комментировать »

Занятный проект: формирование аналогового телевизионного сигнала непосредственно при помощи микроконтроллера. Микроконтроллер AVR128DA23. TV-сигнал возникает в качестве побочной наводки, на высших гармониках, связанных с процессом генерирования “опорных” прямоугольных импульсов. Этим TV-сигналом можно управлять через параметры “опорного”, прямоугольного, и получать чёрно-белую картинку, которую через радиоэфир принимает обычный телевизор, находящийся на некотором расстоянии от микроконтроллера. Впрочем, в исходной публикации используется не “самый обычный”, а портативный TV-приёмник Sony FD-30A Watchman, на который микроконтроллер транслирует по радио игру “Жизнь”.



Комментировать »

Когда-то, благодаря старому регистратору RU-CENTER, издавался такой замечательный, уникальный журнал – “Доменные имена”. Журнал выходил в печатном варианте, оформляли и верстали его, ни много ни мало, а в Ателье “Афиши”. У журнала был собственный заказной шрифт, особая бумага и удивительный дизайн каждого номера. А я некоторое время был главным редактором, так что хорошо помню процесс. Нынче даже и сайт журнала уничтожен (до сих пор не могу понять – почему).

Но сейчас не об этом.

Вот в 2012 году мы с Артемием Ломовым написали для этого журнала (ДИ, 2012/1(6)) занятную статью – “Сценарии конца Интернета”. Я на эту статью несколько раз уже ссылался на dxdt.ru. Интересно, что некоторые моменты из статьи стали сбываться, – частично, конечно, – прямо на следующий год после публикации. Например, сценарий про “Красную кнопку”. В статье упомянуты и “белые списки”, правда – в контексте “борьбы за копирайт”. В общем, дальше – пошло и поехало.

Там, в той статье, есть и про повреждение магистральных линий связи. Даже конкретно – подводных кабелей (не трудно было угадать, впрочем). Есть и про утрату инженерного подхода – тоже идёт процесс в этом направлении: посмотрите вокруг. В общем, много что охвачено. Но не нужно думать, что развал интернетов начался с той статьи. Вовсе нет. Я полагаю, что всё началось с желания писать слово “Интернет” со строчной буквы. Постоянно про это говорю. Не надо было так делать.

А вот чего нет в той статье, так это про сценарий с разгулом псевдо-ИИ на LLM, который мы сейчас наблюдаем. Разгул – с последующим уничтожением, как минимум, веба, путём затопления бредом, сгенерированным роботами для роботов. Ну, как – нет. Чтобы вот сказать, что прямо в точку – такого нет. А если вообще, про генераторы текста и затопление, то такое есть. Но немного в другом контексте. Цитата:

“А возможно, никакой технологической сингулярности не случится: как мы разобрались, есть угроза утраты человечеством инженерных навыков, поэтому разумные машины строить будет некому. В таком случае люди могут просто заскучать от «всех этих ваших интернетов», потерять интерес к компьютерам — и в результате мягкого глобального помешательства Сеть больше не нужна никому, сайты заброшены и не обновляются, замерз на ленте последний твит никому не известного жителя Техаса. Некоторое время разнообразные спам-боты и генераторы контента еще продолжат наполнять базы данных бессвязным текстовым бредом, предназначенным для чтения роботами поисковых машин, но потом потухнет и эта активность.

Опустевший Интернет завершил существование.”

Picture of admin

Одно печально – когда мы эту статью писали, 14 лет назад, то сложно было представить, что реализовываться будет не один какой-то сценарий, а сразу все, параллельно. Видимо, чтобы наверняка.

Как я уже выше отметил – сайт журнала, который находился в домене nic.ru, уничтожен, и довольно давно. Поэтому даже и ссылку дать не получится: бумажные номера остались, но они – без гипертекста.



Комментарии (2) »

Известная шутка гласит, что категорий людей – 10: одни уже знают двоичную систему счисления, а другие – ещё нет. Занятно, что 102 обозначает простое число – два. Это большая редкость в системах счисления, которые рутинно используются в ИТ. Понятно, что ни в восьмеричной, ни в десятичной, ни в шестнадцатеричной, 10 (как запись) не может обозначать простое число (как и всякая запись, заканчивающаяся на 0). А в двоичной – пожалуйста.

Естественно, это возможно только потому, что основание двоичной системы – простое число два. Если взять любое другое простое основание, то 10 тоже будет простым, потому что это и есть запись основания: три – по основанию 3, пять – по основанию 5, семь – 7, и так далее. Но наиболее привычны, кроме десятичной (десятеричной), это двоичная, восьмеричная и шестнадцатеричная.

Возьмём запись 11. В двоичной – это простое число три (112 = 2 + 1 = 3). В восьмеричной – девять, составное, но квадрат простого: 3^2. Та же запись 11 означает одиннадцать в десятичной, простое. Шестнадцатеричное 11 – это семнадцать, тоже простое.

Использование в этом ряду двоичной системы ограничивает доступный набор цифр: только 0 и 1. Но можно взять, например, 101 – трёхзначное:
это пять в двоичной (простое);
шестьдесят пять – в восьмеричной, составное: пять на тринадцать;
сто один – в десятичной, простое;
двести пятьдесят семь – в шестнадцатеричной, простое.

Обратите внимание, что запись чисел словами – это инвариантная, относительно системы счисления, запись.

1112 = семь (простое);
1118 = семьдесят пять (составное);
11110 = сто одиннадцать (простое);
11116 = двести семьдесят три (составное: 3*7*D).

Не забывая о том, что все простые числа, кроме числа два и числа три, имеют вид 6*n +/- 1, на трёх цифрах можно и остановиться. Тем более, что шестеричная система счисления не является распространённой.



Комментировать »

Сейчас практически постоянно пишут и говорят про “ИИ в математике”. Типа, какие “достижения”. Понятно, что инструмент перебора – может доставать какие-то доказательства кусками из ранее опубликованных работ, “синонимизировать” их, собирать из них другие доказательства и прикреплять к “нерешённым задачам”, например, из списков Эрдёша (где относительно много довольно простых, для специалиста, задач). Такой поиск перебором даже может быть полезен (но по модулю избыточных ресурсов, конечно).

Перебор – перебором, но LLM-перебор – это совсем не тот перебор, который вполне себе является методом математического доказательства. Например, как метод доказательства, перебор позволяет быстро находить контрпримеры к каким-то утверждениям. Элементарная иллюстрация: допустим, кто-то говорит, что нельзя “квадрат разложить на два квадрата”; это легко опровергнуть, просто “подобрав” самую известную пифагорову тройку: 3^2 + 4^2 = 5^2. Естественно, компьютеры существенно улучшили возможности по перебору: несравнимы возможности современного ПК и даже таких признанных вычислителей, каким был Эйлер. Однако всё это без учёта новомодных LLM, в которых, похоже, вычислительный ресурс в основном расходуется впустую.

А вот насколько точны результаты компьютерной обработки, применительно к теоретической математике, и как их интерпретировать – вопрос довольно сложный, скорее философский. По крайней мере, проблемы возникают с действительными числами, которые для компьютеров недоступны в принципе. Хуже того, несмотря на большую мощность, компьютер в принципе не может заглянуть даже в область действительно больших натуральных чисел. Но это всё сложные моменты, которые ничуть не отменяют того факта, что компьютеры давно влияют на теоретическую математику. И дело тут ни разу не в модных LLM.

Вообще, интересующимся темой, я бы порекомендовал серию прекрасных статей Н. А. Вавилова, которая начала выходить ещё в 2020 году, до всего этого “хайпа” с LLM “в математике”, и к LLM никакого отношения не имеет: “Компьютер как новая реальность математики” – вот где действительно есть тематическое содержание.



Комментировать »

Лексический контекст может трансформировать семантику одного и того же слова занятным образом. Особенно, в русском языке. Особенно, если графически – это одно и то же слово. Есть хорошо известный, но всё равно интересный, пример – он про “косых косых”.

“Шёл с косой косой косой”.

Что здесь написано? Например, это сказочный заяц (косой или Косой), который идёт, неся на плече ручной инструмент для покоса травы, но этот инструмент довольно кривой: “коса у зайца на плече косая”.

Теперь допишем ещё одно слово “косой”.

“Шёл с косой косой косой косой”.

Что получилось? Теперь заяц-косой ещё и реально косой – то есть, у него большие проблемы с глазами.

“Шёл с косой косой косой косой косой”.

Заяц, который несёт на плече косую косу, идёт вдоль песчаной косы: спустившись с холма, вышел заяц к реке, да закинул косу на плечо, шагая привычной дорогой – вдоль песчаной косы. Что ж, пока заяц идёт, продолжаем приписывать слово “косой”.

“Шёл с косой косой косой косой косой косой”.

Предположим, что и песчаная коса – тоже косая, на то она и коса. Продолжать всё труднее. Получится ли сделать следующий шаг?

“Шёл с косой косой косой косой косой косой косой”.

Семь косых. Ну, казалось бы, теперь-то грамматические варианты закончились, а предложение не “парсится” – так? Нет, не закончились. Дело в том, что косой заяц был нетрезв, поэтому он ещё раз косой, но теперь – в смысле общего состояния сознания: мысли зайца запутаны, но кажутся ему строгими и прямыми, не то что косая коса, которую несёт он на плече. Интересно, что “косой”, в значении не трезвый, можно в этом предложении переставлять на разные экземпляры графического представления слова “косой”.

“Шёл с косой косой косой косой косой косой косой косой”.

Восемь косых – и вот тут уже не обойтись без дефисов, потому что иначе структура не вписывается ни в какой грамматический вариант. Зато с дефисами – вписывается: “Шёл с косой-косой косой косой косой-косой косой косой”. То есть, коса у зайца теперь очень сильно косая: косая-косая. Сам заяц теперь настолько нетрезв, что таких нетрезвых зайцев поди ещё найди: косой-косой. Но с дефисами эффект не такой интересный, поэтому останавливаемся на восьмом уровне.

(Заметьте, кстати, что эффект похож на эмбеддинг с навесом из другой записки.)



Комментарии (1) »

Пустое множество принадлежит к набору фундаментальных объектов современной математики. И не только математики: в чистой философии – значение пустого множества едва ли не выше. Поэтому-то постоянно множатся и роли, которые пустое множество играет в куда более прикладных областях, чем теоретическая математика и философия: в информационных технологиях, да и в технике вообще.

Главное свойство пустого множества в том, что такое множество – единственно. То есть, у нас могут быть множества, собранные из разных объектов, но пустое множество – всегда одинаковое. Более того – это одно и то же множество, вне зависмости от “объектов” и типов. Пустое множество ананасов совпадает с пустым множеством апельсинов по слишком многим характеристикам, чтобы считать, что множества ананасов и апельсинов “пусты” разным образом, как и множество фруктов вообще.

Но, конечно, полностью отказаться от того, что “существуют” и пустое множество апельсинов, и пустое множество ананасов – довольно трудно: вот, только что была введена некоторая различительная окраска – ананасы против апельсинов. Например, если для приготовления блюда требуется ананас, то отсутствие апельсина – никак на кулинарную ситуацию не влияет, тогда как нехватка ананаса делает приготовление невозможным. Однако пустота тут, как концепция, общая. Да, нужно различить понятия “пустота” (“тип”) и “быть пустым” (“стрелка”), но стоит поднять пустоту в ничто, как начинает играть тот фактор, что и ничто, в представлении, бывает белое и чёрное.

Особенности естественного языка, позволяющие оборачивать отсутствие элементов в пустом множестве в размытое значение слова “ничего”, создают тем самым возможность для построения разных силлогизмов из пустого множества. Наверное, самый известный из них – про бутерброд (в вольном переводе): “Что лучше, чем вечное счастье? Ничего! Однако, один бутерброд – заведомо лучше, чем ничего. Следовательно – бутерброд лучше вечного счастья” (R. Smullyan/D. Darling). Здесь, естественно, объяснение в том, что в первой части описывается отсутствие объектов, которые лучше данного: таких объектов, утверждается, пустое множество; а потом, на бутербродном шаге, сравнение производится в обратную сторону: бутерброд заведомо лучше состояния, когда бутерброда нет (не отсутствия объектов, а самого пустого множества). То есть, это разные операции, но то, что пустое множество всего одно, позволяет подменять одну операцию другой.

Например, мне однажды переслали распечатку пары значений вывода утилиты sha256sum, на вход которой подавался результат работы модуля ec из пакета openssl (через “пайп” в консоли). При этом в openssl направлялись два разных файла. Утверждалось, что эти два входных файла содержат одинаковые данные, но только записаны данные в разной форме. Почему? Потому, что равны результаты sha256sum от выдачи openssl. Значения sha256sum, действительно, были равны, несмотря на то, что в openssl передавались разные файлы с разными именами.

Что же произошло на самом деле? Вот что. Утилита sha256sum считает значение хеш-функции SHA-256 от входных данных. Здесь на вход sha256sum поступал вывод openssl ec. Но, ещё раз, если значения равны, то, видимо, тогда и входные файлы содержат одинаковые данные? Нет – одинаковым тут является вывод openssl ec: дело в том, что оба входных файла имели неверный формат, поэтому модуль ec не мог их разобрать и печатал сообщение об ошибке, однако в стандартный вывод – писал пустое множество байтов; то есть, ничего не писал, проще говоря. А значения SHA-256 совпали потому, что на вход хеш-функции поступило пустое множество. А оно – одинаковое, вне зависимости от того, как именно сломался каждый из входных файлов.

Множества, состоящие из элементов разных типов, могут не сочетаться по типам, но пустое множество – сочетается со всеми типами. Когда нет апельсинов и ананасов, шестерней и транзисторов – то, с одной стороны, нет вещей разных типов, но, с другой стороны, общим тут является то, что их нет. Это сплошь и рядом используется в языках программирования.

Скажем, пустое множество возвращается в качестве признака того, что функция завершилась с ошибкой: это хорошо известный объект, обозначаемый nil, null, “” – ещё как-то. Обратите внимание, что значение null оказывается чем-то вроде пустоты, которая может быть помещена в коробку (да, именно так). Но null – это ещё не пустая коробка, как ни странно. В программировании, чтобы null стал “пустой коробкой”, этот null придётся как-то дополнительно трактовать: предположим, использвать null как указатель и попробовать обратиться по его значению (выполнить “дереференс”). Ошибочное толкование пустого множества в случае null и программного кода регулярно приводит к возникновению уязвимостей в ПО, в том числе, в весьма неочевидных случаях.

Современное обозначение для пустого множества – ∅ – появилось относительно недавно, в 30-х годах прошлого века. Но вполне возможно, что саму концепцию систематическим образом впервые строил Джордж Буль, в 1847 году. Впрочем, соответствующая концепция у Буля относится к логике и больше похожа на противопоставление “ничего” – которое есть “нуль”, 0, – “всему”, единице, 1.

Есть более интересное развитие определения: через количество объектов, которые не “само-эквивалентны” (Готлоб Фреге). Здесь “само-эквивалентность” – это обобщение свойства рефлексивности, то есть, когда A = A по свойствам операции, а именно, каждый объект эквивалентен самому себе. Тогда пустое множество – это те объекты, которые не эквивалентны самим себе. Казалось бы – таких объектов просто нет. Но чтобы заявить о том, что чего-то нет, придётся определить это “что-то”, чтобы описать и проотрицать существование, и на этом пути магу легко попасть в ловушку: попытка определения того, чего нет, введение типов, может вызвать данный “зомби-объект” к существованию – он, внезапно, “станет быть” или “будет есть” – как там правильно? А вот способ “не-само-эквивалентных” объектов – позволяет выполнить такое определение без излишней типизации и “зомби”. Ну, в каких-то пределах. Так, в DNSSEC подписывается цифровой подписью факт отсутствия записи – делается это при помощи погружения “отсутствия” в искусственный “пустой интервал” между соседними существующими DNS-записями, иногда такое погружение происходит замысловатым образом.

Не так уж редко используется и свойство пустого множества быть невозможным событием. Как известно, вероятность невозможного события, в каком-то смысле, сильнее нуля – ведь если рассуждать в классическом сеттинге, с действительными числами, то событие с нулевой вероятностью – может произойти. Например, если вы бросаете безразмерную точку на действительную окружность, то вероятность попасть в любое конкретное действительное число тождественно равна нулю, но в какое-то число вы всегда попадёте. Другое дело, что точно записать такие попадания – не выйдет, потому что нельзя записать точно большинство действительных чисел.

Одно и то же пустое множество можно помещать в разные коробки, получая разные пустые коробки. А пустая коробка может служить существенным признаком. Посмотрим на CAA-записи в DNS. Интерпретация этих записей отличается в случае, когда запись есть, но её значение – пустая строка, и в случае, когда нет самой CAA-записи. Здесь буквально проявляется эффект, позволяющий строить натуральные числа из пустого множества: когда нет CAA-записи – это настоящий нуль, пустое множество; когда CAA-запись есть, но она пустая – это уже единица, потому что возможна только одна пустая CAA-запись (ну или так: все пустые CAA-записи – одинаковые). То есть, тут, с одной стороны, играет роль определение того, чего нет: “нет значения CAA-записи” против “нет самой CAA-записи”; с другой стороны – содержательный эффект возникает из погружения пустого множества в большую структуру. Это, в точности, процесс (∅=0, {∅}=1).

Процесс погружения ∅ в {} даёт основной инструмент для генерирования множеств. Фигурные скобки обозначают операцию “множество из (элементов)” (set of). Так, {∅} – это множество из одного элемента, пустого множества. При этом одноэлементное множество (singleton, синглетон) – это не то же самое, что один этот элемент. То есть, заметьте, что {} и {∅} (или, если хотите, {{}}) – сильно разные вещи. Если, борясь за логическую стройность, ввести дополнительно понятие “класса”, как способа избежать возникновения абсурдного “множества всех множеств”, то пересечение всех классов – это и будет пустое множество. Именно поэтому в английском, например, языке пустое множество правильно обозначать как the empty set, с определённым артиклем the, а не an empty set. “A set”, но “the empty set”.

Данное важное свойство закреплено, – обычно!, – и в современных языках программирования высокого уровня. Если написать, что var a := {1} (то есть, переменная a – это массив из одной целой единицы по определению), то станет верным, что 1 != a (то есть, одна целая единица не равна массиву, состоящему из одной целой единицы).

А если взять JavaScript, то можно наблюдать сразу несколько особенностей интерпретации пустого множества и “ссылок” на пустое множество в программировании:

const set = new Set();
const object = {};

set.add(1);
set.add("two");
set.add(object);
set.add(object);
set.add({});

console.log(set.size);
for (const item of set.keys()) { 
  console.log(item);
}

– эта программа напечатает вот что:

4
1
two
Object {  }
Object {  }

– ничего странного, но довольно показательно.

Оставим JavaScript и его объекты. В шумерских способах записи чисел для обозначения отсутствия единиц использовали пробел. Занятно, что в шумерской системе, изначально, отличались обозначения для единиц, относящихся к разным типам объектов: предположим, обозначения для мер зерновых отличались от обозначений для мер воды. Это, конечно, связано с тем, что древнейшие системы просто фиксировали количество объектов при помощи изображений именно этих объектов, чтобы можно было попарно сопоставить изображение и реальность: видим три кувшина – рисуем три кувшина в качестве обозначения того, что кувшинов три; видим пять мехов с водой – рисуем пять мехов, в качестве обозначения, что мехов пять, и, возможно, знак воды рядом. Потому что тут ещё нет операции выноса типа выше числа: “кувшины” – три (палки); “меха” – пять (палок). И пустое множество демонстрирует свою уникальность: нет кувшинов, нет мехов – просто не обозначаем кувшины и меха. И именно поэтому пробел, как носитель “пустоты”, в шумерской схеме записи мог появиться только тогда, когда обозначения единиц для счёта уже отделились от типов объектов. То есть, введение пробела произошло сильно позже отказа от зарисовки “мехов и кувшинов”. Понятно, что отдельное обозначение для нуля требуется только в схеме “тип” – “количество”, где количество записывается абстрактно.

Пустое множество – аксиоматично. Так, чрезвычайно часто встречающийся в популярной литературе феномен, известный как “набор аксиом теории множеств” ZFC, буквально содержит аксиому о пустом множестве: “существует пустое множество”. Пустое тут – это то, в котором нет элементов, но оно – множество: то есть, множество, к которому не принадлежит ни один элемент. Получается, “пустота” множества может выступать как предикат: “[A] есть пустое”, и без пустого множества построение логических теорий становится затруднительным.

Удивительно, но побочный эффект того, что всякий элемент не принадлежит пустому множеству, вне зависисмости от типа, приводит к следующему обобщению: для элементов пустого множества всё что угодно – верно. Элементам пустого множества оказывается возможно приписать любое свойство. Это используется даже в модных “интернет-мемах”, как способ наведения сарказма:

никто: [%blah-blah-blah%]
иванов: подпрыгивает на батуте

– тут совсем условные обозначения, конечно: “[%blah-blah-blah%]” – пустое, “батут” – содержание. Главное – схема: “никто: {}, кто-то: {предмет мема}”. “Когда никто не догадался, кроме Иванова”.



Комментарии (2) »