Рекурсивные функции — различия между версиями
(→Операции сравнения) |
(→Деление) |
||
| Строка 94: | Строка 94: | ||
<tex> divide(x,y) = \frac{x}{y} </tex>, если <tex> y > 0 </tex>, иначе <tex> divide(x,y) = 0 </tex> | <tex> divide(x,y) = \frac{x}{y} </tex>, если <tex> y > 0 </tex>, иначе <tex> divide(x,y) = 0 </tex> | ||
| − | divmax(y | + | divmax(0,y) = 0 |
| − | divmax( | + | divmax(x+1,y) = h(y,x,divmax(x)), где <tex> h(y,x,z) = if (x+1 - divmax(x) == y) then x+1 else y |
add(mul(eq(sub(I(x+1),z),P_{1,1}(y)),I(x)), | add(mul(eq(sub(I(x+1),z),P_{1,1}(y)),I(x)), | ||
Версия 21:19, 18 января 2013
Все рассматриваемые здесь функции действуют из подмножества в , где - любое натуральное число.Также будем считать что натуральное число.
Содержание
Примитивно рекурсивные функции
Основные определения
Рассмотрим следующие правила преобразования функций:
- Рассмотрим -местную функцию и -местных функций . Тогда после преобразования у нас появится - местная функция .
- Это правило называется правилом подстановки
- Рассмотрим -местную функцию и -местную функцию . Тогда после преобразования у нас будет -местная функция , которая определена следующим образом:
- Это правило называется правилом рекурсии,при этом будем говорить что рекурсия запускается по аргументу .
| Определение: |
| Примитивно рекурсивными называют функции, которые можно получить с помощью правил подстановки и рекурсии из константной функции , функции и набора функций где . |
Заметим, что если — -местная примитивно рекурсивная функция, то она определена на всем множестве , так как получается путем правил преобразования из всюду определенных функций, и правила преобразование не портят всюду определенность. Говоря неформальным языком, рекурсивные функции напоминают программы, у которых при любых входных данных все циклы и рекурсий завершатся за конечное время.
Благодаря проекторам мы можем делать следующие преобразования:
- В правиле подстановки можно использовать функции с разным числом аргументов. Например, подстановка эквивалентна , но если не константная функция то все подставляемые функции должны иметь хотя бы один аргумент.
- В рекурсии не обязательно вести индукцию по последнему аргументу. Следует из того что мы можем с помощью проекторов поставить требуемый аргумент на последнее место.
В дальнейшем вместо будем писать просто , подразумевая требуемое нам .
Арифметические операции на примитивно рекурсивных функциях
n -местный ноль
- функция нуля аргументов.
Выразим сначала
, где
Теперь выразим
, где
Константа равна
- n местная константа, получается аналогичным к образом.
Сложения
, где
Умножения
, где
Вычитания
Если , то , иначе .
Рассмотрим сначала вычитания единицы
, где
Теперь рассмотрим
, где
Операции сравнения
если , иначе
если , иначе если , иначе
Сначала выразим
, где
Теперь все остальные функции
Деление
, если , иначе
divmax(0,y) = 0 divmax(x+1,y) = h(y,x,divmax(x)), где - модуль от деления. <tex> count(x,y) =