В IETF и вокруг сейчас происходит небольшой технический скандал, непосредственно связанный с внедрением рекомендаций по использванию негибридных криптосистем ML-KEM в TLS.

Если очень кратко, то переход на постквантовую криптосистему ML-KEM, как единственный механизм получения сеансового секрета, может восприниматься как попытка протолкнуть в TLS некий бэкдор, который отсутствует в X25519 (сейчас X25519 используется вместе с ML-KEM, в составе гибридной криптосистемы, поэтому бэкдор в ML-KEM, для гибрида, только лишь снизит стойкость в два раза).

На днях появилась весьма занятная публикация, непосредственно касающаяся технической части этого скандала: ML-KEM Mythbusting (“Разрушение мифов об ML-KEM”, англ.). Самый удивительный аспект этой публикации в том, что автор прямо утверждает: “в ML-KEM нет бэкдора, это можно доказать”. Вообще, доказать отсутствие бэкдора в криптосистеме не просто сложно, а, часто, невозможно. Особенно, если речь идёт об асимметричных схемах инкапсуляции ключа. Видимо поэтому в публикации по ссылке утверждение заметно более размытое: делается попытка доказать, что это в параметрах ML-KEM недостаточно энтропии для того, чтобы встроить качественный бекдор. (“Качественный” тут – это доступный только держателю секретного ключа от бэкдора, как в DUAL EC DRBG.)

Что имеется в виду? Вот что: якобы, если множество вариантов параметров криптосистемы достаточно маленькое, чтобы перебрать его за обозримое время, то бэкдор там негде прятать – его можно будет обнаружить простым перебором. И вот в ML-KEM, как бы, это множество – всего 34 бита. Как бы, утверждение верное, вот только оно сильно слабее, чем предположение о бэкдоре: бэкдор может находиться непосредственно в алгоритмах, поэтому, для его обнаружения прямым перебором, нужно будет мощность множества параметров возвести в некоторую большую степень (это, примерно, как идея моделирования квантовых вычислений, когда у вас все 2^34 варианта участвуют в расчётах на каждом шаге).

Также упомянут заложенный в алгоритм отказ с ошибкой при обработке корректного шифротекста. Малая расчётная вероятность такой ошибки, – которая вероятность, кстати, прямо связана с выбором параметров, но про это ничего в публикации не сказано, – сравнивается с возможностью аппаратного сбоя: вероятность сбоя, – например, перещёлкивания битов под воздействием космического излучения, – оказывается выше, чем расчётная вероятность штатного сбоя ML-KEM. Но, всё же, аппаратный сбой в результате “пролёта нейтрона”, это совсем не то же самое, что и идеальная ошибка, заложенная прямо в алгоритм. Я, кстати, писал об этом моменте, именно в части ML-KEM.

Вообще, конечно, история, в которой ML-KEM почему-то начинают тщательно “обелять”, доказывая, что там нет бэкдора – несколько подозрительная.



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

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

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

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

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



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

Кстати, в продолжение записки про геометрическую алгебру Евклида и разность квадратов – воскресное чтение манускриптов (давно не было). Как известно, основная часть трудов Евклида дошла до нас лишь в средневековых “копиях копий”. То есть, на манускриптах. Один из важнейших таких манускриптов – Vat.gr.190 из Ватиканской апостольской библиотеки, датируемый девятым веком нашей эры и содержащий тексты “Элементов” (“Начал”). Фрагмент с записью формулировки Предложения 5 из второй книги на древнегреческом приведён на скриншоте ниже.

Manuscript screenshot

За исключением комментариев на полях и между строк (схолии), это как раз тот текст, который упоминается в исходной записке (плюс пара строк начала доказательства; сама формулировка заканчивается словом τετραγώνῳ во второй строке снизу на скриншоте, а схолии легко распознать, – не не прочитать, – благодаря другим чернилам и почерку).

А вот чертёж из манускрипта, соответствующий этому Предложению, почему-то подкачал – см. следующий скриншот.

Manuscript screenshot

Здесь и точка Γ не делит прямую линию на равные части, и Δ прижата не к той границе. Казалось бы, для геометрии это не так уж важно, смысл не меняется, но всё же.



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

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

“Если прямую линию разделить на равные и неравные [отрезки], тогда прямоугольник, сформированный равной и неравной сторонами, плюс квадрат на стороне между [ними], равны квадрату на половине”.

