You are on page 1of 57

Facultad de Ciencias de la Computacin

Clculo Lambda Reduccin


Transformacin:Gelfond-Lifchitz

Dr. Fernando Zacaras Flores

Primavera 2014

Clculo-

Antonio Almazn Faura


Lidia Quintana Pancorbo

ndice
Clculo-
Sintaxis
Notacin: parntesis y macros
Conversiones
Igualdades
Ejemplos: lgica booleana y aritmtica
Conclusiones
Clculo-

Clculo-
Autor: Alonzo Church
Objetivo:

Formalizar el modo de escribir funciones.


A partir del concepto de funcin- ser
posible generar cualquier funcin
computable.

Clculo-

Clculo-
Mtodo:

Generar funciones que tomarn datos de


entrada de un problema y proporcionarn
datos de salida.
Todo sin salirse de la definicin de este
lenguaje, de su estructura y sintaxis.

Este nueva notacin deriv en distintos


lenguajes de programacin (como LISP)
Clculo-

Sintaxis
Clases de
expresiones-

Variables
Aplicacin de
funcin
Abstraccin con
variable ligada y
cuerpo de funcin
Clculo-

<exp->
::= <variable>
::= <exp-> <exp->
::= <variable>.<exp->

Sintaxis
Ejemplos
Aplicacin de funcin:
representa el resultado de
aplicar la funcin E1 sobre la
funcin E2
Abstraccin: representa el
resultado de evaluar E donde
la variable V tomar el valor
al que se ligue por
argumentos
Clculo-

E1 E2
x(y)
m(n(y))
V.E
x.x
ab.(a(b))

Sintaxis
Variables ligadas
dentro del cuerpo

Valor de
argumento1

(xy. x(ab.a)y)

Valor de
argumento2

(cd.c) (ef.e)

Cuerpo de funcin
Si observamos ambos argumentos, son iguales excepto
por el renombramiento. ES NECESARIO RENOMBRAR,
para no confundirnos al realizar las vinculaciones y
sustituciones.
Clculo-

Sintaxis
Expresin- de partida
(xy. x(ab.a)y) (cd.c) (ef.e)
Expresin- de resultado parcial
(cd.c) ( ab.a ) (ef.e)
Expresin- de resultado final
ab.a
Todo son EXPRESIONES-, y slo intervienen
letras, parntesis y puntos.
Clculo-

Notacin
Una expresin- autntica

SIEMPRE contiene TODOS los PARENTESIS


NUNCA contiene MACROS

Pero por comodidad, admitimos una


notacin que omite parntesis y emplea
macros.
Clculo-

Notacin: parntesis
Al omitir parntesis debemos tener en
cuenta:
1) Asociacin
E1 E2 E3 ... En (...((E1 E2)E3)...En)
2) mbito de variable
V. E1 E2 E3...En V.(E1 E2 E3...En)
3) Orden de variable
V1 V2 V3... Vn V1(V2(...(Vn.E)...))

La aparicin de una variable V en una


expresin- es libre si no aparece en el
alcance de V
Clculo-

10

Notacin: macros
Admitimos macros por una cuestin de
comprensin y comodidad al operar,
pero no forman parte del clculo-
Ejemplo
macro:
muchasX = xxxxxxxxxx
uso:
(x.muchasX) (a)
resultado: aaaaaaaaaa
Clculo-

11

Conversiones
El clculo- est formado por:
Una SINTAXIS especfica
Unas CONVERSIONES (o reducciones)
entre expresiones
Cualquier conversin se puede efectuar,
si las sustituciones son vlidas
Clculo-

12

Conversiones
Una sustitucin E[V:=E] es vlida sii ninguna
de las variables libre de E se convierte en
una variable ligada en E[V:=E]
-redex: renombramiento de variables
-redex: vinculaciones de variables
(bindings)
-redex: dos funciones son iguales si al
aplicarles los mismos argumentos dan los
mismos resultados
Clculo-

13

