Cálculo- - Benemérita Universidad Autónoma de …zacarias/FZF/Calculolambda4.pdfDerivado de los...

47
Cálculo-λ Antonio Almazán Faura Lidia Quintana Pancorbo

Transcript of Cálculo- - Benemérita Universidad Autónoma de …zacarias/FZF/Calculolambda4.pdfDerivado de los...

Cálculo-λ

Antonio Almazán FauraLidia Quintana Pancorbo

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

Cálculo-λ 47

Conclusiones

Hemos creado funciones-λ que hacen lo mismo que cualquier programa de ordenador.Luego parece razonable la pretensión de Church de que cualquier cosa computable puede ponerse en forma de una expresión-λ (y viceversa)