Cálculo de Lambda: ¿Cómo funcionan los contextos de evaluación?

8

En el cálculo lambda puro, tenemos el conjunto de términos inductivamente definidos (la gramática):

e::=xλx.ee1e2

Bajo la estrategia de evaluación llamada por valor, tenemos las reglas de inferencia para la reducción beta y las reglas sobre cómo evaluar las aplicaciones (reglas de congruencia). Estoy tratando de entender cómo los contextos de evaluación pueden reemplazar las reglas de congruencia sin cambiar realmente la sintaxis del lenguaje. Sin contextos de evaluación, tenemos lo siguiente:

e1e1e1e2e1e2
y
e2e2ve2ve2.

Esto tiene sentido, ya que si tenemos una instancia de una expresión , está claro que es de la forma y por lo tantot=(λf.λx.fx)((λy.y)λz.z)λw.we1e2e1e2

(λf.λx.fx)((λy.y)λz.z)λw.w(λf.λx.fx)(λz.z)λw.w

Si reemplazamos las reglas de congruencia con contextos de evaluación: entonces solo necesitamos una sola regla para expresar las reglas de congruencia del lenguaje:

E::=[]EevE
eeE[e]E[e].

Estoy confundido acerca de cómo los contextos de evaluación pueden decirnos cómo evaluar la expresión desde arriba sin cambiar la sintaxis del lenguaje. No entiendo cómo "funciona" el contexto de evaluación sin reescribir comott

Et=(λf.λx.fx)[]λw.w

donde . No hay una razón obvia a priori para evaluar bajo llamada por valor sin conocimiento de . Realmente no tengo idea de dónde me estoy equivocando. ¿Alguien puede ayudar a corregir mi pensamiento?t=Et[((λy.y)λz.z)]tEt

Baffld
fuente
La reducción no es una congruencia con estrategias de reducción como la llamada por valor. Ver también aquí .
Martin Berger
No entiendo tu respuesta; tu uso de "congruencia" como verbo no tiene sentido para mí. He leído las respuestas en el enlace que ha proporcionado, pero todavía no entiendo por qué se presenta como una forma sintáctica, sin embargo, en realidad nunca se usa en la sintaxis del lenguaje para el que se define. E
baffld
No estoy usando congruencia como verbo. No entiendo lo que quieres decir. E es una meta variable que se extiende sobre contextos de evaluación. Los contextos de evaluaciones son un subconjunto adecuado de contextos. Los contextos son programas con un agujero.
Martin Berger

Respuestas:

8

La sutileza reside en dónde se hace la distinción entre lenguaje y metalenguaje. Como lo expresó René Magritte :

Ceci n'est pas une pipe.

(λf.λx.fx)((λy.y)(λz.z))(λw.w) es un término lambda, escrito en la sintaxis para términos lambda. Llamemos a este término lambda . Sea el término lambda . Puedo escribir (y esto es una verdadera igualdad): todo lo que hice fue darle un nombre a un subterráneo. Si considera el lado derecho de esta igualdad " ", no está escrito en la sintaxis de los términos lambda; Está escrito en una notación matemática donde permitimos que una letra represente un término lambda.tM(λf.λx.fx)((λy.y)(λz.z))t=M(λw.w)M(λw.w)

Cuando escribimos una regla como establece el siguiente axioma: para cualquier término lambda y y cualquier valor , si se reduce a luego reduce a . Aquí nuevamente estamos usando meta-notaciones (es decir, notaciones matemáticas para razonar sobre un lenguaje): la flecha para expresar la relación de reducción; metavariables donde una letra indica el tipo ( para términos lambda,

e2e2ve2ve2
e2e2ve2e2ve2ve2evpara valores) y subíndices y primos distinguen entre metavariables del mismo tipo; La notación de fracción para escribir un axioma inductivo.

Cuando escribimos la regla , nuevamente es una meta-notación, parte del metalenguaje y no del lambda sintaxis a largo plazo. La regla significa: para cualquier término lambda y y cualquier contexto de evaluación , si reduce a entonces reduce a .

eeE[e]vE[e]
E[]eeE[]eeE[e]E[e]

Si llamamos al contexto por el (meta-) nombre , entonces . De nuevo, esta es una igualdad entre dos términos lambda, es decir, el mismo término lambda está a ambos lados del signo igual. Lo que tenemos a la izquierda y a la derecha son dos meta-notaciones diferentes para el mismo término lambda : uno que usa un nombre que le dimos, otro que es un poco más complicado e involucra un contexto al que le dimos un nombre.(λf.λx.fx)[](λw.w)Ett=Et[(λy.y)(λz.z)](λf.λx.fx)((λy.y)(λz.z))(λw.w)

Dado el término , ¿cómo encuentra cómo puede reducirse?t

  • Con la notación utilizando múltiples reglas, debe encontrar un árbol de deducción (en general, aquí la derivación es lineal, por lo que simplemente tiene que encontrar una cadena que conduzca a un axioma).
  • Con la notación que utiliza contextos de evaluación, debe encontrar un contexto de evaluación adecuado.

La gramática del contexto de evaluación sigue la estructura de las reglas de evaluación, por lo que estos no son realmente dos métodos, sino dos formas diferentes de expresar la misma definición.

Para comprender esto, recomiendo encarecidamente el siguiente ejercicio: en su idioma favorito, implemente la evaluación de llamada por valor de término lambda de una manera directa, con un tipo que represente términos lambda y una función que realice un paso de reducción.

Gilles 'SO- deja de ser malvado'
fuente
2
En relación con su último párrafo: todos los lógicos y cualquier persona que alguna vez estudie la sintaxis deben implementar la sustitución.
Andrej Bauer