Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la...

21
Programaci ´ on Funcional Jos ´ e de Jes ´ us Angel Angel www.math.com.mx abril 2015 Jos ´ e de Jes ´ us Angel Angel www.math.com.mx Programaci ´ on Funcional abril 2015 1 / 20

Transcript of Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la...

Page 1: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 2: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 3: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 4: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 5: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 6: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 7: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 8: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 9: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 10: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 11: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 12: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 13: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 14: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 15: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 16: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 17: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 18: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 19: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 20: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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

Page 21: Programacion Funcional´ · 2015-04-08 · Historia Historia • Leibniz llega a plantear la siguiente pregunta: ¿Es posible resolver todos los problemas formulados en un lenguaje

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