Случайно тут попалось высказанное в качестве примера утверждение про восприятие текста: “если в предложении на английском языке поменять слово, то человек, знакомый с английским, сразу увидит – изменился смысл (meaning) предложения или нет” (перевод с английского). Конечно, всякий пример, подготовленный с подобной степенью обратной аллегоричности, содержит обязательные неточности, но данный вариант особенно интересен, потому что сводит взаимодействие “смысла” и “текста” к отдельным словам.

Вот если в предложении “дерево весело задело” поменять “дерево” на “платье”, то изменится ли смысл? Сможет ли оценить изменение смысла человек, знакомый с русским языком?

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



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

Предполагается, что постквантовые криптосистемы – это защита от взлома на квантовом компьютере. На гипотетическом квантовом компьютере, который может реализовать соответствующие алгоритмы – алгоритм Шора, прежде всего. Конечно, современный уровень “хайпа” вокруг квантовых компьютеров уступает уровню “хайпа” вокруг “искусственного интеллекта”, тем не менее, квантовых компьютеров, подходящих для атак на используемые сейчас криптосистемы, ещё никто не показал. И даже ничего близко похожего – не показали. Но если почитать, например, статью про квантовые вычисления даже в англоязычной “Википедии”, то там почему-то уверенно обсуждаются “практические особенности”. Но до “практики” же ещё очень далеко. Пока что даже исследовательские алгоритмы, призванные показать “квантовое превосходство”, требуют создания специальных задач, которые структурно оптимизированы не в направлении вычислительной полезности, а в направлении использования свойств, потенциально доступных на имеющихся сейчас квантовых устройствах (см. boson sampling). Это естественно, весьма логично для этапа теоретических исследований на экспериментальном оборудовании, но не относится к практическому применению универсальных компьютеров.

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

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



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

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

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

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



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

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



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

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

Manuscript

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

Вообще, блок постулатов озаглавлен Αἰτήματα – “Требования”, но принято называть эти требования “постулатами”. Пятый постулат, как известно, делает геометрию евклидовой. Содержательная часть его формулировки, в общем смысле, вводит ограничение на количество различных прямых, параллельных данной, которые можно провести через точку, не лежащую на данной прямой (здесь – одну и только одну параллельную можно провести). Однако классическая формулировка другая, она обычно оперирует двумя прямыми, на которые падает третья – см. перевод ниже. При этом и классических формулировок – много, они отличаются в деталях. Так, вариант, записанный в рассматриваемом манускрипте, содержит занятное дополнение. (Помимо прочего, постулат про “параллельные прямые” регулярно неверно излагается или ещё как-нибудь странно используется в современном “научпопе” и другой литературе.)

Читать древний шрифт сложно: тут не только лигатуры и прочие сокращения норовят ввести в заблуждение, но и начертания букв запутывают. Посудите сами: в пятой строке, например, слева, сразу после запятой, написано ἐκβαλλομένας, но букву β узнать непросто – здесь она скорее как современная рукописная русская “и” (строчная). В современной древнегреческой типографике текст со скриншота манускрипта (начиная с вертикальной красной черты) выглядит так:

Καὶ ἐὰν εἰς δύο εὐθείας ἐυθεῖα τις ἐμπἱπτουσα τὰς ἐντὸς καὶ ἐπὶ τὰ αὐτὰ μέρη γωνίας δύο ὀρθῶν ἐλάσσονας ποιῇ, ἐκβαλλομένας τὰς δύο εὐθείας ἐπ’ἄπειρον συμπίπτειν ἁλληλάις ἐφ’ ἅ μέρη εἰσὶν αἱ τῶν δύο ὀρθῶ(ν) ἐλάσσονες: καὶ δύο εὐθείας χωρίον μη περιέχειν.

Не литературный, но близкий к оригиналу, перевод, разбит на две части: 1) “И если одна прямая, падающая на две других, внутренние и по одну сторону углы меньше двух прямых [углов] образует, продолженные без ограничений две другие прямые встретятся на той стороне, на которой углы меньше двух прямых”; 2) “И две прямые пространства (области) не охватывают”.

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



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

