Evaluación en el cálculo lambda

Posted on October 25, 2017

Un repaso de los enunciados que nos llevan a usar la evaluación mediante β-reducciones del cálculo λ como un lenguaje de programación. Detallo todo esto con demostraciones en M42/lambda.notes.

Forma normal

Una expresión está en forma normal si no se le pueden aplicar más β-reducciones. La forma normal es única como consecuencia del teorema de Church-Rosser.

Teorema de Church-Rosser. Si a un término se le aplican distintas reducciones, los términos que se obtienen pueden reducirse a uno común. Es decir,

En particular, esto implica que si un término tuviera dos formas normales, debería existir otro término al cual se pudieran reducir ambas; como son formas normales y no pueden reducirse, esto debe implicar que son iguales.

Divergencia

Hemos visto que la forma normal es única, pero no que exista o que sepamos encontrarla de alguna forma. Puede ocurrir que un término no esté en forma normal y sin embargo las reducciones no lo lleven a ella. Por ejemplo,

\[ \Omega = (\lambda x.x\ x)(\lambda x.x\ x) \longrightarrow_{\beta} (\lambda x.x\ x)(\lambda x.x\ x) \]

no llega a forma normal. O por ejemplo, \[ (\lambda x.x\ x\ x)(\lambda x.x\ x\ x) \]

se hace más complejo al aplicarle reducciones y diverge.

Evaluación a izquierda

Hay expresiones que llegarán a una forma normal o no dependiendo de cómo los evaluemos. Por ejemplo,

Sin embargo, existe una estrategia de reducción que siempre encuentra una forma normal si esta existe.

Proposición. Si existe una forma normal, la estrategia que reduce a cada paso la aplicación más a la izquierda posible la encuentra.

Y, quizá sorprendentemente, existe otra estrategia de reducción que siempre encuentra la forma de no llegar a la forma normal si esta existe

Proposición. Si existe alguna sucesión que no llega a forma normal, la estrategia que reduce a cada paso la aplicación más a la derecha posible la encuentra.

Estas dos formas de evaluación se suelen llamar call-by-value y call-by-name.