Conversiones
Las reglas de conversin son las que nos van
a permitir jugar con las expresiones-
La reduccin- es intuitiva y nos ayuda a
manipular las expresiones; y la reduccin-
puede ser necesaria, aunque nosotros no la
vamos a ver en los ejemplos.
Por otro lado, la reduccin- es la ms
importante.
Clculo-

14

Conversiones
[sustitucin]

-redex
V.E

V.E [V:=V]
[binding]

-redex
(V.E1) E2

Clculo-

E1 [V:=E2]

15

Conversiones
Ejemplo de -redex
[sustitucin]
V.E V.E [V:=V]

(x.x)
x=y

(xy.xy) x=a, y=b

(xy.xy) x=a

Clculo-

(y.y)
(ab.ab)
(ay.ay)

16

Conversiones
Ejemplo de -redex
[binding]

(V.E1) E2
E1 [V:=E2]
(x.x)
(a)
(xy.xy) (a) (b)
(xy.xy) (b)

Clculo-

a
ab
y.by

17

Igualdades
Dos expresiones-, E y E, son iguales sii:
1. Son idnticas
2. Existe una cadena de expresiones E1E2...En
tal que:
a)
b)
c)

E = E1
E = En
Para cada Ei existe una conversin a Ei+1 y
viceversa

Clculo-

18

Clculo- : EJEMPLOS
Con las herramientas que tenemos (sintaxis y
reducciones) intentaremos demostrar que el
lgebra booleana y la aritmtica son
computables.
Para estos ejemplos, primero propondremos
un conjunto de funciones, y luego veremos
que actan como deben segn las
propiedades que se esperan de ellos.

Clculo-

19

Lgica
Para empezar vamos a definir:
= true
xy.x
xy.y
= flase
t.t (xy.y) (xy.x)
= t.t true false = not
Para comprender mejor de que hablamos, les
asignaremos macros, con las que trabajar
cmodamente
Clculo-

20

Lgica
Ahora con un ejemplo vamos a probar
que estas definiciones en expresiones
lambda se comportan realmente como
los operadores lgicos que decimos que
son.

Clculo-

21

Lgica: Ejercicio 1
Probar que not true = false
( t.t false true ) true
( t.t (ab.b) (cd.c)) (xy.x)
(xy.x) (ab.b) (cd.c)
y.(ab.b) (cd.c)
(ab.b) = false

* binding: t = (xy.x)
* true false true
binding: x = (ab.b)

* binding: y = (cd.c)
Ahora sustituiramos y en el
cuerpo de la funcin, pero no
aparece en l

Clculo-

22

Lgica
Ahora definimos otras dos funciones
lgicas
and = xy.x y (xy.y) = xy.x y false
or = xy.x (xy.x) y = xy.x true y
Con true, false, not, and y or vamos
a intentar probar que tenemos toda la
lgica.
Clculo-

23

Lgica: Ejercicio 2
Probar que and true false = false
(xy.xy false) (true) (false)
binding: x = true
binding: y = false
true false false
sustituimos la macro true
(xy.x) (false) (false)
x unifica con false; devuelve false
Clculo-

24

Lgica: Ejercicio 3
Probar que or true false = true
(xy.x true y)
true
true
(xy.x (ab.a) y) (cd.c) (ef.e)
binding: x = (cd.c)
binding: y = (ef.e)

(cd.c) (ab.a)

(ef.e)

binding: c = (ab.a)
binding: d = (ef.e)

(ab.a) = true
Clculo-

25

Lgica: Selecciones
Otra propiedad de las funciones true y false:
funcionan como operadores de seleccin:
E E1 | E2
donde E representa true o false
true E1 E2 = E1
true selecciona el primer arguemento
false E1 E2 = E2
false selecciona el primer arguemento
Clculo-

26

Lgica: Conclusiones
Derivado de los ejemplos, comprobamos que
podemos construir todas las tablas de la
verdad con las macros: true, false, not, and
y or.
Con las macros true y false adems
tenemos operadores que nos permiten la
generacin de IF-THEN-ELSE.
LA LGICA BOOLEANA ES COMPUTABLE
Clculo-