Sphere in greenПочему лабораторная установка для квантовых экспериментов показывает именно эту статистику? Физика не должна бы отвечать на столь общий вопрос “почему?”. Тем не менее, предположим, статистика такая потому, что через несколько минут две группы исследователей, работающих в одном общем эксперименте, но в разных лабораториях, удалённых одна от другой, сравнят результаты измерений и подставят их в формулу, связанную с неравенством Белла – показатели должны совпасть с уже согласованными ожиданиями.

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

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

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

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

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

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

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

И это далеко не все онтологические лазейки, связанные с интерпретацией неравенства Белла.

(См. также “Алгоритм Шора и Вселенная кубиками“, “Алгоритм Шора в фантастической машине превращения вероятностей“.)



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

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

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

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



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

На скриншоте ниже – результат работы нехитрой программы на языке Python, которая вычисляет в точке x == i (мнимая единица) значение функции, известной как j-инвариант – j(x).
Screen of Numbers
j(x) – это модулярная функция, которая важна, например, в теории эллиптических кривых, но в настоящей заметке теоретические детали не играют существенной роли. Значение j(x) для мнимой единицы – это целое число 1728 (в каком-то смысле, по определению). А 1728 == 12^3, что тоже не является простым совпадением, так как 12 == 2^2 * 3. Можно j(x) записать в виде бесконечной суммы (разложение Фурье или q-expansion, если хотите, где q == exp(2*π*i*x)), что и используется в программе: j(x) == q^(-1) + 744*q^(0) + 196884*q^1 + 21493760*q^2 + 864299970*q^3 +… Коэффициенты – целые числа.

Поскольку модулярные формы имеют большое значение в арифметике, коэффициенты из разложения j-инварианта проявляются в математике довольно неожиданным образом, порождая даже отдельные направления (как в случае “Чудовищной бурды” – Monstrous Moonshine, самогон, который в русскоязычной “Википедии” едва не превратился в “Монструозный отблеск”). Но это тема для другой записки, более подробной. Здесь же отметим, что так как коэффициенты – целые числа, можно взять их побольше (например, 42) и посчитать значение j(x) “численными методами”, проверив, сойдётся ли, и насколько быстро, результат. Понятно, что если в выражение для q (см. выше) подставить x == i, вместо i*i получится -1, что и делает каждый очередной элемент суммы всё меньше и меньше, несмотря на увеличивающиеся коэффициенты.

Однако здесь есть хитрости. Если использовать обычные настройки Python, то точности для вычислений не хватает, результат не сходится. Если взять math.exp() и math.pi, точность по умолчанию, получаем 1728.000000000000014825929946, причём ещё на 13 шаге суммирования – не очень-то хороший результат: больше чем 1728. Увеличение точности само по себе тут не помогает, нужно использовать модуль decimal и ввести достаточно длинные значения для π и e, заменив math.exp() и math.pi на Decimal(E**(Decimal(-2)*Pi))**n, где E и Pi – значения со многими знаками после запятой. Точность в decimal устанавливается при помощи getcontext().prec. Результат со скриншота получен для prec = 81 в Python 3.5. Всё это хорошо иллюстрирует, что компьютеры не считают в действительных числах.

Исходный код (проверьте, что символы табуляции не были “съедены” так же, как и некоторые цифры десятичного разложения):

