Россия |
Вычислимые функции, тезис Тьюринга-Черча и неразрешимые проблемы
Теорема 10.5. Все проблемы, перечисленные выше в пунктах 1-4, являются алгоритмически неразрешимыми.
Доказательство. Нам потребуются следующие вспомогательные
программы ( присваиваие x:=x+1
повторяется n раз). Понятно, что для любого начального состояния
после выполнения
имеем
.
-
Докажем неразрешимость {проблемы останова:} по произвольной структурированной программе
определить, завершится ли вычисление
на входе 0. Пусть
. Докажем, что множество номеров самоприменимых программ Ms сводится к Mh0. Пусть n - номер программы
. преобразуем ее в программу
. Таким образом,
вначале заносит в x номер n программы
, а затем применяет
к этому номеру и, если
на n останавливается, выдает результат y=0. Поэтому
останавливается на любом аргументе (в том числе и на 0) тогда и только тогда, когда
. Преобразование программы
в программу
осуществляется эффективно. Поэтому (на основании тезиса Тьюринга-Черча) существует такая о.р.ф. f, которая по n вычисляет номер m программы
. Эта функция и будет сводить Ms к Mh0, так как
. Следовательно, по лемме ref{lm-red} проблемы останова Mh0 неразрешима.
Очевидно, что и более общая форма проблемы останова
также неразрешима, поскольку к ней сводится Mh0:
.
- Для сведения Ms к множеству Mt номеров программ, вычисляющих всюду
определенные функции, можно также использовать функцию f из пункта 1.
Действительно,
останавливается на входе n тогда и только тогда, когда
останавливается на всех входах, т.е.
. Следовательно, проблема тотальности Mt неразрешима.
-
Рассмотрим теперь проблему эквивалентности. Пусть
( x) ) Зафиксируем следующую программу P0: x:=x; y:=0. Очевидно, что она вычисляет функцию, тождественно равную нулю, т.е.
для всякого x. Пусть ее номер n(P0) равен k0. Для произвольного n рассмотрим пару (f(n), k0). Из определения f следует, что
останавливается на входе n тогда и только тогда, когда
останавливается на всех входах и выдает результат 0:
для всех x, т.е.
и
эквивалентны. Тогда
. Положим g(n)= c2(f(n),k0) . Тогда g является о.р.ф. и
. Следовательно, Ms сводится к Meq посредством g и проблема Meq неразрешима.
-
Для доказательства неразрешимости проблемы лишнего присваивания:
снова используем функцию f из пункта 1. Напомним, что
. По n и соответствующей программе
можно легко определить номер m последнего присваивания y:=0 в
:
Пусть g(n) - это о.р.ф., вычисляющая по n этот номер m. Тогда
. Положим h(n)= c2(f(n),g(n)). Тогда h является о.р.ф. и
. Следовательно, Ms сводится к Mopt1 посредством h и проблема Mopt1 неразрешима.
Рассмотрим теперь проблему лишнего условия:
Для доказательства ее неразрешимости определим по n программу
( здесь
- программа из п. 1). И в этом случае программа
строится по программе
эффективно. Пусть ее номер вычисляется о.р.ф. f’, т.е.
, и пусть о.р.ф. g’(n) определяет номер последнего условного оператора в программе
. Тогда
в программе
последний условный оператор выполняется (на любом входе) и при этом y=0, т.е. его условие истинно, а это означает, что
. Положив h’(n)= c2(f’(n),g’(n)), получим, что
. Следовательно, Ms сводится к Mopt2 посредством h’ и проблема Mopt2 также неразрешима.
Теорема доказана.
Какой же вывод можно сделать из того, что некоторая алгоритмическая проблема оказалась неразрешимой? Для программистов из такого утверждения извлекаются "две новости: плохая и хорошая ". "Плохая новость" состоит в том, что невозможно построить алгоритм (программу) для автоматического решения такой проблемы. Например, из теоремы 10.5 следует, что невозможно автоматически проверить, входит ли некоторый вход в область определения вычислимой функции, нельзя определить корректность программы, т.е. то, что она вычисляет требуемую функцию, нет способа проверять эквивалентность программ (не только структурированных, но и написанных на Паскале, Си, ассемблере, Яве и других языках программирования), не существует алгоритмов для оптимизаций, связанных с удалением лишних присваиваний и условий, и т.п. Но неразрешимость проблемы не означает, что она не может быть решена для некоторых отдельных входных данных. Например, в предыдущих разделах мы построили достаточно много программ и доказали их корректность. Поэтому "хорошая новость" для программистов и математиков состоит в том, что их труд при решении неразрешимых проблем в каждом отдельном случае является творческим - никакой программой их не заменить. Появление каждой новой содержательно интересной неразрешимой проблемы только расширяет область их творчества, заставляет искать все более и более широкие алгоритмы, которые позволяют решать все более обширные подклассы относящихся к этой проблеме индивидуальных задач.
Задачи
Задача 10.1. Докажите, что машины Тьюринга и
, определенные в доказательстве теоремы 10.1 для примитивной рекурсии и минимизации, действительно правильно реализуют указанные операторы.
Задача 10.2. Постройте машины Тьюринга Mi0 , Mi+1, Mij, ,
, Mstart и Mend, определенные
в доказательстве теоремы 10.2.
Задача 10.3.
Докажите утверждение 1, сформулированное в доказательстве теоремы 10.2, используя индукцию по построению программы и соответствующей м.Т.
.
Задача 10.4. В доказательстве теоремы 10.3 рассмотрен случай, когда
м.Т. вычисляет функцию
от одного аргумента f(x) . Покажите, что теорема верна и в
общем случае для функций f(x1,...,xn) при любом n.
Задача 10.5. Докажите, что отношение алгоритмической сводимости <=m является рефлексивным и транзитивным.
Задача 10.6. Доказать алгоритмическую неразрешимость следующих проблем.
- По произвольной программе
определить, является ли вычисляемая ей функция
постоянной константой.
- По произвольной программе
и числам a и b проверить равенство
.
- По произвольной программе
определить, является ли множество значений вычисляемой ею функции
бесконечным.
- По произвольной паре программ
и
проверить, что для всех x имеет место неравенство
.
Задача 10.7. Докажите, что
- пересечение двух разрешимых множеств является разрешимым множеством.
- объединение двух разрешимых множеств является разрешимым множеством.
Задача 10.8.
Докажите, что для двух разрешимых множеств A и B их "сумма" также
является разрешимым множеством.
Задача 10.9. Пусть A - разрешимое множество, а g(x) и h(x) являются о.р.ф. Докажите, что функция

также является общерекурсивной.