27

Aritmtica
Alguna definiciones:
0 = fx.x
1 = fx.fx
2 = fx.f(fx) = fx.f2x
...
nfx.nf(fx)
suc =
add =
mnfx.mf(nfx)
iszero = n.n(x.(ab.b)) (cd.c)
= n.n(x.false) true
Por comodidad vamos a asignarles macros
Clculo-

28

Aritmtica
Ahora vamos a probar que estas
definiciones de funciones conocidas en
expresiones lambda se comportan
realmente como esperamos de ellas

Clculo-

29

Aritmtica: Ejercicio 1
Probar que iszero 0 = true
(n.n(x.false) true )

(ga.a)

binding: n = ga.a
ga.a (x.false) (true)
binding: g = (x.false )
binding: a = true
true
Clculo-

30

Aritmtica: Ejercicio 2
Probar que iszero 1 = false
(n.n(x.false)true) (ga.ga)
binding: n = ga.ga

ga.ga (x.false) (true)


binding: g = (x.false)
binding: a = true

(x.false) true (x.(ab.b)) true


binding: x = true = (ab.b)

x no aparece en el cuerpo de la funcin, as


devolvemos la macro false
Clculo-

31

Aritmtica: Ejercicio 3
Probar que suc 1 = 2
(nfx.nf(fx)) (ga.ga )
binding: n = 1
las variables que no ligadas se dejan tal cual estn

fx.( (ga.ga) f (fx) )


binding: g = f
binding: a = (fx)

fx.f(fx)
Clculo-

=2
32

Aritmtica: Ejercicio 4
Probar que add 1 2 = 3
mnfx.mf(nfx) (1) (2)
binding: m = 1
binding: n = 2
fx.1f(2fx) fx.( (ga.ga) f (2fx))
binding: g = f
binding: a = (2fx)
fx.f(2fx) fx.f(he.h(he) (f) (x))
binding: h = f
binding: e = x
fx.f(f(fx)) = fx.f3x = 3
Clculo-

33

Aritmtica: Bucles
Ejemplo:

3 not false
(fx.fffx) not false
not(not(not(false)))
not(not(true))
(not(false))

true
Como vemos el efecto de los nmeros puede
ser considerado en ocasiones como un FOR
finito, en este caso sobre la funcin not
Clculo-

34

Aritmtica: Bucles
Tenemos todo lo necesario para
programar

Condicionales, bucles finitos, lgica y


aritmtica

Sin embargo, hay funciones que


precisan de bucles WHILE.
Aquello que se pueda programar con un
while tambin se puede programar
mediante RECURSIN.
Clculo-

35

Aritmtica: Recursividad
Vamos a centrarnos en la recursin y
poner un ejemplo para verificar que
tambin tiene un lugar en el clculo-
El ejemplo que vamos a tratar es la
multiplicacin: vamos a ver una
definicin recursiva de multiplicacin
Clculo-

36

Aritmtica: Recursividad
Definicin recursiva de mult
mult =
mn.((iszero m) 0 (add n (mult (pre m) n)))

Sin embargo no es vlida porque en la


definicin utilizamos la propia expresin
mult
Adems necesitamos poder escribir
toda la expresin sin macros
Clculo-

37

Artimtica: Recursividad
Para redefinir la multiplicacin nos
servimos del concepto de punto fijo
FuncionA (argA) = argA
FPF (FuncionA) = argA

Ejemplos:
Funcin: x.x
FPF(x.x) = a.a
x.x (a.a) = a.a
Clculo-

Funcin: fx.x
FPF(fx.x) = a.a
fx.x (a.a) =fa.a
38

Aritmtica: Recursividad
Existe una funcin que obtiene UN
punto fijo de cualquier otra funcin:
Y= f .(x.f(xx)) (x.f(xx))

Este operador aplicado a una funcin


nos ofrece un punto fijo para dicha
funcin.
Es decir:
E (YE) = YE
Clculo-

39

Artimtica: Recursividad
Redefinimos la operacin de multiplicacin:
multFn =fmn.((iszero m) 0 (add n (f (pre m) n)))