from decimal import Decimal, getcontext
getcontext().prec = 81
Pi =	Decimal('3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982')
E =	Decimal('2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427')
M = [
1, 744, 196884, 21493760, 864299970, 20245856256, 333202640600,
4252023300096, 44656994071935, 401490886656000, 3176440229784420,
22567393309593600, 146211911499519294, 874313719685775360,
4872010111798142520, 25497827389410525184, 126142916465781843075,
593121772421445058560, 2662842413150775245160, 11459912788444786513920,
47438786801234168813250, 189449976248893390028800, 731811377318137519245696,
2740630712513624654929920, 9971041659937182693533820, 35307453186561427099877376,
121883284330422510433351500, 410789960190307909157638144, 1353563541518646878675077500,
4365689224858876634610401280, 13798375834642999925542288376, 42780782244213262567058227200,
130233693825770295128044873221, 389608006170995911894300098560, 1146329398900810637779611090240,
3319627709139267167263679606784, 9468166135702260431646263438600, 26614365825753796268872151875584,
73773169969725069760801792854360, 201768789947228738648580043776000, 544763881751616630123165410477688,
1452689254439362169794355429376000
]
j = Decimal(0)
n = -1
for c in M:
	j = j + Decimal(c) * Decimal(E**(Decimal(-2)*Pi))**n
	print("j = ", j)
	n = n + 1
print("j^(1./3) =", float(j)**(1./3))


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

Попытаться построить квантовый компьютер на тысячи кубитов имеет смысл хотя бы для того, чтобы проверить, что имеющиеся модели работают для больших пространств состояний. Попытка факторизации 1024-битного числа на гипотетическом квантовом компьютере при помощи алгоритма Шора сталкивается с необходимостью как-то действовать в пространстве из 2^1024 состояний (ну, предположим). Влезет ли такое количество состояний во Вселенную? Насколько 2^1024 вообще большое?

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

Существенно ли (2^80)! превосходит 2^1024? Может показаться, что 2^1024 очень большое число. Однако провести сравнение нетрудно. Заметьте, что при вычислении факториала каждое чётное число повышает степень двойки (иногда – больше чем на единицу), поэтому 2^1024 вкладывается уже в 1026! (ну или примерно так; 1026 = 1024+2, проверьте; естественно, 171! больше 2^1024). Что уж говорить про (2^80)!! (Здесь второй восклицательный знак обозначает восклицание.) Теперь может показаться, что 2^1024 не такое уж и большое число, чтобы не вкладываться в качественно нарезанную Вселенную.

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

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

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



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

TypewriterГенераторы текстов на заданную тему сейчас вновь популярны. Пример, естественно, ChatGPT. Можно ли автоматическим способом и с высокой точностью определить, что некоторый обозримый текст на естественном языке написан таким качественным компьютерным генератором, а не человеком?

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

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

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

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

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

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

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



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

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

DH обозначает протокол Диффи-Хеллмана. В мессенджере Telegram протокол Диффи-Хеллмана используется при создании “секретных чатов”, где он служит для получения общего секрета клиентами (то есть, ключа для зашифрования сообщений). Рассматривается самый простой вариант – обмен сообщениями между двумя пользователями в защищённом режиме.

Telegram использует “классический” (или “мультипликативный”) вариант DH, работающий в мультипликативной группе конечного поля (сейчас такой вариант принято обозначать FFDH – от Finite Field). Если обойтись без строгих научных терминов, то этот вариант DH не “эллиптический” (например), а “обычный”, работающий в арифметике остатков. Про “эллиптический” вариант многие слышали применительно к TLS – там он называется ECDH(E). То, что в Telegram не используется современный вариант на эллиптической кривой – всегда выглядело несколько странно. Скорее всего, этому есть очень простое объяснение, связанное с историей появления протокола MTProto, но, так или иначе, эти детали остаются за рамками данной заметки, которая посвящена свойствам модулей DH и небольшому фрагменту исходного кода приложения, связанному с проверкой этих свойств.

Чтобы определить конкретные параметры протокола DH (FFDH, но не только) – требуется задать достаточно большое простое число. В случае “классического” варианта битовая разрядность этого числа, по современным представлениям, должна быть хотя бы 2048 бит. Telegram требует строго 2048 бит (см. ниже). Данное простое число задаёт базовую структуру для арифметики протокола и называется модулем. От свойств модуля зависит надёжность реализации. Так, слишком маленькая разрядность, – например, 256 бит, – позволяет очень быстро решать обратную задачу (находить дискретный логарифм) и вычислять по открытой информации секретное значение, которым обмениваются стороны. (Дежурное замечание: пример про 256 бит – не относится к разрядности ECDH, там другие алгоритмы и структуры.)

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

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

