В теории вычислимости рекурсивные теоремы Клини представляют собой пару фундаментальных результатов о применении вычислимых функций к их собственным описаниям. Теоремы были впервые доказаны Стивеном Клини в 1938 году [1] и появились в его книге 1952 года «Введение в метаматематику» . [2] Связанная теорема, которая строит неподвижные точки вычислимой функции, известна как теорема Роджерса и принадлежит Хартли Роджерсу-младшему [3]
Теоремы рекурсии можно применять для построения неподвижных точек некоторых операций над вычислимыми функциями , для генерации квинов и для построения функций, определяемых с помощью рекурсивных определений .
Утверждение теорем относится к допустимой нумерации частично рекурсивных функций , такой, что функция, соответствующая индексу, равна .
Если и являются частичными функциями натуральных чисел, то запись показывает, что для каждого n либо и оба определены и равны, либо и оба не определены.
При наличии функции фиксированная точка — это индекс такой, что . Обратите внимание, что сравнение входов и выходов здесь выполняется не в терминах числовых значений, а в терминах связанных с ними функций.
Роджерс описывает следующий результат как «более простую версию» (второй) теоремы Клини о рекурсии. [4]
Теорема Роджерса о неподвижной точке — если — полностью вычислимая функция, то она имеет неподвижную точку в указанном выше смысле.
По сути, это означает, что если мы применяем эффективное преобразование к программам (например, заменяем инструкции, такие как follower, jump, remove lines), то всегда будет программа, поведение которой не изменяется преобразованием. Поэтому эту теорему можно интерпретировать следующим образом: «при любой эффективной процедуре преобразования программ всегда существует программа, которая, будучи измененной процедурой, делает то же самое, что и раньше», или: «невозможно написать программу, которая изменяет экстенсиональное поведение всех программ».
Доказательство использует конкретную общую вычислимую функцию , определенную следующим образом. При наличии натурального числа функция выводит индекс частично вычислимой функции, которая выполняет следующее вычисление:
Таким образом, для всех индексов частично вычислимых функций, если определено, то . Если не определено, то — функция, которая нигде не определена. Функцию можно построить из частично вычислимой функции, описанной выше, и теоремы smn : для каждого — индекс программы, которая вычисляет функцию .
Чтобы завершить доказательство, пусть будет любой тотальной вычислимой функцией, и построим , как указано выше. Пусть будет индексом композиции , которая является тотальной вычислимой функцией. Тогда по определению . Но, поскольку является индексом , , и, таким образом , . По транзитивности это означает . Следовательно, для .
Это доказательство представляет собой построение частично рекурсивной функции , реализующей комбинатор Y.
Функция такая, что для всех называется функцией без фиксированной точки . Теорема о фиксированной точке показывает, что ни одна вычислимая функция не является функцией без фиксированной точки, но существует много невычислимых функций без фиксированной точки. Критерий полноты Арсланова утверждает, что единственная рекурсивно перечислимая степень Тьюринга , которая вычисляет функцию без фиксированной точки, это 0′ , степень проблемы остановки . [5]
Вторая теорема рекурсии является обобщением теоремы Роджерса со вторым входом в функции. Одной из неформальных интерпретаций второй теоремы рекурсии является то, что можно строить самореферентные программы; см. «Применение к квайнам» ниже.
Теорему можно доказать из теоремы Роджерса, если дать быть функцией такой, что (конструкция, описанная теоремой Smn ). Затем можно проверить, что неподвижная точка этого является индексом, как и требуется. Теорема конструктивна в том смысле, что фиксированная вычислимая функция отображает индекс для в индекс .
Вторая рекурсивная теорема Клини и теорема Роджерса могут быть доказаны довольно просто друг из друга. [6] Однако прямое доказательство теоремы Клини [7] не использует универсальную программу, что означает, что теорема верна для некоторых систем субрекурсивного программирования, не имеющих универсальной программы.
Классическим примером использования второй теоремы рекурсии является функция . Соответствующий индекс в этом случае дает вычислимую функцию, которая выводит свой собственный индекс при применении к любому значению. [8] При выражении в виде компьютерных программ такие индексы известны как квины .
Следующий пример на Lisp иллюстрирует, как в следствии можно эффективно получить функцию . Функция в коде — это функция с этим именем, полученная с помощью теоремы Smn .s11
Q
можно изменить на любую функцию с двумя аргументами.
( setq Q ' ( lambda ( x y ) x )) ( setq s11 ' ( lambda ( f x ) ( list 'lambda ' ( y ) ( list f x 'y )))) ( setq n ( list 'lambda ' ( x y ) ( list Q ( list s11 'x 'x ) 'y ))) ( setq p ( eval ( list s11 n n )))
Результаты следующих выражений должны быть одинаковыми. p(nil)
( eval ( list p nil ))
Q(p, nil)
( eval ( list Q p nil ))
Предположим, что и являются полностью вычислимыми функциями, которые используются в рекурсивном определении функции :
Вторая теорема о рекурсии может быть использована для того, чтобы показать, что такие уравнения определяют вычислимую функцию, где понятие вычислимости не должно допускать, на первый взгляд, рекурсивных определений (например, она может быть определена μ-рекурсией или машинами Тьюринга ). Это рекурсивное определение может быть преобразовано в вычислимую функцию , которая предполагает, что является индексом к себе, для имитации рекурсии:
Теорема рекурсии устанавливает существование вычислимой функции такой, что . Таким образом, удовлетворяет данному рекурсивному определению.
Рефлексивное или рефлексивное программирование относится к использованию самореференции в программах. Джонс представляет взгляд на вторую теорему о рекурсии, основанный на рефлексивном языке. [9] Показано, что определенный рефлексивный язык не сильнее языка без рефлексии (потому что интерпретатор для рефлексивного языка может быть реализован без использования рефлексии); затем показано, что теорема о рекурсии почти тривиальна в рефлексивном языке.
В то время как вторая теорема рекурсии касается неподвижных точек вычислимых функций, первая теорема рекурсии связана с неподвижными точками, определяемыми операторами перечисления, которые являются вычислимым аналогом индуктивных определений. Оператор перечисления представляет собой набор пар ( A , n ), где A — это ( код для a) конечного множества чисел, а n — одно натуральное число. Часто n будет рассматриваться как код для упорядоченной пары натуральных чисел, особенно когда функции определяются с помощью операторов перечисления. Операторы перечисления имеют центральное значение в изучении сводимости перечисления .
Каждый оператор перечисления Φ определяет функцию из множеств натуральных чисел в множества натуральных чисел, заданные формулой
Рекурсивный оператор — это оператор перечисления, который при задании графика частично рекурсивной функции всегда возвращает график частично рекурсивной функции.
Неподвижная точка оператора перечисления Φ — это множество F, такое что Φ( F ) = F. Первая теорема перечисления показывает, что неподвижные точки могут быть эффективно получены, если сам оператор перечисления вычислим.
Первая теорема рекурсии также называется теоремой о неподвижной точке (теории рекурсии). [10] Существует также определение, которое можно применить к рекурсивным функционалам следующим образом:
Пусть — рекурсивный функционал. Тогда имеет наименьшую неподвижную точку , которая вычислима, т.е.
1)
2) такой, что выполняется следующее:
3) вычислимо
Как и вторая теорема рекурсии, первая теорема рекурсии может быть использована для получения функций, удовлетворяющих системам уравнений рекурсии. Чтобы применить первую теорему рекурсии, уравнения рекурсии должны быть сначала переписаны как рекурсивный оператор.
Рассмотрим уравнения рекурсии для факториальной функции f : Соответствующий рекурсивный оператор Φ будет иметь информацию, которая сообщает, как получить следующее значение f из предыдущего значения. Однако рекурсивный оператор фактически определит график f . Во-первых, Φ будет содержать пару . Это указывает на то, что f (0) однозначно равно 1, и, таким образом, пара (0,1) находится в графике f .
Далее, для каждого n и m , Φ будет содержать пару . Это означает, что если f ( n ) равно m , то f ( n + 1) равно ( n + 1) m , так что пара ( n + 1, ( n + 1) m ) находится в графике f . В отличие от базового случая f (0) = 1 , рекурсивный оператор требует некоторой информации о f ( n ) , прежде чем он определит значение f ( n + 1) .
Первая теорема рекурсии (в частности, часть 1) утверждает, что существует множество F такое, что Φ( F ) = F . Множество F будет состоять исключительно из упорядоченных пар натуральных чисел и будет графиком факториальной функции f , как и требовалось.
Ограничение на уравнения рекурсии, которые могут быть переделаны в рекурсивные операторы, гарантирует, что уравнения рекурсии фактически определяют наименьшую неподвижную точку. Например, рассмотрим набор уравнений рекурсии: Нет функции g , удовлетворяющей этим уравнениям, потому что они подразумевают g (2) = 1 и также подразумевают g (2) = 0. Таким образом, нет неподвижной точки g, удовлетворяющей этим уравнениям рекурсии. Можно создать оператор перечисления, соответствующий этим уравнениям, но он не будет рекурсивным оператором.
Доказательство части 1 первой теоремы о рекурсии получается путем итерации оператора перечисления Φ, начиная с пустого множества. Сначала строится последовательность F k для . Пусть F 0 будет пустым множеством. Продолжая индуктивно, для каждого k , пусть F k + 1 будет . Наконец, F принимается равным . Оставшаяся часть доказательства состоит из проверки того, что F рекурсивно перечислимо и является наименьшей неподвижной точкой Φ. Последовательность F k , используемая в этом доказательстве, соответствует цепочке Клини в доказательстве теоремы Клини о неподвижной точке .
Вторая часть первой теоремы о рекурсии следует из первой части. Предположение о том, что Φ является рекурсивным оператором, используется для того, чтобы показать, что неподвижная точка Φ является графиком частичной функции. Ключевым моментом является то, что если неподвижная точка F не является графиком функции, то существует некоторое k такое, что F k не является графиком функции.
По сравнению со второй теоремой рекурсии, первая теорема рекурсии приводит к более сильному заключению, но только когда удовлетворяются более узкие гипотезы. Роджерс использует термин слабая теорема рекурсии для первой теоремы рекурсии и сильная теорема рекурсии для второй теоремы рекурсии. [3]
Одно из различий между первой и второй теоремами рекурсии заключается в том, что неподвижные точки, полученные с помощью первой теоремы рекурсии, гарантированно являются наименьшими неподвижными точками, в то время как точки, полученные с помощью второй теоремы рекурсии, могут не быть наименьшими неподвижными точками.
Второе отличие заключается в том, что первая теорема рекурсии применима только к системам уравнений, которые можно переформулировать как рекурсивные операторы. Это ограничение похоже на ограничение на непрерывные операторы в теореме Клини о неподвижной точке теории порядка . Вторая теорема рекурсии может быть применена к любой полной рекурсивной функции.
В контексте своей теории нумераций Ершов показал, что теорема Клини о рекурсии верна для любой предполной нумерации . [11] Нумерация Гёделя является предполной нумерацией на множестве вычислимых функций, поэтому обобщенная теорема дает теорему Клини о рекурсии как частный случай. [12]
Если задана предполная нумерация , то для любой частично вычислимой функции с двумя параметрами существует полностью вычислимая функция с одним параметром, такая что
Сноски