5. Нумерация вычислимых функций
Определение
5.1. Пусть
f
– n-местная
функция, вычислимая по программе P
с геделевым номером m = (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. Доказанную теорему часто интерпретируют как утверждение о неразрешимости проблемы остановки, в которой говорится, что не существует общего метода, устанавливающего, остановится ли некоторая конкретная программа, запущенная с некоторым конкретным набором начальных данных.
Смысл этого утверждения для теоретического программирования очевиден: не существует общего метода проверки программ на наличие в них бесконечных циклов.
В
доказательстве теоремы мы показали,
что проблема остановки «
»,
по крайней мере, не проще, чем проблема
самоприменимости «
».
Мы свели вопрос о неразрешимости одной
проблемы к другой. Это прием часто
используется при доказательстве
неразрешимости проблем.
