В июне 2014 я надеялся, что вернусь сюда в августе и дам здесь технически аккуратное доказательство для
. Однако по мере углубления в тему, я наталкивался на такие странные вещи, которые не мог проигнорировать, и которые ставили доказательство под сомнение. В итоге причину этих странностей мне все же удалось обнаружить (смею думать) через полгода с лишним. Вы будете крайне удивлены - какая это причина. И согласитесь со мной, что не только трудно было начать искать там, где она оказалась, но и обнародовать её немного страшновато. Зато это очень интересно. Приступим.
Теорема . Часть первая - эвристический уровень.Рассмотрим следующую задачу из класса
, сформулированную в 2-ух пунктах:
1. Имеется некоторая непротиворечивая (важно!) система аксиом
. В качестве слов будем рассматривать
– записанные на языке теории алгоритмы. В качестве слова-свидетеля будем рассматривать текст доказательства для
. Где
– некоторое число (можно считать, что число записано в десятичном представлении, но это не принципиально). Если имеется слово
и слово-свидетель
, то, как известно из логики, можно при помощи алгоритма автоматической проверки доказательств
за полиномиальное время от размера
, проверить, доказывает ли
какое-то равенство
для
на базе аксиом
. На размер
накладывается стандартное для
ограничение некоторым полиномом от длины
.
2. Если система аксиом
противоречива, то в качестве
выбран предикат, который всегда выдает «ложь».
Заметим, что ограничение на длину доказательств не делает какие-либо доказательства теории недоступными. Просто всегда алгоритм
можно расширить до нужного размера пустыми операторами. Затем станет доступно доказательство нужной длины для
без «наполнителя», а затем достаточно дать короткое дополнение в доказательстве, которое приравняет
с «наполнителем» и
без «наполнителя». И противоречивая теория точно так же останется противоречивой, выдавая для одного и того же алгоритма какие угодно результаты в качестве доказуемых результатов. Правда все эти доказательства в противоречивой теории должны быть признаны ложными в соответствии с п.2.
Но главное в сформулированной задаче то, что она в любом случае является задачей из класса
– какой бы пункт не был реализован. Потому что
является полиномиальным по времени своей работы и в пункте 1, и в пункте 2.
В то же время – нет алгоритма, который позволял бы в общем случае определить, какой из пунктов – 1 или 2 – будет реализован. Потому что из логики известно, что задача определения непротиворечивости теории является в общем случае неразрешимой.
В то же время, задача сформулирована корректно, потому что всякая теория является либо противоречивой, либо непротиворечивой. Поэтому либо пункт 1, либо пункт 2 реализованы.
Получается неразрешимость (в общем случае) алгоритма проверки
. А это значит, что и универсального способа найти доказательство
по слову
– тем более нет. То есть - для конкретной задачи найти доказательство может и удастся, но способа для всех задач - нет, потому что их совокупность неразрешима.
Из этих общих соображений видно, что
. Но мы построим конкретный пример, демонстрирующий невозможность свести задачу
к
. Более того, нет вообще никакого корректного и ограниченного по времени универсального способа всегда найти истинное доказательство
для слова
– для подобных (сформулированных в пп. 1 и 2 ) задач. Притом речь идет про доказательства, которые есть и размеры которых соответствуют тем, которые допустимы для слова
. Чуть ниже будет построен конкретный пример такой невозможности.
Да, известно мнение, что для задач из класса
есть способ перебора всех слов-свидетелей в пределах допустимого для них размера и получение заведомо правильного ответа – есть нужное слово-свидетель для заданного слова или его нет. Но это мнение опирается на ошибочную посылку, что заранее известен алгоритм проверки пары слово + слово-свидетель. А это – совершенно не обязательно. Перейдем к построению примера, где метод прямого перебора с ограничением по времени оказывается несостоятельным.
Перед построением примера оговорюсь, что хитрые конструкции, которые я использую в примере – довольно легко реализуются средствами логики (методом диагонализации, а не при помощи неподвижной функции, кстати говоря), и во второй части данной заметки я приведу все эти формальные конструкции и строгие выводы. Сейчас же даю общую картину.
Парадокс « против »Берем нашу задачу из пунктов 1 и 2. Берем метод прямого перебора с ограничением по времени (фактически - ограничение по размеру доказательств) - алгоритм
. Для простоты считаем, что он выдает не текст доказательства, а результат этого доказательства (число
) как прогноз результата работы алгоритма
. Напомню, что текст некоторого алгоритма
подставлен на место переменной
, когда решается вопрос про результат работы этого алгоритма. Чтоб отличить в формулах алгоритмы от их текстов, буду обозначать тексты чертой над обозначением алгоритма. Вот так, например:
Если же нужного доказательства среди перебираемых доказательств не оказалось, то
возвращает
(какое-то значение, которое мы так обозначим – ясно, что результаты
не прямо равны результатам
, но техническое соответствие не обсуждаем пока). В данном случае «нокаут» означает, что счет оборвался, а ничего удовлетворительного не нашлось.
В качестве
для нашего примера возьмем
– такой алгоритм, который запускает внутри себя копию
и возвращает в качестве результата нечто противоположное (отличное) тому, что «предсказывает»
про
. То есть,
запускает
со своим (
) текстом и «обманывает»
. Очевидно, что
в принципе не может выдать ничего, что могло бы правильно предсказать результат работы
. Единственный корректный результат, который может выдать
- это
.
А теперь мы сделаем и вовсе конфликтную вещь – мы включаем в число аксиом равенство
. Технически это можно сделать диагонализацией, например. Тут нужно понимать, что
, которая подставлена в данную формулу - содержит в себе аксиому, эквивалентную самой этой формуле.
И что тогда выдаст
про
? Ведь
предельно прост – он запускает
и обманывает его. А по аксиоме
видно, чему равно
. И поэтому ясно, что конкретно должен выдать
в ответ на данный результат. «Ясно» - это значит, что есть соответствующее доказательство и оно очень короткое - потому что основано на нашей добавленной аксиоме и простых данных о примитивном устройстве
.
Но! Если
действительно выдаст нечто помимо
, то настоящая
обманет его. И у этого факта тоже найдется доказательство. А это будет означать, что теория противоречива. А раз теория противоречива, то в нашей задаче включился пункт 2 и корректному алгоритму
про
следовало выдать прогноз
(хотя точнее назвать это отказом от прогнозирования). Но при этом разбираемое противоречие исчезло бы – как это ни забавно. Но и
повел бы себя корректно, хотя ценой за эту корректность оказывается невозможность для
сообщить очевидный прогноз о результате работы
.
Обратите внимание, как неожиданно красиво согласовались между собой разные факторы. Ведь мы дополнили состав аксиом новой аксиомой, которая, вроде бы, должна была привести к противоречию и ложному срабатыванию
при анализе
. Однако оказалось, что выдать значимый результат здесь
не может, потому что тогда получится противоречие и это значит, что он должен выдавать только
. Но при условии выдачи
и противоречия не возникает - потому что единственное, что утверждает наша добавленная аксиома, это что в точке
наш
выдает
, но именно это и происходит и аксиома отражает реальность. При этом
фактически «видит» свою неполноту и «отказывается» воспользоваться тем доказательством, которое есть и длина которого - в нужных пределах.
Тут мы встречаем математические основы рефлексии, имхо, основы того, без чего были бы невозможны наши субъективные «я». Каким-то образом
«понимает» что речь в аксиоме идет именно про него и нарушать эту аксиому ему не следует. Очень интересный эффект. Поэтому я бы дал и второе название этому парадоксу - «Теорема об осознаваемой неполноте». Это по сути очень отличается от теорем Гёделя, где некоторые утверждения просто не могут быть доказаны - как и их отрицания - в теории. Но при этом сама теория не только не отдает себе в этом отчета, но доказательство подобных выводов внутри неё означало бы её противоречивость. А вот в разбираемом парадоксе неполнота в решениях алгоритма
отражена в теории прямо на уровне аксиомы и противоречий не возникает.
Как видим, даже метод прямого перебора с ограничением по времени потерпел крах в попытке решить задачу класса
в нашем примере. Так что тут трудности с решением задач из класса
не просто доходят до степени
, но и простираются значительно дальше.
Все приведенные рассуждения годятся и для полиномиального по времени алгоритма
. Поэтому мы доказали как
, так и значительно более сильное утверждение. Пока в эвристическом виде, но попозже дам и строгий.
Сформулируем некоторые выводы и наблюдения.Ошибочное представление о возможности свести задачу из класса
к некой
-полной задаче связано со следующим: Пусть даже нет в готовом виде алгоритма проверки истинности для пар слово + слово-свидетель в задаче из класса
. И вместо готового алгоритма у нас есть какая-то менее очевидная формулировка, которая все же логически идентична некоторому подходящему для класса
алгоритму проверки пар. Но вроде бы (внимание, тут ошибка!) можно за конечное число шагов всегда узнать этот алгоритм. Неважно, за экспоненциальное, факториальное или еще какое время от размера исходной формулировки задачи. Главное – это делается один раз и затем можно использовать для бесконечного числа единичных задач.
Например – для быстрой проверки любых слов-свидетелей надо один раз найти минимальный корень какого-то одного кубического уравнения. И вот если математик Петя знает, как решить кубическое уравнение, то для него задача проверки слов-свидетелей будет быстрой, а задача будет – из класса
. А для математика Васи, который кубические уравнения решать не умеет – задача будет не из класса
? Конечно же, нет такой зависимости класса
от знания/незнания математика. А вместо этого предполагается, что всегда найдется Петя.
Однако, есть такие формулировки для
-задач, которые, вообще говоря, не являются разрешимыми. То есть, для их решения нет вообще никакого универсального способа. И мы построили пример такой задачи в пп. 1 и 2. А это значит, что неявное предположение о возможности всегда за конечное время найти алгоритм проверки для пары слово + слово-свидетель произвольной задачи из класса
является ошибочным. Таким образом, мы доказали следующую теорему:
Теорема. Задачи класса
не являются – вообще говоря – эффективно распознаваемыми.
Следствие. Никакая задача из класса
не является
-полной.
Следствие очевидно в силу того, что для сводимости необходимо знать алгоритм проверки пар слово + слово-свидетель для сводимой задачи. А способа для получения этого алгоритма нет – вообще говоря. Хотя именно с посылки о наличии готового алгоритма проверки пар начинается доказательство теоремы Кука о NP-полноте задачи ВЫП (задача проверки выполнимости предложений логики высказываний с пропозициональными переменными). Доказательство проведено корректно, но из неверной посылки. Поэтому не удивительно, что результат доказательства получился ошибочным.
В ещё недавней истории, обнаруженные в логике парадоксы привели к необходимости пересмотреть основания математики, что породило глубокие и опустошительные результаты. И вот если изложенный здесь парадокс правильный, то теория алгоритмов тоже нуждается в основательном пересмотре.
Во второй части я дам техническое изложение парадокса «
против
». У меня все выводы и формулы уже написаны в текстовом виде, но надо переписать их в формате
, а с этими техническими моментами я обычно торможу – не очень-то я потренировался писать в
, а затем надолго отвлекся из-за логических вопросов. Могу выложить в текстовом виде в своем ЖЖ, если кто не хочет ждать и сообщит мне – тогда он сможет посмотреть там в ближайший день-другой.
И остается еще очень интересная тема о рефлексии – вот в разбираемом парадоксе с
и
было промоделировано поведение разумного «я», когда собственное поведение может привести к разрушению собственного прогноза и на основании этого якобы происходит отказ от попытки прогнозировать в подобных случаях. Тут видна логика иллюзии свободы воли, хотя система жестко подчиняется законам природы и либо она изначально устроена корректно, либо же нет (всё либо детерминировано, либо случайности не зависят от воли). Тут удается выйти на модель разумного «я» - но лучше будет отдельно рассмотреть данный вопрос. Весьма принципиальный вопрос, кстати.
Кроме того, можно совершенно иначе переписать те же теоремы Гёделя о неполноте, чтоб утверждения о неполноте заданной теории были доказуемыми в некотором смысле внутри самой заданной теории. Чтоб внутри теории был соответствующий корректный алгоритм, который на вопрос о непротиворечивости данной теории выдавал бы результат
и в теории было доказательство такого результата про себя саму.