“На половине” – тут имеется в виду квадрат на “равной” части исходного отрезка. Рисунок дан ниже – из него должно быть понятно.

Euclid 2.5, diagram

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

Что именно здесь записано у Евклида? Разделим линию AB точкой C на равные части (половины: AC == CB), и точкой D на неравные (D, например, лежит на отрезке CB, см. рис.). Тогда утверждается, что AD*DB + CD*CD = CB*CB.

Воспользуемся современными алгоритмами и перепишем выражение: CD*CD – CB*CB == AD*DB. Дальше (см. рис.), по построению: AD == CB + CD; DB == CB – CD; следовательно, CD^2 – CB^2 == (CB+CD)*(CB-CD).

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



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

Нередко можно услышать, что перспективные ИИ/LLM не заменят настоящих разработчиков и специалистов потому, что LLM нередко генерирует “решения” с грубыми ошибками, а чтобы понять, где эта ошибка, в чём она состоит и как её исправить – нужен тот, кто реально понимает, что же происходит. То есть, после наступления “эпохи развитого ИИ”, востребованными останутся специалисты с большим опытом и глубоким пониманием темы. Эти специалисты ещё и будут крайне редки, так как везде уже ИИ с LLM оказал влияние. Казалось бы, если результаты генерирования ИИ зашли в тупик, то такой специалист только и может выручить.

Логично.

Вот только тут неявно предполагается, что цель – получение полезного продукта, а не тупика. Это существенное допущение. Оно работает лишь до тех пор, пока достигнутый “тупик” просто не объявляется тем же ИИ единственным возможным результатом. И вот – “скрипач” оказывается не нужен.

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

Представьте, что именно LLM используется для определения того, можно ли реализовать решение некоторой задачи, можно ли исправить ошибки в каком‑то коде. Зачем? Чтобы повысить качество процесса, уменьшить количество итераций. Скармливание вывода одной LLM в другую LLM – типовой подход уже сейчас. Так что использование LLM на втором слое обработки задач не выглядит удивительным достижением. Например, несколько сомнительная, но очень популярная, идея, что обнаруживать тексты, сгенерированные LLM, нужно при помощи другой LLM, обученной на текстах первой, регулярно получает практические воплощения. Да и ИИ‑исследователи (“автоматические учёные”, как researcher) уже то и дело предлагаются через СМИ.

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

Действительно, в самом по себе использовании калькулятора на уроках математики ничего плохого нет, однако проблемы начнутся тогда, когда на смену изучению арифметики придёт “знакомство с назначением кнопок калькулятора”, чтобы “научиться правильно формулировать ему задания”. В такой парадигме нет места кому‑то, кто будет изменять результаты LLM не в учебных целях, да не получив одобрения другой LLM. Когда доступ к подобному ИИ имеется в изобилии, то ИИ/LLM и может объявить, что задача не решается в принципе, так что нет смысла звать “древнего инженера”.

Предположим, LLM “спроектировала” подъёмный кран, который всегда переламывается. Промпт переписывали по инструкции разными способами, но нет, не выходит прочный подъёмный кран. А более мощная LLM пишет, что сконструировать подъёмный кран, который не переламывается, невозможно в принципе. С развернутым обоснованием. Можно ли в принципе подобрать такие требования для крана, что построить соответствующий механизм невозможно? Можно, конечно. Хорошо. Достаточно теперь обобщить это наблюдение при помощи LLM.

Да, проблема с генерированием надёжного результата скорее решится тем, что и подготовка выводов о невозможности достижения результата тоже переходит к ИИ/LLM. Что ж, если посмотреть на современный хайп, то для этого всё и затевается, верно? “Сверхразумный ИИ” решает любые задачи, исследует все возможные исследования одновременно, и не может ошибаться, а поэтому всегда поможет.

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

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

Вернёмся к подъёмному крану: пусть разработка крана зашла в тупик, но ведь у ИИ нетрудно узнать непосредственно, как ещё можно поднимать грузы на высоту, верно? “Делайте грузы круглыми и закатывайте их по рельсам при помощи велосипеда, снабжённого системой блоков” — сообщает, предположим, ИИ. Так что тут точно нет места для дополнительного обращения к какому‑то “уникальному специалисту”: ИИ отверг одно направление, “научно” объяснил, что оно “невозможно”, и предложил другое, с круглыми грузами. Точка.

