Dans le calcul lambda pur, nous avons l'ensemble de termes définis par induction (la grammaire):
Dans le cadre de la stratégie d'évaluation de l'appel par valeur, nous avons les règles d'inférence pour la réduction bêta et les règles sur la façon d'évaluer les applications (règles de congruence). J'essaie de comprendre comment les contextes d'évaluation peuvent remplacer les règles de congruence sans réellement changer la syntaxe du langage. Sans contextes d'évaluation, nous avons les éléments suivants:
Cela a du sens, car si nous avons une instance d'une expression , il est clair qu'il a la forme Et ainsi
Si nous remplaçons les règles de congruence par des contextes d'évaluation:
Je suis confus quant à la façon dont les contextes d'évaluation peuvent nous dire comment évaluer l'expression d'en haut sans changer la syntaxe de la langue. Je ne comprends pas comment le contexte d'évaluation "fonctionne" sans réécriture comme
où . Il n'y a aucune raison a priori évidente d'évaluer sous appel par valeur sans connaissance de . Je ne sais vraiment pas où je vais mal. Quelqu'un peut-il m'aider à corriger ma pensée?
Réponses:
La subtilité réside là où se fait la distinction entre langue et métalangage. Comme l'a dit René Magritte :
Quand on écrit une règle comme
Quand on écrit la règle
Si nous appelons le contexte(λf.λx.fx)[⋅](λw.w) par le (méta-) nom Et , puis t=Et[(λy.y)(λz.z)] . Encore une fois, il s'agit d'une égalité entre deux termes lambda, c'est-à-dire que le même terme lambda est des deux côtés du signe égal. Ce que nous avons à gauche et à droite sont deux méta-notations différentes pour le même terme lambda(λf.λx.fx)((λy.y)(λz.z))(λw.w) : un qui utilise un nom que nous lui avons donné, un autre un peu plus compliqué impliquant un contexte auquel nous avons donné un nom.
Étant donné le termet , comment trouvez-vous comment cela peut réduire?
La grammaire du contexte d'évaluation suit la structure des règles d'évaluation, il ne s'agit donc pas vraiment de deux méthodes mais de deux manières différentes d'exprimer la même définition.
Pour comprendre cela, je recommande fortement l'exercice suivant: dans votre langue préférée, implémentez l'évaluation lambda-term call-by-value de manière simple, avec un type représentant les termes lambda et une fonction effectuant une étape de réduction.
la source