El punto fijo de esta funcin es la


multiplicacin!
Y multFn = mult

Ahora ambas expresiones se pueden


poner como expresiones lambda,
sustituyendo todas las macros
Clculo-

40

Artimtica: Recursividad
Recapitulamos

1) No podemos definir mult sobre s misma


2) Definimos una nueva funcin multFn que admite
un argumento ms que la primera (que
representar una funcin a ejecutar)

3) Calculamos el punto fijo de multFn mediante Y, y


obtenemos mgicamente que es mult.
Y multFn = mult

FPF (FuncionA) = argA

4) As se cumple que si aadimos dos parmetros ms


multFn mult m n = mult m n
Clculo-

FuncionA (argA) = argA


41

Aritmtica: Recursividad
Comprobemos que hemos encontrado la
multiplicacin:
Hiptesis:
multFn mult = mult
Veamos:
multFn mult 2 3 = mult 2 3
fmn.((iszero m) 0 (add n (f (pre m) n)))
mult 2 3
((iszero 2) 0 (add 3 (mult (pre 2) 3)))
add 3 (mult (pre 2) 3)
Clculo-

42

Aritmtica: Recursividad
add 3 (mult (pre 2) 3)

multFn mult
= mult

add 3 (multFn mult (pre 2) 3)


add 3 (fmn.((iszero m)
0 (add n (f (pre m) n)) mult 1 3)
add 3 ((iszero 1)
0 (add 3 (mult (pre 1) 3)))
add 3 (add 3 (mult (pre 1) 3))
Clculo-

43

Aritmtica: Recursividad
add 3 (add 3 (mult (pre 1) 3))

multFn mult
= mult

add 3 (add 3 (multFn mult (pre 1 ) 3) )


add 3 (add 3 (fmn.((iszero m)
0 (add n (f (pre m) n)) ) mult 0 3))
add 3 (add 3 ((iszero 0)
0 (add 3 (mult (pre 0) 3))) )
add 3 (add 3 0) = 6
Clculo-

44

Aritmtica: Conclusiones
Tenemos definiciones de funciones- para
todos los nmeros.
Tenemos definiciones de macros para
calcular: sucesor, suma, multiplicar, etc.
Adems, los nmeros nos permiten la
generacin de bucles finitos (for)
Y, por ltimo, tenemos posibilidades de hacer
funciones recursivas mediante las funciones
de punto fijo
LA ARITMTICA ES COMPUTABLE
Clculo-

45

Conclusiones
La terminologa de Church y funciones-
nos permite:

Realizar operaciones lgicas


Realizar operaciones matemticas
Realizar selecciones (if-then-else)
Realizar bucles limitados (for-acotados)
Realizar bucles ilimitados (while) o lo que
es lo mismo: funciones recursivas

Clculo-

46

Conclusiones
Hemos creado funciones- que hacen lo
mismo que cualquier programa de
ordenador.
Luego parece razonable la pretensin
de Church de que cualquier cosa
computable puede ponerse en forma de
una expresin- (y viceversa)
Clculo-

47

Reduccin

Transformacin de
Gelfond & Lifschitz
F* = F
si F es atomica
(F G)* = F* G*
(F G)* = F* G*

si X F
(F)* =

en otro caso
(H B)* = H* B*
P* = { (H B)* H B P }

Ejercicios

2.- Sea P: a a.

4.- Sea P: a b.
b a.
p p.
p a.

3.- Sea P: a b.
b a.

5.- Sea P: b a.

1.- Sea P: a a.
b c b.

Soluciones
1.- {a} es un answer set de P
2.- No tiene answer sets
3.- {a} y {b} es un answer set de P
4.- {a, p} es un answer set de P
5.- { } es una answer set de P

Fundamentos de Lenguajes de Programacin


Lambda. LCI y Lisp
1.- Defina una funcin en LISP que convierta un nmero menor que 100, de formato rabe
a formato romano, teniendo en cuenta que:
a) El valor de cada letra romana con la numeracin rabe es la siguiente:
I=1
V=5
X=10
L=50
C=100
b) En numeracin romana no puede aparecer ms de tres caracteres seguidos
iguales, es decir, el nmero IIII es imposible.
c) Al poner a la izquierda de un nmero el inmediatamente anterior se resta a aqul
el valor de ste. Por ejemplo, IV, es (5 1 = 4)
La funcin se llamar a-romano y tendr como nico argumento un nmero entero en
notacin rabe; devuelve como resultado ese nmero en notacin romana contenido en una
lista.
Ejem. 1- (a-romano 89)
(L X X X IX)
2- (a-romano 19)
(X IX)
3- (a-romano 120)
(CASO NO CONTEMPLADO)
2.- Definir la funcin en LISP que halle el mximo comn divisor de 2 nmeros
Ejem. (mcd 42 56)
14
3.- Definir funcin en LCI que cuenta la cantidad de veces que aparece un elemento en una
lista en todos sus niveles.
Ejem.
Cuenta 2 1..5:1..5:1..5:2:Nil
la lista que se le da, es: [[\y.y, 2, 3, 4, 5], [\y.y, 2, 3, 4, 5], [\y.y, 2, 3, 4, 5], 2]
el resultado es: 4
(el 2 aparece 4 veces)
4.- Definir funcin en LCI que ordene los nmeros de una lista
Ejem.
Ordena 3:2:5:Nil
[2, 3, 5]

