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