Россия |
Вычислимые функции, тезис Тьюринга-Черча и неразрешимые проблемы
Теорема 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) являются о.р.ф. Докажите, что функция
также является общерекурсивной.