В такой конфигурации Нового средневековья некоторые технологические направления начнут быстро “засыхать”, а другие – требовать для поддержки всё больше механических ресурсов, но не специалистов. Сверхидея исходной концепции про редких незаменимых специалистов – в сохранении понимания технологий. Сохранение понимания – не равно сохранению только технологии. Человеку, чтобы хорошо понимать ту или иную технологию, нужно постоянно и непосредственно взаимодействовать с объектами, определяющими свойства данной технологии, а не просто выполнять ритуалы. Ритуалы при этом важны, сомнений нет. Но кто сказал, что концепция сохранения технологий не будет заменена на сохранение даже не самих ритуалов, а представлений о ритуалах? Такой вариант вполне вероятен. ИИ, как говорится, в помощь. (Да, тут сразу вспоминаются Adeptus Mechanicus из одной весьма известной игровой вселенной.)

Если технологии начнут “засыхать”, то кто же будет обслуживать дата‑центры с миллионами микропроцессоров, подливая волшебное масло в систему охлаждения? Кто угодно, с нужным уровнем допуска. По инструкциям, выдаваемым LLM, которые на тех микропроцессорах работают. Да, в какой‑то момент система охлаждения сломается. Но далеко не сразу, это же путь медленного угасания.

И всё же, переход к подобной схеме требует некоторого скачка. Остаётся надеяться, что для него пока не накоплено достаточной базы.

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



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

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

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

Да, на таких японских монетах дата указывается по году периода, и записывается набором из нескольких иероглифических знаков. Если слева направо: обозначение “год”, потом номер самого года, потом – обозначение периода. Например (здесь группы знаков разделены точками, для наглядности): 年 . 七十三 . 治明. То есть, если теперь справа налево, то “Мэйдзи 37-й год”, или 1904 “европейский”. На аверсе монеты 1904 года в 20 сенов дата отчеканена справа от латинского обозначения номинала “20 sen” (см. фото ниже). Именно фотографию аверса и отправили для анализа. Присутствие латинских букв и арабских цифр могло бы помочь ChatGPT, если бы там был “интеллект”, но не помогло. На реверсе же монеты написан только номинал “20 сенов”, но японскими обозначениями: то есть, японские цифры там присутствуют, но это не год.

20 sen coin

Аверс монеты – слева на коллаже. Именно эту фотографию и направили в ChatGPT (конечно, в большем разрешении).

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

Получается, что ChatGPT таким ответом даже успешно запутало бы незнакомого с предметом пользователя – ведь в предложении перевернуть монету есть логика: да, часто дата отчеканена на другой стороне, не на той, где написан номинал (пояснение: номинал здесь пользователь читает там, где он записан латиницей и арабскими цифрами).

А о том, что вышло бы из ChatGPT после загрузки фотографии реверса, мы в этой записке не узнаем: доступные токены закончились – видимо, картинки потребляют их особенно много.



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

На аверсе британских монет изображены монархи – короли и королевы, в период правления которых монета отчеканена. Есть старая традиция: портреты соседних, по времени правления, монархов, их профили – смотрят в разные стороны. На иллюстрации ниже – пять монет в один шиллинг разных, последовательных, монархических периодов.

Shillings

Сразу видно, что чётность нарушена. Монеты разложены по возрастанию года выпуска, слева направо: королева Виктория, король Эдуард VII, король Георг V (это не Николай Второй, это его брат, но двоюродный), король Георг VI, королева Елизавета II. Чётность поворотов профилей нарушена между Георгом V и Георгом VI. Почему?

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

Да, если бы всё пошло по плану, то профиль Эдуарда VIII должен был бы смотреть вправо, а следующий – Георг VI, – смотрит влево. Хитрость в том, что Эдуард VIII вежливо попросил нарушить традицию: он хотел, чтобы его профиль смотрел влево, так как считал, что такое изображение лучше. И именно вариант с поворотом влево и был бы отчеканен массово (не только на тестовых монетах), если бы Эдуард VIII не отрёкся от престола. Как, в таком случае, сложилось бы со следующим профилем – не понятно. Так что, как ни странно, но здесь мы видим физический пример того, как “нуль-проекция” короля сохраняет чётность переходов между разными монетами.



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

