Programación Funcional José de Jesús Angel Angel www.math.com.mx José de Jesús Angel Angel www.math.com.mx abril 2015 Programación Funcional abril 2015 1 / 20 1 Historia 2 Cálculo−λ 3 Aritmética −λ 4 Fin José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 2 / 20 Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje universal? José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 3 / 20 Historia Historia • En 1928, en el texto “Grundzüge der theoretischen Logik” (Principles of Mathematical Logic) D. Hilbert y W. Ackermann plantean el problema de decisión (Entscheidungsproblem) Encontrar un “algoritmo” general que sea capaz de determinar si una formula lógica es un teorema. José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 4 / 20 Historia Historia • • Alonzo Church- Alan Turing de manera independiente resuelven la pregunta de Hilbert en 1936. Demostrando que no es posible tener tal algoritmo en el caso general. Alonzo Church fue quien por primera vez uso la frase “máquina de Turing” en la revisión de un artı́culo publicado por Turing en The Journal of Symbolic Logic. José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 5 / 20 Historia Historia • Particularmente Church define el término de función computable. Establce que una función es computable si puede evaluarse por el cálculo−λ. José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 6 / 20 Historia Historia • • • An Unsolvable Problem of Elementary Number Theory, Alonzo Church, American Journal of Mathematics, Vol. 58, No. 2 (Apr., 1936), pp. 345 − 363. Último teorema de Fermat: Si n es un número entero mayor a 2, entonces no existen números enteros positivos x, y, y z tales que xn + y n = z n . Como encontrar una función eficazmente calculable f , tal que f (n) = 2 si y sólo si existen enteros positivos x, y, z tales que xn + y n = z n . José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 7 / 20 Historia Historia • • • Cálculo−λ tiene por objeto que una ”máquina” haga cálculos y evalúe todo tipo de funciones A veces llamado el lenguaje de programación más pequeño del mundo. A inspirados lenguajes como LISP, Haskell, ML, Racket, y en general a la programación funcional. José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 8 / 20 Cálculo−λ Cálculo−λ • Elementos del cálculo −λ: x λx.f f1 f2 José de Jesús Angel Angel www.math.com.mx variable abstracción (funciones) aplicación Programación Funcional abril 2015 9 / 20 Cálculo−λ Cálculo−λ • Elementos del cálculo −λ: x λx.A AB José de Jesús Angel Angel www.math.com.mx variable abstracción (funciones) aplicación Programación Funcional abril 2015 10 / 20 Cálculo−λ Cálculo−λ • Expresiónes −λ: ABCD denota ((AB)C)D) λx.AB denota (λx.(AB)) λxy.A denota (λx.(λy.A)) λx1 x2 ..xn .A denota (λx1 .(λx2 .(..(λxn .A)..))) José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 11 / 20 Cálculo−λ Cálculo−λ • Expresiónes −λ válidas (λx.(xy)) ((λy.y)(λx.(xy))) (x(λx.(λx.x))) (λx.(yz)) José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 12 / 20 Cálculo−λ Cálculo−λ • Ejercicios: (insertar todos los paréntisis faltantes) xyz(yx) λx.uxy λu.u(λx.y) (λu.vuu)zy ux(yz)(λv.vy) (λxyz.xz(yz))uvw José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 13 / 20 Cálculo−λ Cálculo−λ • Notación: En el término λx.M , x se llama variable ligada al cuerpo M . En λx.xy, x es variable ligada, y es variable libre. En (λx.xy)(λy.yz), x es variable ligada, z es variable libre, y es ambas. λx.x es lo mismo que λy.y, se llama α−equivalencia. José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 14 / 20 Cálculo−λ Cálculo−λ • Sustitución: (λx.x2 )(5) (λx.xy)(z) (λy.x(yz))(ab) (λx.y)((λz.zz)(λw.w)) José de Jesús Angel Angel www.math.com.mx = = = = = = 25. y. x(abz). (λx.y)((λw.w)(λw.w)). (λx.y)(λw.w). y. Programación Funcional abril 2015 15 / 20 Cálculo−λ Cálculo−λ • Sustitución: (λx. + x1)(5) = = (λx. ∗ xx)(3) = = (λx.3)(5) = José de Jesús Angel Angel www.math.com.mx Programación Funcional (+51). 6. (∗33). 9. 3. abril 2015 16 / 20 Aritmética −λ Aritmética −λ • Para construir números enteros es simple, iniciamos del cero, enseguida 1 = suc(cero) 2 = suc(suc(cero)) 3 = suc(suc(suc(cero))) .. . n = suc(suc(..suc(cero)..)) José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 17 / 20 Aritmética −λ Aritmética −λ • Entonces, si 0 = λf x.x 1 = λf x.f x 2 = λf x.f (f x) 3 = λf x.f (f (f x)) .. . n = λf x.f (f (f..(f x)..)) José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 18 / 20 Aritmética −λ Aritmética −λ • Definimos: S = λwf x.f (wf x) la función sucesor. Entonces como: 0 = λf z.z y 1 = λf z.f z S(0) = = = = = = = (λwf x.f (wf x))(λf z.z) (λwf x.f (wf x))(λf z.z) (λf x.f ((λf z.z)f x)) (λf x.f ((λf z.z)f x)) (λf x.f ((λz.z)x)) λf x.f (x) λf x.f x José de Jesús Angel Angel www.math.com.mx Programación Funcional suc se aplica al 0 la variable es w se substituye por evaluar se evalua x en z es 1 abril 2015 19 / 20 Aritmética −λ Aritmética −λ • Definimos: S = λwf x.f (wf x) la función sucesor. Entonces como: 1 = λf z.f z y 2 = λf z.f (f z) S(1) = = = = = = = (λwf x.f (wf x))(λf z.f z) (λwf x.f (wf x))(λf z.f z) (λf x.f ((λf z.f z)f x)) (λf x.f ((λf z.f z)f x)) (λf x.f ((λz.f z)x)) λf x.f (f x) λf x.f (f x) José de Jesús Angel Angel www.math.com.mx Programación Funcional suc se aplica al 1 la variable es w se substituye por evaluar se evalua f en f es 2 abril 2015 20 / 20 Fin Contacto José de Jesús Angel Angel [email protected] www.math.com.mx José de Jesús Angel Angel www.math.com.mx Programación Funcional abril 2015 20 / 20