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


19

Хорошо известно, что комбинаторы S и K являются полными по Тьюрингу. Существуют ли комбинаторы, достаточные для получения (только) примитивных рекурсивных функций?


1
Это то, что вы спрашиваете? mathoverflow.net/questions/48006/…
— Андрей Бауэр

Ответы:


17

Да, но вы должны рассмотреть типизированные комбинаторы. То есть вам нужно дать и K следующие схемы типов: K : A → B → A S : ( A → B → C ) → ( A → B ) → ( A → C ), где A , B и C являются мета-переменными, которые могут быть созданы для любого конкретного типа при каждом использовании.SК

К:A→В→AS:(A→В→С)→(A→В)→(A→С)
A,ВС

Затем вы хотите добавить тип натуральных чисел к языку типов и добавить следующие комбинаторы: z : N s u c c : N → N i t e r : N → ( N → N ) → N → NN

Z:NsUсс:N→NяTер:N→(N→N)→N→N

Правила равенства для дополнений:

яTеряеZзнак равнояяTеряе(sUссе)знак равное(яTеряее)

яTер:A→(A→A)→N→A
яTер

яTер

преd'знак равноλК,яTер(Z,Z)(λ(N,N'),(sUссN,N))Кпреdзнак равноλК,sNd(преd'К)

N≃N×N


Так что это меньше, чем полное по Тьюрингу в силу ограничения на типизированные комбинаторы? Могут ли переменные типа (рекурсивно) обозначать функции над переменными типа (например, A = D -> E для некоторых типов D и E)?
— NietzscheanAI

2
SК

Нил, спасибо. Буду ли я прав, думая, что можно представить z, succ и iter в терминах S и K через цифровое кодирование Церкви?
— NietzscheanAI

0↦0(sUссИкс)↦Икс

@Xoff: функция предшественника имеет хорошо известное определение линейного времени в терминах iter. Это может быть предметом вопроса на cs.stackexchange.com ...
— cody
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.