Проблема самоприменимости.
Данная проблема заключается в следующем. Будем рассматривать машины Тьюринга, которые во внешнем алфавите ленты имеют 0, 1. Пусть на ленту машины Тьюринга Т записан ее код Код(Т) и машина запущена в начальном состоянии q1 . Если после конечного числа шагов машина Т остановится, то она называется самоприменимой, в противном случае - несамоприменимой. Легко привести примеры самоприменимых и несамоприменимых машин. Проблема самоприменимости состоит в том, чтобы по всякой машине Тьюринга Т (точнее по ее коду Код(Т)) установить, является ли она самоприменимой или нет. Будем говорить, что машина Тьюринга Т0 решит проблему самоприменимости, если для любой машины Т конфигурацию q1Код(Т) она переводит в конфигурацию q01, если Т самоприменима, и в конфигурацию q00, если Т - несамоприменима.
Теорема 1.1. Не существует машины Тьюринга Т0 , которая решает проблему самоприменимости.
¨ Допустим, что существует машина T0, решающая проблему самоприменимости. Построим машину T1, в которой вместо состояния q0 введем новое заключительное состояние q0¢ и добавим к программе машины T0 новые команды
q0 1 ® q0 1 E,
q0 0 ® 0 E. (1.4)
Машина T1 построена по машине T0 вполне конструктивными средствами, она обладает свойствами применимости к кодам несамоприменимых машин и не применима к кодам самоприменимых машин. Действительно, если Т1 - самоприменима, то q1Код(Т1) переходит в q01 и согласно (1.4) q01 Þ q01 и T1 никогда не остановится. Если T1 - несамоприменима, то q1Код(Т) переходит в q00 и согласно (1.4) q00 Þ q0¢0 и машина Т1 остановится. Применим теперь машину T1 к конфигурации q1Код(Т1). Если T1 самоприменима, то по построению она не применима к коду самоприменимых машин. Если T1 несамоприменима, то она применима к коду самоприменимых машин. Полученное противоречие показывает, что допущение о существовании машины Тьюринга T0, решающей проблему самоприменимости, неверно. ¨
В силу тезиса Тьюринга невозможность построения машины Тьюринга означает отсутствие алгоритма решения данной проблемы. Поэтому данная теорема дает первый пример алгоритмически неразрешимой проблемы.
Отсюда вытекает еще пример алгоритмически неразрешимой проблемы - проблемы останова. Она состоит в том, чтобы по машине Т и начальной конфигурации q1a узнать, остановится ли Т через конечное число шагов.
Проблема останова алгоритмически неразрешима. Если бы она была алгоритмически разрешимой, то взяв в качестве a код машины Т, можно было бы решить проблему самоприменимости. Данные теоремы лежат в основе доказательства алгоритмической неразрешимости большого числа алгоритмических проблем. При истолковании утверждений, связанных с алгоритмической неразрешимостью, следует иметь в виду следующее обстоятельство. Речь идет об отсутствии единого алгоритма, решающего данную проблему, при этом не исключается возможность ее решения в частных случаях.
Неразрешимость проблемы останова можно интерпретировать как несуществование общего алгоритма для отладки программ, точнее, алгоритма, который по тексту любой программы и данным для нее определял бы, зациклится ли программа на этих данных или нет.
Приведем без доказательства важную теорему теории алгоритмов.
Теорема 1.2(теорема Райса). Никакое нетривиальное свойство вычислимых по Тьюрингу функций не является алгоритмически разрешимым.
Переформулируем эту теорему в более точном виде: Пусть С - любой класс вычислимых по Тьюрингу функций одного переменного, нетривиальной в том смысле, что имеются вычислимые функции, как входящие в С, так и не входящие в С. Тогда не существует алгоритма, который бы по номеру x функции fx определял бы принадлежность fx классу С.
Из данной теоремы следует, что по номеру вычислимой функции нельзя узнать, является ли она постоянной, периодической, ограниченной и т.п. Смысл данной теоремы в том, что по описанию алгоритма нельзя узнать о свойствах функций, которую он вычисляет. Подчеркнем, что “нельзя узнать” означает “не существует единого алгоритма решения”. Свойства подклассов вычислимых функций могут оказаться разрешимыми.
Дата добавления: 2014-12-02; просмотров: 4193;