Рекурсия курса значений
![]() | Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Апрель 2009 г. ) |
В теории вычислимости рекурсия курса значений — это метод определения теоретико-числовых функций с помощью рекурсии . При определении функции f с помощью рекурсии курса значений значение f ( n ) вычисляется из последовательности .
Тот факт, что такие определения могут быть преобразованы в определения с использованием более простой формы рекурсии, часто используется для доказательства того, что функции, определенные с помощью рекурсии по ходу значений, являются примитивно-рекурсивными . В отличие от рекурсии хода значений, в примитивной рекурсии для вычисления значения функции требуется только предыдущее значение; например, для 1-арной примитивно-рекурсивной функции g значение g ( n +1) вычисляется только из g ( n ) и n .
Определение и примеры
[ редактировать ]Функция факториала n ! рекурсивно определяется по правилам
Эта рекурсия является примитивной рекурсией , поскольку она вычисляет следующее значение ( n +1)! функции на основе значения n и предыдущего значения n ! функции. С другой стороны, функция Fib( n ), которая возвращает n- е число Фибоначчи , определяется с помощью уравнений рекурсии
Чтобы вычислить Fib( n последних +2), необходимы два значения функции Fib. Наконец, рассмотрим функцию g, определенную с помощью рекурсивных уравнений
Чтобы вычислить g ( n все предыдущие значения g +1) с помощью этих уравнений, необходимо вычислить ; никакое фиксированное конечное число предыдущих значений вообще не является достаточным для вычисления g . Функции Fib и g являются примерами функций, определяемых рекурсией курса значений.
В общем, функция f определяется рекурсией курса значений если существует фиксированная примитивно-рекурсивная функция h такая, что для всех n ,
где – число Гёделя, кодирующее указанную последовательность.В частности
предоставляет начальное значение рекурсии. Функция h может проверять свой первый аргумент, чтобы предоставить явные начальные значения, например, для Fib можно использовать функцию, определенную
где s [ i ] обозначает извлечение элемента i из закодированной последовательности s ; Легко увидеть, что это примитивно-рекурсивная функция (при условии, что используется соответствующая нумерация Гёделя).
Эквивалентность примитивной рекурсии
[ редактировать ]Чтобы преобразовать определение с помощью рекурсии хода значений в примитивную рекурсию, используется вспомогательная (вспомогательная) функция. Предположим, что кто-то хочет иметь
- .
Чтобы определить f с помощью примитивной рекурсии, сначала определите вспомогательную функцию курса значений , которая должна удовлетворять
где правая часть считается нумерацией Гёделя для последовательностей .
Таким образом кодирует первые n значений f . Функция может быть определено с помощью примитивной рекурсии, потому что получается добавлением к новый элемент :
- ,
где add ( n , s , x ) вычисляет, всякий раз, когда s кодирует последовательность длины n , новую последовательность t длины n + 1 такую, что t [ n ] = x и t [ i ] = s [ i ] для всех i < н . Это примитивно-рекурсивная функция в предположении соответствующей нумерации Гёделя; h изначально предполагается примитивно-рекурсивным. Таким образом, отношение рекурсии можно записать как примитивную рекурсию:
где g сама по себе является примитивно-рекурсивной, поскольку представляет собой композицию двух таких функций:
Данный , исходная функция f может быть определена как , что показывает, что это также примитивно-рекурсивная функция.
Приложение к примитивно-рекурсивным функциям
[ редактировать ]В контексте примитивно-рекурсивных функций удобно иметь средство для представления конечных последовательностей натуральных чисел как отдельных натуральных чисел. Один из таких методов, кодирование Гёделя , представляет собой последовательность положительных целых чисел. как
- ,
где p i представляет i -е простое число. Можно показать, что при таком представлении все обычные операции над последовательностями являются примитивно-рекурсивными. Эти операции включают в себя
- Определение длины последовательности,
- Извлечение элемента из последовательности по его индексу,
- Объединение двух последовательностей.
Используя это представление последовательностей, можно увидеть, что если h ( m ) примитивно рекурсивна, то функция
- .
также является примитивно-рекурсивным.
Когда последовательность разрешено включать нули, вместо этого оно представляется как
- ,
что позволяет различать коды последовательностей и .
Ограничения
[ редактировать ]Не каждое рекурсивное определение можно преобразовать в примитивно-рекурсивное определение. Одним из известных примеров является функция Аккермана , которая имеет форму A ( m , n ) и доказуемо не является примитивно-рекурсивной.
Действительно, каждое новое значение A ( m +1, n ) зависит от последовательности ранее определенных значений A ( i , j ), но i -s и j -s, для которых значения должны быть включены в эту последовательность, сами зависят от ранее вычисленные значения функции; а именно ( я , j ) = ( м , А ( м +1, п )). Таким образом, невозможно закодировать ранее вычисленную последовательность значений примитивно-рекурсивным способом предложенным выше способом (или вообще, как оказывается, эта функция не является примитивно-рекурсивной).
Ссылки
[ редактировать ]- Хинман, П.Г., 2006, Основы математической логики , А.К. Петерс.
- Одифредди, П.Г. , 1989, Классическая теория рекурсии , Северная Голландия; второе издание, 1999 г.