Простое число P, представляющее собой модуль DH, поступает с сервера в ответе на запрос getDhConfig, в виде массива байтов. Свойства проверяются в telegram/messenger/SecretChatHelper.java вызовом функции Utilities.isGoodPrime(P, G); (G – это генератор, второй параметр протокола.)

if (!Utilities.isGoodPrime(res.p, res.g)) {
 acceptingChats.remove(encryptedChat.id);
 declineSecretChat(encryptedChat.id, false);
 return;
}

Вся содержательная проверка – внутри isGoodPrime() (telegram/messenger/Utilities.java). Эта функция начинается следующим фрагментом:

if (!(g >= 2 && g <= 7)) {
 return false;
}

if (prime.length != 256 || prime[0] >= 0) {
 return false;
}

BigInteger dhBI = new BigInteger(1, prime);

Первый if проверяет интервал значений генератора.
Следующий if – контролирует разрядность переданного модуля. 256 байтов – это 2048 бит. prime[0] >= 0 – тут проверяется, что старший бит установлен в единицу. Этот оборот может показаться не самым очевидным: тип byte в Java определён со знаком, соответственно, если значение больше либо равно нулю, это означает, что старший бит – нулевой (знак записи числа “плюс”); представление целых чисел большой разрядности (BigInteger – см. следующие строки) здесь использует запись, в которой старший байт – байт с нулевым индексом. Таким образом, prime[0] >= 0 проверяет, что получающееся число будет не меньше, чем 2^2047. new BigInteger(1, prime) – создаёт объект BigInteger и загружает в него значение модуля из массива prime. Единица в левом параметре конструктора – обозначает, что число положительное. Зачем нужен выше фрагмент с if, проверяющий длину и значение старшего бита? Например, сервер мог бы передать 256 байтов, в которых старшие значения были бы нулевыми, тогда длина массива соответствовала бы заданному требованию, но реальная разрядность получившегося в BigInteger числа оказалось бы меньше, так как нулевые байты слева не учитывались бы.

Дальше следует блок (здесь пропущен) из нескольких if..else if, которые, в соответствии со значением генератора, проверяют остатки по простым 3, 5, 7 и некоторым степеням 2. Этот фрагмент, наверное, можно рассмотреть в отдельной заметке из области занимательной математики. Цель проверки – контроль свойств полученного модуля (этим фрагментом вся проверка “доверия серверу” исчерпывается).

А следующая пара строк в telegram/messenger/Utilities.java довольно занимательная (приведено с сокращениями, см. детали ниже):

String hex = bytesToHex(prime);
if(hex.equals("C71CA...")) {
 return true;
}

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

Непосредственно в коде зашит вот такой модуль (переносы строк добавлены для удобства – это одно число):

C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F
48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C37
20FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F64
2477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4
A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754
FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4
E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F
0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5B

Это простое число (ну, с точностью до детерминированной проверки в SAGE и вероятностной проверки в Mathematica, конечно; но это означает, что простое). То есть, в этом фрагменте – код строго верит в один конкретный модуль. Для других модулей предусмотрена проверка простоты (и статуса safe prime):

BigInteger dhBI2 = dhBI.subtract(BigInteger.valueOf(1)).divide(BigInteger.valueOf(2));
return !(!dhBI.isProbablePrime(30) || !dhBI2.isProbablePrime(30));

Здесь, с помощью вероятностного теста (это единственный способ – известные детерминированные алгоритмы слишком ресурсоёмкие), проверяется, что модуль P простое число и что (P-1)/2 – тоже простое. Обычная практика. На этом проверки заканчиваются (естественно, здесь не может быть никакой аутентификации и тому подобных дополнительных шагов).

Нужно отметить, что сравнение получившихся ключей в Telegram должны проводить сами пользователи, по отпечаткам, которые им выводит приложение. Это тоже важный момент.



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