8_1
.docЛюди придумали множество алгоритмов для решения разнообразных проблем. Существуют ли проблемы, для которых алгоритмов найти нельзя? Мы говорили раньше о существовании алгоритмически неразрушимых проблем, т.е. проблем, для которых нет алгоритмов их решения.
Утверждение это весьма сильное. Оно означает не только то, что мы не знаем сейчас соответствующего алгоритма, оно говорит о том, что такого алгоритма мы никогда найти не сможем. Долгое время математики считали, что для любой четко сформулированной проблемы алгоритм найти можно. Например, Д. Гильберт считал, что в математике не может быть неразрешимых проблем: «In mathematics there is nothing which cannot be known». Его целью в начале XX века было представить математику в виде такой формальной системы, что в ней все проблемы могли бы быть сформулированы в виде утверждений, которые либо истинны, либо ложны, а также найти алгоритм, который по заданному утверждению в этой системе мог бы определить его истинность. Гильберт рассматривал эту проблему как фундаментальную открытую проблему математики.
Впервые Курт Гедель в 1931 году представил строго сформулированную математическую проблему, для которой не существует решающего ее алгоритма. Сам по себе этот факт является удивительным, однако он имеет также большое практическое значение. Для проблем, алгоритмическая неразрешимость которых доказана, бессмысленно искать методы их решения точно так же, как бессмысленны поиски вечного двигателя. Оказалось, что таких алгоритмически неразрешимых проблем много, например, не существует алгоритма проверки общезначимости логической формулы в логике предикатов. Мы сейчас сформулируем одну из таких проблем и докажем ее алгоритмическую неразрешимость. Эта проблема известна как «проблема останова». Она состоит в том, что не существует алгоритма, позволяющего по описанию произвольного алгоритма и его исходных данных определить, останавливается ли этот алгоритм на этих данных или работает бесконечно.