Визначення примітивних рекурсивних функцій щодо загальних типів даних


9

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

Інтуїтивно зрозуміло, якби я визначив просту імперативну мову, яка дозволяла виконувати основні операції, наприклад, списки (наприклад, конкатенація, взяття голови та хвоста, порівняння елементів) та форму ітерації, яка вимагає заздалегідь знати, скільки ітерацій відбудеться ( наприклад, ітерація над елементами у незмінному списку), тоді така мова повинна бути, максимум, у змозі обчислити примітивні рекурсивні функції над списками. Але як я можу зрозуміти це формально, а точніше, як би я міг довести, що моя мова обчислює всі примітивні рекурсивні функції над списками, а не лише їх підмножиною?

Щоб було зрозуміло, мені цікаво розуміти примітивні рекурсивні функції як чітко визначений клас функцій (якщо вони справді є), а не просто в роботі самої примітивної рекурсії, яка здається прямолінійною. Мені було б цікаво вказувати на все, що написано на примітивній рекурсії на загальні структури даних, або взагалі в будь-якому контексті, крім природних чисел.

оновлення: я, можливо, знайшов відповідь у документі під назвою Вальтер Рекурсія Макаллестера та Аркудаса. (Праці CADE 1996 р .) Це, здається, містить узагальнену версію примітивної рекурсії, а також більш потужну рекурсію Вальтера. Я маю намір написати самовідповідь, як тільки це перекопаю, але тим часом ця примітка може бути корисною іншим із тим самим питанням.


1
Мені не зрозуміло, що саме ти шукаєш. Здається, ви просто намагаєтеся знайти W-типи , але це може бути не так.
Андрій Бауер

3
Напевно, корисно зауважити, що "звичайні" (деревоподібні) типи даних можуть бути закодовані досить просто в натуральні числа, і тоді PR-функції над природними є досить гарним відображенням того, що ви можете хотіти. Крім того, ви можете використовувати систему T Gödel, яка поширюється на строго позитивні типи даних першого порядку із "звичайними" рекурсорами.
коді

1
Ви можете обмежити типи виводу елімінаторів базовими типами, якщо ви хочете усунути цю "функцію".
коді

1
Мені все ще здається, що форма обмежених W-типів - це те, що ви шукаєте. Щось типу W-типів з кінцевим розгалуженням і рекурсорами обмежується виключенням в інші обмежені W-типи.
Андрій Бауер

1
Конференцію CADE 1996 відвідайте тут: dblp.org/db/conf/cade/cade96
Джон Фішер

Відповіді:


5

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

Наприклад, якщо тип даних є D, і конструктори c1,,cn мають тип

ci:T1iT2iTk1iDD

то рекурсор recDO для типу виводу O матиме тип

recDO:(T11Tk11DDOO)DO

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

recDO f1  fn (ci t1tki d1dm)fi t1tki (recDO f1 fn d1)(recDO f1fn dm)

для кожного i.

Щось заповнене ротом! Принаймні, для натуральних чисел ми дійсно отримуємо

recNO:(NOO)ONO

recNO f0 f1 0f1 0
і
recNO f0 f1 (S n)f0 n (recNO f0 f1 n)

як сподівалося (зверніть увагу, що нульовий конструктор має нульові аргументи!).

Якщо тепер ми допускаємо постійні функції та проекції, а також дозволити довільне використання recDOдля нефункціональних типівO, то у вас точно примітивна рекурсія.

Заспокійливо, якщо все Tijs також є нефункціональними, тоді звичайне кодування Геделя типу даних дає ті самі примітивні рекурсивні функції.


Було б непогано мати більш елегантний опис цього процесу. Ось така відповідь Карлоса: ці типи даних в теорії категорій можна охарактеризувати більш елегантно як початкові алгебри певних функторів, які часто називають поліноміальними функторами . Тоді рекурсор є лише (варіантом) початкового морфізму цієї алгебри, який люди іноді називають катаморфізмом , який намагається заплутати речі. Цей морфізм існує при побудові початкової алгебри.

Paramorphism це лише окремий випадок я описав вище.


Боюся, це дещо поза мною. Чому ми сподівалися потрапитиrecNO:(NOO)ONOяк підпис типу? Чи означає це автоматично, що він представляє примітивну рекурсивність? (Мені важко уявити, як це можна зчитувати лише з типу функції.) Я знайомий з теорією типів, наскільки я можу програмувати в Haskell, але я не знайомий з формалізмом, який ви ' використовую тут. Куди я можу прочитати достатню інформацію, щоб зрозуміти, що ви написали?
Натаніел

Тип recNвипливає із більш загальної схеми, наведеної вище. Він представляє примітивну рекурсивність, оскільки оперативна семантика являє собою рекурсійну операцію з визначення PR-функцій. Я ще не пояснив оперативну семантику, тому розширю коментар.
коді

Я не маю жодних елементарних посилань на кшталт, хоча, мабуть, ці слайди дають приємне вступне слово, і глава 3 тези Ральфа Маттеса йде до величезних технічних деталей, хоча це дозволяє індуктивні типи "першого порядку".
коді

2

Нещодавно я задав це саме питання, і я знайшов кілька цікавих статей:

Фінальна індуктивно представлена ​​логіка : (a) визначає логіку, яка забезпечує загальне поняття примітивної рекурсії над будь-яким типом даних, що задовольняє певним вимогам (b) доводить, що ця логіка є консервативним розширенням примітивної рекурсивної арифметики.

Складність програм циклу : доводить, що їх поняття програми циклу еквівалентно примітивним рекурсивним функціям.

Логічні програми для примітивних рекурсивних наборів : доводить, що їх клас логічних програм еквівалентний примітивним рекурсивним функціям.

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


0

Можливо, ви думаєте про концепцію параморфізму ?

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

Для натуральних чисел параморфізм є функцією h=(b,) форми

h0=bh(n+1)=n(hn)

Наприклад, функціональну функцію має b=1 і nm=(n+1)×m.

Для списків параморфізм був би функцією h форми

hnil=bh(consab)=a(b,hb)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.