Рекурсивные функции
Наше доказательство теорем 76 и 77 позволяет также получить такое следствие, называемое иногда теоремой Клини о нормальной форме:
Теорема 78. Всякая частично рекурсивная функция f представима в виде
где a и b некоторые примитивно рекурсивные функции.
В самом деле, любая частично рекурсивная функция вычислима на машине Тьюринга, а следовательно, представима в нужном нам виде, как видно из доказательства теоремы 76 (в качестве a берется функция, дающий первый член пары по ее номеру).
Мы сформулировали эту теорему для случая одноместной функции f, но аналогичное утверждение верно и для функций нескольких аргументов (и доказательство почти не меняется).
89. Покажите, что одним -оператором, применяя его последним, не обойтись: не всякая частично рекурсивная функция представима в виде
где b некоторая примитивно рекурсивная функция.
Из теоремы Клини о нормальной форме вытекает такое утверждение:
Теорема 79. Всякое перечислимое множество есть проекция примитивно рекурсивного множества.
Перечислимое множество есть область определения рекурсивной функции; представив ее в нормальной форме, видим, что область определения есть проекция множества .
Вычислимость с оракулом
Определение класса частично рекурсивных функций легко модифицировать для случая вычислимости с оракулом. Пусть имеется некоторая всюду определенная функция Рассмотрим класс , который состоит из базисных функций, функции и всех других функций, которые могут быть из них получены с помощью подстановки, примитивной рекурсии и минимизации.
(Формально можно сказать так: есть минимальный класс, который содержит базисные функции, функцию и замкнут относительно подстановки, примитивной рекурсии и минимизации. Такой минимальный класс существует достаточно взять пересечение всех классов с этими свойствами.)
Теорема 80. Класс состоит из всех функций, вычислимых с оракулом (то есть с помощью программ, вызывающих как внешнюю процедуру).
Прежде всего заметим, что все функции из класса вычислимы с помощью таких программ. Это можно объяснить, например, так. Программы с конечным числом переменных вычисляли все частично-рекурсивные функции. Если добавить к ним примитивную операцию вычисления значения функции в заданной точке, то они точно так же будут вычислять все функции из класса .
Более содержательно обратное утверждение: мы хотим доказать, что если некоторая (частичная, вообще говоря) функция вычислима относительно то она может быть получена из базисных функций и из с помощью подстановки, рекурсии и минимизации.
Для этого вспомним критерий относительной вычислимости (теорема 45). Пусть функция f вычислима относительно всюду определенной функции Тогда, как мы знаем, существует перечислимое множество W троек вида , где x и y натуральные числа, а t образцы (функции с конечной областью определения), которое является корректным (тройки с одинаковым x, но разными y содержат несовместные образцы) и для которого
Мы сейчас покажем, что свойство " t есть часть функции " является примитивно рекурсивным относительно его характеристическая функция получается из базисных функций и из с помощью операций подстановки и рекурсии. (Напомним, что мы отождествляем образцы с их номерами в какой-то нумерации; о ее выборе см. ниже.)
После этого останется записать W как проекцию примитивно рекурсивного множества ( , где v примитивно рекурсивна), и заметить, что
Здесь v' примитивно рекурсивная относительно функция, для которой v'(x,[y,t,u])=0 тогда и только тогда, когда v(x,y,t,u)=0 и t есть часть функции а функция p1 выделяет из номера тройки [y,t,u] ее первый член y.
Осталось показать, что множество является примитивно рекурсивным относительно При доказательстве мы будем предполагать, что нумерация образцов такова, что следующие функции примитивно рекурсивны (они определены для образцов с непустой областью определения; для пустого образца доопределим их как угодно):
- last-x(t) наибольшее из чисел, на котором определен образец с номером t ;
- last-y(t) значение функции-образца с номером t в максимальной точке своей области определения;
- all-but-last(t) номер образца, который получится из образца с номером t, если удалить максимальную точку области определения.
Тогда можно записать такое рекурсивное определение: образец с номером t есть часть функции если либо этот образец пуст, либо и образец с номером all-but-last(t) есть часть функции
Это определение использует " возвратную рекурсию", которая разобрана в теореме 74; значение функции определяется рекурсивно через ее значения в меньших точках. Надо только выбрать нумерацию образцов так, чтобы all-but-last(t) было меньше t для всех t. Этого несложно добиться: например, можно нумеровать образцы с помощью простых чисел, считая, что образец имеет номер pa(b+1)... pe(f+1), где pi простое число с номером i (так что p0=2, p1=3, p2=5, ...).
Заметим, что доказательство стало бы немного проще, если использовать только " сплошные образцы" (областью определения которых является некоторый начальный отрезок натурального ряда) тогда можно начать с того, что установить примитивную рекурсивность (относительно ) функции n . Легко понять также, что в определении относительной вычислимости можно ограничиться только сплошными образцами.