Рекурсивная функция (теория вычислимости): различия между версиями

[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
оформление
Строка 9:
Множество частично рекурсивных функций включает в себя множество общерекурсивных функций, а общерекурсивные функции включают в себя примитивно рекурсивные функции. Частично рекурсивные функции иногда называют просто рекурсивными функциями.
 
== Примитивно рекурсивная функция ==
<!-- используется для перенаправления [[Примитивно рекурсивная функция]]-->
 
=== Определение ===
Определение понятия '''примитивно рекурсивной функции''' является [[Математическая индукция|индуктивным]]. Оно состоит из указания класса базовых примитивно рекурсивных функций и двух операторов (''суперпозиции'' и ''примитивной рекурсии''), позволяющих строить новые примитивно рекурсивные функции на основе уже имеющихся.
Строка 24:
* '''Оператор суперпозиции''' (иногда — ''оператор подстановки''). Пусть <math>f</math> — функция от m переменных, а <math>g_1, \dots, g_m</math> — упорядоченный набор функций от <math>n</math> переменных каждая. Тогда результатом суперпозиции функций <math>g_k</math> в функцию <math>f</math> называется функция <math>h</math> от <math>n</math> переменных, сопоставляющая любому упорядоченному набору <math>x_1, \dots, x_n</math> натуральных чисел число
: <math>h(x_1,\ldots,x_n)=f(g_1(x_1,\ldots,x_n),\ldots,g_m(x_1,\ldots,x_n))</math>.
* '''Оператор примитивной рекурсии'''. Пусть <math>f</math> — функция от n&nbsp; переменных, а <math>g</math> — функция от <math>n+2</math>&nbsp; переменных. Тогда результатом применения оператора примитивной рекурсии к паре функций <math>f</math> и <math>g</math> называется функция <math>h</math> от <math>n+1</math>&nbsp; переменной вида
: <math>h(x_1,\ldots,x_n,0)=f(x_1,\ldots,x_n)</math>;
: <math>h(x_1,\ldots,x_n,y+1)=g(x_1,\ldots,x_n,y,h(x_1,\ldots, x_n,y))</math>.
Строка 52:
p(y+1)=I_2^1(y,\;p(y))\end{array}\right.</math>;
 
== Частично рекурсивная функция ==
<!-- используется для перенаправления [[Частично рекурсивная функция]] -->
 
'''Частично рекурсивная функция''' определяется аналогично примитивно рекурсивной, только к двум операторам суперпозиции и примитивной рекурсии добавляется ещё третий оператор — минимизации аргумента.
 
* '''Оператор минимизации аргумента'''. Пусть <math>f</math> — функция от ''n'' натуральных переменных. Тогда результатом применения оператора минимума аргумента к функции <math>f</math> называется функция <math>h</math> от <math>n-1</math>&nbsp; переменной, задаваемая следующим определением:
: <math>h(x_1,\ldots, x_{n-1}) = \min y</math>, при условии <math>f(x_1,\ldots,x_{n-1},\,y)=0</math>
: То есть функция <math>h</math> возвращает минимальное значение последнего аргумента функции <math>f</math>, при котором её значение равно 0.
Строка 64:
Частично рекурсивные функции для некоторых значений аргумента могут быть не определены, так как оператор минимизации аргумента не всегда корректно определён, поскольку функция <math>f</math> может быть не равной нулю ни при каких значениях аргументов. С точки зрения императивного программирования, результатом частично рекурсивной функции может быть не только число, но и [[Исключение (программирование)|исключение]] или уход в бесконечный цикл, соответствующие неопределённому значению.
 
== Общерекурсивная функция ==
<!-- используется для перенаправления [[Общерекурсивная функция]] -->
 
'''Общерекурсивная функция''' — частично рекурсивная функция, определённая для всех значений аргументов. Задача определения того, является ли частично рекурсивная функция с данным описанием общерекурсивной или нет, [[Алгоритмическая неразрешимость|алгоритмически неразрешима]].
 
== Свойства ==
 
Легко понять, что любая примитивно рекурсивная функция является частично рекурсивной, так как по определению
операторы для построения частично рекурсивных функций включают в себя операторы для построения примитивно рекурсивных функций.
Строка 79 ⟶ 78 :
Довольно сложно доказать существование и привести пример общерекурсивной функции, не являющейся примитивно рекурсивной. Одним из популярных примеров является [[функция Аккермана]]. Другой пример общерекурсивной функции, не являющейся примитивно рекурсивной, строится диагональным методом Кантора из универсальной функции для множества одноместных примитивно рекурсивных функций.
 
Как было показано [[Гёдель, Курт|Гёделем]], частично рекурсивные функции совпадают с множеством [[Вычислимые функции|вычислимых функций]].{{нет АИ|1|02|2012}}<!-- Это же тезис Чёрча  — Тьюринга. Что именно доказал Гёдель? -->
 
<!-- Гедель и Эрбран доказали, что всякая частично-рекурсивная функция ЭГ-вычислима, мендельсон "«Введение в математическую логику"», стр.263 -->
 
== История возникновения названий ==
 
Термины «частично рекурсивная функция» и «общерекурсивная функция» прижились в силу исторических причин
и по сути являются результатом неточного перевода английских терминов ''partial recursive function''
Строка 90 ⟶ 88 :
 
== См. также ==
 
* [[Алгоритм Маркова]] ([[продукционное программирование]])
* [[Машина Тьюринга]] ([[автоматное программирование]])
Строка 97 ⟶ 94 :
* [[Brainfuck]] ([[императивное программирование]])
* [[Unlambda]] ([[функциональное исчисление]])
 
== Ссылки ==
* [http://matinf.vsgao.com/simulator/rf.html Javascript трассировщик частично рекурсивных функций (работает on-line)]
 
== Литература ==
* Гильберт&nbsp; Д, Бернайс&nbsp; П. ''Основания математики'', Т.&nbsp; 1. — М.: Наука, 1979.
* Клини&nbsp; С.&nbsp; К. ''Введение в метаматематику''. — М., 1957.
* Мальцев А. И.  Алгоритмы и рекурсивные функции. М.:Наука, 1986.
* Петер&nbsp; Р. ''Рекурсивные функции'' — ИЛ, 1954.
* Верещагин Н. К., Шень А.Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции, 2-е изд., исправленное. — М.:МЦНМО, 2002.
 
== Ссылки ==
* [http://matinf.vsgao.com/simulator/rf.html Javascript трассировщик частично рекурсивных функций (работает on-line)]
 
{{rq|refless|isbn}}