Une évaluation du calcul lambda impliquant des chiffres de l'Église

10

Je comprends qu'un chiffre d'église ressemble à (... n fois ...) . Cela ne signifie rien de plus que "la fonction appliquée fois à la fonction ". λ s . λ z . s scnλs.λz.ss n zszsnz

Une définition possible de la fonction est la suivante: . En regardant le corps, je comprends la logique derrière la fonction. Cependant, lorsque je commence à évaluer, je suis bloqué. Je vais l'illustrer avec un exemple:t i m e s = λ m . λ n . λ s . mtjemestjemes=λm.λn.λs.m(ns)

(λm.λn.λs.m(ns))(λs.λz.ssz)(λs.λz.sssz)λs.(λs.λz.ssz)((λs.λz.sssz)s))λs.(λs.λz.ssz)(λz.sssz)λs.λz.(λz.sssz)(λz.sssz)z

Maintenant, dans cette situation, si j'applique d'abord , j'arrive au résultat souhaité. Cependant, si j'applique abord, comme je le dois parce que l'application est associative de gauche, j'obtiens un mauvais résultat:( λ z . s(λz.sssz)z(λz.sssz)(λz.sssz)

λs.λz.(λz.sssz)(λz.sssz)zλs.λz.(sss(λz.sssz))z

Je ne peux plus réduire cela. Qu'est-ce que je fais mal? Le résultat devrait êtreλs.λz.ssssssz

codd
la source
Les chiffres de l'Église dans votre premier mandat ne sont pas corrects. 2 est représenté par , pas . λ s . λ z . s s zλs.λz.s(sz)λs.λz.ssz
Uday Reddy

Réponses:

7

Je pense que votre réduction est correcte (je ne l'ai cependant fait qu'observer). À la fin, vous ne pouvez pas appliquer à , cela n'apparaît jamais dans le terme. est , pas . Les fonctions du lambda-calcul prennent un seul argument; ils sont effectivement curry : une fonction à deux arguments est implémentée comme une fonction à un argument qui prend le premier argument et renvoie une nouvelle fonction à un argument qui prend le deuxième argument et renvoie le résultat.z λ z . f f z λ z . ( f f ) z λ z . f ( f z )(λz.sssz)zλz.FFzλz.(FF)zλz.F(Fz)

Vous avez fait la même erreur lors de la définition des chiffres de l'Église. Le chiffre de l'Église pour est basé sur la composition d'une fonction fois. «La fonction appliquée fois à la fonction » . Ce que vous avez écrit est la fonction appliquée fois à la fonction et enfin à , ce qui ne me semble pas être un terme utile.n s n z λ s . λ z . s ( s ( snnsnzs n - 1 s zλs.λz.s(s(sz)))sn-1sz

2×3 est donc . Je vous laisse vérifier qu'il se réduit à .(λmns.m(ns))(λsz.s(sz))(λsz.s(s(sz)))λsz.s(s(s(s(s(sz)))))

Gilles 'SO- arrête d'être méchant'
la source
En ce qui concerne votre paragraphe, vous avez raison et j'en étais conscient. Cela m'a juste frappé que l'application correctement associative a donné le bon résultat. En ce qui concerne le deuxième paragraphe: vous avez raison. L'absence d'accolades était une erreur de ma part, encore une fois en raison de l'associativité gauche de l'application. Je vais à nouveau réduire le tout maintenant et voir si mon manque de bretelles a causé mon erreur!
codd
Ça faisait. Vous notant que ma notation impliquait un mauvais ordre d'application a résolu le problème! Accepter votre réponse.
codé le