Calcul lambda: différence entre les contextes et les contextes d'évaluation


12

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.

  1. 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.
  2. Quand doit-on préférer l'un à l'autre et pourquoi?
  3. Pourriez-vous indiquer des articles pertinents qui pourraient m'aider à régler ce problème?

Réponses:


15

Le contexte est utilisé à de nombreuses fins, mais généralement pour définir des congruences sur les programmes. Les contextes d'évaluation sont un sous-ensemble de contextes. Ils sont généralement utilisés pour définir les relations de réduction. Permettez-moi de donner un exemple de chacun.

Une façon formelle de définir l'égalité des programmes consiste à dire que deux programmes et sont contextuellement égaux, ils peuvent se remplacer dans chaque contexte sans changement de comportement. Nous pouvons définir ceci comme suit: et sont contextuellement égaux pour tous les contextes de fermeture pour et : si et seulement si . Nous disons qu'un contexte se ferme pour si ni ni n'ont de variables libres. L'expressionN M N C [ ] M N C [ M ] t C [ N ] t M , N C [ M ] C [ N ] M t M tMNMNC[]MNC[M]tC[N]tM,NC[M]C[N]Mtsignifie que le programme réduit en un nombre fini d'étapes à la valeur . (En passant, notez que la définition de l'équivalence contextuelle est plus impliquée pour les notions riches de calcul, par exemple les processus concurrents.)Mt

En revanche, les contextes d'évaluation sont des contextes qui ne bloquent pas l'évaluation. Plus précisément, un contexte d'évaluation est un terme avec un trou au point où la prochaine étape de réduction atomique doit avoir lieu (ou peut avoir lieu pour un calcul non déterministe). La règle suivante devrait donc s'appliquer aux contextes d'évaluation: À titre d'exemple d'utilisation de contextes d'évaluation, considérons les règles de réduction pour lecalculpar valeur-appelλ-calcul, où nous ne réduisons pas sousλ. Donc, même lorsqueMN, nous n'avons pas de réductionλx. Mλx. N. Cela peut facilement être exprimé avec la règle contextuelle générale ci-dessus, ainsi qu'une grammaire pour les contextes d'évaluation qui omet lesexpressionsλ. Les contextes d'évaluation ont d'abord été utilisés dans

MNE[M]E[N]
λλMNλx.Mλx.NλLe rapport révisé sur les théories syntaxiques du contrôle séquentiel et de l'état par Felleisen et Hieb.

14

Un contexte est une notion syntaxique. Un contexte est un terme avec un trou dedans. (Parfois, il existe des contextes multi-trous, la définition sera donnée clairement dans ce cas.) La syntaxe des contextes est définie en prenant la syntaxe des termes et en permettant à un sous-terme d'être un trou au lieu d'un terme. En BNF (j'utilise le lambda-calcul comme un exemple, sans booléens et si des déclarations qui n'apportent rien à l'exemple.): C : : = [ ] | x | t[]

C::=[]xtCCtλx.C

C[]tC[t]t[]C[t][]t

(λx.M)NβM{xN}
M{xN}xNM

tMNxt=(λx.M)Nttt=(λx.M)NtCMNxt=C[(λx.M)N]C[M{xN}]

(λx.M)NβM{xN}(β)MβNC[M]βC[N](γ)
(λx.M)NβM{xN}(β)MβNλx.Mβλx.N(Cλ)MβNMPβNP(C@<)MβNPMβPN(C@>)

D::=[]xtDDt
(λx.M)NnpM{xN}MnpND[M]npD[N]
(λx.M)NnpM{xN}(β)MnpNMPnpNP(C@<)MnpNPMnpPN(C@>)
D

V

V::=xV1Vnλx.M
E::=[]MEEV
D
(λx.M)VcbvaM{xV}(βcbva)MβNE[M]cbvaE[N](γcbva)

1
Votre dernière définition des contextes d'évaluation est plus proche de la notion originale de Felleisen et Hieb. Ils sont un moyen syntaxique pour aider à exprimer l'ordre d'évaluation des termes d'un calcul. Un contexte d'évaluation est un type particulier de contexte, car il permet de factoriser de façon unique un terme dans un contexte et un redex (lorsque cela est possible), indiquant ainsi, de manière déterministe, où la prochaine étape de réduction devrait avoir lieu.
Dave Clarke

@DaveClarke En passant, vous pouvez également utiliser des contextes d'évaluation pour définir l'évaluation des notions non déterministes de calcul, où vous n'avez pas de décomposition unique en contexte d'évaluation et redex.
Martin Berger

@MartinBerger: Indeedy.
Dave Clarke

@DaveClarke Voulez-vous dire «un contexte d'évaluation déterministe est un type particulier de contexte»? Je peux prendre un ensemble arbitraire de contextes et définir une stratégie d'évaluation basée sur celui-ci.
Gilles 'SO- arrête d'être méchant'

@Gilles: Les contextes d'évaluation peuvent définir une stratégie de réduction déterministe. Je ne pense pas avoir vu l'expression «contexte d'évaluation déterministe». Il s'agit bien sûr d'un contexte particulier. Je suis d'accord avec votre commentaire; le fait est plus que votre réponse manque la signification historique des contextes d'évaluation, qui était de définir une notion déterministe de réduction.
Dave Clarke
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.