Определение примитивно-рекурсивных функций над общими типами данных

9

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

Интуитивно понятно, что если бы мне нужно было определить простой императивный язык, который позволял бы выполнять базовые операции, скажем, списки (такие как конкатенация, взятие головы и хвоста, сравнение элементов) и форму итерации, которая требует заранее знать, сколько итераций произойдет ( например, перебирая элементы в неизменяемом списке), такой язык должен в лучшем случае иметь возможность вычислять примитивные рекурсивные функции над списками. Но как я могу понять это формально, а точнее, как мне доказать, что мой язык вычисляет все примитивно-рекурсивные функции по спискам, а не только их подмножество?

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

обновление: возможно, я нашел ответ в статье под названием Walther Recursion , написанной Макаллестером и Аркоудасом. (Слушания CADE 1996. ) Это, кажется, содержит обобщенную версию примитивной рекурсии, а также более мощную рекурсию Вальтера. Я собираюсь написать ответ на свой вопрос, как только перевару это, но в то же время эта заметка может быть полезна для других с таким же вопросом.

Натаниель
источник
1
Мне не понятно, что именно вы ищете. Кажется, вы просто пытаетесь найти W-типы , но это может быть не так.
Андрей Бауэр
3
Вероятно, полезно отметить, что «обычные» (древовидные) типы данных могут быть довольно просто закодированы в натуральные числа, и тогда функции PR над натуральными числами являются довольно хорошим представлением того, что вы можете захотеть. В качестве альтернативы вы можете использовать систему Геделя System T, расширенную до строго положительных типов данных первого порядка с «обычными» рекурсорами.
Коди
1
Вы можете ограничить типы вывода разделителей базовыми типами, если хотите исключить эту «особенность».
Коди
1
Мне все еще кажется, что форма ограниченных W-типов - это то, что вы ищете. Нечто подобное W-типам с конечным ветвлением и рекурсорам, ограниченным исключением в другие ограниченные W-типы.
Андрей Бауэр
1
Посетите конференцию CADE
Джон Фишер

Ответы:

5

В целом, в языке с типами данных (такими как списки, деревья и т. Д.) Легко описать язык функций, которые ведут себя точно так, как мы ожидаем, что примитивная рекурсия будет вести себя.

Например, если тип данных Dи конструкторы c1,,cn иметь тип

ci:T1iT2iTk1iDD

тогда рекурсор recDO для типа выхода O будет иметь тип

recDO:(T11Tk11DDOO)DO

и операционная семантика будет:

rесDО е1 ... еN (ся T1...TКя d1...dм)ея T1...TКя (ресDО е1... еN d1)...(ресDО е1...еN dм)

для каждого я,

Нечто полное рта! По крайней мере, для натуральных чисел мы действительно получаем

ресNО:(NОО)ОNО

ресNО е0 е1 0е1 0
а также
ресNО е0 е1 (S N)е0 N (ресNО е0 е1 N)

как и ожидалось (обратите внимание, что нулевой конструктор имеет нулевые аргументы!).

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

Обнадеживающе, если все TяJs также не функционируют, тогда обычное кодирование типа данных Гёделя дает те же самые примитивные рекурсивные функции.


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

Paramorphism это только частный вариант я описал выше.

Коди
источник
Боюсь, это немного за мной. Почему мы надеялись получитьресNО:(NОО)ОNОкак подпись типа? Означает ли это автоматически, что оно представляет примитивную рекурсивность? (Мне трудно представить, как это можно прочитать только по типу функции.) Я знаком с теорией типов в той степени, в которой я могу программировать на Haskell, но я не знаком с формализмом, который вы ' Использую здесь. Куда мне обратиться, чтобы прочитать достаточно предыстории, чтобы понять, что вы написали?
Натаниэль
Тип ресNследует из более общей схемы выше. Он представляет примитивную рекурсивность, потому что операционная семантика представляет рекурсивную операцию из определения функций PR. Я не объяснил операционную семантику, поэтому я расширю свой комментарий.
Коди
У меня нет никаких элементарных ссылок, хотя я предполагаю, что эти слайды дают хорошее мягкое введение, и глава 3 тезиса Ральфа Маттеса посвящена огромным техническим деталям, хотя и допускает индуктивные типы не «первого порядка».
Коди
2

Недавно я задавал этот вопрос и нашел несколько интересных статей:

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

Сложность программ цикла : доказывает, что их понятие программы цикла эквивалентно примитивным рекурсивным функциям.

Логические программы для примитивных рекурсивных множеств : доказывает, что их класс логических программ эквивалентен примитивным рекурсивным функциям.

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

Стивен Скейрик
источник
0

Возможно, вы думаете о концепции параморфизма ?

Из функционального программирования с бананами, линзами, конвертами и колючей проволокой :

Для натуральных чисел параморфизм является функцией часзнак равно(б,) формы

час0знак равнобчас(N+1)знак равноN(часN)

Например, факториальная функция имеет бзнак равно1 а также Nмзнак равно(N+1)×м,

Для списков параморфизм будет функцией час формы

часнользнак равнобчас(минусыaб)знак равноa(б,часб)
user76284
источник