Introducción al lambda cálculo

Documentos relacionados
En 1936 se introdujeron dos modelos computacionales: Alan Turing inventó la máquina de Turing y la noción de función computable en sus

Introducción al Cálculo Lambda

Lambda-Cálculo. Mauro Jaskelioff 6/9/2011

Lenguajes funcionales: λ-cálculo

Contenido del curso Fundamentos de Lenguajes de Programación

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Introducción al Lambda Cálculo (C)

LÓGICA FORMAL TEORIAS DE PRIMER ORDEN. Sintaxis y semántica

Lógica de Predicados, Sintaxis

Hacia las Gramáticas Propias

PARADIGMAS DE PROGRAMACIÓN CALCULO LAMBDA CALCULO LAMBDA

Capítulo 2: Asistentes de Pruebas para Programadores 3. Cálculo de Construcciones

El λ cálculo (sin tipos y con tipos)

LÓGICA FORMAL TEORIAS DE PRIMER ORDEN. Axiomática

Completitud en Lógica de Predicados

Definiciones de computabilidad OTROS MODELOS COMPUTACIONALES. Computabilidad-Turing. Tesis de Church-Turing

Los Teoremas de Incompletitud de Gödel: Parte II: Coherencia y completitud

Cálculo Lambda - primera parte. Paradigmas de Lenguajes de Programación. Primer cuatrimestre

Clase 02/10/2013 Tomado y editado de los apuntes de Pedro Sánchez Terraf

COMPACIDAD Y COMPLETITUD: DOS TEOREMAS CLÁSICOS DE LA TEORÍA DE MODELOS

Temas. Objetivo. Símbolo, alfabeto. Hileras y operaciones con hileras. Operaciones con lenguajes

Lambda cálculo no tipado

Tema 4. Funciones de orden superior

Lógica de proposiciones

Resumen de aritmética de Peano

Introducción a la complejidad computacional

Tema 4. Funciones de orden superior

Análisis lógico Cálculo de proposiciones

Lógica de predicados. Sintaxis y Propiedades Lógica 2018

Sistemas de ecuaciones lineales

Un álgebra de Heyting satisface distributividad, es lo que demostramos un poco más arriba (la prueba es muy similar). Recíprocamente, si se define

Sintaxis y Propiedades. Estructuras

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

TEMA 2. ESPACIOS VECTORIALES

Máquinas de estado finito y expresiones regulares

Transformaciones lineales y matrices

Definiciones generales. Alfabeto de la lógica proposicional. Conectivos. Conectivos

Fundamentos de Ciencias de la Computación

Parte II. Cálculo Diferencial para Funciones de Varias Variables Reales

Tecnología de la Programación

Inducción, Recursión y Alcance. Inducción, Recursión y alcance. Inducción, Recursión y Alcance. Inducción, Recursión y Alcance

Tema 9: Resolución en lógica de primer orden

CAPÍTULO 4: DERIVADAS DE ORDEN SUPERIOR. En este capítulo D denota un subconjunto abierto de R n.

Lógica de proposiciones (5)

Sintaxis LÓGICA COMPUTACIONAL CÁLCULO DE PROPOSICIONES. Funciones boolenas. Semántica

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Espacios vectoriales

ÁLGEBRA LINEAL I NOTAS DE CLASE UNIDAD 2

Lógica Proposicional

CÁLCULO LAMBDA. Motivación: notación para no necesitar nombrar funciones. Por ejemplo, x + y puede ser: f(x) = x + y g(y) = x + y h(x, y) = x + y

Claúsulas de Horn. Resolución SLD

Alejandro Díaz-Caro. 16 de diciembre de 2007

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 4: Expresiones Regulares. Luis Peña

58 7. ESPACIOS COCIENTE

Tema I 1. EL CUERPO DE LOS REALES, EL CUERPO DE LOS COMPLEJOS

Introducción a la programación. Cecilia Manzino

Teorema de incompletitud de Gödel

Bases Formales de la Computación

Transformaciones lineales

Los modelos abstractos de cómputo. Tema 1: Introducción. El modelo transductor. El modelo reconocedor. ordenador. datos. Modelo Abstracto de Cómputo

Teorías. Una teoría acerca de una base de conocimiento Σ contendrá no sólo a Σ sino que a todo lo que se puede deducir de Σ.

Máquinas de Turing Definición y descripción

Conjuntos. Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por. a R. se entiende que a pertenece a R.

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones

Estructuras Discretas. Conjuntos. Conjuntos & Funciones. Especificación de Conjuntos.

Sistemas de Reescritura Cristóbal Domínguez González Jorge García de la Nava Ruiz Michel Piliougine Rocha Miguel Ángel Rico Blanco

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

1 El espacio afín ampliado.

1. Problemas de inducción.

Escuela Superior Politécnica del Litoral

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad

Matrices Inversas. Rango Matrices Elementales

