Tout d'abord, je voudrais dire que mon texte ci-dessous peut contenir des erreurs, alors n'hésitez pas à signaler toute erreur dans ma formulation de la question.
Considérons un calcul lambda non typé avec des booléens et des instructions if dont les termes sont donnés par cette syntaxe:
t ::= v | t t | if t t t | x
v ::= \x.t | #t | #f
Les contextes C dans ce cas seraient donnés selon cette syntaxe:
C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C
De plus, on pourrait définir des contextes d'évaluation E selon cette autre syntaxe:
E ::= [-] | \x. E | v E | E t | if E t t
J'ai divisé ma question en trois sous-points que j'aimerais aborder.
- Quand les deux notions sont-elles utilisées? Je sais par exemple que les contextes d'évaluation sont utilisés pour définir la sémantique du calcul, mais l'utilisation des contextes m'échappe encore quelque peu. J'aimerais aussi une confirmation de mes connaissances ici.
- Quand doit-on préférer l'un à l'autre et pourquoi?
- Pourriez-vous indiquer des articles pertinents qui pourraient m'aider à régler ce problème?