Combinateurs pour les fonctions récursives primitives

19

Il est bien connu que les combinateurs S et K sont Turing Complete. Existe-t-il des combinateurs suffisants pour produire (uniquement) les fonctions récursives primitives?

NietzscheanAI
la source
1
Est-ce bien ce que vous demandez? mathoverflow.net/questions/48006/…
Andrej Bauer

Réponses:

17

Oui, mais vous devez considérer les combinateurs typés. Autrement dit, vous devez donner à et K les schémas de types suivants: K : A B A S : ( A B C ) ( A B ) ( A C )A , B et C sont des méta-variables qui peuvent être instanciées à n'importe quel type concret à chaque utilisation.SK

K:ABAS:(ABC)(AB)(AC)
A,BC

Ensuite, vous voulez ajouter le type de nombres naturels à la langue des types, et ajouter les combinateurs suivants: z : N s u c c : NN i t e r : N( NN ) NNN

z:Nsucc:NNiter:N(NN)NN

Les règles d'égalité pour les ajouts sont les suivantes:

iterifz=iiterif(succe)=f(iterife)

iter:A(AA)NA
iter

iter

pred=λk.iter(z,z)(λ(n,n).(succn,n))kpred=λk.snd(predk)

NN×N

Neel Krishnaswami
la source
Donc, c'est moins que Turing-complet en raison de la restriction aux combinateurs typés? Les variables de type peuvent-elles (récursivement) désigner des fonctions par rapport aux variables de type (par exemple A = D -> E pour certains types D et E)?
NietzscheanAI
2
SK
Neel, merci. Aurais-je raison de penser qu'il est possible de représenter z, succ et iter en termes de S et K via l'encodage numérique Church?
NietzscheanAI
00(succx)x
@Xoff: la fonction prédécesseur a une définition de temps linéaire bien connue en termes de iter. Cela pourrait faire l'objet d'une question sur cs.stackexchange.com ...
cody