Combinateurs pour les fonctions récursives primitives


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.