Capítulo 2 El Método de Resolución

La lógica de segundo orden: Sintaxis

Lógica Proposicional. Del conjunto de hipótesis Γ se deduce α?

Lógica Proposicional IIC1253. IIC1253 Lógica Proposicional 1/64

14/02/2017. TEMA 3: EL CUERPO DE LOS NUMEROS REALES Esp. Prof. Liliana N. Caputo

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

Cálculo Lambda - primera parte. Paradigmas de Lenguajes de Programación. Segundo cuatrimestre

Álgebra Lineal. Departamento de Matemáticas Universidad de Los Andes. Primer Semestre de 2007

Ciencias de la Computación I

Lenguajes de Programación Programación funcional

Circuitos Electrónicos Digitales

Tema 1: Nociones básicas del Álgebra Lineal.

Tema 4: (Tecnologías Informáticas) Curso Dpto. Ciencias de la Computación Inteligencia Artificial Universidad de Sevilla

Operaciones extendidas de conjuntos

El lenguaje P. Lógica y Computabilidad ( ) símbolos p. Verano convenciones. Lógica Proposicional - clase 1

En varias ramas de las matemáticas y de las ciencias sociales, es común

LENGUAJES Y COMPILADORES

Lenguajes y Gramáticas

LOGICA Y ALGORITMOS. Módulos

TEMA 8. GEOMETRÍA ANALÍTICA.

Práctica 1 Lambda Cálculo Tipado

1. Corrección de un programa TEMA 2: ESPECIFICACIÓN Y CORRECCIÓN DE ALGORITMOS. 1. Corrección de un programa. 1. Corrección de un programa

Expresiones Regulares

Introducción. El uso de los símbolos en matemáticas.

1. Conjuntos y funciones

Transcripción:

Introducción al lambda cálculo Del libro: An Introduction to Lambda Calculi for Computer Scientists, Chris Hankin Diciembre 2007

Algoritmos Qué es un algoritmo? distintos modelos de cómputo:

Algoritmos Qué es un algoritmo? distintos modelos de cómputo: máquinas de Turing (formalismo de estilo operacional, máquinas con estado... )

Algoritmos Qué es un algoritmo? distintos modelos de cómputo: máquinas de Turing (formalismo de estilo operacional, máquinas con estado... ) teoría de funciones recursivas (formalismo abstracto)

Algoritmos Qué es un algoritmo? distintos modelos de cómputo: máquinas de Turing (formalismo de estilo operacional, máquinas con estado... ) teoría de funciones recursivas (formalismo abstracto) lambda (λ) cálculo. Introducido por Church en los años 30, orientado a programas en vez de a la máquina. También es un formalismo abstracto. Inspiró los lenguajes funcionales (Lisp, ML,... Haskell)

Abstracción funcional Los métodos en Java, las funciones de C, C++ o Pascal, las funciones de Haskell... todos ellos comparten la misma idea de abstracción funcional: bloques de código parametrizados por uno o más argumentos.

Abstracción funcional Los métodos en Java, las funciones de C, C++ o Pascal, las funciones de Haskell... todos ellos comparten la misma idea de abstracción funcional: bloques de código parametrizados por uno o más argumentos.... después llegaron los módulos, las clases y los objetos, los tipos, etc. Pero, qué es una función?

Qué es una función? En teoría de conjuntos puede representarse/identificarse con su grafo. Por ejemplo, la suma de naturales sería: {((0, 0), 0), ((0, 1), 1), ((0, 2), 2),..., ((1, 0), 1), ((1, 1), 2),...} ({((m, n), p) m, n IN, m + n = p}) Este conjunto representa los pares input/output de la función suma. Dos funciones son iguales si tienen (son) el mismo grafo igualdad extensional.

Qué es una función? En teoría de conjuntos puede representarse/identificarse con su grafo. Por ejemplo, la suma de naturales sería: {((0, 0), 0), ((0, 1), 1), ((0, 2), 2),..., ((1, 0), 1), ((1, 1), 2),...} ({((m, n), p) m, n IN, m + n = p}) Este conjunto representa los pares input/output de la función suma. Dos funciones son iguales si tienen (son) el mismo grafo igualdad extensional. Pero esto no es muy útil desde el punto de vista computacional... nos dice poco sobre cómo computa esa función sus valores...

Qué es una función? En teoría de conjuntos puede representarse/identificarse con su grafo. Por ejemplo, la suma de naturales sería: {((0, 0), 0), ((0, 1), 1), ((0, 2), 2),..., ((1, 0), 1), ((1, 1), 2),...} ({((m, n), p) m, n IN, m + n = p}) Este conjunto representa los pares input/output de la función suma. Dos funciones son iguales si tienen (son) el mismo grafo igualdad extensional. Pero esto no es muy útil desde el punto de vista computacional... nos dice poco sobre cómo computa esa función sus valores... todas las funciones/algoritmos de ordenación de vectores tienen el mismo grafo (son iguales extensionalmente).

