You are on page 1of 8

El Clculo Lambda.

Es el ms pequeo lenguaje universal de programacin, consiste en


en una regla de transformacin simple (sustituir variables) y un esquema simple para
definir funciones.
El clculo lambda se puede decir que es equivalente a las mquinas Turing porque es
capaz de evaluar y expresar cualquier funcin computable. Church haba querido hacer
un sistema formal completo para modelizar la matemtica pero despus separ el clculo
lambda y lo ide para que estudiara la computabilidad.
SURGIMIENTO
Originalmente, Church haba tratado de construir un sistema formal completo para
modelizar la Matemtica; pero cuando ste se volvi susceptible a la paradoja de Russell,
separ del sistema al clculo lambda y lo us para estudiar la computabilidad, culminando
en la respuesta negativa al problema de la parada.
DEFINICIN INFORMAL
Considrese las siguientes dos Funciones. Por un lado, la Funcin Identidad I(x) = x, que
toma un nico argumento, x, e inmediatamente devuelve x. Por otro lado, la funcin
suma S(x,y) = x + y, que toma dos argumentos, x e y, y devuelve la suma de ambos: x +
y. Usando estas dos funciones como ejemplo, es posible hacer algunas observaciones
tiles acerca de varias ideas fundamentales del clculo lambda.
La primera observacin es que las funciones no necesitan ser explcitamente nombradas.
Esto es, la funcin S(x,y) = x + y puede ser reescrita como una funcin annima: x,y x
+ y (que se lee: el par de x e y se mapea a x + y). Del mismo modo, I(x) = x puede ser
reescrita de forma annima como x x, que se lee: el argumento x se mapea a s
mismo.
La segunda observacin es que el nombre que se asigne a los argumentos de la funcin
es generalmente irrelevante. Esto es, x x e y y expresan la misma funcin: la funcin
identidad. Del mismo modo, x,y x + y y u,v u + v expresan la misma funcin: la
funcin suma.
Una tercera observacin es que toda funcin que requiere dos argumentos, como por
ejemplo la funcin suma, puede ser reescrita como una funcin que acepta un nico
argumento, pero que devuelve otra funcin, la cual a su vez acepta un nico argumento.
Por ejemplo, x,y x + y puede ser reescrita como x (y x + y). Esta transformacin
se conoce como currificacin, y puede generalizarse para funciones que aceptan
cualquier nmero de argumentos. Esta puede parecer oscuro, pero se entiende mejor
mediante un ejemplo. Considrese la funcin suma no currificada:
x,y x + y
Al tomar a los nmeros 2 y 3 como argumentos, se obtiene:
2+3

Lo cual es igual a 5. Considrese ahora la versin currificada de la funcin:


x (y x + y)
Si se toma al nmero 2 como argumento, se obtiene la funcin:
y2+y
Y tomando luego al nmero 3 como argumento, se obtiene:
2+3
Lo cual es igual a 5. De modo que la versin currificada devuelve el mismo resultado que
la versin no currificada. En el clculo lambda, todas las expresiones representan
funciones annimas de un slo argumento.
Una cuarta observacin es que una funcin puede aceptar como argumento
a otra funcin, siempre y cuando esta otra funcin tenga ella misma un slo argumento.
Por ejemplo, la funcin identidad puede aceptar como argumento a la funcin suma
(currificada). Es decir, se toma a la funcin x (y x + y) y se la pone como argumento
en z z. El resultado ser obviamente x (z x + z), (igual a la x (y x + y)) pues
la funcin identidad siempre devuelve lo mismo que se le da.
En el clculo lambda, las funciones estn definidas por expresiones lambda, que dicen
qu se hace con su argumento. Por ejemplo, la funcin "sumar 2", f(x) = x + 2 se expresa
en clculo lambda as: x. x + 2 (o, equivalentemente, y. y + 2 ya que el nombre de su
argumento no es importante). Y el nmero f(3) sera escrito como ( x. x + 2) 3. La
aplicacin de funciones es asociativa a izquierda: f x y = (f x) y. Considerando la funcin
que aplica una funcin al nmero 3: f. f 3. , podemos pasarle "sumar 2", quedando
as: ( f. f 3) (x. x + 2).
Las tres expresiones:
( f. f 3)( x. x + 2) ,

( x. x + 2) 3

3+2

son equivalentes.
No todas las expresiones lambda pueden ser reducidas a un "valor" definido. Considrese
la siguiente:
( x. x x) ( x. x x)

( x. x x x) ( x. x x x)

