В математике и информатике рекурсивное определение или индуктивное определение используется для определения элементов множества в терминах других элементов множества ( Aczel 1977 : 740ff). Некоторые примеры рекурсивно определяемых объектов включают факториалы , натуральные числа , числа Фибоначчи и троичное множество Кантора .
Рекурсивное определение функции определяет значения функции для некоторых входов в терминах значений той же функции для других (обычно меньших) входов. Например , факториальная функция n ! определяется правилами
Это определение справедливо для каждого натурального числа n , поскольку рекурсия в конечном итоге достигает базового случая 0. Определение можно также рассматривать как процедуру вычисления значения функции n !, начиная с n = 0 и продолжая n = 1, 2, 3 и т. д.
Теорема рекурсии утверждает, что такое определение действительно определяет функцию, которая является уникальной. Доказательство использует математическую индукцию . [1]
Индуктивное определение множества описывает элементы множества в терминах других элементов множества. Например, одно из определений множества натуральных чисел :
Существует много множеств, удовлетворяющих (1) и (2) – например, множество {1, 1,649, 2, 2,649, 3, 3,649, …} удовлетворяет определению. Однако условие (3) задает множество натуральных чисел, удаляя множества с лишними членами.
Свойства рекурсивно определенных функций и множеств часто можно доказать с помощью принципа индукции, который следует за рекурсивным определением. Например, определение натуральных чисел, представленное здесь, напрямую подразумевает принцип математической индукции для натуральных чисел: если свойство выполняется для натурального числа 0 (или 1), и свойство выполняется для n + 1 всякий раз, когда оно выполняется для n , то свойство выполняется для всех натуральных чисел (Aczel 1977:742).
Большинство рекурсивных определений имеют две основы: базис (основание) и индуктивное предложение.
Разница между циклическим определением и рекурсивным определением заключается в том, что рекурсивное определение всегда должно иметь базовые случаи , случаи, которые удовлетворяют определению, не будучи определенными в терминах самого определения, и что все другие случаи в индуктивных предложениях должны быть «меньше» в некотором смысле (т. е. ближе к тем базовым случаям, которые завершают рекурсию) — правило, также известное как «повторяться только с более простым случаем» [2] .
Напротив, циклическое определение может не иметь базового случая и даже может определять значение функции в терминах самого этого значения — а не других значений функции. Такая ситуация привела бы к бесконечному регрессу .
То, что рекурсивные определения являются действительными (то есть, что рекурсивное определение идентифицирует уникальную функцию), является теоремой теории множеств, известной как теорема о рекурсии , доказательство которой нетривиально. [3] Если областью определения функции являются натуральные числа, достаточными условиями для того, чтобы определение было действительным, являются то, что задано значение f (0) (т. е. базовый случай), и что для n > 0 задан алгоритм для определения f ( n ) в терминах n ( т. е. индуктивное предложение).
В более общем смысле рекурсивные определения функций могут быть сделаны всякий раз, когда область является хорошо упорядоченным множеством , используя принцип трансфинитной рекурсии . Формальные критерии того, что составляет допустимое рекурсивное определение, более сложны для общего случая. Схема общего доказательства и критерии могут быть найдены в «Топологии » Джеймса Манкреса . Однако ниже будет приведен конкретный случай (область ограничена положительными целыми числами вместо любого хорошо упорядоченного множества) общего рекурсивного определения. [4]
Пусть A — множество, а a 0 — элемент A. Если ρ — функция, которая присваивает каждой функции f отображение непустой части положительных целых чисел в A , элемент A , то существует единственная функция, такая что
Сложение определяется рекурсивно на основе подсчета как
Умножение определяется рекурсивно как
Возведение в степень определяется рекурсивно как
Биномиальные коэффициенты можно определить рекурсивно как
Множество простых чисел можно определить как уникальный набор положительных целых чисел, удовлетворяющих
Простота целого числа 2 является базовым случаем; проверка простоты любого большего целого числа X по этому определению требует знания простоты каждого целого числа между 2 и X , что хорошо определено этим определением. Последний пункт может быть доказан индукцией по X , для чего существенно, чтобы второе предложение гласило «тогда и только тогда»; если бы оно просто говорило «если», простота, например, числа 4 была бы неясна, и дальнейшее применение второго предложения было бы невозможным.
Чётные числа можно определить как состоящие из
Понятие правильно сформированной формулы (wff) в пропозициональной логике определяется рекурсивно как наименьшее множество, удовлетворяющее трем правилам:
Определение можно использовать для того, чтобы выяснить, является ли любая конкретная строка символов wff:
Логические программы можно понимать как наборы рекурсивных определений . [5] [6] Например, рекурсивное определение четного числа можно записать как логическую программу:
четный ( 0 ). четный ( s ( s ( X ))) :- четный ( X ).
Здесь :-
представляет собой , если , и представляет собой преемника , а именно , как в арифметике Пеано . s(X)
X
X+1
Язык логического программирования Prolog использует обратные рассуждения для решения задач и ответа на запросы. Например, при заданном запросе он выдает ответ . При заданном запросе он выдает ответ .?- even(s(s(0)))
true
?- even(s(0))
false
Программа может использоваться не только для проверки истинности запроса, но и для генерации истинных ответов. Например:
?- четный ( X ). X = 0 X = s ( s ( 0 )) X = s ( s ( s ( s ( 0 )))) X = s ( s ( s ( s ( s ( 0 ) ) )))) .....
Логические программы значительно расширяют рекурсивные определения, включая использование отрицательных условий, реализуемых посредством отрицания как неудачи , как в определении:
четный ( 0 ). четный ( s ( X )) :- не ( четный ( X )).