Qué es una función? (cont) Nos gustaría representar una función mediante una regla de correspondencia (algoritmo) que describa cómo se calcula el resultado, en vez de tener que manejar el grafo asociado formalismo en el que definir funciones

Qué es una función? (cont) Nos gustaría representar una función mediante una regla de correspondencia (algoritmo) que describa cómo se calcula el resultado, en vez de tener que manejar el grafo asociado formalismo en el que definir funciones Dos funciones serán iguales si están definidas mediante reglas iguales (o equivalentes) igualdad intensional. Supongamos dos funciones con grafos: G 1 = {(1, 2), (2, 4), (3, 6),...} G 2 = {(1, 2), (2, 4), (3, 6),...} Son iguales?

Qué es una función? (cont) Nos gustaría representar una función mediante una regla de correspondencia (algoritmo) que describa cómo se calcula el resultado, en vez de tener que manejar el grafo asociado formalismo en el que definir funciones Dos funciones serán iguales si están definidas mediante reglas iguales (o equivalentes) igualdad intensional. Supongamos dos funciones con grafos: G 1 = {(1, 2), (2, 4), (3, 6),...} G 2 = {(1, 2), (2, 4), (3, 6),...} Son iguales? Supongamos dos funciones, ambas de un argumento (natural). La primera devuelve el resultado de sumar el argumento a sí mismo; la segunda devuelve el resultado de multiplicar su argumento por 2. Son iguales?

λ-cálculo: funciones como reglas de cálculo Dos aspectos a estudiar: Sintaxis o notación o gramática para los λ-términos Teorías: axiomas y reglas para relacionar términos (y también para evaluar/computar con λ-términos)

λ-cálculo: funciones como reglas de cálculo Dos aspectos a estudiar: Sintaxis o notación o gramática para los λ-términos Teorías: axiomas y reglas para relacionar términos (y también para evaluar/computar con λ-términos) Modelos: interpretación semántica (apoyada en la matemática). Nota: nos referimos al λ-cálculo puro. Hay otros λ-cálculos (con tipos, indeterminista,... ).

Sintaxis de los λ-términos Signatura (alfabeto): variables x, y, z,... (cto. infinito) símbolo λ paréntesis ( y ) λ-términos: <term> ::= <var> (elto de V) (λ <var><term>) (abs) (<term> <term>) (app) Λ: cto. de los λ-términos construidos de este modo.

Sintaxis de los λ-términos Signatura (alfabeto): variables x, y, z,... (cto. infinito) símbolo λ paréntesis ( y ) λ-términos: <term> ::= <var> (elto de V) (λ <var><term>) (abs) (<term> <term>) (app) Λ: cto. de los λ-términos construidos de este modo. Por ejemplo, son λ-términos: x (x z) ((x z) (y z)) (λx(λy(λz((x z) (y z)))))

Sintaxis de los λ-términos Signatura (alfabeto): variables x, y, z,... (cto. infinito) símbolo λ paréntesis ( y ) λ-términos: <term> ::= <var> (elto de V) (λ <var><term>) (abs) (<term> <term>) (app) Λ: cto. de los λ-términos construidos de este modo. Por ejemplo, son λ-términos: Intuición: x (x z) ((x z) (y z)) (λx(λy(λz((x z) (y z))))) (abs) definición de función, donde la variable (variable ligada por la abstracción) corresponde al parámetro formal (app) aplicación de funciones.

Observaciones Asumimos que la aplicación asocia por la izda: M N 1... N n (... (M N 1 )... N n )

Observaciones Asumimos que la aplicación asocia por la izda: M N 1... N n (... (M N 1 )... N n ) aparentemente las λ-abstracciones solo permiten definir funciones unarias puesto que solo operan con un argumento, pero no es así. Para definir la suma de naturales haríamos λx (λy (x + y))... supuesto que está definido el símbolo +!!

Observaciones Asumimos que la aplicación asocia por la izda: M N 1... N n (... (M N 1 )... N n ) aparentemente las λ-abstracciones solo permiten definir funciones unarias puesto que solo operan con un argumento, pero no es así. Para definir la suma de naturales haríamos λx (λy (x + y))... supuesto que está definido el símbolo +!! Variantes sintácticas: algunos textos escriben la λ-abstracción λx (λ y (xy)) como (λ x.(λy.(xy))) (pueden omitirse los paréntesis externos) en general se permite la agrupación de variables λx y.(xy) se admite también la notación λx.m como abreviatura de λx 1 x 2... x n.m, que a su vez es λx 1.(λx 2. λx n.m) en Haskell se escriben como \ x y -> x y

