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