Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Funcional
Cálculo Lambda
Paradigmas de Programación - 2021
https://www.youtube.com/watch?v=RRg38oNQ9vk&t=834s
Un poco de Historia
1. la definición de función
2. la aplicación de una función
3. la recursividad
Calculo Aritmético
Expresión
5+3*2
Operador
5+6
11 Reducción
Expresiones equivalentes
Expresión irreducible
Calculo Aritmético
Redex
(+ (* 2 3) (/ 4 2))
(+ 6 (/ 4 2))
(+ 6 2)
8
Expresión irreducible
Cálculo Lambda
f(x) = E
donde E contiene a x
Si f(x)=x*x,
entonces f(3)=3*3=9.
Abstracción Funcional
Permite definir funciones de un solo argumento y con un cuerpo
especifico, denotado por:
λx.B
(λx. + x 2)
Función de var x que suma x a 2
f(x) = x + 2
Aplicación Funcional
Permite aplicar una función definida sobre un argumento real (A). Por
yuxtaposición
f A
(λx.B) A
Aplicación de una función de var x y
cuerpo B al parámetro actual A
Ejemplos
(λx. + x 2) 3 →
5
(λy. y 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)
Convenciones sintácticas
Convenciones sintácticas para hacer más sencillas las λ-expresiones
(λx.+ x y) 3
• La abstracción λx.E introduce la variable x cuyo ámbito es
la expresión E vinculando a todas las variables x que ocurran
en E.
• La variable y podría considerarse libre
Variables libres y ligadas
Variables Ligadas
Una variable x se dice ligada (o asociada) en una expresión E si
aparece en el ámbito de una abstracción de variable instanciable
x.
Bound[x]= {}
Bound[λx.E] = Bound[E] {x}
Bound[E1 E2] = Bound[E1] Bound[E2]
• Ejemplo:
• (λy.z (λx.x y))
• La z es libre y la x está ligada.
• La y está ligada.
Variables 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}
Ocurrencias libres y ligadas
+ x ((λx.+ x y) 3)
La variable x aparece libre en su primera ocurrencia y ligada
en la segunda.
Equivalencia de Expresiones
Dadas:
M = x (λy.y)
N = x (λz.z)
M N
Relación de equivalencia
Considerando a como el conjunto de todas las expresiones
lambda; se puede definir una relación de equivalencia entre las
expresiones lambda que cumplen las propiedades:
Reflexiva
MM
Simétrica
si M N N M
Transitiva
si 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´
• Se parte de una expresión inicial y mediante un proceso de reescritura se
obtiene una expresión final irreducible.
• Ejemplo
* (+ 1 2) (- 4 1) →
* 3 (- 4 1) →
* 3 3 →
9
-conversión
λx.M → λy.[x:=y]M
si y Free(M)
λx.(λx.x) x →
λx.(λy.y) x
-reducción
(λx.M) N → [x:=N]M
(λx. * x x) 2 →
(* 2 2) →
4
-reducción
Ejemplos
Ejemplo de -reducción donde no aparece el parámetro
formal en el cuerpo de la abstracción.
(λx.3) 2 →
3
-reducción
Ejemplos
Ejemplo de -reducción donde el parámetro actual es una
función:
(λx.x y) (λz.z) →
(λz.z) y →
y
-reducción
Ejemplos
Ejemplo de -reducción donde el parámetro actual es una
función:
(λf.f 3) (λx.+ x 1) →
(λx.+ x 1) 3 →
+ 3 1 →
4
-reducción
Ejemplos
El cuerpo de una abstracción puede contener otra abstracción
(se puede ver la currificación en acción).
(λx.(λy.- y x)) 4 5 →
(λy.- y 4) 5 →
- 5 4 →
1
-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
si x Free(M)
y M una función
(λx.(λy.y)) x →
λy.y
-reducción
Ejercicios
Reducir las siguientes expresiones:
• (λx.(λx.+ (- x 1)) x 3) 2
• (λx.((λx.x) y)) z
Sustitución
Considerando la expresión:
(λx.M) N → [x:=N]M
[x:=N]x N
[x:=N]y y si x y
[x:=N](λy.P) λy.([x:=N]P)
λy.([x:=N]P) si x y
(λx.(λy.x y)) y →
λy.(y y) λz.(y z)
Sustitución Segura
• Formalmente:
Para la expresión:
λy.([x:=N]P)
Se ha de cumplir la condición suficiente:
Bound (P) Free (N) =
Sustitución: redefinición
Si y Free(N)
[x:=N](λy.P)
[x:=N](λz.[y:=z]P)
(λx.M) N
La abstracción funcional representa la función a aplicar y el término N
el argumento efectivo.
Un redex representa la idea de un cómputo que está por realizarse.
Forma Normal
(λx.x x) (λy.y y)
[x:=(λy.y y)] (x x)
(λy.y y) (λy.y y) =
(λx.((λt.t) y)) z
Ordenes de Reducción
Impaciente Perezoso
Se reduce el redex más Se reduce el redex más
interno de más a la externo de más a la
izquierda. izquierda.
Ordenes de Reducción
Confluencia Terminación
A_mechanical_proof_of_the_Church-Rosser_theorem.pdf
Propiedad de Confluencia
P Q
E
Corolario:
Si M admite forma normal N, ésta es única salvo -reducción
(renombramiento de variables).
Propiedad de Terminación
• Corolario:
Si M admite forma normal, esto no significa que cualquier
secuencia que empiece en M, termine.
Como en el caso visto: = (λx.x x)(λy.y y)
Propiedad de Terminación
Ejemplo
((λy.x) )
Impaciente: empezando "por dentro" ( g g ...)
(λy.x) → (λy.x) → ... (no termina)