Теория алгоритмов. Учебное пособие для специальности 050201.65 – «Математика с дополнительной специальностью «Информатика», направление подготовки 050
.pdfГЛАВА 6. АЛГОРИТМИЧЕСКИ НЕРАЗРЕШИМЫЕ ПРОБЛЕМЫ
6.1.Основные понятия
—Г-голубчики, — сказал Фёдор Симеонович озадаченно...
—Это же проблема Бен Б-бецалеля.
—К-калиостро же доказал, что она н-не имеет р-решения.
—Мы сами знаем, что она не имеет решения,
—сказал Хунта, немедленно ощетиниваясь.
—Мы хотим знать, как её решать.
—К-как-то ты странно рассуждаешь, К-кристо...
—К-как же искать решение, к-когда его нет?
—Б-бессмыслица какая-то...
—Извини, Теодор, но это ты очень странно рассуждаешь.
—Бессмыслица — искать решение, если оно и так есть.
—Речь идёт о том, как поступать с задачей, которая решения не имеет.
—Это глубоко принципиальный вопрос...
А. Стругацкий, Б. Стругацкий.
Понедельник начинается в субботу
В п. 2.7 и 2.8 были рассмотрены проблемы самоприменимости машины Тьюринга и проблема останова – две алгоритмически неразрешимые
проблемы. Под неразрешимостью понималась невозможность
существования машин Тьюринга для решения вышеупомянутых задач.
Частично-рекурсивные функции, и машины Тьюринга, и машины |
Поста, |
|
и нормальные алгоритмы Маркова, несмотря |
на различное |
время |
возникновения и на разную идейную основу, описывают один и тот же класс вычислимых функций. Класс частично рекурсивных функций совпадает с классом функций, вычислимых на машинах Тьюринга, который, в свою очередь, совпадает с классом функций, вычислимых на машинах Поста и т.д.
91
Поэтому если некая задача алгоритмически неразрешима для машин Тьюринга, то она неразрешима и для машин Поста, и для нормальных алгоритмов Маркова, и для любой другой формальной модели алгоритма.
Таким образом, алгоритмически неразрешимой называется такая задача, для которой доказана невозможность построения алгоритма ее решения в некой формализации алгоритма.
Заметим также, что всякий алгоритм представляет собой способ решения некоторой массовой проблемы, т.е. всякий алгоритм можно рассматривать как некоторое универсальное средство для решения целого класса задач. Однако алгоритмическая неразрешимость того или иного класса задач вовсе не означает невозможности решения некоторой конкретной задачи из этого класса. Речь идёт лишь о невозможности решения всех задач данного класса одним и тем же алгоритмом.
6.2. История вопроса
На II Международном математическом конгрессе, проходившем
в Париже 6 – 12 августа 1900 г., Давид Гильберт сформулировал 23
математические проблемы, которые век девятнадцатый передаёт двадцатому столетию. Десятая проблема относилась к разрешимости произвольного диофантова уравнения.
«10. Решение проблемы разрешимости для произвольного диофантова уравнения.
Пусть дано произвольное диофантово уравнение с произвольным числом неизвестных и с целыми рациональными коэффициентами; требуется указать общий метод, следуя которому можно было бы в конечное число шагов уравнение узнать, имеет ли данное уравнение решение в целых рациональных числах или нет».
Попытки решения этой задачи можно считать началом зарождения теории алгоритмов.
92
Гений Гильберта проявлялся и в умении «смотреть на математику целиком», и в его попытке «уточнения алгоритма» в виде «общего метода».
На сегодняшний день большинство определений интуитивного понятия
«алгоритм» начинается в основном со слов «общий метод…».
Решение десятой проблемы Гильберта начались с поиска того самого метода. К 30 гг. XIX в. количество исследований перешло на качественно новый уровень, что произошло, в первую очередь, благодаря созданию первых компьютеров и, соответственно, первых программ. И теперь объектом исследования стал не поиск того или иного общего метода или алгоритма, а сам алгоритм как таковой. Дать строгое определение алгоритма оказалось намного сложнее, чем порой его построить. Это не удивительно, так как если алгоритм существует, то острой необходимости в его строгом определении нет, но когда требуется доказать его отсутствие, надо точно знать, отсутствие чего мы доказываем. В п. 1.2 кратко описаны этапы и способы уточнения понятия
«алгоритм».
Практически все алгоритмически неразрешимые проблемы (АНП) можно сформулировать так: «Построить алгоритм, с помощью которого можно определить для каждого элемента некоторого данного множества, обладает ли элемент тем или иным свойством».
Часто алгоритмическую неразрешимость некой новой проблемы удаётся доказать, сводя проблему к уже известной АНП.
Десятая проблема Гильберта была решена в 1970 г. Матиясевичем Ю.В.,
который показал невозможность построения искомого алгоритма. История получила продолжение и породила ещё две проблемы:
-существует ли алгоритм, распознающий наличие у алгебраического уравнения с целыми коэффициентами решения в действительных числах?
-существует ли алгоритм, распознающий наличие у алгебраического уравнения с целыми коэффициентами решения в рациональных числах?
Первую из этих проблем решил А. Тарский, им был построен алгоритм
поиска таких корней, вторая – не решена до сих пор.
93
6.3. Проблема нумерации машин Тьюринга. Пример невычислимой
функции
Рассмотрим пример еще одной алгоритмически неразрешимой проблемы.
Опишем процесс нумерации всех машин Тьюринга, который используем при построении примера невычислимой по Тьюрингу функции. Будем считать,
что для обозначения внутренних состояний машин Тьюринга используются буквы бесконечной последовательности q0,q1,q2,...,qr ,..., а для обозначения букв внешних алфавитов используются буквы последовательности a0,a1,a2,...,as ,....
Закодируем все символы этих бесконечных последовательностей словами конечного стандартного алфавита {a0 , 1, q, ,E, R, L} по следующим правилам:
qi (i = 0, 1, ...) обозначим (закодируем) словом из i + 1 букв q: qq…q; aj (j = 1, 2, ...) обозначим (закодируем) словом из j единиц: 1,1,…,1.
Программу машины Тьюринга запишем в виде слова в стандартном алфавите, руководствуясь следующим правилом. Сначала в записях команд вида qiaj qham X , где X E,R,L опустим символ « », затем буквы
qi ,aj ,qh,am заменим соответствующими словами стандартного алфавита.
Полученные слова-команды запишем подряд в любом порядке в виде единого слова.
Нетрудно указать алгоритм, позволяющий узнавать, является ли слово в стандартном алфавите программой некоторой машины Тьюринга. Такой алгоритм может быть следующим. Нужно проанализировать все подслова данного слова, заключенные между всевозможными парами букв из {E, R, L}. Эти подслова должны иметь следующую структуру: сначала записаны несколько букв q, затем a0 или несколько цифр 1, затем снова несколько букв q, наконец, снова a0 или несколько единиц.
94
Таким образом, каждая машина Тьюринга вполне определяется некоторым конечным словом в конечном стандартном алфавите. Поскольку множество всех конечных слов в конечном алфавите счётно, то и всех мыслимых машин Тьюринга имеется не более чем счётное множество.
Перенумеруем теперь все машины Тьюринга, для чего все слова стандартного алфавита, представляющие собой программы всевозможных машин Тьюринга, расположим в виде фиксированной счётно-бесконечной последовательности, которую составим по такому правилу: сначала выписываются в какой-нибудь фиксированной последовательности все однобуквенные слова: α0,α1,...,αξ,..., представляющие программы машин Тьюринга (множество таких слов конечно, потому что конечен стандартный алфавит, из букв которого строятся слова), затем выписываются все двухбуквенные слова αξ+1, ..., αn, представляющие программы машин Тьюринга
(множество таких слов также конечно, потому что конечен стандартный алфавит), затем выписываются трехбуквенные слова и т.д. Получится последовательность программ α0, α1, α2,..., αn, ..., всех машин Тьюринга. Число k будем называть номером машины Тьюринга, если программа этой машины записывается словом αk. Покажем существование невычислимых по Тьюрингу функций.
Теорема. Существует функция, невычислимая по Тьюрингу, т. е. не вычислимая ни на одной машине Тьюринга.
Доказательство.
Функции, о которых идет речь, представляют собой функции, заданные и принимающие значения в множестве слов в алфавите А1={1}. Множество слов в алфавите А1={1} счётно. Следовательно, рассматривается множество всех функций, заданных на счётном множестве и принимающих значения в счётном же множестве. Как известно, это множество имеет мощность континуума. С другой стороны, поскольку множество всевозможных машин Тьюринга, как мы установили выше, перенумеровав их, счётно, то и множество функций, вычислимых по Тьюрингу, также счётно. Континуальная мощность
95
строго больше счётной мощности. Следовательно, существуют функции,
невычислимые по Тьюрингу.
Доказанная теорема доказывает существования невычислимой по Тьюрингу функции. Построим пример конкретной функции, невычислимой по Тьюрингу.
Укажем конкретную функцию, которую нельзя вычислить ни на какой машине Тьюринга. На основании тезиса Тьюринга это будет означать, что не существует вообще никакого алгоритма для вычисления значений такой функции.
Рассмотрим следующую функцию Ψ(α) на словах в алфавите А1 = {1}.
Для произвольного слова длиной п в алфавите А1 = {1} положим:
( ) n1, если слово перерабатывается машиной Тьюринга с номером n
(см. предыдущий пункт) в слово n алфавита А1 = {1}; иначе ( ) 1.
Докажем, что функция Ψ(α) невычислима по Тьюрингу.
Допустим противное, т. е. допустим, что существует машина Тьюринга М со стандартным алфавитом {a0 , 1, q, E, R, L}, вычисляющая эту функцию.
Пусть k — номер этой машины в нумерации, описанной в предыдущем пункте. Посмотрим, чему равно слово Ψ(1k) (напомним, что 1k = 11...1 —
слово из k единиц), являющееся значением функции Ψ(α) при α = 1k.
Предположим, что машина М перерабатывает слово 1k в слово βk в том же алфавите А1 = {1}. По определению вычислимости функции на машине Тьюринга это означает, что (1k ) k . Но с другой стороны, по определению функции это означает, что Ψ(1k) = βk1. Полученное противоречие доказывает, что машины Тьюринга, вычисляющей функцию
Ψ(α), не существует.
Принимая во внимание тезис Тьюринга, заключаем, что не существует вообще никакого алгоритма для вычисления значений функции Ψ(α). Это означает, что проблема нахождения значений функции Ψ(α) для всевозможных значений аргумента алгоритмически неразрешима.
96
Рассмотрим еще одну алгоритмическую проблему и докажем ее неразрешимость. Это проблема определения общерекурсивности алгоритмов
(и функций). Прежде докажем лемму.
Лемма. Для любого перечисления любого множества Ф всюду определенных вычислимых (т. е. общерекурсивных) функций существует общерекурсивная функция, не входящая в это перечисление.
Доказательство.
Пусть – перечисление множества Ф, порождающее
последовательность А0, А1, А2, ... всюду определеённых вычислимых функций.
Введем функцию В(х) |
= Ах(х) + 1. Так как Ax общерекурсивна, то и |
B(x) |
||
общерекурсивна. Если предположить, что B , то B имеет некоторый номер |
||||
x0 и, следовательно, |
B(x) Ax0 (x). Тогда в точке |
x x0 |
B(x) имеем |
|
B(x0) Ax (x0) 1. Но |
в силу последнего соотношения имеем |
B(x0) Ax |
(x0). |
|
0 |
|
|
|
0 |
Получаем противоречие, из которого следует, что В не входит в перечисление,
порождаемое .
Заметим, что если бы в перечислении допускались частичные функции,
то такое определение функции В не привело бы к противоречию, а означало бы
лишь, что В не определена в точке х0. |
|
Теорема. Проблема определения общерекурсивности |
алгоритмов |
неразрешима, т. е. не существует алгоритма В(х), такого, что для любого алгоритма Ax
1,если Ax всюду определён,
B(x)
0,если Ax невсюду определён.
Доказательство. Допустим противное, т. е. допустим, что такой алгоритм В(х) существует. Тогда он определяет общерекурсивную функцию f(x). Определим функцию g(x) следующим образом:
g(0) y[f (y) 1],
g(x +1)=μy [y > g(x) f(y)=1].
97
Так как номеров всюду определенных функций (и, следовательно, точек
у, в которых f(у) = 1) бесконечное множество, то функция g(х) всюду определена. Функция g(х) принимает значение 1 на каждой всюду определенной вычислимой функции, т.е. является перечислением множества всех общерекурсивных функций. Но, на основании предыдущей леммы, такого перечисления не существует. Получено противоречие. Следовательно,
не существует и алгоритма В(х), определенного в условии теоремы, и.
проблема определения общерекурсивности алгоритмов неразрешима.
Если нельзя указать единого алгоритма, отличающего всюду определенные вычислимые (т.е. общерекурсивные) функции от частично рекурсивных, попытаемся подойти к проблеме частично рекурсивных функций с другой стороны. Может быть, возможно каждую частично рекурсивную функцию доопределить на неопределимых точках до общерекурсивной функции. Оказывается, и эта задача неразрешима, что следует из теоремы,
приведенной ниже.
Теорема. Существует такая частично рекурсивная функция f, что никакая общерекурсивная функция g не является ее доопределением.
Доказательство.
Как и прежде, считаем, что выбрана некоторая вычислимая нумерация
: N0 Al , и для каждого алгоритма Ах значение 1(Ax) x – его номер в этой нумерации. Рассмотрим следующую частичную функцию:
|
Ax (x) 1,если Ax определён, |
f (x) |
|
неопределена,если Ax неопределён. |
|
Функция f(х) вычислима и, значит, частично рекурсивна.
Пусть теперь g(x) - произвольная общерекурсивная функция и хg - ее
номер в нумерации φ, т.е. φ-1(g)= хg. Так как g всюду определена, то g(xg) =
Axg (xg ) определена и, следовательно, f(xg)= g(xg) |
+ 1. Таким образом, для |
любой общерекурсивной функции g имеем f(xg) |
g(xg). Это и означает, что |
f g. Теорема доказана. |
|
98 |
|
Следовательно, существуют частичные алгоритмы, которые нельзя
доопределить до всюду определенных алгоритмов.
Рассмотренные выше теоремы и алгоритмически неразрешимые проблемы из них вытекающие носят довольно экзотический характер: все они были так или иначе связаны с самоприменимостью алгоритма, когда алгоритм работает с собственным описанием (находится значение вычислимой функции fх в точке, являющейся её собственным номером в выбранной нумерации вычислимых функций: f(х)). Обратим внимание на теорему Райса, которая,
используя неразрешимость вышерассмотренной проблемы нумераций,
устанавливает алгоритмическую неразрешимость вообще всякого нетривиального свойства вычислимых функций.
Пусть имеется некоторая нумерация алгоритмов : N0 Al , в которой каждый алгоритм Ax имеет номер φ-1(Ах) = x. Этот же номер имеет и функция
fх, которую вычисляет алгоритм Ах.
Напомним, что одна и та же функция, вычисляемая разными алгоритмами, может иметь в данной нумерации много номеров. Но это
обстоятельство не влияет на справедливость следующей теоремы.
Теорема Райса. Пусть С - любой непустой собственный класс вычислимых функций от одного аргумента (существуют как функции,
принадлежащие С, так и вычислимые функции, не принадлежащие С). Тогда не
существует алгоритма, который по номеру |
x функции fx определял бы, |
|||
принадлежит fx классу C или |
нет. Иначе |
говоря, |
множество |
x: fx C |
неразрешимо. |
|
|
|
|
Доказательство. Допустим |
противное: |
пусть |
множество |
x: fx C |
разрешимо. Тогда оно обладает вычислимой характеристической функцией:
1, если x M , т.е. fx C
χM(х)=
0, если x M. т.е. fх С.
99
Пусть f0 нигде не определенная функция. Рассмотрим сначала случай,
когда f0 С. Выберем какую-нибудь конкретную вычислимую функцию fа C
и определим функцию F(х, у):
fа(y), если значение fх(х)определено,
F(х, у) =
f0(y), если значение fх(х)не определено.
Функция F(х, у) вычислима. Для ее вычисления надо вычислять fх(х): если fх(х) определена, то этот процесс когда-нибудь остановится и нужно будет
перейти к вычислению fа(y); если же fx (x) не определена, то процесс не остановится, что равносильно вычислению функции f0(у).
Зафиксируем в функции F(x,y) аргумент x. Тогда F станет вычислимой функцией от одного аргумента y . Номер этой функции в единой нумерации φ
вычислимых функций зависит от значения x, т.е. является всюду определенной функцией g(x). Функция g(x) вычислима, так как является суперпозицией двух вычислимых функций: g(x) 1(F(x, y)). Таким образом, F(x,y) f (y) и,
значит,
|
|
f |
|
(y),если f |
|
(x)определена, |
|
|
fg(x) (y) |
|
a |
|
x |
|
|
|
f0 (y),если fx (x)неопределена. |
||||||
Отсюда ясно, что fg(x) C |
тогда и только тогда, когда |
fg(x) fa (так как |
|||||
fа С), т.е. когда |
fx (x) определена. В случае же, когда fx (x) |
не определена, мы |
|||||
имеем fg(x) f0 |
и, следовательно, |
fg(x) C, |
так как f0 С. |
Другими словами, |
|||
g(x) M тогда и только тогда, когда fх(х) определена. Это означает, что характеристическая функция M на аргументах g(x) имеет
1,если fx (x)определена,
M (g(x)) 0,если fx (x)неопределена.
Последнее |
означает |
следующее. Поскольку функции M и g(x) |
||
вычислимы, то |
мы |
для каждого |
номера x можем выяснить, определено |
|
значение fx (x) |
или |
нет. |
Это, в |
свою очередь, означает, что построена |
|
|
|
|
100 |
