Download el cálculo lambda - paradigmas
Document related concepts
no text concepts found
Transcript
EL CÁLCULO LAMBDA
λ
EL CÁLCULO LAMBDA λ
El cálculo λ fue desarrollado por el matemático
Alonzo Church en la década del 30, a fin de
establecer una teoría general de funciones y
extenderla a modo de proveer fundamentos para la
lógica y matemática.
Propiedades generales de las funciones
independiente del área particular de problemas.
EL CÁLCULO LAMBDA λ
El cálculo λ puro, es una gramática para términos:
𝑀 ∷ 𝑥 𝑀1 𝑀2 𝜆𝑥. 𝑀
𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒 = 𝑥, 𝑦, 𝑧, …
𝑇é𝑟𝑚𝑖𝑛𝑜 = 𝑀, 𝑁, 𝑃, 𝑄 (Un término puedeser una
variable, una aplicación (M N) o una bstracció𝑛 𝜆𝑥. 𝑀
EL CÁLCULO LAMBDA λ
El cálculo λ no tiene tipos (tomar en cuenta ámbito -
paso de parámetros - estrategia de evaluación).
Programación funcional es esencialmente cálculo λ
con constantes apropiadas.
El cálculo λ con tipos asocia un tipo con cada
término.
APORTE CONCEPTUAL A LOS LENGUAJES DE
PROGRAMACIÓN
Sintaxis de base.
Una semántica para el concepto de función como
proceso de transformación de argumentos en
resultados.
Medios para definir primitivas de programación.
< Termino >≔ < Variable >:
λ < 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒 >. < 𝑇𝑒𝑟𝑚𝑖𝑛𝑜 >:
(< 𝑇𝑒𝑟𝑚𝑖𝑛𝑜 >< 𝑇𝑒𝑟𝑚𝑖𝑛𝑜 >)
REGLAS DEL CÁLCULO λ
El cálculo debe proveer mecanismo por el cual se
obtiene el resultado de aplicar una función a
argumentos dados:
𝑀=𝑁
M y N son terminos = es una relación de equivalencia
Los axiomas y reglas de inferencia fijarán
condiciones para términos equivalentes
REGLAS DEL CÁLCULO λ
Para que relación = sea efectivamente de
equivalencia se consigue imponiendo las
propiedades de:
Reflexividad M. = M
Simetría M=N
N=M
Transitividad
M=N
N = P por lo tanto
M=P
IGUALDAD EN CÁLCULOS λ PUROS
Igualdad Beta 𝑀 = 𝛽𝑁 si M y N son iguales - deben
tener el mismo valor.
Se relaciona con el resultado de abstracción(𝜆𝑥. 𝑀) a
un argumento N.
Ej.: fun cuadrado 𝑥 = (𝑥 ∗ 𝑥)
La invocación de cuadrado (5)n sustituye en el cuerpo
a x por 5
𝐶𝑢𝑎𝑑𝑟𝑎𝑑𝑜 5 = 𝛽5 ∗ 5
IGUALDAD EN CÁLCULOS λ PUROS
El aspecto central del cálculo consiste en establecer el
mecanismo por el cual se obtiene el resultado de
aplicar una función (representada por una
abstracción) a un argumento (representado por un
término cualquiera).
Ej.:
𝑎𝑏𝑠𝑡𝑟𝑎𝑐𝑐𝑖ó𝑛 𝑓𝑢𝑛𝑐𝑖𝑜𝑛𝑎𝑙 = 𝑥 𝑠𝑞𝑟𝑡 2 ∗ 𝑥 + 1
𝑎𝑝𝑙𝑖𝑐𝑎𝑑𝑜 𝑎 𝑢𝑛 𝑣𝑎𝑙𝑜𝑟 = 𝑥 𝑠𝑞𝑟𝑡 2 ∗ 𝑥 + 1 4
𝑠𝑒 𝑝𝑢𝑒𝑑𝑒 𝑟𝑒𝑑𝑢𝑐𝑖𝑟 𝑎 = 𝑥 𝑠𝑞𝑟𝑡 2 ∗ 4 + 1
IGUALDAD EN CÁLCULOS λ PUROS
Por convención sintáctica pueden eliminarse los paréntesis, en
su ausencia la aplicación se agrupa de izquierda a derecha,
aunque deba conservarse para asegurar las aplicaciones.
Ej.: Ocurrencia
𝑂𝑐𝑢𝑟𝑟𝑒𝑛𝑐𝑖𝑎 𝑑𝑒 𝑃 𝑒𝑛 𝑄
𝐼𝑛𝑑𝑢𝑐𝑐𝑖ó𝑛 𝑒𝑛 𝑙𝑎 𝑓𝑜𝑟𝑚𝑎 𝑑𝑒 𝑄
𝐵𝐴𝑆𝐸 𝑃 𝑜𝑐𝑢𝑟𝑟𝑒 𝑒𝑛 𝑃
𝐼𝑛𝑑𝑢𝑐𝑐𝑖ó𝑛 𝑠𝑖 𝑃 𝑜𝑐𝑢𝑟𝑟𝑒 𝑒𝑛 𝑀 𝑜 𝑒𝑛 𝑁 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠 𝑃 𝑜𝑐𝑢𝑟𝑟𝑒 𝑒𝑛 𝑀𝑁 .
𝑠𝑖 𝑃 𝑜𝑐𝑢𝑟𝑟𝑒 𝑒𝑛 𝑀. 𝑃 ≔: 𝑥, 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠 𝑃 𝑜𝑐𝑢𝑟𝑟𝑒 𝑒𝑛 𝜆𝑥. 𝑚
VARIABLES LIBRES Y ACOTADAS
Definición (Ocurrencia Libres y Ligadas de variables)
Una ocurrencia de la variable x en un término P es ligada si y
solo si aparece en un subtérmino de P de la forma λx.M.
Cualquier otra ocurrencia de x en P es llamada libre.
Ej.:
( 𝑥 𝑣 𝜆𝑦. 𝑦 𝑣 𝑤)
Las dos ocurrencias de y son ligadas.
Todas las ocurrencias de x, v y w son libres.
VARIABLES LIBRES Y ACOTADAS
Abstracciones 𝜆𝑥. 𝑀 llamado asociaciones restringen
a x en 𝜆𝑥. 𝑀 o sea:
Variable x acotada en 𝜆𝑥. 𝑀.
El conjunto libre (m) formado por variables libres de M.
Reglas de sintaxis:
Libre(x) = {x}
Libre (MN) = libre (M) ∪ libre(N)
Libre 𝜆𝑥. 𝑀 = libre (M) − {x}
SUSTITUCIÓN
La sustitución por un término N de una variable x en M se
escribe (N/x) M y se define:
Suponga que las variables libres de N no tienen
apariciones acotadas en M, entones el término (N/x) M
se forma reemplazando con N todas las apariciones.
libres de x en M.
Otro caso suponga que la variable y es libre en N y
acotada en M. La asociación y las apariciones acotadas
correspondiente de y en M se reemplazan de manera
consistente por una variable nueva z. Se sigue de nuevo
las variables acotadas en M hasta que se pueda aplicar el
caso anterior.
SUSTITUCIÓN
En lo sigo casos M no tiene apariciones acotadas, así
N reemplaza todas las apariciones de x en M para
formar (N/x) M:
(𝑢/𝑥) 𝑥 = 𝑢
(𝑢/𝑥) (𝑥 𝑥) = (𝑢 𝑢)
(𝑢/𝑥) (𝑥 𝑦) = (𝑢 𝑦)
(𝑢/𝑥) (𝑥 𝑢) = (𝑢 𝑢)
((𝜆𝑥. 𝑥)/𝑥)𝑥 = (𝜆𝑋. 𝑥)
SUSTITUCIÓN
En lo sig. casos M no tiene apariciones libres de x ,
así que (N/x) M es M mismo:
(𝑢/𝑥) 𝑦 = 𝑦
(𝑢/𝑥) (𝑦 𝑧) = (𝑦 𝑧)
(𝑢/𝑥) (𝐴𝑦 𝑦) = (𝐴𝑦 𝑦)
(𝑢/𝑥) (𝐴𝑋 𝑥) = (𝐴𝑋 𝑥)
((𝜆𝑥. 𝑥)/𝑥)𝑦 = 𝑦
SUSTITUCIÓN
En lo sig. casos la variable u en M tiene apariciones
acotadas en M de modo que (N/x) M se forma
primero asignando nuevo nombre, a las apariciones
acotadas de u en M:
{𝑢/𝑥} (𝜆𝑢. 𝑥) = {𝑢/𝑥} (𝜆𝑧. 𝑥) = (𝜆𝑧. 𝑢)
{𝑢/𝑥} (𝜆𝑢. 𝑢) = {𝑢/𝑥} (𝜆𝑧. 𝑧) = (𝜆𝑧. 𝑧)
SUSTITUCIÓN
Ejemplos:
[N/x]x :=: N
[N/x]V :=: V
[N/x](PQ) :=: ([N/x] P
[N/x]Q)
[N/x] λx. M :=: λx. M
[N/x] λy. P :=: λy. [N/x] P
si V:≠ x
Si y no ocurre libre en N o x no ocurre libre en P
[N/x] λy. P :=: λz. [N/x] [z/y] P
Si Y no ocurre libre en N y X ocurre libre en P y Z no ocurre libre
en P
AXIOMAS Y REGLAS DE LA IGUALDAD BETA
Axioma fundamental: (λx.M)N =β {N/x} M (axioma β)
Así (λx.x) u = β u y
(λx.y) u = β y.
(λx. M) = β λz.{z/x}M suponiendo que z no es libre en M
(axioma α)
𝑀 =𝛽 𝑀
𝑟𝑒𝑔𝑙𝑎 𝑑𝑒 𝑟𝑒𝑓𝑙𝑒𝑥𝑖𝑣𝑖𝑑𝑎𝑑
𝑀 =𝛽 𝑁
(𝑟𝑒𝑔𝑙𝑎 𝑑𝑒 𝑐𝑜𝑛𝑚𝑢𝑡𝑎𝑡𝑖𝑣𝑖𝑑𝑎𝑑)
𝑁 =𝛽 𝑀
AXIOMAS Y REGLAS DE LA IGUALDAD BETA
𝑀 =𝛽 𝑁 𝑁 =𝛽 𝑃
𝑟𝑒𝑔𝑙𝑎 𝑑𝑒 𝑇𝑟𝑎𝑛𝑠𝑖𝑡𝑖𝑣𝑖𝑑𝑎𝑑
𝑁 =𝛽 𝑃
𝑀 =𝛽 𝑀′ 𝑁 =𝛽 𝑁′
(𝑟𝑒𝑔𝑙𝑎 𝑑𝑒 𝑐𝑜𝑛𝑔𝑟𝑢𝑒𝑛𝑐𝑖𝑎)
′
𝑀𝑁 =𝛽 𝑀 𝑁′
𝑀 =𝛽 𝑀′
(𝑟𝑒𝑔𝑙𝑎 𝑑𝑒 𝑐𝑜𝑛𝑔𝑟𝑢𝑒𝑛𝑐𝑖𝑎)
𝜆𝑥. 𝑀 =𝛽 𝜆𝑥. 𝑀′
El efecto de un programa funcional es el cómputo de un valor,
imagen en la función representada por el programa de un
cierto valor dado.
REDUCCIONES (redex)
Redex representa la idea de un computo que esta por
realizarse.
Un redex representaría el hecho de aplicar un
programa a cierto dato y su forma normal.
El proceso por el cual se obtiene esta forma normal
será llamado reducción y podría verse como la
«Ejecución» del «Programa» para el «Dato» en
cuestión.
REDUCCIONES (redex)
Los cálculos lambda son simbólicos. Los términos se
reducen a la forma simple posible.
𝑁
𝑥
(𝜆𝑥. 𝑀) 𝑁 =𝛽
𝑀 el lado derecho es más simple
Esto sugiere reglas e rescritura llamada reducción
𝑁
𝑥
(𝜆𝑥. 𝑀) 𝑁 =𝛽
𝜆𝑥. 𝑀 =𝛼 𝜆 𝑦.
𝑦
𝑥
𝑀
(β-reducción)
𝑀 y no es libre en M (α-conversión)
REDUCCIONES (redex)
Si 𝑃 ⇒𝛽 𝑄 - Subtérmino de P se reduce (p-reducción)
para crear Q Un sub término 𝜆𝑥. 𝑀 𝑁 se denomina
exred (redex = reduction expression) de P que se
𝑁
reemplaza por
𝑀 para crear Q.
𝑥
Un término que no puede tener reducción se encuentra
en forma normal
REDUCCIONES (redex)
Ej.:
𝑆𝐼𝐼 = (𝜆𝑥𝑦𝑧. 𝑥𝑧(𝑦𝑧)(𝜆𝑥. 𝑥)(𝜆𝑥. 𝑥)
(𝜆𝑦𝑧. 𝜆𝑥. 𝑥 𝑧 𝑦𝑧 )(𝜆𝑥. 𝑥)
𝜆𝑦𝑧. 𝑍 𝑦𝑧
𝜆𝑥. 𝑥
𝜆𝑧. (𝜆𝑥. 𝑥)𝑧 ((𝜆𝑥. 𝑥) 𝑧)
𝜆𝑧. 𝑧 𝜆𝑥. 𝑥 𝑧
𝜆𝑧. 𝜆𝑥. 𝑥 𝑧𝑧
𝜆𝑧. 𝑧𝑧
TEOREMA DE CHURCH-ROSSER
Para todos los términos A puros M, P Y Q, si 𝑀 ⇒ 𝑃 y
𝑀 ⇒∗ 𝑄, entonces debe existir un término R tal que
P ⇒∗ 𝑅 Y que 𝑄 ⇒∗ 𝑅
Notación para 0 o
más conversiones α
y reducciones β
TEOREMA DE CHURCH-ROSSER
M
*
*
P
Q
*
*
R
Si M se reduce a P y a Q, entonces ambos pueden
llegar a algún R común.
REGLAS DE CÁLCULO
En los lenguajes de programación las aplicaciones M
N de funciones, se dice que se invocan por valor.
Para cálculo lambda estrategia de reducción es una
regla para escoger redex. Hace corresponder a cada
término P (que no esté en forma normal), con un
término Q tal que 𝑃 ⇒𝛽 𝑄.
Reducción para las invocaciones por valor elige la exred del
extremo izquierdo y más interna de un término.
Reducción para las invocaciones por nombre elige la exred del
extremo izquierdo y más externa.
REGLAS DE CÁLCULO
A pesar de que ocurra una evaluación sin final, los
lenguajes funcionales utilizan la invocación por valor
debido a que es posible implantarla eficientemente y
alcanza la forma normal con la frecuencia necesaria.
CONSTANTES Y PRIMITIVAS DE LENGUAJES
DE PROGRAMACIÓN
Constantes: están pensadas para representar una
función específica y no una genérica como las
variables - cada cálculo lambda tiene su propio
conjunto de constantes.
Sintaxis
<término> ::= <constante>
CONSTANTES Y PRIMITIVAS DE LENGUAJES
DE PROGRAMACIÓN
Ej.: true, false, if, O, iszero, pred, succ, fix, ...
𝑇 ∶: = 𝜆𝑥𝑦. 𝑥
𝐹 ∶: = 𝜆𝑥𝑦. 𝑦
O definir 𝑖𝑓_𝑡ℎ𝑒𝑛_𝑒𝑙𝑠𝑒 ∷= 𝜆𝑏. 𝜆𝑚. 𝜆𝑛((𝑏 𝑚)𝑛) (valor
arbitrario)
Y a partir de allí
((𝑖𝑓_𝑡ℎ𝑒𝑛_𝑒𝑙𝑠𝑒 𝑇) 𝑀 𝑁) = 𝑀
((𝑖𝑓_𝑡ℎ𝑒𝑛_𝑒𝑙𝑠𝑒 𝐹) 𝑀 𝑁) = 𝑁
CONSTANTES Y PRIMITIVAS DE LENGUAJES
DE PROGRAMACIÓN
Par ordenado:
Definir término constructor de pares - Ej.: aplicado
sobre dos términos M N devuelva par (M N)
𝐶𝑜𝑛𝑠 ∷= 𝜆𝑥𝑦. 𝜆𝑧. 𝑧 𝑥 𝑦
𝜆𝑧. ((𝑧 𝑀) 𝑁)
𝑀 𝑁 ∷= (𝐶𝑜𝑛𝑠 𝑀 𝑁)
si aplicamos a M N
útil para representar listas
CONSTANTES Y PRIMITIVAS DE LENGUAJES
DE PROGRAMACIÓN
Ejemplo para construir serie numérica:
Para el O
0 ∷= 𝜆𝑥. 𝑥
Para el sucesor 𝑠𝑢𝑐𝑒𝑠𝑜𝑟 ∷= 𝜆𝑥. (𝐶𝑜𝑛𝑠 𝐹 𝑥)
1 ∷= 𝑠𝑢𝑐𝑒𝑠𝑜𝑟 0 = (𝐶𝑜𝑛𝑠 𝐹 0)
2 ∷= 𝑠𝑢𝑐𝑒𝑠𝑜𝑟 1 = 𝐶𝑜𝑛𝑠 𝐹 1 = (𝐶𝑜𝑛𝑠 𝐹 (𝐶𝑜𝑛𝑠 𝐹 0))
Y así sucesivamente.
CONSTANTES Y PRIMITIVAS DE LENGUAJES
DE PROGRAMACIÓN
Reglas de reducción para algunas constantes:
𝐼𝑓 𝑡𝑟𝑢𝑒 𝑀 𝑁 ⇒𝛿 𝑀
𝐼𝑓 𝑓𝑎𝑙𝑠𝑒 𝑀 𝑁 ⇒𝛿 𝑁
𝑓𝑖𝑥 𝑀 ⇒𝛿 𝑀
𝑖𝑠𝑧𝑒𝑟𝑜 ⇒𝛿 𝑡𝑟𝑢𝑒
𝑖𝑠𝑧𝑒𝑟𝑜 (𝑠𝑢𝑐𝑐 𝐾 𝑂) ⇒𝛿 𝑓𝑎𝑙𝑠𝑒
𝑖𝑠𝑧𝑒𝑟𝑜 𝑝𝑟𝑒𝑑𝑘 𝑂 ⇒𝛿 𝑓𝑎𝑙𝑠𝑒
𝑠𝑢𝑐𝑐(𝑝𝑟𝑒𝑑 𝑀) ⇒𝛿 𝑀
𝑝𝑟𝑒𝑑(𝑠𝑢𝑐𝑐 𝑀) ⇒𝛿 𝑀
𝑑𝑜𝑛𝑑𝑒 𝑘 ≥ 1
𝑑𝑜𝑛𝑑𝑒 𝑘 ≥ 1
CONSTANTES Y PRIMITIVAS DE LENGUAJES
DE PROGRAMACIÓN
Elementos sintácticos para un cálculo lambda aplicado
CONSTRUCTOR
CÁLCULO LAMBDA
Variable
X
Constante
C
Aplicación
MN
Abstracción
𝜆𝑥. 𝑀
Entero
𝑆𝑢𝑐𝑐 𝑘 0, 𝑓𝑜𝑟 𝑘 > 0
Entero
𝑃𝑟𝑒𝑑 𝑘 0, 𝑓𝑜𝑟 𝑘 > 0
Condicional
𝐼𝑓 𝑃 𝑀 𝑁
Asignación
𝜆𝑥. 𝑀 N
Función recursiva
(𝜆𝑥. 𝑀)(𝑓𝑖𝑥 (𝜆𝑓. 𝜆𝑥. 𝑁))