Здесь парсер читает или слушает текст на естественном языке, причём таким парсером может выступать базовый элемент сознания человека. В качестве целевого языка заметки используется английский, метаязыком выступает русский, а все возникающие сложности – объясняются.

Итак, представьте, что лексический парсер, обрабатывающий предложения, столкнулся со следующей конструкцией на английском языке:

The chap the cat the girl owned scratched screamed.

Что происходит? The chap – какой-то “пацан” (далее – “парень”). Но что с ним? Не понятно. Тем не менее, это грамматически корректная фраза на современном английском. У неё конкретное значение, но вытащить это значение в “область осознания” не так уж просто. Проблема именно у парсера, какова бы ни была его природа. Парсер читает слова слева направо и видит какую-то странную череду артиклей и существительных. В начале предложения очередное слово открывает новую ветку разбора, но только что открытая ветка – подвисает. Как показывает практика, закрыть ветку получается не сразу.

Это пример так называемого “центрального встраивания”, “центрального эмбеддинга” (а ещё точнее: center embedding – на английском). Лингвистическое явление, важность которого для парсинга языковых грамматик, – в том числе, и прежде всего, людьми, – определил Хомский.

Вернёмся к фразе ещё раз:

The chap the cat the girl owned scratched screamed.

Можно использовать фигурные скобки и переписать предложение так, что получится “код” на некотором условном языке “программирования”. Условном, но зато очень высокого уровня.

The chap {
	the cat {
		the girl {} owned 
	} scratched 
} screamed.

И это уже можно разобрать. Пошагово выписываем то, что за внутренними скобками:

The chap – screamed,
the cat – scratched,
the girl – owned (тут специально поставлены пустые скобки, чтобы наметить рекурсивный принцип, лежащий в основе встраивания).

Если, как говорится, своими словами, то пересказать можно так: “Парень вскричал, потому что его поцарапала кошка, принадлежавшая девушке” (или кот? nyet, “кот” – был бы tom). Owned (“была владеема”, если дословно) – относится к кошке, со стороны девушки. Если переставить слова, то получим: the girl owned the cat – “девушка владела котом/кошкой”. Казалось бы – эквивалентная конструкция. Но нет, не совсем, потому что парсинг разных записей будет разным. То есть, смысл, стоящий за {the cat the girl owned} и {the girl owned the cat}, может быть и одинаковый, но к этому смыслу ещё нужно привести текст, записанный разным способом. Это напоминает понимание логических формул, как “записей”, которое понимание даётся с трудом. Кроме того, наблюдаемый эффект очередной раз подчёркивает то, что в самом тексте смысла нет.

Итак, возвращаемся к разбору исходного упражнения: the girl owned the cat – “девушка владела кошкой”. И эта кошка поцарапала парня. Поцарапанный принадлежащей девушке кошкой парень – вскричал: screamed.

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

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

“Парень кошкой девушке принадлежащей поцарапанный вскричал”.

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

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

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

Пример прекрасно показывает, как в русском роли словам назначает морфологическое их превращение. Совсем не как в английском, где роли определяются взаимным расположением слов (но вовсе и не “порядком слов в предложении”, как нередко приходится слышать).

Другой вариант на русском:

“Парень, кошка, – девушка владела, – поцарапала, вскричал”.

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

“Парень кошка девушка владела поцарапала вскричал”.

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

Более того, если использовать множественное число, то можно отказаться от артиклей the (для единственного – отказаться никак нельзя: получится сильно “неграмматический” вариант). Например, в подборке головоломок Quanta Magazine предлагалось раскодировать следующую, чисто рекурсивную, фразу:

Bulldogs bulldogs bulldogs fight fight fight.

Опять же, это грамматически корректное предложение на английском. Но понять, кто тут кого “борет” – непросто. (Весьма вольный перевод, в котором все “бульдоги” – это бульдоги из разных стай: «бульдоги, которые дерутся с дерущимися бульдогами, тоже нарвались на бульдогов, которые дерутся». Ну или что-то в этом роде: бульдоги – они такие.)

В разговорном языке подобные конструкции, – третьего уровня, – практически не встречаются. Тем не менее, вот более чем реальный пример «канцелярита» из документа под названием British road traffic act, 1972 (это что-то вроде дополнений к правилам дорожного движения, не важно) – вчитайтесь:

