Programación Funcional

Anuncio
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
Descargar