Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книги / TURIN / ЛЕКЦИИ9.DOC
Скачиваний:
77
Добавлен:
10.12.2013
Размер:
363.01 Кб
Скачать

Проблема самоприменимости

Напомним, что машина называется применимой к начальному слову, если она, начав работать с этим словом, придет в заключительное состояние.

Пример неприменимой машины - машина, у которой в первой части команд не встречается заключительное состояние yk.

Машина М1, применимая к словуn(М) (т.е. к коду своего собственного номера), называетсясамоприменимой. Предполагается, что машина Тьюринга универсальна, она читает код своего номера с ленты (программы), расшифровывает его и в соответствии с ним выполняет необходимые действия в зависимости от начальной конфигурации (данных), также записанных на ленте. Машина, не применимая к словуn(М), называется несамоприменимой.

Рассмотренные выше машины Тьюринга - самоприменимые. Несамоприменимой машиной также является машина, в правых частях команд которой не встречаются заключительные состояния. Такая машина не применима ни к какому слову.

Проблема самоприменимостизаключается в следующем: создать алгоритм, который по любой машине Тьюринга устанавливал бы, самоприменима она или нет.

Согласно тезиса Тьюринга такой алгоритм следует искать в виде машины Тьюринга, т.е. требуется построить машину Тьюринга, которая была бы применима к кодам номеров всех машин Тьюринга и в зависимости от того, самоприменима она или нет, имела бы различные заключительные конфигурации.

Пусть, например, в случае самоприменимой машины заключительная конфигурация имеет вид:

......,

где в знаменателе - символ на ленте, в числителе - внутреннее состояние (конечное), где вне обозримой ячейки (с символом 1) могут быть записаны какие-то символы алфавита, а в случае несамоприменимой машины - заключительная конфигурация имеет вид:

......

Теорема 1. Проблема самоприменимости алгоритмически неразрешима, т.е. не существует машины Тьюринга, решающей эту проблему в указанном выше смысле.

Доказательство этой теоремы проводится от противного. Допустим, что такая машина А существует. Тогда можно построить машину В, которая 1) применима ко всем кодам номеров несамоприменимых машин и 2) не применима ко всем кодам номеров самоприменимых машин.

Действительно, машина В получается из машины А следующим образом: алфавит сохраняется неизменным, заключительное состояние ykмашины А считается незаключительным состоянием машины В, а заключительным состояние машины В считается новое состояние. Программа машины В состоит из всех команд машины А и еще двух команд:,.

Сама машина В либо самоприменима, либо несамоприменима. Если она самоприменима, т.е. применима к коду своего номера, то она применима и к коду самоприменимой машины, но тогда не выполняется требование 2. Если машина В несамоприменима, т.е. она не применима к коду своего номера, то она не применима и к коду несамоприменимой машины, но тогда не выполняется требование 1.

Итак, мы пришли к противоречию, основанное на допущении о том, что существует машина А, решающая проблему самоприменимости. Следовательно, такой машины не существует.

Заметим, что неразрешима именно массоваяпроблема: не существует единого алгоритма, который решал бы проблему самоприменимости. Это не говорит о том, что нет решения проблемы для конкретных машин. Так, для рассмотренных выше примеров машин Тьюринга такой алгоритм существует.

Используя результат, доказанный теоремой 1, можно доказать неразрешимость других алгоритмических проблем. Рассмотрим, например, проблему применимости к начальному слову. Она состоит в следующем: указать алгоритм, который по машине М и слову Х устанавливал бы, применима машина М к слову Х или нет. В терминах машин Тьюринга эту проблему можно сформулировать так, можно ли построить машину, которая была бы применима ко всем словам видаn(M)Х, где М - произвольная машина, Х - произвольное слово, и в случае, если машина М применима к слову Х, приводила бы к заключительной конфигурации

......,

а в случае, если машина М не применима к слову Х, приводила бы к заключительной конфигурации

......

Теорема 2. Проблема применимости к начальному слову алгоритмически неразрешима, т.е. не существует машины Тьюринга, решающей эту проблему в указанном выше смысле.

Допустим, что такая машина Dсуществует. Пусть для конкретности Е - машина, удваивающая слова.

Рассмотрим машину G, которая является композицией машин Е иD. Если в начальный момент работы машиныGна ленте будет словоn(M), то после работы машины Е на ленте будет словоn(M)n(M). МашинаDприменима ко всем таким словам и остановится в конфигурации

......,

если машина М применима к слову n(M), и в конфигурации

......,

если машина М не применима к слову n(M). Но тогда машинаGрешает проблему самоприменимости, что невозможно в силу теоремы 1.

Итак, мы пришли к противоречию, исходя из допущения, что существует машина, решающая проблему применимости. Следовательно, такой машины не существует.

