Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TheorAlg / Лекция по теории алгоритмов.doc
Скачиваний:
52
Добавлен:
25.04.2015
Размер:
551.42 Кб
Скачать

5. Нумерация вычислимых функций

Определение 5.1. Пусть fn-местная функция, вычислимая по программе P с геделевым номером = (P). Число m будем называть индексом функции f. Вычислимую функцию от n переменных с индексом m будем обозначать символом .

Из определения 5.1 следует, что каждая n-местная вычислимая функция f представлена в перечислении

Ниже мы в основном будем рассматривать одноместные вычислимые функции . Для простоты в их обозначении верхний индекс будем опускать.

Теорема 5.1. Существует невычислимая всюду определенная функция.

Доказательство. Пусть - некоторое перечисление всех вычислимых функций:

Положим

Функция g отличается от любой вычислимой функции в точкеn. Действительно, если функция определена в точкеn, то . Еслине определена в точкеn, то g отличается от тем, что значениеg(n) определено. Таким образом, и, следовательно, g - невычислимая всюду определенная функция.

Метод построения функции в теореме 5.1 является примером диагональной конструкции, открытой Кантором.

6. Универсальные программы

В этом разделе мы докажем несколько неожиданный результат, состоящий в том, что существуют универсальные программы, то есть программы, которые в некотором смысле реализуют все другие программы. Этот результат является одним из основных результатов теории вычислимости.

Определение 6.1. Универсальной функцией для n-местных вычислимых функций называется (n+1)-местная функция

.

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

Ниже для простоты вместо будем писать.

Теорема 6.1. Для каждого натурального числа n универсальная функция вычислима.

Доказательство. Покажем, как можно вычислить значение функции для заданного числаm и фиксированного набора (x1, ..., xn). Неформальная процедура вычисления значения состоит в следующем: «Декодируйте числоm и восстановите программу Рm. Затем имитируйте вычисление по этой программе. Если вычисление по программе заканчивается, требуемое значение содержится в регистреR1». По тезису Черча заключаем, что функция вычислима.

Определение 6.2. Любая программа Р(n), вычисляющая функцию , называется универсальной программой.

Универсальные программы полностью соответствуют своему названию. Действительно, так как универсальная программа Р(n) позволяет вычислить любую n-местную вычислимую функцию, то, по сути дела, программа Р(n) заменяет абсолютно все программы для вычисления n-местных функций.

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

7. Алгоритмически неразрешимые проблемы

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

При доказательстве неразрешимости той или иной проблемы часто используется так называемый метод сводимости, заключающийся в следующем. Пусть, например, в результате некоторых рассуждений удалось показать, что решение проблемы Pr1 приводит к решению другой проблемы Pr2. В этом случае говорят, что проблема Pr2 сводится к проблеме Pr1. Таким образом, если проблема Pr2 сводится к проблеме Pr1, то из разрешимости Pr1 следует разрешимость Pr2 и, наоборот, из неразрешимости Pr2 следует неразрешимость Pr1. В данном разделе метод сводимости используется при доказательстве теоремы 7.3.

Ниже доказывается неразрешимость ряда известных проблем.

Теорема 7.1. Проблема «функция всюду определена» неразрешима.

Доказательство. Пусть g - характеристическая функция этой проблемы

Нам надо показать, что функция g невычислима.

От противного, предположим, что g - вычислимая функция. Рассмотрим функцию

Функция f всюду определена и отличается от каждой вычислимой функции .

Применяя g и универсальную функцию , запишем f в виде:

Из вычислимости функций g и по тезису Черча следует вычислимость функцииf.

Полученное противоречие доказывает невычислимость функции g. Таким образом, проблема «функция всюду определена» неразрешима.

Обозначим область определения и множество значенийфункциичерезисоответственно.

Теорема 7.2. Проблема «» неразрешима.

Доказательство. Характеристическая функция этой проблемы задается следующим образом:

Предположим, что функция g вычислима, и приведем это предположение к противоречию.

Рассмотрим функцию

Так как функция g вычислима, то по тезису Черча функция f также вычислима. С другой стороны, для любого x область определения Dom(f) функции f отлична от области определения , и, следовательно,.

Таким образом, предположение о вычислимости характеристической функции g неверно. Поэтому проблема «» неразрешима.

Замечание 7.1. Доказанная теорема вовсе не утверждает, что мы не можем для любого конкретного числа a сказать, будет ли определено значение . В теореме лишь утверждается, что не существует единого общего метода решения вопроса о том, будет ли значениеопределено.

Замечание 7.2. Проблему «» называют такжепроблемой самоприменимости. Такое название связано с формулировкой проблемы в форме: «Остановится ли МНР, работая по программе с начальной конфигурацией (x)?». Другими словами: «Применима ли программа к своему кодовому номеру?».

Теорема 7.3. Проблема «» неразрешима.

Доказательство. Если бы проблема «» была разрешима, то была бы разрешима более простая проблема «», что противоречит доказанной выше теореме.

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

Смысл этого утверждения для теоретического программирования очевиден: не существует общего метода проверки программ на наличие в них бесконечных циклов.

В доказательстве теоремы мы показали, что проблема остановки «», по крайней мере, не проще, чем проблема самоприменимости «». Мы свели вопрос о неразрешимости одной проблемы к другой. Это прием часто используется при доказательстве неразрешимости проблем.

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