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

19

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

NietzscheanAI
источник
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 : NN i t e r : N( NN ) NNN

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

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

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

яTер:A(AA)NA
яTер

яTер

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

NN×N

Нил Кришнасвами
источник
Так что это меньше, чем полное по Тьюрингу в силу ограничения на типизированные комбинаторы? Могут ли переменные типа (рекурсивно) обозначать функции над переменными типа (например, A = D -> E для некоторых типов D и E)?
NietzscheanAI
2
SК
Нил, спасибо. Буду ли я прав, думая, что можно представить z, succ и iter в терминах S и K через цифровое кодирование Церкви?
NietzscheanAI
00(sUссИкс)Икс
@Xoff: функция предшественника имеет хорошо известное определение линейного времени в терминах iter. Это может быть предметом вопроса на cs.stackexchange.com ...
cody