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 ) où A , B et C sont des méta-variables qui peuvent être instanciées à n'importe quel type concret à chaque utilisation.SK

K:A→B→AS:(A→B→C)→(A→B)→(A→C)
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 : N → N i t e r : N → ( N → N ) → N → NN

z:Nsucc:N→Niter:N→(N→N)→N→N

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

iterifz=iiterif(succe)=f(iterife)

iter:A→(A→A)→N→A
iter

iter

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

N≃N×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

0↦0(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.