tratar de reducir estas expresiones slo lleva a encontrase con la misma expresin o algo
ms complejo. ( x. x x) es conocido como combinador; (( x. x x) ( x. x x)) se
conoce como , (( x. x x x) ( x. x x x)) como 2, etc.
DEFINICIN FORMAL
Sintaxis
En el clculo lambda, una expresin o trmino se define recursivamente a travs de las
siguientes reglas de formacin:
1. Toda variable es un trmino: x, y, z, u, v, w, x1, x2, y9,...
2. Si t es un trmino y x es una variable, entonces (x.t) es un trmino (llamado
una abstraccin lambda).
3. Si t y s son trminos, entonces (ts) es un trmino (llamado una aplicacin lambda).
4. Nada ms es un trmino.
Segn estas reglas de formacin, las siguientes cadenas de caracteres son trminos:
x
(xy)
(((xz)y)x)
(x.x)
((x.x)y)
(z.(x.y))
((x(z.z))z)
Por convencin se suelen omitir los parntesis externos, ya que no cumplen ninguna
funcin de desambiguacin. Por ejemplo se escribe (z.z)z en vez de ((z.z)z), y se
escribe x(y(zx)) en vez de (x(y(zx))). Adems se suele adoptar la convencin de que la
aplicacin de funciones es asociativa hacia la izquierda. Esto quiere decir, por ejemplo,
que xyzz debe
entenderse
como (((xy)z)z),
y
que (z.z)yzx debe
entenderse
como((((z.z)y)z)x).
Las primeras dos reglas generan funciones, mientras que la ltima describe la aplicacin
de una funcin a un argumento. Una abstraccin lambda x.trepresenta una funcin
annima que toma un nico argumento, y se dice que el signo liga la variable x en el
trmino t. En cambio, una aplicacin lambda ts representa la aplicacin de un
argumento s a una funcin t. Por ejemplo, x.x representa la Funcin Identidad x x,
y (x.x)y representa la funcin identidad aplicada a y<tt>. Luego, <tt>x.y representa la
funcin constante x y, que develve y sin importar qu argumento se le d.
Las expresiones lambda no son muy interesantes por s mismas. Lo que las hace
interesantes son las muchas nociones de equivalencia y reduccin que pueden ser
definidas sobre ellas.

VARIABLES LIBRES Y LIGADAS


Las apariciones (ocurrencias) de variables en una expresin son de tres tipos:
1. Ocurrencias de ligadura (binders)
2. Ocurrencias ligadas (bound occurrences)
3. Ocurrencias libres (free occurrences)
Las variables de ligadura son aquellas que estn entre el y el punto. Por ejemplo, siendo
E una expresin lambda:
( x y z. E) Los binders son x,y y z.
El binding de ocurrencias de una variable est definido recursivamente sobre la estructura
de las expresiones lambda, de esta manera:
1. En expresiones de la forma V, donde V es una variable, V es una ocurrencia
libre.
2. En expresiones de la forma V. E, las ocurrencias son libres en E salvo aquellas
de V. En este caso las V en E se dicen ligadas por el antesV.
3. En expresiones de la forma (E E), las ocurrencias libres son aquellas ocurrencias
de E y E.
Expresiones lambda tales como x. (x y) no definen funciones porque las ocurrencias
de y estn libres. Si la expresin no tiene variables libres, se dice que es cerrada.
Como se permite la repeticin del identificador de variables, cada binding tiene una zona
de alcance asociada (scope de ahora en adelante) Un ejemplo tpico es: (x.x(x.x))x,
donde el scope del binding ms a la derecha afecta slo a la x que tiene ah, la situacin
del otro binding es anloga, pero no incluye el scope de la primera. Por ltimo la x ms a
la derecha est libre. Por lo tanto, esa expresin puede reexpresarse as (y.y(z.z))x

-CONVERSIN
La regla de alfa-conversin fue pensada para expresar la idea siguiente: los nombres de
las variables ligadas no son importantes. Por ejemplo x.x y y.y son la misma funcin.
Sin embargo, esta regla no es tan simple como parece a primera vista. Hay algunas
restricciones que hay que cumplir antes de cambiar el nombre de una variable por otra.
Por ejemplo, si reemplazamos x por y en x.y.x, obtenemos y.y.y, que claramente, no
es la misma funcin. Este fenmemo se conoce como captura de variables.
La regla de alfa-conversin establece que si V y W son variables, E es una expresin
lambda, y

