Cálculo- - Benemérita Universidad Autónoma de …zacarias/FZF/Calculolambda4.pdfDerivado de los...
Transcript of Cálculo- - Benemérita Universidad Autónoma de …zacarias/FZF/Calculolambda4.pdfDerivado de los...
Cálculo-λ 2
ÍndiceCálculo- λSintaxisNotación: paréntesis y macrosConversionesIgualdadesEjemplos: lógica booleana y aritméticaConclusiones
Cálculo-λ 3
Cálculo-λ
Autor: Alonzo ChurchObjetivo:
Formalizar el modo de escribir funciones.A partir del concepto de función-λ seráposible generar cualquier función computable.
Cálculo-λ 4
Cálculo-λ
Método: Generar funciones que tomarán datos de entrada de un problema y proporcionarán datos de salida. Todo sin salirse de la definición de este lenguaje, de su estructura y sintaxis.
Este nueva notación derivó en distintos lenguajes de programación (como LISP)
Cálculo-λ 5
Sintaxis
<exp-λ> ::= <variable>::= <exp-λ> <exp-λ>
::= λ<variable>.<exp-λ>
Clases de expresiones-λ
VariablesAplicación de funciónAbstracción con variable ligada y cuerpo de función
Cálculo-λ 6
Sintaxis
EjemplosAplicación de función: representa el resultado de aplicar la función E1 sobre la función E2
Abstracción: representa el resultado de evaluar E donde la variable V tomará el valor al que se ligue por argumentos
E1 E2
x(y)m(n(y))
λV.Eλx.xλab.(a(b))
Cálculo-λ 7
Sintaxis
(λxy. x(λab.a)y) (λcd.c) (λef.e)
Cuerpo de función
Variables ligadas dentro del cuerpo
Valor de argumento2
Valor de argumento1
Si observamos ambos argumentos, son iguales excepto por el renombramiento. ES NECESARIO RENOMBRAR, para no confundirnos al realizar las vinculaciones y sustituciones.
Cálculo-λ 8
Sintaxis
Todo son EXPRESIONES-λ, y sólo intervienen “letras”, paréntesis y puntos.
Expresión-λ de resultado final
Expresión-λ de resultado parcial (λcd.c) ( λab.a ) (λef.e)
Expresión-λ de partida (λxy. x(λab.a)y) (λcd.c) (λef.e)
λab.a
Cálculo-λ 9
Notación
Una expresión-λ “auténtica”
SIEMPRE contiene TODOS los PARENTESISNUNCA contiene MACROS
Pero por comodidad, admitimos una notación que omite paréntesis y emplea macros.
Cálculo-λ 10
Notación: paréntesisAl omitir paréntesis debemos tener en cuenta:
1) Asociación 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 aparición de una variable V en una expresión-λ es libre si no aparece en el alcance de λV
Cálculo-λ 11
Notación: macros
Admitimos macros por una cuestión de comprensión y comodidad al operar, pero no forman parte del cálculo-λEjemplomacro: muchasX = xxxxxxxxxxuso: (λx.muchasX) (a) resultado: aaaaaaaaaa
Cálculo-λ 12
Conversiones
El cálculo-λ está formado por:Una SINTAXIS específicaUnas CONVERSIONES (o reducciones) entre expresiones
Cualquier conversión se puede efectuar, si las sustituciones son válidas
Cálculo-λ 13
ConversionesUna sustitución E[V:=E’] es válida 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
Cálculo-λ 14
ConversionesLas reglas de conversión son las que nos van a permitir “jugar” con las expresiones-λ
La reducción-α es “intuitiva” y nos ayuda a manipular las expresiones; y la reducción-ηpuede ser necesaria, aunque nosotros no la vamos a ver en los ejemplos.
Por otro lado, la reducción-β es la másimportante.
Cálculo-λ 15
Conversiones
α-redex [sustitución]
λV.E λV’.E [V:=V’]
β-redex [binding]
(λV.E1) E2 E1 [V:=E2]
α
β
Cálculo-λ 16
Conversiones
Ejemplo de α-redex [sustitución]λV.E λV’.E [V:=V’]
(λx.x) x=y(λxy.xy) x=a, y=b(λxy.xy) x=a
(λy.y) (λab.ab) (λay.ay)
ααα
α
Cálculo-λ 17
Conversiones
Ejemplo de β-redex [binding](λV.E1) E2 E1 [V:=E2]
(λx.x) (a)(λxy.xy) (a) (b)(λxy.xy) (b)
β
aabλy.by
β
ββ
Cálculo-λ 18
Igualdades
Dos expresiones-λ, E y E’, son iguales sii:1. Son idénticas2. Existe una cadena de expresiones E1E2...En
tal que:a) E = E1
b) E’ = En
c) Para cada Ei existe una conversión a Ei+1 y viceversa
Cálculo-λ 19
Cálculo-λ : EJEMPLOS
Con las herramientas que tenemos (sintaxis y reducciones) intentaremos demostrar que el álgebra booleana y la aritmética son computables.Para estos ejemplos, primero propondremos un conjunto de funciones, y luego veremos que actúan como deben según las propiedades que se esperan de ellos.
Cálculo-λ 20
Lógica
Para empezar vamos a definir:λxy.xλxy.yλt.t (λxy.y) (λxy.x)
Para comprender mejor de que hablamos, les asignaremos macros, con las que trabajar cómodamente
= true= flase
= λt.t true false = not
Cálculo-λ 21
Lógica
Ahora con un ejemplo vamos a probar que estas definiciones en expresiones lambda se comportan realmente como los operadores lógicos que decimos que son.
Cálculo-λ 22
Lógica: Ejercicio 1
Probar que not true = false( λt.t false true ) true
( λt.t (λab.b) (λcd.c)) (λxy.x) * binding: t = (λxy.x)
(λxy.x) (λab.b) (λcd.c) * true false true
binding: x = (λab.b)λy.(λab.b) (λcd.c)
* binding: y = (λcd.c)
Ahora sustituiríamos y en el cuerpo de la función, pero no aparece en él
(λab.b) = false
Cálculo-λ 23
Lógica
Ahora definimos otras dos funciones lógicas
λxy.x y (λxy.y)λxy.x (λxy.x) y
Con true, false, not, and y or vamos a intentar probar que tenemos toda la lógica.
= λxy.x y falseand == λxy.x true yor =
Cálculo-λ 24
Lógica: Ejercicio 2
Probar que and true false = false(λxy.xy false) (true) (false)
binding: x = truebinding: y = false
true false falsesustituimos la macro true
(λxy.x) (false) (false)x unifica con false; devuelve false
Cálculo-λ 25
Lógica: Ejercicio 3Probar 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
Cálculo-λ 26
Lógica: Selecciones
Otra propiedad de las funciones true y false:funcionan como operadores de selección:
E E1 | E2 donde E representa true o false
true E1 E2 = E1true selecciona el primer arguemento
false E1 E2 = E2 false selecciona el primer arguemento
Cálculo-λ 27
Lógica: Conclusiones
Derivado de los ejemplos, comprobamos que podemos construir todas las tablas de la verdad con las macros: true, false, not, andy or.Con las macros true y false además tenemos operadores que nos permiten la generación de IF-THEN-ELSE.
LA LÓGICA BOOLEANA ES COMPUTABLE
Cálculo-λ 28
AritméticaAlguna definiciones:
λfx.xλfx.fxλfx.f(fx) = λfx.f2x ...
λnfx.nf(fx)λmnfx.mf(nfx)λn.n(λx.(λab.b)) (λcd.c)
Por comodidad vamos a asignarles macros= λn.n(λx.false) true
0 =1 =2 =suc =add =iszero =
Cálculo-λ 29
Aritmética
Ahora vamos a probar que estas definiciones de funciones conocidas en expresiones lambda se comportan realmente como esperamos de ellas
Cálculo-λ 30
Aritmética: 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 = truetrue
Cálculo-λ 31
Aritmética: 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
x no aparece en el cuerpo de la función, asídevolvemos la macro false
binding: x = true = (λab.b)
Cálculo-λ 32
Aritmética: Ejercicio 3
Probar que suc 1 = 2(λnfx.nf(fx)) (λga.ga )
binding: n = 1las variables que no ligadas se dejan tal cual están
λfx.( (λga.ga) f (fx) )
binding: g = f
binding: a = (fx)
λfx.f(fx) = 2
Cálculo-λ 33
Aritmética: Ejercicio 4Probar que add 1 2 = 3λmnfx.mf(nfx) (1) (2)
binding: m = 1binding: n = 2
λfx.1f(2fx) ≡ λfx.( (λga.ga) f (2fx))binding: g = fbinding: a = (2fx)
λfx.f(2fx) ≡ λfx.f(λhe.h(he) (f) (x))binding: h = fbinding: e = x
λfx.f(f(fx)) = λfx.f3x = 3
Cálculo-λ 34
Aritmética: BuclesEjemplo: 3 not false
(λfx.fffx) not falsenot(not(not(false)))
not(not(true))
(not(false))
trueComo vemos el efecto de los números puede ser considerado en ocasiones como un FORfinito, en este caso sobre la función not
Cálculo-λ 35
Aritmética: Bucles
Tenemos todo lo necesario para “programar”
Condicionales, bucles finitos, lógica y aritmética
Sin embargo, hay funciones que precisan de bucles WHILE.Aquello que se pueda programar con un while también se puede programar mediante RECURSIÓN.
Cálculo-λ 36
Aritmética: Recursividad
Vamos a centrarnos en la recursión y poner un ejemplo para verificar que también tiene un lugar en el cálculo-λ
El ejemplo que vamos a tratar es la multiplicación: vamos a ver una definición recursiva de multiplicación
Cálculo-λ 37
Aritmética: Recursividad
Definición recursiva de multmult = λmn.((iszero m) 0 (add n (mult (pre m) n)))Sin embargo no es válida porque en la definición utilizamos la propia expresión multAdemás necesitamos poder escribir toda la expresión sin macros
Cálculo-λ 38
Artimética: Recursividad
Para redefinir la multiplicación nos servimos del concepto de punto fijo
FuncionA (argA) = argAFPF (FuncionA) = argA
Ejemplos:
Función: λx.xFPF(λx.x) = λa.aλx.x (λa.a) = λa.a
Función: λfx.xFPF(λfx.x) =λa.aλfx.x (λa.a) =λfa.a
Cálculo-λ 39
Aritmética: Recursividad
Existe una función que obtiene UN punto fijo de cualquier otra función:
Y= λf .(λx.f(xx)) (λx.f(xx))
Este operador aplicado a una función nos ofrece un punto fijo para dicha función.Es decir: E (YE) = YE
Cálculo-λ 40
Artimética: RecursividadRedefinimos la operación de multiplicación:
multFn =λfmn.((iszero m) 0 (add n (f (pre m) n)))
El punto fijo de esta función es la multiplicación!
Y multFn = mult
Ahora ambas expresiones se pueden poner como expresiones lambda, sustituyendo todas las macros
Cálculo-λ 41
Artimética: RecursividadRecapitulamos
1) No podemos definir mult sobre sí misma
2) Definimos una nueva función multFn que admite un argumento más que la primera (que representará una función a ejecutar)
3) Calculamos el punto fijo de multFn mediante Y, y obtenemos “mágicamente” que es mult.
Y multFn = mult FPF (FuncionA) = argA
4) Así se cumple que si añadimos dos parámetros más
multFn mult m n = mult m n FuncionA (argA) = argA
Cálculo-λ 42
Aritmética: RecursividadComprobemos que hemos encontrado la multiplicación:Hipótesis: multFn mult = multVeamos: 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)
Cálculo-λ 43
Aritmética: Recursividadadd 3 (mult (pre 2) 3)
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))
multFn mult= mult
Cálculo-λ 44
Aritmética: Recursividad
add 3 (add 3 (mult (pre 1) 3))
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
multFn mult= mult
Cálculo-λ 45
Aritmética: ConclusionesTenemos definiciones de funciones-λ para todos los números.Tenemos definiciones de macros para calcular: sucesor, suma, multiplicar, etc.Además, los números nos permiten la generación de bucles finitos (for)Y, por último, tenemos posibilidades de hacer funciones recursivas mediante las funciones de punto fijo
LA ARITMÉTICA ES COMPUTABLE
Cálculo-λ 46
Conclusiones
La terminología de Church y funciones-λnos permite:
Realizar operaciones lógicasRealizar operaciones matemáticasRealizar selecciones (if-then-else)Realizar bucles limitados (for-acotados)Realizar bucles ilimitados (while) o lo que es lo mismo: funciones recursivas