Итак, понятие машины Тьюринга является строгим уточнением понятия алгоритма. Переход от интуитивного понятия алгоритма к точному понятию машины Тьюринга позволяет решить вопрос алгоритмической (машинной) разрешимости той или иной проблемы. Один из первых отрицательных результатов был получен американским ученым Черчем в 1936 г. при рассмотрении проблемы распознавания выводимости в математической логике. Проблема формулируется так: определить для любых заданных формул RиSв логическом исчислении, существует ли дедуктивная цепочка, ведущая отRкSили нет.

Если формула А может быть преобразована в формулу В однократным применением допустимой подстановки, и наоборот, то А и В - смежные формулы. Последовательность Ai, i=1,2,...nформул, соседние из которых смежны, называется дедуктивной цепочкой, ведущей от А1к Аn. Так вот, проблема распознавания выводимости алгоритмически неразрешима, т.е. не существует соответствующего алгоритма.

Ввиду инвариантности основных результатов общей теории алгоритмов прикладное значение ее результатов никак не связано с тем, насколько близки к практике используемые в ней теоретические модели алгоритмов. Машины Тьюринга весьма далеки от современных ЭВМ, а рекурсивные функции - от современных языков программирования прежде всего из-за предельной скромности используемых средств. Однако именно скромность средств, во-первых, делает эти модели чрезвычайно удобным языком доказательств, а во-вторых, позволяет понять, без чего обойтись нельзя, а без чего можно и какой ценой, т.е. отличать удобства от принципиальных возможностей. Прикладное значение таких рассматриваемых моделей заключается в том, что с их помощью удобно строить теорию, верную для любых алгоритмических моделей, в том числе и для сколь угодно близких к практике.

В теории алгоритмов доказывается (теорема Райса), что проблема эквивалентности алгоритмов также неразрешима: по двум заданным алгоритмам нельзя узнать, вычисляют они одну и ту же функцию или нет. Опытного программиста теорема Райса не должно удивлять: он знает, что по тексту сколько-нибудь сложной программы, не запуская ее в работу, трудно понять, что она делает (т.е. какую функцию вычисляет), не имея гипотез о том, что она должна делать; если это понимание и приходит, то каждый раз по-своему; систематического метода здесь не существует. С другой стороны, в этом тексте можно обнаружить алгоритмическим путем так называемые синтаксические ошибки (что и делают компиляторы с алгоритмических языков), т.е. выявлять те или иные свойства описания алгоритма. Здесь впервые стоит упомянуть два понятия - синтаксис и семантика. Синтаксические свойства алгоритма - это свойства описывающих его текстов, т.е. свойства конечных слов в фиксированном алфавите. Семантические (или смысловые) свойства алгоритмов связаны с тем, что он делает; их естественно описывать в терминах функций и классов эквивалентности функций, вычисляемых алгоритмами. Хорошо известно, что в процессе отладки программ синтаксические ошибки отыскиваются довольно быстро; все неприятности связаны с анализом семантики неотлаженной программы, т.е. с попытками установить, что же она делает вместо того, чтобы делать задуманное. В несколько вольной и неформальной интерпретации теорема Райса могла бы выглядеть так: "по синтаксису алгоритма ничего нельзя узнать о его семантике".

Выражение "ничего нельзя узнать" - это, строго говоря, преувеличение. Его точный эквивалент - "не существует единого алгоритма, позволяющего узнать". К тому же речь идет о невозможности распознавания свойств вычислимых функций, записанных в универсальном алгоритмическом языке (языке машин Тьюринга и др.). Свойства подклассов вычислимых функций, описанных в специальных языках, вполне могут оказаться разрешимыми. Например, алгоритмы распознавания свойств логических функций, описанных на языке формул в различных базисах.

До сих пор речь шла о неразрешимых проблемах внутри самой теории алгоритмов. Некоторые из них, такие как проблема остановки или теорема Райса, имеют вполне реальную интерпретацию в практике программирования. Неразрешимости возникают и в других областях: в теории автоматов, в теории языков и грамматик и т.д. Постепенно они становятся бытом дискретной математики, и с их существованием приходится считаться. С теоретической точки зрения, неразрешимость - не неудача, а научный факт. Знание основных неразрешимостей теории алгоритмов должно быть для специалиста по дискретной математике таким же элементом научной культуры, как для физика - знание о невозможности вечного двигателя. Если же важно иметь дело с разрешимой задачей (а для прикладных наук это стремление естественно), то следует четко представлять себе два обстоятельства. Во-первых (об это уже говорилось при обсуждении проблемы остановки), отсутствие общего алгоритма, решающего данную проблему, не означает, что в каждом частном случае этой проблемы нельзя добиться успеха. Поэтому, если проблема неразрешима, надо искать ее разрешимые частные случаи. Во-вторых, появление неразрешимости - это, как правило, результат чрезмерной общности задачи (или языка, на котором описаны объекты задачи). Задача в более общей постановке имеет больше шансов оказаться неразрешимой.

Соседние файлы в папке TURIN