Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раб. прогр. дисц. Мат_логика (спец. ПМИ) 20.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.04 Mб
Скачать

Упражнения

5.2. Используя диагональный метод, докажите что множество всех функций из N в N несчетно (Кантор).

5.3. Докажите, что множество всех невычислимых всюду определенных функций из N в N несчетно.

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

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

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

8. s-m-n-теорема

В этом разделе мы докажем теорему, принадлежащую к числу основных результатов теории алгоритмов. Суть теоремы в следующем. Допустим, что f(х, у) - вычислимая функция. Для каждого фиксированного значения a переменной х функция f порождает одноместную вычислимую функцию ga(y) = f(a, у). Из вычислимости функции ga следует существование индекса b такого, что f(a, у) = fb(у). Оказывается индекс b можно эффективно вычислить по параметру а.

Теорема 8.1 (s-m-n-теорема, простая форма). Пусть f(х, у) -вычислимая функция. Существует всюду определенная вычислимая функция s(x), такая, что f(х, у) = fs(x)(у).

Доказательство. Из вычислимости функции f(х, у) следует существование МНР-программы Pr, которая, исходя из начальной конфигурации (x, y, 0, 0, ...), вычисляет значение функции f от двух аргументов х и у. Изменим программу Pr, добавив спереди команды, преобразующие начальную конфигурацию

R1

R2

R3

R4

...

y

0

0

0

...

(*)

в конфигурацию

R1

R2

R3

R4

...

a

y

0

0

...

следующим образом:

T(1, 2)

Z(1)

Pr

Новая программа Pr1, примененная к начальной конфигурации (*), вычисляет значение функции ga(y) = f(a, у) от одного аргумента у.

Теперь рассмотрим функцию s(a) = (Pr1), сопоставляющую произвольному неотрицательному целому числу a геделев номер программы Pr1. Функция s всюду определена и по тезису Черча вычислима. Кроме того, по построению fs(a)(у) = f(a, у) для каждого .

Замечание 8.1. Сформулированную теорему называют также теоремой параметризации, поскольку она позволяет по заданной вычислимой функции f(x, у) и фиксированному параметру a найти геделев номер s(a) программы, вычисляющей функцию fs(a)(у) = f(a, у).

Доказанная выше теорема 8.1 является частным случаем более общей теоремы.

Теорема 8.2 (s-m-n-теорема). Пусть m, n – натуральные числа, - вычислимая функция с геделевым номером a. Существует всюду определенная вычислимая функция такая, что

.

Доказательство сформулированного утверждения аналогично доказательству теоремы 8.1.

Замечание 8.2. Название теоремы 8.2 связано с обозначением для функций в формулировке теоремы.

Покажем теперь, как можно использовать s-m-n-теорему для доказательства неразрешимости проблем. s-m-n-теорема часто используется для сведения проблемы « » к другим проблемам.

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

Доказательство. Рассмотрим функцию

По тезису Черча функция f(x, y) вычислима. Отсюда по s-m-n-теореме вытекает существование всюду определенной вычислимой функции s(x) такой, что . По определению функции f(x, y) имеем:

.

Следовательно, истинность условия можно установить, определив справедливость равенства . Тем самым мы свели проблему « » к проблеме « ». Поскольку первая из них неразрешима, то неразрешима и вторая.

Замечание 8.3. Теорема 8.3 показывает, что в области проверки правильности компьютерных программ имеются принципиальные ограничения. В ней говорится о том, что не существует алгоритма проверки того, будет ли программа вычислять нулевую функцию. Несколько изменив доказательство теоремы 8.3, можно убедиться в том, что то же самое справедливо и для любой другой конкретной вычислимой функции.

Теорема 8.4. Проблема неразрешима.

Доказательство. Допустим, что проблема разрешима. Тогда разрешима и проблема , где c – индекс функции 0 . Однако, это противоречит теореме 8.3. Таким образом, проблема неразрешима.

Замечание 8.4. Из теоремы 8.4 следует, что вопрос о том, вычисляют ли две программы одну и ту же одноместную функцию, неразрешим. Важность этого результата для теоретического программирования очевидна.