La sutileza reside en dónde se hace la distinción entre lenguaje y metalenguaje. Como lo expresó René Magritte :
(λ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,
e2→e′2ve2→ve′2
e2e′2ve2e′2ve2ve′2→evpara 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 .
e→e′E[e]→vE[e′]
E[⋅]ee′E[⋅]ee′E[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.