Professional Documents
Culture Documents
Primavera 2014
Clculo-
ndice
Clculo-
Sintaxis
Notacin: parntesis y macros
Conversiones
Igualdades
Ejemplos: lgica booleana y aritmtica
Conclusiones
Clculo-
Clculo-
Autor: Alonzo Church
Objetivo:
Clculo-
Clculo-
Mtodo:
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
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)...))
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
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
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.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
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)))
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))
39
Artimtica: Recursividad
Redefinimos la operacin de multiplicacin:
multFn =fmn.((iszero m) 0 (add n (f (pre m) n)))
40
Artimtica: Recursividad
Recapitulamos
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
43
Aritmtica: Recursividad
add 3 (add 3 (mult (pre 1) 3))
multFn mult
= mult
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:
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
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