Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la...
Transcript of Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la...
Programacion Funcional
Jose de Jesus Angel Angelwww.math.com.mx
abril 2015
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 1 / 20
1 Historia
2 Calculo−λ
3 Aritmetica −λ
4 Fin
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 2 / 20
Historia
Historia
• Leibniz llega a plantear la siguiente pregunta: ¿Esposible resolver todos los problemas formuladosen un lenguaje universal?
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 3 / 20
Historia
Historia
• En 1928, en el texto “Grundzuge dertheoretischen Logik” (Principles of MathematicalLogic) D. Hilbert y W. Ackermann plantean elproblema de decision (Entscheidungsproblem)Encontrar un “algoritmo” general que sea capazde determinar si una formula logica es unteorema.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 4 / 20
Historia
Historia
• Alonzo Church- Alan Turing de maneraindependiente resuelven la pregunta de Hilbert en1936. Demostrando que no es posible tener talalgoritmo en el caso general.
• Alonzo Church fue quien por primera vez uso lafrase “maquina de Turing” en la revision de unartıculo publicado por Turing en The Journal ofSymbolic Logic.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 5 / 20
Historia
Historia
• Particularmente Church define el termino defuncion computable. Establce que una funcion escomputable si puede evaluarse por el calculo−λ.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 6 / 20
Historia
Historia
• An Unsolvable Problem of Elementary NumberTheory, Alonzo Church, American Journal ofMathematics, Vol. 58, No. 2 (Apr., 1936), pp.345− 363.
• Ultimo teorema de Fermat: Si n es un numeroentero mayor a 2, entonces no existen numerosenteros positivos x, y, y z tales que xn + yn = zn.
• Como encontrar una funcion eficazmentecalculable f , tal que f(n) = 2 si y solo si existenenteros positivos x, y, z tales que xn + yn = zn.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 7 / 20
Historia
Historia
• Calculo−λ tiene por objeto que una ”maquina”haga calculos y evalue todo tipo de funciones
• A veces llamado el lenguaje de programacionmas pequeno del mundo.
• A inspirados lenguajes como LISP, Haskell, ML,Racket, y en general a la programacion funcional.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 8 / 20
Calculo −λ
Calculo−λ
• Elementos del calculo −λ:
x variableλx.f abstraccion (funciones)f1 f2 aplicacion
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 9 / 20
Calculo −λ
Calculo−λ
• Elementos del calculo −λ:
x variableλx.A abstraccion (funciones)A B aplicacion
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 10 / 20
Calculo −λ
Calculo−λ
• Expresiones −λ:
ABCD denota ((AB)C)D)λx.AB denota (λx.(AB))λxy.A denota (λx.(λy.A))λx1x2..xn.A denota (λx1.(λx2.(..(λxn.A)..)))
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 11 / 20
Calculo −λ
Calculo−λ
• Expresiones −λ validas
(λx.(xy))((λy.y)(λx.(xy)))(x(λx.(λx.x)))(λx.(yz))
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 12 / 20
Calculo −λ
Calculo−λ
• Ejercicios: (insertar todos los parentisis faltantes)
xyz(yx)λx.uxy
λu.u(λx.y)(λu.vuu)zyux(yz)(λv.vy)(λxyz.xz(yz))uvw
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 13 / 20
Calculo −λ
Calculo−λ
• Notacion:
En el termino λx.M , x se llama variable ligada alcuerpo M .En λx.xy, x es variable ligada, y es variable libre.En (λx.xy)(λy.yz), x es variable ligada, z esvariable libre, y es ambas.λx.x es lo mismo que λy.y, se llamaα−equivalencia.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 14 / 20
Calculo −λ
Calculo−λ
• Sustitucion:
(λx.x2)(5) = 25.(λx.xy)(z) = y.
(λy.x(yz))(ab) = x(abz).(λx.y)((λz.zz)(λw.w)) = (λx.y)((λw.w)(λw.w)).
= (λx.y)(λw.w).= y.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 15 / 20
Calculo −λ
Calculo−λ
• Sustitucion:
(λx.+ x1)(5) = (+51).= 6.
(λx. ∗ xx)(3) = (∗33).= 9.
(λx.3)(5) = 3.
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 16 / 20
Aritm etica −λ
Aritmetica −λ
• Para construir numeros 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 e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 17 / 20
Aritm etica −λ
Aritmetica −λ
• Entonces, si 0 = λfx.x
1 = λfx.fx
2 = λfx.f(fx)3 = λfx.f(f(fx))
...n = λfx.f(f(f..(fx)..))
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 18 / 20
Aritm etica −λ
Aritmetica −λ
• Definimos: S = λwfx.f(wfx) la funcion sucesor.Entonces como: 0 = λfz.z y 1 = λfz.fz
S(0) = (λwfx.f(wfx))(λfz.z) suc se aplica al 0
= (λwfx.f(wfx))(λfz.z) la variable es w
= (λfx.f((λfz.z)fx)) se substituye
= (λfx.f((λfz.z)fx)) por evaluar
= (λfx.f((λz.z)x)) se evalua x en z
= λfx.f(x)= λfx.fx es 1
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 19 / 20
Aritm etica −λ
Aritmetica −λ
• Definimos: S = λwfx.f(wfx) la funcion sucesor.Entonces como: 1 = λfz.fz y 2 = λfz.f(fz)
S(1) = (λwfx.f(wfx))(λfz.fz) suc se aplica al 1
= (λwfx.f(wfx))(λfz.fz) la variable es w
= (λfx.f((λfz.fz)fx)) se substituye
= (λfx.f((λfz.fz)fx)) por evaluar
= (λfx.f((λz.fz)x)) se evalua f en f
= λfx.f(fx)= λfx.f(fx) es 2
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 20 / 20
Fin
ContactoJose de Jesus Angel [email protected]
www.math.com.mx
Jos e de Jesus Angel Angel www.math.com.mx Programaci on Funcional abril 2015 20 / 20