E[V := W]
representa la expresin E con todas las ocurrencias libres de V en E reemplazadas
con W, entonces
V. E == W. E[V := W]
si W no est libre en E y W no est ligada a un donde se haya reemplazado a V. Esta
regla nos dice, por ejemplo, que x. ( x. x) x es equivalente a y. ( x. x) y.
En un ejemplo de otro tipo, se ve que
for (int i = 0; i < max; i++) { proc (i); }
es equivalente a
for (int j = 0; j < max; j++) { proc (j); }

-REDUCCIN
La regla de beta reduccin expresa la idea de la aplicacin funcional. Enuncia que
(( V. E) E) == E[V := E]
si todas las ocurrencias de E estn libres en E[V := E].
Una expresin de la forma (( V. E) E) es llamada un beta redex. Una lambda expresin
que no admite ninguna beta reduccin se dice que est en su forma normal. No toda
expresin lambda tiene forma normal, pero si existe, es nica. Ms an, existe un
algoritmo para computar la formal normal: la reduccin de orden normal. La ejecucin de
este algoritmo termina si y slo si la expresin lambda tiene forma normal. El Teorema de
Church-Rosser nos dice que dos expresiones reducen a una misma si y slo si son
equivalentes (salvo por el nombre de sus variables ligadas)

-CONVERSIN
Es la tercer regla, eta conversin, que podra ser aadida a las dos anteriores para formar
una nueva relacin de equivalencia. La eta conversin expresa la idea de extensionalidad,
que en este contexto implica que dos funciones son la misma si y solo si dan el mismo
resultado
para
cualquier
argumento.
La
eta
conversin
convierte
entre x. f x y f siempre que x no aparezca sola en f. Esto puede ser entendido como
equivalente a la extensionalidad as:
Si f y g son extensionalmente equivalentes, es decir, si f a== g a para cualquier
expresin lambda a entonces, en particular tomando a como una variable x que no
aparece sola en f ni en g, tenemos que f x == g x y por tanto x. f x == x. g x, y as
por eta conversin f == g. Entonces, si aceptamos la eta conversin como vlida, resulta
que la extensionalidad es vlida.

Inversamente, si aceptamos la extensionalidad como vlida entonces, dado que por beta
reduccin de todo y tenemos que ( x. f x) y == f y, resulta que x. f x == f; es decir,
descubrimos que la eta conversin es vlida.

APLICACIN PRCTICA

Caractersticas:
-Escrito en html5
-Diseo adaptable
-Utiliza java script
-Se hace uso de la librera lambda-min.js escrita por el profesor
Carl Burch disponible en: http://www.cburch.com/
Esta aplicacin resuelve ejercicios del tipo numrico simplificando las expresiones para
obtener el resultado buscado
Funcionamiento:
Si por ejemplo se desea calcular la expresin:
(y.4 y) ((z.z + 2 z) 5)
Esta debe escribirse de la siguiente manera:

(\y.* 4 y) ((\z.+ (* z z ) (* 2 z)) 5)

El resultado esperado seria:

Como se observa el desarrollo se da paso por paso simplificando las expresiones y


reemplazando por los valores esperados
Los operadores soportados son:
+, -, *, /
dados dos nmeros enteros , se aplican la operacin aritmtica a ellos

=, /=, <, >, <=, >=


dados dos nmeros enteros , se aplican la comparacin para llegar al identificador de
verdadero o falso

If
dado tres valores de los cuales el primero es verdadero o falso , devuelva el segundo
valor si la primera es verdadera y la tercera si la primera es falsa

Conclusiones
El clculo lambda es computacionalmente equivalente en poder a muchos otros modelos
plausibles para el cmputo (mquinas de Turing includas); es decir, cualquier clculo que
se pueda lograr en cualesquiera de estos otros modelos se puede expresar en el clculo
lambda y viceversa. Segn la tesis de Church-Turing, ambos modelos pueden expresar
cualquier cmputo posible.
Quizs parezca sorprendente que el clculo lambda pueda representar cualquier cmputo
concebible usando solamente las nociones simples de abstraccin funcional y aplicacin
basado en la substitucin textual simple de trminos por variables. Pero an ms notable
es que incluso la abstraccin no es requerible: la lgica combinatoria es un modelo del
cmputo equivalente al clculo lambda, pero sin la abstraccin.
Bibliografia
-http://www.ecured.cu/index.php/C%C3%A1lculo_lambda#Conclusiones
-http://www.cs.buap.mx/~mtovar/doc/FLP14/ejerCalculolambda.pdf
- http://www.cburch.com/