Почему вычислимые функции также называются рекурсивными функциями?


23

В теории вычислимости вычислимые функции также называют рекурсивными функциями. По крайней мере, на первый взгляд, они не имеют ничего общего с тем, что вы называете «рекурсивным» в повседневном программировании (т. Е. Функциями, которые сами себя вызывают).

Каково реальное значение рекурсивности в контексте вычислимости? Почему эти функции называются «рекурсивными»?

Другими словами: какова связь между двумя значениями «рекурсивность»?



3
Они обманывают, потому что они включают оператор μ . Это оператор минимизации, но, конечно, минимизация имеет мало общего с рекурсией. Так что, похоже, кто-то (Клин) думал, что «рекурсивный» будет звучать хорошо, поэтому он придумал оправдание для использования этого имени. Намного позже Роберт Соаре объяснил, что «вычислимый» будет звучать намного лучше, и что «рекурсивный» был просто маркетинговым трюком первых дней, и все согласились.
Томас Климпел

3
Что насчет примитивных рекурсивных функций? Скопированные из википедии, они определены как и . Это функция, которая вызывает себя. h ( S ( y ) , x 1 , , x k ) = g ( y , h ( y , x 1 , ... , х к ) , х 1 , ... ,h(0,x1,,xk)=f(x1,,xk)h(S(y),x1,,xk)=g(y,h(y,x1,,xk),x1,,xk)
Хендрик Ян

3
@GoloRoden Обратите внимание, что описание тега «вычислимость» (вы использовали его для этого вопроса) гласит: «Теория вычислимости или теория рекурсии». Гедель называл функции рекурсивными , но термин превратился в вычислимый . Вероятно, чтобы избежать путаницы, как у вас. Люди, которые интенсивно изучают теорию вычислимости, чаще используют термин теория рекурсии, чтобы «уважать» ее корни.
Оберон

1
потому что они определены рекурсивно, то есть « более сложные функции определены в терминах ранее определенных, более простых функций »
Никос М.

Ответы:


13

Определите некоторые основные функции:

  • нулевая функция

    zero:NN:x0
  • функция преемника

    succ:NN:xx+1
  • функция проекции

pin:NnN:(x1,x2,,xn)xi

С этого момента я буду использовать для обозначения ( х 1 , х 2 , ... , х п )xn¯(x1,x2,,xn)

Определите состав:

Данные функции

  • каждый с подписью N kNg1,g2,,gmNkN
  • f:NmN

Построить следующую функцию:

h:NkN:xk¯h(xk¯)=f(g1(xk¯),g2(xk¯),,gm(xk¯))

Определим примитивную рекурсию:

Данные функции

  • f:NkN
  • g:Nk+2N

Построить следующую (кусочную) функцию:

час:NК+1N:(ИксК¯,Y+1){е(ИксК¯),Y+1знак равно0г(ИксК¯,Y,час(ИксК¯,Y)),Y+1>0

Все функции, которые могут быть выполнены с использованием композиций и примитивной рекурсии по базовым функциям , называются примитивно-рекурсивными . Так называется по определению. Хотя существует связь с функциями, которые сами себя вызывают, нет необходимости пытаться связать их друг с другом. Вы можете считать рекурсию омонимом.

Это определение и конструкция, приведенная выше, была построена Гёделем (также участвовали несколько других людей) в попытке охватить все функции, которые можно вычислить, т. Е. Для этой функции существует машина Тьюринга. Обратите внимание, что концепция машины Тьюринга еще не была описана или, по крайней мере, очень расплывчата.

(Не) к счастью, кто-то по имени Аккерман пришел и определил следующую функцию:

  • AсК:N2N
  • AсК(0,Y)знак равноY+1
  • AсК(Икс+1,0)знак равноAсК(Икс,1)
  • AсК(Икс+1,Y+1)знак равноAсК(Икс,AсК(Икс+1,Y))

Эта функция вычислима, но нет способа построить ее, используя только конструкции выше! (т.е. не является примитивно-рекурсивным) Это означает, что Гедель и его отряд не смогли охватить все вычислимые функции в их построении!AсК

Геделю пришлось расширить свой класс функций, чтобы можно было построить . Он сделал это, определив следующее:AсК

Неограниченная минимизация

  • г:NКN
  • ЕСЛИ ТОГДА г ( ¯ х к ) = у ELSE г ( ¯ х к ) не определен.[е(ИксК¯,Y)знак равно0 А ТАКЖЕ е(ИксК¯,Z) определено Z<Y А ТАКЖЕ е(ИксК¯,Z)0]

    г(ИксК¯)знак равноY

    г(ИксК¯)

г((Икс1,Икс2,...,ИксК))е


Все функции, которые могут быть построены со всеми конструкциями, определенными выше, называются рекурсивными . Опять же, рекурсивное имя просто по определению, и оно не обязательно имеет корреляцию с функциями, которые сами себя вызывают. Воистину, считай это омонимом.

AсК

AсК

Если вы заинтригованы, вы можете попытаться сделать класс Геделя больше. Вы можете попытаться определить «противоположность» неограниченной минимизации. То есть неограниченная максимизация, т.е. функция, которая находит самый большой корень. Тем не менее, вы можете обнаружить, что вычислить эту функцию сложно (невозможно). Вы можете прочитать о проблеме занятого бобра , которая пытается применить неограниченную максимизацию.


4
Я знаю, понимают, что данные определения на самом деле не отвечают на вопрос, но мой ответ описывает эволюцию теории рекурсии / вычислимости. Может стоит прочитать.
Оберон

Мне это нравится, спасибо за ваши усилия :-)
Голо Роден

час((Икс1,Икс2,,,,,ИксК),0)знак равное((Икс1,Икс2,,,,,ИксК))час((Икс1,Икс2,,,,,ИксК,0)), Кроме того, нет условия затем до следующего пункта маркированного списка else.
Эрик Тауэрс

2
μ

1
В вашем ответе немало неверных утверждений. Вы не должны составлять историю для ответа.
Каве

17

Основоположниками теории вычислимости были математики. Они основали то, что сейчас называется теорией вычислимости еще до появления компьютеров. Как математики определяли функции, которые можно было вычислить? По рекурсивным определениям!

Таким образом, существовала рекурсивная функция до появления любой другой модели вычислений, такой как машины Тьюринга, лямбда-исчисления или машины регистров. Поэтому люди называют эти функции рекурсивными функциями. Тот факт, что они оказались именно тем, что могут вычислить машины Тьюринга и другие модели, является более поздним событием (в основном доказанным Клин).

μ

Название поля используется в теории рекурсии. Однако в последние десятилетия был успешный толчок к изменению названия на что-то более привлекательное от теории рекурсии до чего-то более компьютерного (по сравнению с математикой). В результате область теперь называется теорией вычислимости. Однако если вы посмотрите на книги, статьи, конференции и т. Д. В первые десятилетия, они называются теорией рекурсии, а не теорией вычислимости. Даже название собственной книги Соаре 1987 года (которая была главной фигурой, побудившей сменить название на теорию вычислимости) - «Рекурсивно перечислимые множества и степени».

Если вы хотите узнать больше об истории, то самое интересное и интересное место для ее изучения - первая глава Классической теории рекурсии Одифредди.


7

Роберт Соаре написал эссе по этому вопросу. По его словам, термин (общие) рекурсивные функции был придуман Геделем, который определил их с помощью некоторой взаимной рекурсии. Имя застряло, хотя позже были найдены другие эквивалентные определения.

Для получения дополнительной информации я рекомендую сочинение Соаре.


0

вместо длинного комментария решил добавить ответ:

Потому что они определены рекурсивно , то есть « более сложные функции определены в терминах ранее определенных, более простых функций »

Этот вид итеративной или инкрементной процедуры создает четко определенные функции (в математическом смысле)

В этом смысл рекурсивности на математическом языке. Ниже показано, как это относится к рекурсии на языке программирования.

Сравните эту процедуру с методами и методами, такими как (математическая) индукция, которая также является примером рекурсивности в математике.

Программирование имеет как математическую, так и инженерную направленность.

Это (конструктивная обычно работают на жидком) процедура также refered , как « самозагрузки » в операционных системах жаргоне.

Однако выполнения рекурсии той же функции (то есть caling сама во время ее выполнения ), так как он должен (хмм, должно случиться) на уже вычисленных значений (или аргументы), или другими словами, в части набора результатов уже вычислен , также является рекурсивным в вышеприведенном смысле, то есть « определено с помощью ранее определенных функций (и их значений) »

Остальное не очень четко определено, и приводит к таким вещам, как переполнение стека :))))

Чтобы привести еще один пример из операционных систем, рекурсия времени выполнения (вызывающая себя) может быть взята в качестве аналога перезагрузки операционной системы после определенного обновления (например, обновления ядра). Многие операционные системы выполняют следующую процедуру:

  1. начальная загрузка для загрузки низкоуровневых подпрограмм (например, I / O)
  2. сделать необходимые обновления (используя низкоуровневые процедуры)
  3. перезагрузка (фактически, повторный вызов сама), но на этот раз загрузка более сложных подпрограмм (или даже всей системы)

Прекрасный ответ Оберона демонстрирует процедуру такого рода более подробно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.