Variables libres y ligadas el símbolo λ liga la variable que tiene a continuación de manera análoga a como lo hacen los cuantificarores, en lógica de primer orden. En la expresión λx M, la variable x está ligada por el símbolo λ. Podemos definir variables libres y ligadas de un λ-término de modo análogo a como se hace con las fórmulas de la lógica. Se definen inductivamente (sobre la estructura de los λ-términos): Variables ligadas BV : Λ P(V) BV x = BV (λx M) = {x} (BV M) BV (MN) = (BV M) (BV N) Variables libres FV : Λ P(V) FV x = {x} FV (λx.m) = (FV M) {x} FV (MN) = (FV M) (FV N)

Variables libres y ligadas (cont) cuando (FV M) =, se dice que M es cerrado o también que es un combinador. El conjunto de combinadores se denota como Λ 0.

Variables libres y ligadas (cont) cuando (FV M) =, se dice que M es cerrado o también que es un combinador. El conjunto de combinadores se denota como Λ 0. es cierto que var M = (FV M) (BV M)? (var M: cto. de vars. que aparecen en M)

Variables libres y ligadas (cont) cuando (FV M) =, se dice que M es cerrado o también que es un combinador. El conjunto de combinadores se denota como Λ 0. es cierto que var M = (FV M) (BV M)? (var M: cto. de vars. que aparecen en M) es cierto que para cualquier M se tiene (FV M) (BV M) =?

Variables libres y ligadas (cont) cuando (FV M) =, se dice que M es cerrado o también que es un combinador. El conjunto de combinadores se denota como Λ 0. es cierto que var M = (FV M) (BV M)? (var M: cto. de vars. que aparecen en M) es cierto que para cualquier M se tiene (FV M) (BV M) =? es cierto que (FV M) = var M (BV M)?

Variables libres y ligadas (cont) cuando (FV M) =, se dice que M es cerrado o también que es un combinador. El conjunto de combinadores se denota como Λ 0. es cierto que var M = (FV M) (BV M)? (var M: cto. de vars. que aparecen en M) es cierto que para cualquier M se tiene (FV M) (BV M) =? es cierto que (FV M) = var M (BV M)? Nótese que estas definiciones se hacen sobre la estructura de los términos. Muchas de las demostraciones acerca de términos se hacen por inducción estructural. Por ejemplo, probar que todo λ-término tiene el mismo número de paréntesis abiertos que cerrados (está balanceado).

Subtérminos Definimos el conjunto de sub(λ)términos de una λ-expresión, Sub : Λ P(Λ) como: Sub x = {x} Sub (λx M) = (Sub M) {(λx M)} Sub (M N) = (Sub M) (Sub N) {(M N)}

Contextos Un contexto es un término con huecos representados como [] (que pueden rellenarse con términos para obtener otro término). Formalmente, la clase C[] de los contextos se define como la mínima que cumple: 1. x C[ ] 2. [ ] C[ ] 3. Si C 1 [ ], C 2 [ ] C[ ] entonces (C 1 [ ] C 2 [ ]), (λx C 1 [ ]) C[ ]

Contextos Un contexto es un término con huecos representados como [] (que pueden rellenarse con términos para obtener otro término). Formalmente, la clase C[] de los contextos se define como la mínima que cumple: 1. x C[ ] 2. [ ] C[ ] 3. Si C 1 [ ], C 2 [ ] C[ ] entonces (C 1 [ ] C 2 [ ]), (λx C 1 [ ]) C[ ] O también C[ ] ::= x [ ] (C 1 [ ] C 2 [ ]) (λ.c 1 [ ]), con C 1 [ ], C 2 [ ] C[ ].

Contextos Un contexto es un término con huecos representados como [] (que pueden rellenarse con términos para obtener otro término). Formalmente, la clase C[] de los contextos se define como la mínima que cumple: 1. x C[ ] 2. [ ] C[ ] 3. Si C 1 [ ], C 2 [ ] C[ ] entonces (C 1 [ ] C 2 [ ]), (λx C 1 [ ]) C[ ] O también C[ ] ::= x [ ] (C 1 [ ] C 2 [ ]) (λ.c 1 [ ]), con C 1 [ ], C 2 [ ] C[ ]. Por ejempo (λx.[ ] x) M es un contexto. En general si tomamos un término y reemplazamos cualquiera de sus subtérminos por [ ] tendremos un contexto. Y si tomamos un contexto y reemplazamos cualquiera de sus subtérminos por [ ]?...

Contextos Un contexto es un término con huecos representados como [] (que pueden rellenarse con términos para obtener otro término). Formalmente, la clase C[] de los contextos se define como la mínima que cumple: 1. x C[ ] 2. [ ] C[ ] 3. Si C 1 [ ], C 2 [ ] C[ ] entonces (C 1 [ ] C 2 [ ]), (λx C 1 [ ]) C[ ] O también C[ ] ::= x [ ] (C 1 [ ] C 2 [ ]) (λ.c 1 [ ]), con C 1 [ ], C 2 [ ] C[ ]. Por ejempo (λx.[ ] x) M es un contexto. En general si tomamos un término y reemplazamos cualquiera de sus subtérminos por [ ] tendremos un contexto. Y si tomamos un contexto y reemplazamos cualquiera de sus subtérminos por [ ]?...En general se pueden definir contextos de cualquier aridad (número de huecos), pero solo necesitaremos contextos de aridad 1.

