Продолжение.
2.3. Пояснение к пункту 2.1 о способе подстановки аргументов в один алгоритм с получением другого алгоритма:
Алгоритм по превращению одного текста алгоритма в другой – с подставленным первым аргументом – можно изображать так:
. Мы использовали выше и продолжим использовать далее обозначения типа
и т.п. Подразумевается, что таким образом мы используем какой-то стандартный известный способ по превращению алгоритма, зависящего от нескольких аргументов в некие другие алгоритмы – в которых часть аргументов (или даже все) исходного алгоритма уже подставлена. А можем передавать тексты алгоритмов и без подставленных аргументов, как, например
.
Тут есть важное различие между двумя способами использования 1-го (без потери общности пусть будет 1-й) аргумента в алгоритме
:
2.3.1. Фиксацией некоторого значения
в аргументе
алгоритма
и превращения его в новый алгоритм
;
2.3.2. Использование алгоритма
и его аргументов обычным образом: сначала заполняется (вне рамок инструкций и работы алгоритма
) информация о значениях аргументов там, где алгоритм
ожидает найти эту информацию, а затем запускается алгоритм
.
Важное отличие между 2.3.1 и 2.3.2 в том, что в случае 2.3.1 время на присваивание переменной
значения
является частью времени работы алгоритма
, а размер этой операции – включая размер текста
- является частью размера алгоритма
. Поэтому в случае 2.3.1 мы не можем рассматривать значение переменной
как полученное по ссылке (когда передаётся адрес места, где находятся данные, а не сами данные – байт за байтом).
При использовании алгоритмов в духе варианта 2.3.1 будем использовать обозначение
, что по виду не отличается от варианта 2.3.2 при аргументе
со значением
. Но если по контексту будет не ясно, какой из вариантов имеется в виду, то будем это специально оговаривать.
Например, на место первого аргумента внутри формулы:
подставлен программный текст
. И в этом программном тексте подстановка в первый и второй аргументы значений
и
выполнены по варианту 2.3.1. И всегда для аргумента, который относится к подстановке внутри текста программы или текста логической формулы мы будем использовать вариант 2.3.1.
А если аргумент не является частью текста программы/логической формулы – может быть и вариант 2.3.1 и вариант 2.3.2. Например, в разбираемом сейчас алгоритме
аргумент
– подставляется по варианту 2.3.2. Ведь время работы данного алгоритма не зависит от размера слишком больших аргументов
и поэтому аргумент
– именно аргумент, размер которого и время, расходуемое на заполнение аргумента значением, не являются ни частью размера разбираемого алгоритма, ни частью времени его работы.
Более того, аргумент
передаётся по ссылке, чтобы не передавать байт за байтом ненужную (при слишком большом размере значения аргумента
) информацию при использовании «Сфинкса».
Разницу между вариантом 2.3.1 и 2.3.2 можно практически наблюдать на примере программы из подраздела 5.2 «Теорема о построении алгоритма, применяемого к себе». Там видно, что изначально нет операции присваивания «аргументу»
(хотя там аргумент представлен «готовой» переменной). Программа просто использует готовое значение из
и только с этого момента отсчитывается её размер и время её работы. А в процессе исполнения процедуры диагонализации присваивание становится частью «тела» и процесса работы итоговой программы.
И в подразделе 5.1 «Лемма о диагонализации» формула
, используемая в доказательстве Леммы, понимается в смысле варианта 2.3.1.
2.4. Притом «персональную подсказку» для алгоритма-решения «Эдип» алгоритм «Сфинкс» должен выдать за полиномиальное количество шагов относительно не всех аргументов задачи, а относительно какого-то параметра (или параметров), которые позволяют выделить нужную зависимость остальных аргументов так, чтобы получались только «подходящие» аргументы для «персональной подсказки».
Например, пусть среди аргументов будут ещё аргументы
,
. Аргумент
будет обеспечивать все нужные зависимости, а аргумент
будет лишь иметь соответствующий размер, допускающий нужный размер аргумента
(у нас же задача из
и наибольший размер доказательства
должен опираться через полином на размер каких-то других аргументов). Тогда перепишем формулу «персональной подсказки» для «Эдипа» так:
А теперь можно представить данный алгоритм проверки в сокращённом виде – превратив общую исходную задачу проверки «Сфинкс» в задачу только для разбираемой персональной подсказки:
При этом известно, что никакое доказательство не подходит и ответ получается без рассмотрения доказательства для данной частной подзадачи. То есть тут – время работы алгоритма
не зависит от
(и от размера
). И еще – между
и
есть соотношение – полиномиальности. Поэтому, когда «отмирает»
– то «отмирает» и
за ненадобностью.
Вся эта «абстрактная» подготовка в данном пункте – является более развёрнутым изложением пункта 2.3 раздела 1 «Задачи из классов
и
,
и
». А соответствующий алгоритм «Сфинкс» будет реализован в следующем разделе.
От «Эдипа» требуется решать полученную «подзадачу» на тех же принципах, что и любую задачу из класса
(раз мы ищем полный алгоритм-решение, способный сводить произвольную задачу из класса
к задаче из класса
). И тогда время ответа «Эдипа» для частной задачи из «персональной подсказки» с её ограничивающим полиномом на время работы
должно будет уложиться в его («Эдипа») ограничивающий алгоритм от тех же значимых аргументов –
. А такой ограничивающий алгоритм для времени работа «Эдипа» при ответе на «специальный вопрос» может быть неполиномиально меньше, чем у алгоритма-проверки для общей задачи –
.
При таком поведении «Эдипа» будет соблюдён и принцип решения задач из класса
: время работы алгоритма-решения не должно превышать некоторого полинома от тех значений, которые составляют ограничивающий полином для времени работы алгоритма проверки. И будет соблюдён принцип идентичности требований к решению задач – составленных подстановкой нужных зависимостей в некоторые параметры из более общей задачи – с одной стороны, а с другой стороны – те же задачи, но в которых эти же зависимости изначально считаются фиксированными (частью программы).
Обобщим полученный вывод:
Если для «персональной подсказки» алгоритма «Сфинкс» о возможностях алгоритма «Эдип» имеется ограничивающий полином
на время получения «подсказки», то корректный алгоритм «Эдип», способный сводить задачи из класса
к задачам из класса
, найдёт правильный ответ (если он есть) или выдаст 0 (если «персональная подсказка» не содержит правильного ответа) за время, ограниченное некоторым полиномом от тех же аргументов
.
2.5. Для тех, кто помнит пункт 5 из раздела 1 «Задачи из классов
и
,
и
» поясню, что полиномиальность времени работы действительно является атрибутом массовой, а не единичной задачи – то есть, не все параметры (аргументы), относящиеся к «персональной подсказке» в ней могут быть зафиксированы. Уже и по этой причине нам потребовались дополнительные аргументы
,
.
3. Возникает вопрос об уместности требования от корректного «Эдипа» выявлять «подзадачи», которые пусть реально существуют внутри общей задачи, но не в «готовом виде». Но в таком нашем требовании к корректному «Эдипу» мы не нарушаем сам принцип требования к «Эдипу» – «понимать условности». Даже «готовый вид» задачи из класса
– это некая условность. Мы даже информацию об алгоритме проверки «Сфинкс» передаём на каком-то языке. А это может быть Pascal, C, Prolog или даже на русском – из программы бухучёта 1С.
В сфере IT вопрос взаимодействия между программами является одним из важнейших. Написаны объёмные технологические стандарты типа com+, Corba, программы на .Net содержат в себе «манифесты» для других программ, в Интернете работает множество протоколов взаимодействия между клиентом и сервером и т.д. и т.п. И это всё – не принципиальные вопросы, а вопросы принятых условностей. Мы просто рассматриваем те алгоритмы-решения, которые «понимают» нужный нам «протокол». Если наша программа ориентирована на русский язык, то «английские» алгоритмы-решения её не поймут, но важен принцип возможности решить (или невозможности решить) со стороны той программы, которая «понимает» не принципиальные условности.
Даже «персональная подсказка» выдаётся по определённому протоколу. Как «Эдипу» выделить нужную «подзадачу»? Такой вопрос стоял бы, если бы у нас было множество «специальных задач», тогда и «Сфинкс» был бы написан иначе – и намного сложнее (в соответствии с каким-нибудь технологическим стандартом, например). Но мы будем рассматривать лишь одну «специальную задачу» – «АнтиЭдип» (для произвольного «Эдипа»). Наш протокол, который должен понимать «Эдип», можно упростить до такого: «Ищи персональную подсказку у «Сфинкса» для соответствующего тебе «АнтиЭдипа».
И ещё – по поводу того, что в общем случае для решения задачи из класса
алгоритм-решение должен найти и использовать в данной задаче «персональную подсказку» для себя:
Нас ведь не удивляет, что в реальной жизни задачи, которые мы решаем – обычно поставлены персонально перед нами? Или перед нашим коллективом? Иногда их ставят люди, иногда «жизнь» или «воля божья» - кому как нравится считать. И то, что возможность решения задачи и результат решения зависят от «исполнителя» – как правило – факт. А то, что подобные факты до сих пор не были формализованы в математике – огромное упущение, которое будет исправлено в данной работе. И это гораздо более принципиальная и интересная часть работы, чем доказательство
– на мой взгляд.
Ещё кое-что о дополнительной «сложности» – понять, что речь «о тебе» – будет сказано в данном разделе ниже в пункте 5.1.
4.1. Заметим, что «персональная подсказка» для «Эдипа» про его возможность доказать теорему
– это вовсе не ответ 0 на все доказательства, которые не может дать «Эдип». «Эдип» даёт в лучшем случае одно доказательство для заданной ему для доказывания теоремы, а может и вовсе не остановиться, и не дать ничего. «Персональные подсказки» - это обычный (при аргументе долга «объективно») результат алгоритма проверки, в котором исключены из числа корректных те доказательства, которые алгоритм-решение не может выдать по какой-то причине. Например:
Все доказательства, доказывающие данную теорему про «АнтиЭдип», кроме тех доказательств, которые «Эдип» не может доказать в силу того, что он не может предсказать поведение «Анти-Эдипа».
Персональная подсказка – это дополнительный фильтр, не пропускающий кое-что из того, что по каким-то причинам не может быть сгенерировано алгоритмом-решением.
Это как при расширении исходной теории Пеано новыми аксиомами арифметики – каждая новая аксиома – дополнительное ограничение, которое не допускает (под угрозой превращения теории в противоречивую) добавления в теорию тех утверждений, которые будут противоречить новой аксиоме. Но при этом отсутствие каких-то аксиом не означает противоречия – аксиом всегда «не хватает» (теории неполны) в теориях первого порядка, которые эффективно аксиоматизируемы. При этом из двух отрицающих друг друга утверждений лишь одно истинно в полной арифметике, но выразить этот факт доступные нам для понимания теории не могут. Зато это такие теории, с которыми можно работать на базе аксиоматического подхода.
Также и «персональная подсказка» для «Эдипа» - оставляет без «запрета» какие-то варианты ответов, которые для «Эдипа» исключены. Зато «персональная подсказка» может быть получена полиномиально быстро.
И для всех «обычных» (не «Эдипов» в отношении теоремы
) алгоритмов-решений тогда будет верно равенство:
4.2. Таким образом, задача из класса
в общем случае подразумевает наличие у алгоритма- проверки ответов, зависящих от алгоритмов-решений (ответы, зависящие от аргумента долга с соответствующим значением). Выделение аргумента долга в отдельный аргумент – операция условная. Со времён «канторовой пары», известно, что в одно значение (в один аргумент) можно полиномиально быстро «упаковать» и «распаковать» сколько угодно много значений. Но может оказаться и так, что в задаче из
не существует никаких «персональных подсказок». Тогда мы получаем «классическую» задачу из
или «задачу Кука». Дадим определение:
Классические задачи из
(или задачи Кука) - те, которые нельзя свести к задачам со значимым аргументом долга. Классическая задача – это задача из
с незначимым аргументом долга (когда для всех алгоритмов-решений информация одинаковая).
Чтобы как-то отличить «не классические» задачи из
от задач Кука, назовём неклассические задачи – «авторизуемые задачи из класса
». «Авторизация» - термин из сферы IT. Такое название отражает то обстоятельство, что для решения данных задач от алгоритма-решения требуется способность отличать «себя» от «не себя», требуется уметь использовать соответствующую «тебе» персональную информацию, которую может выдать при соответствующем запросе алгоритм проверки.
4.3. И задачу Кука действительно можно свести к КНФ (конъюнктивной нормальной форме), как это делается в теореме Кука. Отмечу только, что посылка теоремы Кука о наличии готовой информации об ограничивающем алгоритме (для времени работы алгоритма проверки) ошибочна. Но можно, видимо, исправить данную ошибку перебором «кандидатов» в ограничивающие алгоритмы в виде
. Тогда для какого-то n будет достигнут (если это действительно задача Кука) ограничивающий алгоритм (с «перелётом» степени, скорее всего, но всё равно полиномиальный), а предыдущих
шагов будет лишь логарифмическое количество от найденного n, что не повлияет на полиномиальность.
Разумеется, предлагаемое исправление ошибки в теореме Кука не позволяет, вообще говоря, отличить задачи из
от тех, для которых ограничивающего алгоритма нет. Это и закономерно –нет отрицательного теста на остановку алгоритма и, следовательно, нет отрицательного теста на принадлежность алгоритма к классу
(с наличием ограничивающего алгоритма). Что очевидно с учётом пункта 5 из раздела 1 «Задачи из классов
и
,
и
».
Если же задача является задачей Кука, то предложенный перебор n будет конечным, так как решение в каждом испытываемом случае допускает проверку при помощи алгоритма проверки – одинаковом для всех алгоритмов-решений. Однако для авторизуемых задач из
дело обстоит иначе (и не только в отношении проверки).
4.4. Ясно, что превращение в КНФ – это разбор программного текста алгоритма проверки и приведение его к специальному виду – с целью некого стандартного анализа, если таковой имеется.
И разбор программного кода в общем случае необходим, потому что просто запускать алгоритм проверки при разных аргументах и таким путём найти нужное доказательство – не получится быстро: это неполиномиально долгий перебор. Поэтому выход – в анализе текста программы, а уж как делать этот анализ – через приведение к КНФ или иначе – вопрос второй.
4.5. Интересно, что в основе задачи Кука может быть и теория Пеано, которая, вроде бы, не сводится к логике высказываний. Но сама по себе проверка доказательств – действие исключительно простое – поэтому на него и опирается весь формализм – и в логике высказываний, и в сложных теориях первого порядка. Подобную проверку можно сводить к логике высказываний. Но! – когда речь идёт о свойствах алгоритмов и их возможностях по выдаче результатов – то тогда иное дело.
И алгоритм проверки «Сфинкс» с «персональной подсказкой» содержит в себе не просто обычный алгоритм проверки доказательств, но и выражает зависимость результата проверки от некого алгоритма («Эдипа»). А это уже задействует более богатые возможности теории Пеано, чем те, которые мы используем при проверке доказательств. И вот здесь к логике высказываний задача уже – не сводится.
4.6. И не сводится потому, что получая алгоритм проверки – алгоритм-решение должен «понять», нет ли «персональной информации» для него. А это уже выбор – на основе терма. А к логике высказывания индивидные переменные и символы не сводятся.
Интересные подробности о необходимости выхода за рамки логики высказываний для математики можно почитать в «Основаниях математики»:
Без индивидных переменных и индивидных символов логика высказываний «… обходит стороной один очень существенный логический момент, а именно – отношение сказуемого к подлежащему, т.е. связь между субъектом и предикатом» - «Основания математики» Д. Гильберт, П. Бернайс, Том 1, Глава IV «Формализация процесса вывода II: Исчисление предикатов», Параграф 1. «Введение индивидных переменных …». И далее – использование функций с индивидными символами и переменными, любое корректное сочетания которых представляет из себя «терм» - «Основания математики» Д. Гильберт, П. Бернайс, Том 1, Глава V «Исчисление предикатов с равенством …», Параграф 1. «Расширенный формализм», п. 5 «Добавление функциональных знаков: понятие терма …».
5.1. Здесь перед алгоритмом-решением возникает дополнительная сложность – понять, что речь «о тебе». Но это одна из решаемых сложностей и чем она принципиально отличается от любых других сложностей при поиске ответа на вопрос? Сложности бывают самые невероятные и у многих сложностей – нет пока что способа решения (а у некоторых неразрешимых вопросов вообще никогда не будет решения в общем случае) – в отличие от «распознания себя». Для такого распознания подходит, например, метод диагонализации.
Есть полиномиально быстрая информация о возможностях данного алгоритма? Да. Является ли эта задача из класса
? Да. Можно поставить вопрос о возможности данного алгоритма-решения выдать соответствующий ответ за время, полиномиальное от времени на получение данной «персональной подсказки»? Да. Будет ли этот ответ из класса
для такой подзадачи? Да.
Но при этом выяснилось, что задача имеет разные правильные решения для разных алгоритмов-решений. И это та особенность, которая не сводится к одной КНФ на все алгоритмы-решения.