A person who, when riding a cycle, not being a motor vehicle, on a road or other public place, is unfit to ride through drink or drugs shall be guilty of an offence.

Всё понятно? Конечно. “Лицо, которое, когда едет на велосипеде, который не является транспортным средством, по дороге или по другому общедоступному пространству, не способно ехать из-за алкогольного или наркотического опьянения, должно быть признано совершившим правонарушение”. Всё верно, но – уф!

Другой пример, уже на “американском” языке, но тоже хороший – между прочим, это фраза из интервью футболиста (американского), но в 1985 году:

It’s ironic that I’m here, where the man the trophy I won is named after coached.
(Источник: Fred Karlsson, Multiple Center-embedding in Spoken English.)

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

Получается, что в ходе непростого декодирования подобных конструкций парсер вынужден “подвешивать” существительные до момента их “разрешения”, например, глаголами. При этом двойное подвешивание вообще не составляет проблемы в английском: the ball the cat dropped bounced. Совсем сложные случаи почему-то начинаются с трёх подвешиваний.

Возможно, причина в том, что каждое подвешенное существительное потребляет некоторый важный ресурс парсера. Скорее всего, рассматривая примеры предложений выше, вы сами можете почувствовать это исчерпание ресурса, приводящее к “зависанию” “сознательного парсера”. То есть речь тут вовсе не про программу или LLM. Что это за ресурс? Возможно, специальная структурная лексическая память, а возможно, некий “модуль” “разрешения противоречий”. Предположим, данный модуль должен заранее занять некий объём доступных связей, чтобы потом собрать из них уже осмысленный, непротиворечивый вариант, присоединив понятия лексическими коннекторами одно к другому – так, как нужно. Однако, при разборе подобного эмбеддинга, вместо подключений смыслов происходит “тик, тик, тик” по уровням, и каждый “тик” – это подвешенный коннектор, который требует предварительного захвата кучи возможных связей для обеспечения своего “висения” против всего корпуса возможных смыслов.

Описанное переполнение в английском наступает раньше, и это переполнение – однонаправленное (слева направо). Вернёмся к исходному предложению: The chap the cat the girl owned scratched screamed – может, пацан-парень (the chap) тут – это тот, который принадлежит кошке и девушке (the cat the girl owned)? Мало ли – они могли его захватить. Но тогда не хватает союза (and?) и повисает царапанье (scratched).

Вспомогательные элементы, типа “который”, “где” и др. – они как бы есть в английском варианте, но там они “нулевые”, обозначены пустыми словами, и только если рассматривать текст во всей полноте, тут же возникают в построенной структуре. Это важный момент. И он, опять же, подтверждает, что в любом тексте, – как в тексте, – никакого смысла нет: смысл образуется в представлении читающего. Конечно же, можно добавить структурных элементов, типа who, what, that и пр., в английский текст. И получится знаменитый This Is the House That Jack Built:

This is the cat
That killed the rat that ate the malt
That lay in the house that Jack built.

Схема в чём-то похожая, но парсер уже не переполняющая.

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



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

Кстати, в заметке про возрождение дирижаблей на dxdt.ru, которая вышла в 2008 году, 17 лет назад, упоминаются дирижабли-авианосцы, как носители беспилотников. Но там же сказано, что самолёты (понятно, что самолёт – не беспилотный), “уже базировались на дирижаблях, в краткую эпоху цеппелинов”. Так и было. Это сейчас, почему-то, схему преподносят как новинку. За прошедшие годы в интернеты выложили немало архивных фото. Вот ниже пара подтверждений про самолёты на цеппелинах.

Vought UO-1
(Credit: Richard K. Smith/U.S. Naval History and Heritage Command.)

Это самолёт Vought UO-1 и стыковочная ферма, которая должна была использоваться на цеппелине, во время испытаний, 1928 год.

Zeppelin and plane
(Credit: National Archives and Records Administration.)

Тот же самолёт, но уже прицепленный к дирижаблю USS Los Angeles. 1930 год.



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

Кстати, в продолжение недавней заметки про то, что тип float – это не про числа, тем более, не про действительные числа. С точки зрения рекомендаций разработчику ПО.

Вообще, если получается, то никаких float и тому подобных инструментов лучше не использовать. Совсем. Тем более, в воплощении различных sin, cos и прочих. Заменять нужно таблицами целых (в смыcле int) значений и целочисленными, со строго фиксированной справа точкой, арифметическими операциями. Особенно, если речь о программировании систем управления и микроконтроллеров.