Contextos (cont) Un contexto se puede entender como una función que toma un término y lo coloca en el hueco [ ]. En este sentido los contextos se aplican. Si C [ ] = (λx.[ ] x) M entonces C [λy.y] = (λx.(λy.y) x) M Los conjuntos de variables libres y ligadas pueden también definirse para contextos. Nótese que las variables libres de un término pueden ligarse al ponerlas en contexto (al utilizar ese término como argumento de un contexto). Por ejemplo, si M = x (FV (M) = {x}) y C [ ] = λx.[ ], tenemos C [x] = λx.x (la x queda ligada).

La teoría λ Es una teoría de igualdad para λ-términos ( convertibilidad entre λ-términos), regida por el λ-cálculo siguiente: M = M (REF ) M = N N = M (SIM) M = N N = L M = L (TRA)

La teoría λ Es una teoría de igualdad para λ-términos ( convertibilidad entre λ-términos), regida por el λ-cálculo siguiente: M = M (REF ) M = N N = M (SIM) M = N M Z = N Z (AP 1) M = N Z M = Z N (AP 2) M = N N = L M = L (TRA)

La teoría λ Es una teoría de igualdad para λ-términos ( convertibilidad entre λ-términos), regida por el λ-cálculo siguiente: M = M (REF ) M = N N = M (SIM) M = N N = L (TRA) M = L M = N M Z = N Z (AP 1) M = N Z M = Z N (AP 2) M = N λx.m = λx.n (ξ)

La teoría λ Es una teoría de igualdad para λ-términos ( convertibilidad entre λ-términos), regida por el λ-cálculo siguiente: M = M (REF ) M = N N = M (SIM) M = N N = L (TRA) M = L M = N M Z = N Z (AP 1) M = N Z M = Z N (AP 2) M = N λx.m = λx.n (ξ) (λx.m) N = M[x := N] (β)

La teoría λ (cont) Este cálculo define la relación = (REF ), (SIM) y (TRA) relación de equivalencia (AP 1 ) y (AP 2 ) intuitivamente indican que los términos iguales son iguales en cualquier contexto. (ξ) es una regla de extensionalidad débil, que puede leerse como: si dos términos son iguales, entonces tienen el mismo comportamiento como cuerpo de funciones. (β) corresponde a la aplicación funcional (β-reducción). La expresión [x := N] es una sustitución: reemplazar las apariciones libres de x por N (en el término al que se aplique, M en este caso).

La teoría λ (cont) Este cálculo define la relación = (REF ), (SIM) y (TRA) relación de equivalencia (AP 1 ) y (AP 2 ) intuitivamente indican que los términos iguales son iguales en cualquier contexto. (ξ) es una regla de extensionalidad débil, que puede leerse como: si dos términos son iguales, entonces tienen el mismo comportamiento como cuerpo de funciones. (β) corresponde a la aplicación funcional (β-reducción). La expresión [x := N] es una sustitución: reemplazar las apariciones libres de x por N (en el término al que se aplique, M en este caso). La presentación clásica del λ-calculo incluye la regla de α-conversión: λx.m = λy.m[x := y] (α) y FV M

La teoría λ (cont) Escribimos λ M = N cuando M = N es un teorema del λ-cálculo y se lee como M y N son convertibles.

La teoría λ (cont) Escribimos λ M = N cuando M = N es un teorema del λ-cálculo y se lee como M y N son convertibles. Nótese que el símbolo = ahora es una relación definida por las reglas de este cálculo. Para la igualdad/identidad sintáctica (símbolo a símbolo) utilizaremos el símbolo. M N N = N (por (REF )) pero no es cierto que M = N M N. Por ejemplo, (λx.x) y = y (por (β)), pero (λx.x) y y (no son idénticos).

Teorema del punto fijo Teorema F Λ, X Λ tal que F X = X diremos que X es un punto fijo para F

Teorema del punto fijo Teorema F Λ, X Λ tal que F X = X diremos que X es un punto fijo para F demo: Sea W λx.f (x x) y X W W. Veamos que X es el punto fijo buscado: X WW (λx.f (x x)) W β = F (W W ) F X

Teorema del punto fijo Teorema F Λ, X Λ tal que F X = X diremos que X es un punto fijo para F demo: Sea W λx.f (x x) y X W W. Veamos que X es el punto fijo buscado: X WW (λx.f (x x)) W β = F (W W ) F X Esta demostración es constructiva: permite hacer una construcción efectiva del punto fijo en cuestión.

