Книга: Золотой билет

Парадокс лжеца

Парадокс лжеца

Давайте рассмотрим одно загадочное утверждение.


Рис. 7.2. Утверждение

Оно истинно или ложно, как вам кажется? Если оно ложно, значит, неверно то, что оно ложно, а значит, оно истинно. Но если оно истинно – значит, верно то, что оно ложно. С какой стороны ни зайди, получишь противоречие. Этот парадокс получил название «парадокс лжеца». Сейчас я лгу. Ну как – солгал я или нет?

В математике не бывает настоящих парадоксов: бывают лишь некомпетентные математики. Утверждение «Это утверждение ложно» некорректно с математической точки зрения, поскольку оно оценивает собственную истинность.

В 1930 году Курт Гёдель пришел к выводу, что о математических доказательствах можно рассуждать на языке самой математики и что высказывания о возможности доказательства того или иного утверждения также могут быть записаны в виде формальных математических утверждений. Ученый изобрел высказывание, которое говорит о возможности собственного доказательства, и сформулировал его на языке математики. Вот оно:


Рис. 7.3. Утверждение о возможности доказательства

Похоже на предыдущее, правда? Предположим, что оно ложно. Тогда его можно доказать, а следовательно, оно истинно. Но это противоречит первоначальному предположению о том, что оно ложно; значит, оно истинно.

Что, опять парадокс? Вообще-то нет: высказывание истинно, вот только это не докажешь. Так Гёдель одним махом пошатнул все фундаментальные основы математики: оказывается, некоторые истинные утверждения невозможно доказать[5]!

Допустим, знакомый говорит вам, что у него есть волшебная шкатулка, которая предсказывает будущее. Попросите его поинтересоваться у этой шкатулки, какой рукой вы его ударите – правой или левой? Если шкатулка ответит «левой», ударьте правой, а если «правой» – ударьте левой. Шкатулка ошибется в любом случае.

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

Начнем с простого наблюдения: программа – это набор данных. Такой же, как, к примеру, файл Word или Excel. Поэтому одна программа вполне может проанализировать код другой программы. Впервые подобная мысль была высказана Аланом Тьюрингом в его знаменитой работе 1936 года, заложившей основы теоретической информатики.

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

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


Рис. 7.4. Программа

А нельзя ли примерно таким же способом доказать, что некоторые задачи не могут быть решены эффективно, т. е. не принадлежат классу P, в котором для любой задачи существует эффективный алгоритм? Конечно же, можно!

Для начала определим алгоритм Q, который принимает на вход код программы R и решает следующую задачу:

• Если программа R, получив на вход свой собственный код, за полиномиальное время выдает ответ «Да», ответить «Нет».

• В противном случае ответить «Да».

Теперь возьмем произвольный эффективный алгоритм S. Очевидно, что Q(S) ответит «Да» в том и только в том случае, когда S(S) ответит «Нет», а это значит, что ни один эффективный алгоритм никогда не совпадет с алгоритмом Q.

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

Раз Q не принадлежит классу P, тогда, если бы мы доказали, что Q лежит в NP, т. е. любое заданное решение быстро проверяется, это означало бы, что P ? NP, и проблема тысячелетия была бы решена.

Никто не знает, принадлежит ли Q классу NP; на самом деле это очень мало вероятно. По этой причине (а также по ряду других) любой «парадоксальный» подход к решению проблемы P и NP почти наверняка потерпит неудачу – по крайней мере, если с его помощью пытаться так вот «в лоб» доказать неравенство P и NP.

Оглавление книги


Генерация: 1.341. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз