Рекурсивные функции — различия между версиями
(→Основные определения) |
(→Основные определения) |
||
Строка 3: | Строка 3: | ||
== Примитивно рекурсивные функции == | == Примитивно рекурсивные функции == | ||
=== Основные определения === | === Основные определения === | ||
− | Рассмотрим следующие правила преобразования функций | + | Рассмотрим следующие правила преобразования функций: |
* Рассмотрим <tex> k </tex>-местную функцию <tex> f(x_1,\ldots,x_k) </tex> и <tex> k </tex> <tex>n </tex>-местных функций <tex> g_i(x_1,x_2,\ldots,x_n) </tex>. Тогда после преобразования у нас появится <tex> n </tex> - местная функция <tex> F = f(g_1(x_1,\ldots,x_n),\ldots, g_k(x_1,\ldots,x_n)) </tex>. | * Рассмотрим <tex> k </tex>-местную функцию <tex> f(x_1,\ldots,x_k) </tex> и <tex> k </tex> <tex>n </tex>-местных функций <tex> g_i(x_1,x_2,\ldots,x_n) </tex>. Тогда после преобразования у нас появится <tex> n </tex> - местная функция <tex> F = f(g_1(x_1,\ldots,x_n),\ldots, g_k(x_1,\ldots,x_n)) </tex>. | ||
− | Это правило называется правилом подстановки | + | : Это правило называется правилом подстановки |
* Рассмотрим <tex> k </tex>-местную функцию <tex> f </tex> и <tex> k + 2 </tex>-местную функцию <tex> h </tex>. Тогда после преобразования у нас будет <tex> k+1 </tex> -местная функция <tex> g </tex>, которая определена следующим образом: | * Рассмотрим <tex> k </tex>-местную функцию <tex> f </tex> и <tex> k + 2 </tex>-местную функцию <tex> h </tex>. Тогда после преобразования у нас будет <tex> k+1 </tex> -местная функция <tex> g </tex>, которая определена следующим образом: | ||
Строка 21: | Строка 21: | ||
Благодаря проекторам мы можем делать следующие преобразования: | Благодаря проекторам мы можем делать следующие преобразования: | ||
− | *В правиле подстановки можно использовать функции с разным числом аргументов. Например, подстановка <tex> F(x,y) = f(g(y),h(x,x,y)) </tex> эквивалентна <tex> F(x,y,z) = f(g(P_{2,2}(x,y)),h(P_{2,1}(x,y),P_{2,1}(x,y),P_{2,2}(x,y)) </tex>, но если <tex> F </tex> не константная функция то все подставляемые функции должны иметь хотя бы один аргумент. | + | *В правиле подстановки можно использовать функции с разным числом аргументов. Например, подстановка <tex> F(x,y) = f(g(y),h(x,x,y)) </tex> эквивалентна <tex> F(x,y,z) = f(g(P_{2,2}(x,y)),h(P_{2,1}(x,y),P_{2,1}(x,y),P_{2,2}(x,y))) </tex>, но если <tex> F </tex> не константная функция то все подставляемые функции должны иметь хотя бы один аргумент. |
*В рекурсии не обязательно вести индукцию по последнему аргументу. Следует из того что мы можем с помощью проекторов поставить требуемый аргумент на последнее место. | *В рекурсии не обязательно вести индукцию по последнему аргументу. Следует из того что мы можем с помощью проекторов поставить требуемый аргумент на последнее место. | ||
− | В дальнейшем вместо <tex> P_{n,k}(x_1,\ldots,x_k) </tex> будем писать просто, подразумевая требуемое нам <tex> n </tex>. | + | В дальнейшем вместо <tex> P_{n,k}(x_1,\ldots,x_k) </tex> будем писать просто <tex> x_k </tex>, подразумевая требуемое нам <tex> n </tex>. |
=== Арифметические операции на примитивно рекурсивных функциях === | === Арифметические операции на примитивно рекурсивных функциях === |
Версия 21:11, 18 января 2013
Эта статья находится в разработке!
Все рассматриваемые здесь функции действуют из подмножества
в , где - любое натуральное число.Также будем считать что натуральное число.Содержание
Примитивно рекурсивные функции
Основные определения
Рассмотрим следующие правила преобразования функций:
- Рассмотрим -местную функцию и -местных функций . Тогда после преобразования у нас появится - местная функция .
- Это правило называется правилом подстановки
- Рассмотрим -местную функцию и -местную функцию . Тогда после преобразования у нас будет -местная функция , которая определена следующим образом:
- Это правило называется правилом рекурсии,при этом будем говорить что рекурсия запускается по аргументу .
Определение: |
Примитивно рекурсивными называют функции, которые можно получить с помощью правил подстановки и рекурсии из константной функции | , функции и набора функций где .
Заметим, что если
— -местная примитивно рекурсивная функция, то она определена на всем множестве , так как получается путем правил преобразования из всюду определенных функций, и правила преобразование не портят всюду определенность. Говоря неформальным языком, рекурсивные функции напоминают программы, у которых при любых входных данных все циклы и рекурсий завершатся за конечное время.Благодаря проекторам мы можем делать следующие преобразования:
- В правиле подстановки можно использовать функции с разным числом аргументов. Например, подстановка эквивалентна , но если не константная функция то все подставляемые функции должны иметь хотя бы один аргумент.
- В рекурсии не обязательно вести индукцию по последнему аргументу. Следует из того что мы можем с помощью проекторов поставить требуемый аргумент на последнее место.
В дальнейшем вместо
будем писать просто , подразумевая требуемое нам .Арифметические операции на примитивно рекурсивных функциях
n -местный ноль
- функция нуля аргументов.
Выразим сначала
, где
Теперь выразим
, где
Константа
равна- n местная константа, получается аналогичным к образом.
Сложения
, где
Умножения
, где
Вычитания
Если
, то , иначе .Рассмотрим сначала вычитания единицы
, где
Теперь рассмотрим
, где
Операции сравнения
если , иначе
если , иначе если , иначе
Сначала выразим
, где
Деление
, если , иначе
divmax(y,0) = 0 divmax(y,x+1) = h(y,x,divmax(x)), где
- модуль от деления. <tex> count(x,y) =