Je voudrais un exemple de quine en calcul lambda pur . J'ai été assez surpris de ne pas en trouver un en cherchant sur Google. La page quine répertorie les quines pour de nombreuses langues "réelles", mais pas pour le calcul lambda.
Bien sûr, cela signifie définir ce que je veux dire par une quine dans le calcul lambda, ce que je fais ci-dessous. (Je demande quelque chose de très précis.)
À quelques endroits, par exemple Larkin et Stocks (2004), je vois ce qui suit cité comme une expression "auto-réplicative": . Cela se réduit à lui-même après une seule étape de réduction bêta, ce qui lui donne une sensation de quine. Cependant, c'est un peu quine en ce sens qu'il ne se termine pas: de nouvelles réductions bêta continueront à produire la même expression, donc elles ne se réduiront jamais à la forme normale. Pour moi, un quine est un programme qui se termine et se produit lui-même, et je voudrais donc une expression lambda avec cette propriété.
Bien sûr, toute expression qui ne contient pas de redex est déjà sous sa forme normale, et se terminera donc et sortira elle-même. Mais c'est trop trivial. Je propose donc la définition suivante dans l'espoir qu'elle admettra une solution non triviale:
définition (provisoire): une quine dans le calcul lambda est une expression de la forme (où représente une expression spécifique du calcul lambda) telle que devient (\ lambda x. A) , ou quelque chose d'équivalent sous les changements de noms de variables, lorsqu'il est réduit à la forme normale, pour toute entrée y .A ( ( λ x . A )
Étant donné que le calcul lambda est aussi équivalent à Turing que n'importe quelle autre langue, il semble que cela devrait être possible, mais mon calcul lambda est rouillé, donc je ne peux pas penser à un exemple.
Référence
James Larkin et Phil Stocks. (2004) «Expressions auto-réplicatives dans le Lambda Calculus» Conferences in Research and Practice in Information Technology, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pubs/158
la source
Réponses:
Vous voulez un termeQ tel que ∀M∈Λ :
Je ne préciserai aucune autre restriction sur (par exemple en ce qui concerne sa forme et s'il se normalise) et je vous montrerai qu'il doit définitivement être non normalisant.Q
Supposons que est sous une forme normale. Choisissez (nous pouvons le faire parce que le théorème doit tenir pour tout ). Ensuite, il y a trois cas.Q MM≡x M
Donc, si un tel existe, il ne peut pas être sous une forme normale.Q
Pour être complet, supposons que a une forme normale, mais n'est pas sous une forme normale (peut-être qu'il se normalise faiblement), c'est-à-dire ∃ N ∈ β -nf avec N ≢ Q tel que ∀ M ∈ Λ : Q M ⊳ β Q ⊳ β NQ ∃ N∈ β-nf N≢ Q ∀M∈Λ
Alors avec il doit aussi exister une séquence de réduction Q x ⊳ β N x ⊳ β N , car:M≡x Qx⊳βNx⊳βN
Mais notons que n'est pas possible par l'argument (1) ci-dessus, donc notre supposition que Q a une forme normale n'est pas tenable.Nx⊳βN Q
Si nous permettons un tel , alors, nous sommes certains qu'il doit être non normalisant. Dans ce cas, nous pouvons simplement utiliser un combinateur qui élimine tout argument qu'il reçoit. La suggestion de Denis fonctionne très bien: Q ≡ ( λ z . ( Λ x . Λ z . ( X x ) ) ( λ x . Λ z . ( X x ) ) ) Puis en seulement deux β- réductions: Q MQ
Ce résultat est pas très étonnant, puisque vous êtes essentiellement demandez un terme qui élimine tout argument qu'il reçoit, ce qui est quelque chose que je vois souvent mentionné comme une application directe du théorème du point fixe.
la source
D'une part, cela est impossible, car une quine est censée produire son propre code, et le calcul lambda pur n'a aucun moyen d'effectuer une sortie.
D'un autre côté, si vous supposez que le terme résultant est la sortie, alors chaque forme normale est une quine.
la source
Voici une proposition:
la source
if z==p then return q, otherwise return q