Если же не получается совсем отказаться, то есть эффективный способ правильно думать про float. Нужно переменные с типом данных float понимать как алгоритмы, и сравнение таких переменных интерпретировать как сравнение алгоритмов. Это помогает избежать многих ошибок (см. ниже).

Например, во float нет дистрибутивности. В алгоритмической интерпретации это означает, что выражения L := b*(c + d) и L := b*c + b*d – присваивают переменной L разные алгоритмы. И действительно, запись, в которой сперва вычисляется сумма (c + d), а потом результат умножается на b, это другой алгоритм, нежели вариант, когда сперва b умножается на d и b умножается на с, а потом вычисляется сумма результатов (обратите, кстати, внимание, что тут ещё и порядок играет важную роль: сначала b*c или сначала b*d? если с точки зерния параллельных вычислений эти операции могут быть выполнены “независимо” разными потоками, то с точки зрения компилятора, имеющего дело с вполне себе последовательной записью, всё может выглядеть сильно иначе – но это явно тема для другой записки).

Если не упускать этот алгоритмический момент из виду, то оступиться становится сложнее. Так, алгоритмическое восприятие float позволяет отбросить сомнения, что в двух описанных выше случаях из L можно достать разное битовое значение при одних и тех же входных переменных – алгоритмы-то там разные. Естественно, сравнивать алгоритмы сложно, но тут понятие об алгоритме – это лишь средство обобщения, мыслительный гаджет, но такой гаджет, который верно работает.

Лирическое отступление. Это раньше к компьютерными вычислениями подходили с нужной тщательностью и пониманием того, что такое преобразование погрешностей. Сейчас, оказывается, времена ИИ и LLM. Поэтому сказку сильно сократили. К сожалению, уже на практике полагают, что во float – действительные числа, “просто с погрешностью” (“просто”, да). Соответственно, получается, что конкретный математический аппарат, служащий основой проектирования алгоритмов ПО, оперирует действительными числами, синусами и косинусами – здесь всё со всем пересекается, всё максимально гладкое, а поэтому выполняются нужные равенства и теоремы существования. Потом математический аппарат прямо переносят в программный код. После чего, в один не самый ожидаемый момент, вычисления ломаются и предположим, аппарат космический улетает совсем не туда, куда предписывала гладкая и непрерывная модель с синусами и дистрибутивностью.



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

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

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

Вообще, на табличках до нас дошли некоторые пошаговые алгоритмы, которые всегда показаны на численных примерах. То есть, дан детальный и максимально конкретный разбор метода решения задачи в числах. Но как именно сами методы были разработаны – неизвестно, потому что теоретических работ не найдено. Да, разумно будет предположить, что за такой разработкой стояло более абстрактное понимание: вряд ли решение задач, приводящих к квадратному уравнению, было получено перебором алгоритмов. В сохранившихся задачах квадратные уравнения точно есть (см. ниже), но нет, например, абстрактных сведений о корнях таких уравнений и отношениях между корнями.

Разберём один такой конкретный пример математической задачи с глиняной таблички YBC 6967/P255041. Табличка датируется 1900-1600 до н.э., этот период называют “старовавилонским”. Фотографии четырёх её сторон приведены ниже. Небольшая часть клинописных знаков находится на боковушках таблички, но для наших целей это не важно: в этот раз мы не будем расшифровывать сами надписи по отдельным клинописным знакам – главное, что на табличке нет чертежа, а только текст (но осталось место, на котором мог быть быть чертёж).

Clay tablet YBC 6967

(Источник: Yale Peabody Museum, YPM BC 021031; картинка есть в большем разрешении.)

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

Во-первых, древние шумерские задачи часто ставятся для пар специальных чисел, которые называют “обратными”. Такие числа используются и в типовых задачах с “квадратными уравнениями”, и на табличках с таблицами умножения. Соответствующие клинописные термины обозначают igi-bi и igi. А именно, это такие парные числа, произведение которых равно степени числа 60. 60 является основанием системы счисления, поэтому обратными будут: 4 и 15, 3 и 20, 6 и 600 и т.д. Это система с плавающей точкой, поэтом 60 тоже может обозначаться единицей (откуда и термин “обратные”: это ведь и есть обратные числа, в том смысле, что их произведение обозначается цифрой 1). Данный подход используется и в задаче на рассматриваемой табличке.