Punto Fijo Si F λx.x es evidente que cualquier término es un punto fijo para ella...

Punto Fijo Si F λx.x es evidente que cualquier término es un punto fijo para ella... qué punto fijo nos da el teorema?

Punto Fijo Si F λx.x es evidente que cualquier término es un punto fijo para ella... qué punto fijo nos da el teorema? Si F λx y.x y, veamos qué punto fijo nos da el teorema: definimos W λx.f (x x) λx.(λx y.x y) (x x) β = λx y.(x x)y el punto fijo que buscamos será X W W (λx y.(x x)y) (λx y.(x x)y) veamos que efectivamente es un punto fijo: X (λxy.(xx)y)(λxy.(xx)y) β = λy. ( (λxy.(xx)y)(λxy.(xx)y) ) y F X (λxy.xy) (λxy.(xx)y) (λxy.(xx)y) }{{}}{{} F X λy.(λxy.(xx)y) (λxy.(xx)y)y β =

Sustituciones La sustitución que se utiliza en la β-reducción puede plantear problemas de captura de variables, cuando sustituimos una variable por un término que contiene una variable libre en un ámbito en el que esa variable está ligada. tendríamos (λxy.yx)y β? = λy.yx[x := y] λy.yy... pero esto no es correcto!! (se confunde la y ligada con la y externa, libre)

Sustituciones La sustitución que se utiliza en la β-reducción puede plantear problemas de captura de variables, cuando sustituimos una variable por un término que contiene una variable libre en un ámbito en el que esa variable está ligada. tendríamos (λxy.yx)y β? = λy.yx[x := y] λy.yy... pero esto no es correcto!! (se confunde la y ligada con la y externa, libre) intuición: las variables ligadas en una λ-abstracción son mudas, i.e., la λ-abstracción λxz.zx debería ser equivalente (en algún sentido) a la anterior. Pero ahora tenemos (λxz.zx)y β = λz.zx[x := y] λz.zy... que no puede ser lo mismo que antes!! Tres aproximaciones para solucionar este problema...

Sustituciones. Aproximación clásica (Church) Definimos las sutituciones como: 1. x[x := N] N 2. y[x := N] y, si y es distinta de x 3. (λx.m)[x := N] λx.m 4. (λy.m)[x := N] λy.m[x := N] si x FV M o y FV N 5. (λy.m)[x := N] λz.(m[y := z])[x := N] si x FV M y y FV N, siendo z una nueva variable (fresca) 6. (M 1 M 2 )[x := N] (M 1 [x := N] M 2 [x := N]) (5) evita la captura de variables, haciendo previamente un renombramiento de la variable ligada en la λ-abstracción.

Sustituciones. Aproximación clásica (cont) Así tenemos (λxy.yx)y = β λy.(yx)[x := y] 5 λz.((yx)[y := z])[x := y] 6 λz.(y[y := z]x[y := z])[x := y] 1,2 λz.(zx)[x := y] 6 λz.(z[x := y]x[x := y]) 6,6 λz.(zy) Recordemos que la presentación clásica del λ-calculo incluía la α-conversión: λx.m = λy.m[x := y] (α) y FV M que es lo que se hace (o justifica) el renombramiento que se hace en (5)

Sustituciones. Clases de equivalencia para los λ-términos Cambio de variables ligadas: dado M C[λx.N] diremos que el término M C[λy.(N[x/y])] siendo y var N se obtiene a partir de M mediante cambio de variables ligadas. La expresión N[x/y] denota el resultado de reemplazar todas las apariciones de x por y en N (nótese que no hay problemas de caputura porque y var N. α-congruencia: M es α-congruente con N y se escribe M α N si N se obtiene mediante una serie de cambios de variables ligadas a partir de M. Tenemos λx.xy α λz.zy, pero λx.xy α λy.yy

Sustituciones. Clases de equivalencia (cont) Idea: la α-congruencia es una relación de equivalencia. Para aplicar una sustitución M[x := N] se toman representantes adecuados para N y M de modo que x BV M y (BV M) (FV N) =. En general se adopta una convención sobre las variables: si M 1,..., M n aparecen en un determinado contexto, entonces todas las variables ligadas de cada uno de ellos deben escogerse de modo que sean diferentes de todas las variables libres de los demás. De este modo, para aplicar la sustitución M[x := N] se garantiza previamente la convención de variables (para N y M) y el reemplazamiento de todas las apariciones de x por N en M. Nota: en la demo del th de pto fijo se ha utilizado la convención sobre vars. de modo impĺıcito.

Sustituciones. Clases de equivalencia (cont) Ejemplo: var con (λxyz.xzy)(λxz.x) = (λxyz.xzy)(λuv.u) β = λyz.(λuv.u)zy β = λyz.(λv.z)y β = λyz.z En lo que sigue utilizaremos esta aproximación porque es la más cómoda para trabajar manualmente... pero hay otra aproximación interesante (sobre todo para implementar máquinas de reducción).

Sustitucions. Notación de de Bruijn Elimina el problema de la captura de variables, prescindiendo de las variables en las λ-abstracciones: referencia los parámetros formales mediante números (naturales).

Sustitucions. Notación de de Bruijn Elimina el problema de la captura de variables, prescindiendo de las variables en las λ-abstracciones: referencia los parámetros formales mediante números (naturales). Por ejemplo, λxy.x se escribe como λ.λ.2 (el 2 se refiere al parámetro formal introducido por la λ más externa, i.e., el natural indica la distancia (número de λ s intermedias a la que se intrudce ese parámetro.

Sustitucions. Notación de de Bruijn Elimina el problema de la captura de variables, prescindiendo de las variables en las λ-abstracciones: referencia los parámetros formales mediante números (naturales). Por ejemplo, λxy.x se escribe como λ.λ.2 (el 2 se refiere al parámetro formal introducido por la λ más externa, i.e., el natural indica la distancia (número de λ s intermedias a la que se intrudce ese parámetro. Cualquier λ-término cerrado puede traducirse a esta notación: DB x (x 1,..., x n ) = i, si i es el mínimo tal que x x i DB (λx.m) (x 1,..., x n ) = λ(db M (x, x 1,..., x n )) DB (M N) (x 1,..., x n ) = (DB M (x 1,..., x n )) (DB N (x 1,..., x n ))

Ejemplo: Notación de de Bruijn (cont) se representa como λx.x(λy.xy(λz.xyz)) DB (λx.x(λy.xy(λz.xyz))) () λ.(db (x(λy.xy(λz.xyz))) (x)) λ.(db x (x)) (DB(λy.xy(λz.xyz)) (x)) λ.1 (λ.(db(xy(λz.xyz)) (y, x))) λ.1 (λ.(db x (y, x)) (DB y (y, x)) (DB (λz.xyz) (y, x))) λ.1 (λ.2 1 (λ.db (xyz) (z, y, x))) λ.1 (λ.2 1 (λ.3 2 1)) Nótese que se ha cambiado la definición de λ-términos. Es el mínimo conjunto que cumple: 1. cualquier n > 0 es un λ-término 2. Si M y N son λ-términos, entonces M N también lo es. 3. Si M es un λ-término, entonces (λm) también lo es.

Notación de de Bruijn (cont) La regla β se reemplaza por: (λp)q = P[1 := Q] donde: n si n < m n[m := N] n 1 si n > m rename n,1 (N) si n m (M 1 M 2 )[m := N] (M 1 [m := N] M 2 [m := N]) (λm)[m := N] λ(m[m + 1 := N]) (incremento de contador) rename se define como: { j si j < i rename m,i (j) j + m 1 si j i rename m,i (N 1 N 2 ) rename m,i (N 1 ) rename m,i (N 2 ) rename m,i (λn) λ(rename m,i+1 (N))

Notación de de Bruijn (cont) Ejemplo. En notación convencional: λx.(λyz.y)x λx.(λy.λz.y)x = β λx.λz.x En notación de de Bruijn : λ.(λ.λ.2)1 β = λ.(λ.2)[1 := 1] λ.λ.2[2 := 1] λ.λ.rename 2,1 (1) λ.λ.2 Esta notación es más incómoda para trabajar... pero es más adecuada para implementar la β-reducción. No se necesita α-conversión. En lo que sigue adoptamos la notación tradicional y la convención de variables para aplicar sustituciones

Lema de sustitución Lema Si x e y son variables distintas y x FV L, entonces M[x := N][y := L] M[y := L][x := N[y := L]] Demo: por inducción sobre la estructura de M Lema Otras propiedades de las sustituciones: 1. M = M M[x := N] = M [x := N] 2. N = N M[x := N] = M[x := N ] 3. M = M, N = N M[x := N] = M [x := N ] Demo:... (ver libro) Ejercicio la primera propiedad puede también demostrarse por inducción sobre la longitud de la demostración: número de pasos de derivación; si es un axioma la longitud es 0, si no, es 1 más la longitud de las derivaciones correspondientes a las premisas.

Transparencia referencial Lema Sea C[ ] un contexto y N, N Λ. Tenemos: N = N C[N] = C[N ] Demo: por induccion sobre la estructura de C[ ] (ver libro)

Extensionalidad La relación = definida por el λ-cálculo proporciona igualdad intensional: dos términos son iguales si codifican el mismo algoritmo (en algún sentido).... pero: consideremos M λx.yx y N y. Son iguales? Si aplicamos ambos a cualquier L Λ: M L (λx.yx)l β = yl NL yl

Extensionalidad La relación = definida por el λ-cálculo proporciona igualdad intensional: dos términos son iguales si codifican el mismo algoritmo (en algún sentido).... pero: consideremos M λx.yx y N y. Son iguales? Si aplicamos ambos a cualquier L Λ: M L (λx.yx)l β = yl NL yl son iguales!... pero esto no quiere decir que M = N: esta igualdad no es deducible en el λ-cálculo (no es un teorema de λ). Esta es la igualdad extensional.

Extensionalidad (cont) Si queremos tener este tipo de igualdad en nuestra teoría tenemos que añadir una nueva regla o axioma. Dos posibles formas: M x = N x (ext) M = N con x (FV M) (FV N) λx.mx = M (η), si x FV M Lema λ + (ext) y λ + (η) son equivalentes. (demo: ver libro)

Extensionalidad (cont) Si queremos tener este tipo de igualdad en nuestra teoría tenemos que añadir una nueva regla o axioma. Dos posibles formas: M x = N x (ext) M = N con x (FV M) (FV N) λx.mx = M (η), si x FV M Lema λ + (ext) y λ + (η) son equivalentes. (demo: ver libro) Es evidente que este cálculo extendido es más potente que el original (prueba todo lo que prueba el original y más cosas)... entonces por qué no se introduce esta extensión desde el principio?

Extensionalidad (cont) Si queremos tener este tipo de igualdad en nuestra teoría tenemos que añadir una nueva regla o axioma. Dos posibles formas: M x = N x (ext) M = N con x (FV M) (FV N) λx.mx = M (η), si x FV M Lema λ + (ext) y λ + (η) son equivalentes. (demo: ver libro) Es evidente que este cálculo extendido es más potente que el original (prueba todo lo que prueba el original y más cosas)... entonces por qué no se introduce esta extensión desde el principio? la regla η normalmente no se implementa y los términos λx.mx y M son distintos en lenguajes como Haskell o ML.

Consistencia Una ecuación es una fórmula de la forma M = N. Es cerrada si M, N Λ 0. Una teoría ecuacional es consistente cuando NO todas las fórmulas cerradas son teoremas suyos. Lema Tanto λ como λ + (η) son teorías consistentes.

Consistencia Una ecuación es una fórmula de la forma M = N. Es cerrada si M, N Λ 0. Una teoría ecuacional es consistente cuando NO todas las fórmulas cerradas son teoremas suyos. Lema Tanto λ como λ + (η) son teorías consistentes. La consistencia es frágil: puede destruirse añadiendo una sola ecuación. Por ejemplo, si consideramos S λxyz.xz(yz) y K λxy.x y añadimos la ecuación S = K a cualquiera de las teorías λ o λ + (η), éstas se convierten en inconsistentes. demo: ver libro

Incompatibilidad Dados M, N Λ diremos que son incompatibles, escrito M#N si λ + (M = N) es inconsistente. Ejemplo: xx#xy Supongamos xx = xy ξ,2 λxy.xx = λxy.xy (AP 1 ),2 (λxy.xx) M N = (λxy.xy) M N M, N Λ (β),2 M M = M N M, N Λ sea M I λx.x I = N N Λ Cualquier término es igual a la identidad!... entonces podemos probar cualquier igualdad! M = N, puesto que ambos son iguales a la identidad y por transitividad, lo tenemos... inconsistencia!! Esto quiere decir que xx#xy

Incompatibilidad (cont) La técnica utilizada en el ejemplo anterior es útil en general (ojo: no es un algoritmo!): 1. aplicar n veces (ξ) a ambos miembros para obtener una ecuación cerrada 2. aplicar ambos lados de la ecuación a los mismos términos arbitrarios (M 1, M 2,..., M n ) 3. aplicar β-conversiones 4. instanciar los téminos arbitrarios a constantes específicas para intentar derivar una ecuación de la forma término arbitrario = constante Ejercicio: demostrar que la aplicación no es asociativa, i.e., x(yz)#(xy)z

Formas normales Def (formas normales): M Λ es una β-forma normal (β-nf, o simplemente nf) si no tiene subtérminos de la forma (λx.r)s, i.e., no se le puede aplicar β. M Λ tiene una β-forma normal si existe N Λ tal que N = M y N es una forma normal. Por ejemplo, λx.x es una β-nf, (λxy.x)(λx.x) tiene λyx.x como β-nf, (λx.xx)(λx.xx) no tiene β-nf. Por analogía, una βη-forma normal será una β-forma normal que no contiene ningun subtérmino de la forma (λx.rx) con x FV R

Formas normales y completitud Teorema: 1. M tiene una βη-nf M tiene una β-nf 2. Si M y N son β-nf s distintas, entonces M = N no es un teorema del λ-cálculo (análogo para λ + η) 3. Si M y N son βη-nf s distintas, entonces M#N. El uso de βη-nf s es esencial en el ultimo punto: λx.yx e y son β-nf s distintas, pero no son incompatibles (son η-equivalentes). Teorema (completitud): Si M y N tienen λ + η formas normales entonces: λη M = N o λη + (M = N) es inconsistente.