Existe-t-il des techniques pour résoudre des équations fonctionnelles pour des fonctions inconnues dans le calcul lambda?
Supposons que la fonction d'identité soit définie de manière extensionnelle en tant que telle:
(c'est-à-dire en écrivant une équation pour le comportement attendu de cette fonction) et maintenant je veux la résoudre pour en faisant une transformation algébrique pour obtenir la formule intensionnelle de cette fonction:
qui indique exactement comment la fonction fait ce qui était attendu (c'est-à-dire comment l'implémenter dans le calcul lambda).
Bien entendu, la fonction d'identité n'est utilisée qu'à titre d'exemple. Je m'intéresse aux méthodes plus générales de résolution de telles équations. En particulier, je voudrais trouver une fonction qui réponde à l'exigence suivante:
c'est-à-dire "injecte" la fonction donnée dans la fonction lambda donnée avant son "corps" (qui est une expression lambda arbitraire), éventuellement en la démontant et en construisant une nouvelle, de sorte qu'elle devienne un paramètre auquel la fonction est appliquée.
la source
Je pense avoir une réponse partielle, concernant l'équation avec la fonction d'identité:
Nous voulons le résoudre en trouvant la formule pour , qui sera de la forme avec une expression encore inconnue comme corps. Remplaçons-le par dans l'équation originale:( λ p . M ) M Ije ( λ p . M) M je
puis appliquez la fonction à sur le côté gauche:X
Mais qu'avons-nous ici? :> Cette équation est la formule de l'expression que nous recherchons, après y avoir substitué chaque occurrence de par , et elle dit qu'elle devrait ressembler au côté droit après :) En d'autres termes, la fonction que nous recherchait c'est:p xM p X
ce qui bien sûr est la bonne réponse :)
Essayons la même approche pour trouver la formule du combinateur . Nous voulons qu'il fonctionne de telle manière que, appliqué à lui-même, il se produise appliqué à lui-même:ω
Maintenant, trouvons la formule pour qui est de la forme pour une expression encore inconnue . En substituant cela dans l'équation, nous obtenons:ω ( λ x . M) M
Son application au paramètre de gauche donne la formule de :M
Cela dit qu'après avoir substitué chaque occurrence de dans par cela a produit , donc nous pouvons déduire que l'expression originale avant la substitution aurait dû être , donc la fonction que nous cherchions devrait ressemble à ca:X M ω ωω M XX
ce qui est effectivement le cas :)
J'ai le sentiment, cependant, que cela pourrait devenir si facile simplement parce que le côté droit était déjà dans la forme que nous recherchons.
la source