Почему, всё же, 60 – это единица? Потому что система счисления позиционная и шестидесятеричная. Например, в десятичной системе обратным к 2 можно назвать 5, потому что 2*5 это 10. Но десять, вроде бы, не единица? Да, если говорить о числе, но не совсем так, если говорить о системе счисления. Если десятичная точка плавающая, то отличить единицу от 10 или от 100 будет сложно. Если мы перемещаем точку вправо, то из 5 получается 0.5, а это уже точно 1/2 – то есть, обратное к числу 2 в привычном смысле алгебры умножения.

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

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

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

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

Вернёмся к табличке. Набранный на ней текст содержит формулировку задачи с пошаговым объяснением того, как эту задачу решать.

Упрощённый перевод, где в скобках даны мои комментарии (адаптировано из Jens Høyrup, Algebra in Cuneiform, 2013):

Из пары обратных чисел (то есть, те самые igi-bi и igi), одно превышает другое на 7.
Чему равны эти обратные числа?
Возьми 7, на которое одно число другое превышает, и разбей на две части: 3½. (Здесь “разбей” – нужно интерпретировать как деление отрезка пополам.)
Восстанови два 3½, результат: 12¼. (А это и есть геометрическая операция получения квадрата на двух равных отрезках, задающих стороны.)
Присоедини 12¼ к исходной площади, равной единице: 72¼. (Обратите внимание: единица здесь – есть первая степень 60 в терминах шумеро-вавилонской системы счисления, то есть, 60 + 12¼ == 72¼.)
Чему равно 72¼? Это 8½. (“Равно” здесь – это обратное геометрическое преобразование, от квадрата, как фигуры, к стороне: то есть, сторона квадрата с площадью 72¼).
Теперь отметь 8½ и соответствующее 8½. (В смысле сторон квадрата.)
3½, элемент площади, отсоедини и присоедини на место. (8½ – 3½ == 5; 8 + 3½ == 12; заметьте ещё раз: (8½)^2 – (3½)^2 == 60.)
Первое число – 12, второе – 5.
12 есть одна часть пары, 5 – вторая. (Те самые igi-bi и igi.)

Попробуем не рисовать чертёж, а сразу понять, какая тут задача, в числах. Первая строка условия говорит, что произведение некоего числа на сумму этого же числа и 7 равно 60. Собственно, если обозначить искомое число x и записать всё в формулах современной алгебры, то и получаем квадратное уравнение.

x(x+7) == 60
x^2 + 7*x == 60
x^2 + 7*x - 60 == 0

Как такую задачу решает школьник сейчас? Очень просто – что называется, не задумываясь:

x^2 + 7*x - 60 == 0,
D == 7^2 - 4(-60) == 289,
(x_1, x_2) == (-7 +/- √289)/2 = (5, -12).

Ответ -12 - не подходит (кстати, почему?); выбираем ответ 5. 
У нас прямоугольник, одна сторона равна 5, вторая, по условию, 5 + 7 == 12. Ответ: 12 и 5.

Но на исходной табличке нет дискриминанта, там, в современных обозначениях, записано несколько другое преобразование:

Исходная площадь 60, то есть, "единица", которую обозначим q.

Пусть p - разность сторон (второе число на 7 больше, то есть, p == 7).
 
x(x + p) == q

Тогда p/2 это половина разности (7/2).

(x + p/2)^2 == q + (p/2)^2 - то есть, строим больший квадрат, его площадь равна 72¼ (см. правую часть).

Дальше, по табличке, – “геометрически” извлекаем квадратный корень из левой части: то есть, определяем, что отрезок x + p/2 равен стороне квадрата с площадью 72¼. А именно: 8½.

Если переписать в современных обозначениях, то получим то, что принято называть выделением полного квадрата. Именно так и выводится формула для решения квадратного уравнения:

(x + p/2) == sqrt(q + (p/2)^2),
x == -p/2 + sqrt(q + (p/2)^2).

Здесь p, q это коэффициенты из x^2 + p*x + q == 0.

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

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

Теперь посмотрим на чертёж к задаче.

Screenshot

Условие соответствует верхней диаграмме. Остальные – объяснение метода решения.



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