5.- Cules de las siguientes expresiones son -expresiones correctas? Cules no lo son?
Justificar cada respuesta.

6.- Definir en LISP la funcin miembro que se comporte de la siguiente manera: (en todos
sus niveles):
Ejem.
> (miembro 'llaves '(pero donde habre (puesto (Epi) las (llaves))) )
T
> (miembro 3 (1 2 (3 (8 9)) 9))
T
7.- Un palndromo (o capica) es algo (un texto) que se lee igual tanto al derecho como al
revs. Escribir una versin recursiva en LISP de esta funcin sin utilizar la funcin reverse.
Ejem.
> (palindromo '(1 2 3 4 5 4 3 2 1))
T
> (palindromop '(1 2 3))
NIL
8.- Definir funcin en LCI que devuelve una lista, que es la interseccin de dos listas
Ejem.
Inter 1..5 5..9
[5]
9.- Definir funcin en LCI que halla el mximo elemento de una lista
Ejem.
Maximo 3:2:5:11:8:Nil
11

10.- Indicar, para cada variable, cules de sus ocurrencias son libres y cuales ligadas, en las
siguientes expresiones. Indicar a que -abstraccin est ligada cada ocurrencia no libre.

11.- Definir en LISP la funcin agrupa que dada una lista de elementos forme una lista con
sublistas de tamao n
Ejem.
(agrupa (a d e s f t g h o) 2)
> ((a d) (e s) (f t) (g h) (o))
(agrupa (a s d e r f t g s) 3)
> ((a s d) (e r f) (t g s))
12.- Definir en LISP la funcin miembro que se comporte de la siguiente manera: (en todos
sus niveles):

Ejem.
> (miembro 'llaves '(pero donde habre (puesto (Epi) las (llaves))) )
T
> (miembro 3 (1 2 (3 (8 9)) 9))
T
13.- Definir funcin en LCI que devuelva los ltimos n elementos de una lista
Ejem.
Ultimos 3 1..15
[13, 14, 15]
14.- Definir funcin en LCI que determina si una lista es palndroma
Ejem.
Palindroma 3:2:5:2:3:Nil
\x.\y.x

15.- Si definimos la negacin como p|p := q.q de.e wz.w


Demostrar que p|p (p|p true) = true
16.- Definir funcin en LCI que halle la diferencia simtrica de dos listas
Ejem.
Difs 1..5 4..8
[1, 2, 3, 6, 7, 8]
17.- Definir funcin en LCI que quita elementos duplicados de una lista
Ejem.
Dupli 3:2:5:2:3:Nil
[3, 2, 5]

You might also like