Professional Documents
Culture Documents
Programación III
Programación Funcional
Historia
http://www.answers.com/topic/hilbert-s-problems
http://www.answers.com/topic/entscheidungsproblem-1
Cálculo Lambda I
El cálculo lambda es un sistema formal diseñado
para investigar:
la definición de función,
la aplicación de una función,
la recursividad.
Ejemplos:
(λ x. x + 2) 3 → 5
(λ f. f 3) (λ x. x + 2) → (λ x. x + 2) 3 → 3+2 → 5
Cálculo Lambda
Sintaxis
Consideramos un conjunto finito de variables {a, b, c, ..., x, y, z}.
El conjunto de todas las λ-expresiones por la siguiente
gramática libre de contexto en BNF.
Ejemplos
λx.x
λx.(λy.y)
λf.f (λx.x)
http://www.answers.com/topic/lambda-calculus
Convenciones sintácticas
Convenciones sintácticas para hacer más sencillas las λ-
expresiones
Ámbito de variables
El ámbito de un identificador es la porción de un
programa donde el identificador es accesible.
Bound[x] = {}
Bound[λx.E] = Bound[E] ∪ {x}
Bound[E1 E2] = Bound[E1] ∪ Bound[E2]
Ejemplo:
(λy.x (λx.x y))
La primera x es libre y la otras dos ligadas.
Las dos y son ligadas.
Variables Ligadas
Bound[λy.x (λx.x y)] =
Bound[x (λx.x y)] ∪ {y} =
Bound[x] ∪ Bound[(λx.x y)] ∪ {y} =
{ } ∪ Bound[(λx.x y)] ∪ {y} =
{ } ∪ Bound[x y] ∪ {x} ∪ {y} =
{ } ∪ Bound[x] ∪ Bound[y] ∪ {x} ∪ {y} =
{ } ∪ { } ∪ { } ∪ {x} ∪ {y} =
{x, y}
Bound[λxy.x] =
Bound[λx.(λy.x)] =
Bound[λy.x] ∪ {x} =
{y} ∪ {x} =
{y, x}
Variables libres y ligadas
Variables Libres
Una variable se dice libre en E si tiene ocurrencias que
no están ligadas en E. El conjunto de las variables
libres de una expresión E se pueden definir
recursivamente como sigue:
Free[x] = {x}
Free[λx.E] = Free[E] – {x}
Free[E1 E2] = Free[E1] ∪ Free[E2]
Ejemplos:
Free[λx.x(λy.xyz)] = {z}
Free[λxy.x] = ∅
Variables Libres
Free[λx.x (λy.xyz)] =
Free[x (λy.xyz)] – {x} =
Free[x] ∪ Free[(λy.xyz)] – {x} =
{x} ∪ Free[xyz] – {y} – {x} =
{x} ∪ Free[x] ∪ Free[y] ∪ Free[z] – {y} – {x} =
{x} ∪ {x} ∪ {y} ∪ {z} – {y} – {x} =
{x, y, z} – {y} – {x} =
{x, z} – {x} =
{z}
Free[λxy.x] =
Free[λx(λy.x)] =
Free[λy.x] – {x} = ∅
Variables libres y ligadas
Supongamos la expresión:
λxy.(x y) y)
(λ
Las dos primeras ocurrencias de y son
ligadas pero la tercera es libre.
Las primeras son los parámetros donde serán
insertados los argumentos a los cuales se
aplique la función.
La tercera denota un valor no especificado
que puede tomar una forma arbitraria (un
argumento).
Relación de equivalencia
El conjunto de todas las expresiones lambda se
denomina Λ.
Reflexiva: M ≡ M
Simétrica: M ≡ N ⇒ N ≡ M
Transitiva: M ≡ N y N ≡ P ⇒ M ≡ P
Semántica Operacional
La evaluación de una expresión se compone de pasos de
reducción donde cada uno de los pasos se obtiene por
reescritura:
e → e´
λ-reducciones
Las reglas de reescritura que se utilizan para
reescribir un redex son:
δ-REDUCCIÓN
α-REDUCCIÓN o α-CONVERSIÓN
β-REDUCCIÓN
η-REDUCCIÓN
δ-reducción
Se llaman δ-reducción a la regla que
transforma constantes. Se describe con →δ
Ejemplo
∗ (+ 1 2) (−
(− 4 1) →δ
∗ 3 ((−
− 4 1) →δ
∗ 3 3 →δ
9
α-conversión
Definiremos la relación de α-reducción (o α-
conversión) como sigue:
λx.M →α λy.M[x:=y]
si y ∉ Free(M).
λx.M) N →β [x:=N] M
(λ
β-reducción
Ejemplos
λx. * x x) 2
(λ →β (* 2 2) →δ 4
λx. * x x) 2
(λ →βδ 4
λx.x y) (λ
(λ λz.z) →β λz.z) y
(λ →β y
λxy. * x y) 7) 8
((λ →β λy. * 7 y) 8
(λ →β *78
→δ 56
λf.f 3) (λ
(λ λx.+ x 1) →β λx.+ x 1) 3 →β
(λ +31
→δ 4
β-reducción
Ejercicios
Reducir las siguientes expresiones:
λv.((λ
(λ λz.z) x))
λx.((λ
((λ λx.x) y) z)
η-reducción
La η-reducción (también llamada extensionalidad) expresa la
idea de que dos funciones son lo mismo si dan el mismo
resultado para todos sus argumentos.
λx.M x →η M
Ejemplos:
λxy.+ y x →η λy.+ y →η +
λx.(λy.y) x →η λy.y
Equivalencia de Expresiones
Definición: En λ-cálculo dos λ-expresiones M
y N que sólo difieren en sus variables ligadas
son equivalentes.
Ejemplo :
M = x.λy.y es equivalente a
N = x.λz.z
M≡N
Sustitución
La sustitución de x por N en M (denotada por
[x:=N]M) es el resultado de cambiar en el λ-termino
M, todas las apariciones de la variable libre x por un
λ-termino N.
[x:=N] x ≡ N
[x:=N] y ≡ y si x ≠ y
[x:=N](P Q) ≡ [x:=N]P [x:=N]Q
λx.P) ≡
[x:=N](λ λx.P (porque x está ligada en P)
λy.P) ≡
[x:=N](λ λy.([x:=N]P) si x ≠ y
Captura de Variables I
Realizar el proceso de reducción en la
siguiente expresión:
λx.(λ
(λ λx.x) (+ 1 x)) 1
1 2
λx.(λ
(λ λx.x) (+ 1 x)) 1 λx.(λ
(λ λx.x) (+ 1 x)) 1
[x:=1](λλx.x) [x:=1](+ 1 x) [x:=1](λλx.x) [x:=1](+ 1 x)
λx.1) (+ 1 1)
(λ λx.x) (+ 1 1)
(λ
λx.1) 2
(λ λx.x) 2
(λ
1 2
Captura de Variables II
Sustituir el término z por la variable x.
λx.(λ
(λ λx.z)) z →β [x:=z] (λ
λx.z) ≡ (λ
λz.z) ??
λx.z) en
Se convirtió la función constante (λ
una función identidad.
Captura de Variables III
Al sustituir y en el cuerpo de la abstracción (reducción), la
ocurrencia libre de y reemplazará a x, transformándose en
ligada:
(λxy.(x y) y) = λy . ( y y )
Sustitución Segura
Una sustitución segura es aquella en la que no se produce
ninguna captura de variables.
Formalmente:
Para la sustitución:
[x:=N]P
Se ha de cumplir la condición suficiente:
Bound (P) ∩ Free (N) = ∅
(λxy.(x y) y)
⇓
(λxz.(x z) y) = λz. ( y z)
Sustitución: redefinición
Podríamos redefinir la sustitución usando la noción
de α-equvalencia y evitar de este modo la captura de
variables.
[x:=N] x ≡ N
[x:=N] y ≡ y si x ≠ y
[x:=N](P Q) ≡ [x:=N]P [x:=N]Q
λx.P)
[x:=N](λ ≡ λx.P (porque x está ligada en P)
λy.P)
[x:=N](λ ≡ λy.([x:=N]P) si x ≠ y ; y ∉ Free(N)
λy.P)
[x:=N](λ ≡ λz.([x:=N]([y:=z]P)) si x ≠ y ; y ∈ Free(N) ;
z ∉ Free(N) ∪ Free (P)
Redex
Un redex es un termino de la forma:
λx.M N
Forma Normal II
Observación:
No toda λ-expresión admite forma normal.
Ejemplo: Ω = (λ
λx.x x)(λ
λy.y y)
Ω = (λ
λx.x x)(λ
λy.y y)
λy.y y)] (x x)
[x:=(λ
λy.y y)(λ
(λ λy.y y) = Ω
Ordenes de Reducción
El orden de reducción determina la elección del redex a reducir;
para identificar cuál será el redex elegido se usará lo siguiente:
Redex más a la izquierda: es aquel cuya λ aparece
textualmente a la izquierda de cualquier otro redex de la
expresión.
Redex externo: es aquel que no está contenido en otro
redex.
Redex interno: es aquel que no contiene otro redex.
Ejemplos:
interno interno
λx.x) a ((λ
(λ λx.x) b) λy.((λ
(λ λz.y) x) y) a
interno externo
Ordenes de Evaluación II
Se distinguen dos ordenes de evaluación
más importantes:
Reducción
Ejercicios
Reducir las siguientes expresiones usando los
dos ordenes de evaluación:
λx.((λ
((λ λx.x) y) z)
λv.((λ
(λ λz.z z) (λ
λx.x x) v)) (λ
λz.z)
Propiedades
Propiedades de “confluencia”
Propiedades de “terminación”
Propiedad de Confluencia
Teorema (de Churh-Rosser):
Para toda λ-expresión M, si M →* P y M →* Q , existe
una λ-expresión E tal que P→*E y Q→*E (es la
"propiedad del diamante").
M
P Q
Consecuencia (corolario):
Si M admite forma normal N, ésta es única salvo α-
reducción (renombramiento de variables).
Propiedad de Terminación
Observación:
No toda secuencia de λ-reducciones termina
Como en el caso visto: Ω = (λλx.x x)(λ
λy.y y)
Teorema:
Si una secuencia M →* ... termina, entonces lo
hace en una forma normal. Es decir, entonces
M admite forma normal.
Propiedad de Terminación
Observación:
Si M admite forma normal, esto no significa que cualquier secuencia que
empiece en M, termine.
Ejemplo:
(λy.y) Ω (λz.z) admite forma normal (λz.z). Para intentar
obtenerla podemos seguir varios (dos) caminos: