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

Documentos relacionados
Contenido del curso Fundamentos de Lenguajes de Programación

Introducción al Cálculo Lambda

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

Introducción al lambda cálculo

Lenguajes funcionales: λ-cálculo

Lambda cálculo no tipado

PARADIGMAS DE PROGRAMACIÓN CALCULO LAMBDA CALCULO LAMBDA

Facultad de Ciencias de la Computación. Cálculo Lambda Reducción β Transformación:Gelfond-Lifchitz. Dr. Fernando Zacarías Flores

Introducción al Lambda Cálculo (C)

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

Algoritmos y programas. Algoritmos y Estructuras de Datos I

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

Guía 4: Demostraciones en Cálculo Proposicional

Lambda Cálculo Tipado (1/3)

LAMBDA-CÁLCULO NO TIPADO

Tecnología de la Programación

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

Nociones Básicas de Sémantica: Semántica Denotacional

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

Bases Formales de la Computación

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

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

Ciencias de la Computación I

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

Ciencias de la Computación I

Lógica Proposicional

Práctico 6 Lógica de Predicados

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

Guía 4: Demostraciones en Cálculo Proposicional

CIENCIAS FORMALES CIENCIAS FÁCTICAS

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

Análisis lógico Cálculo de proposiciones

Introducción a Haskell. Cecilia Manzino

Lenguajes de Programación Programación funcional

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

ESPECIFICACIÓN DE SÍMBOLOS

Algoritmos en teoría de números

Teoría de Autómatas y Lenguajes Formales.

Tema II: Introducción al Lenguaje Funcional

Introducción a la Lógica

Isabelle como un lenguaje funcional

Práctica 1 Lambda Cálculo Tipado

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

Conjuntos, relaciones de equivalencia y aplicaciones

Álgebra Lineal y Estructuras Matemáticas. J. C. Rosales y P. A. García Sánchez. Departamento de Álgebra, Universidad de Granada

Tema 4. Funciones de orden superior

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

12 OTRO MUNDO ES POSIBLE: AL

Conjuntos, Aplicaciones y Relaciones

Lógica Proposicional IIC2213. IIC2213 Lógica Proposicional 1/42

Introducción TEORÍA DE LA COMPUTACIÓN INTRODUCCIÓN. Lógica

Guía N 1 Introducción a las Matemáticas

Lógica Proposicional IIC2213. IIC2213 Lógica Proposicional 1/42

DETERMINACIÓN DE UN CONJUNTO

Teorema de incompletitud de Gödel

Demostraciones. Demostraciones básicas. José de Jesús Angel Angel

Multiplicación de matrices simétricas

La lógica de segundo orden: Sintaxis

Introducción. Tema 1. Fundamentos de informática. Universidad de Oviedo. Fundamentos de Informática. Departamento de Informática Universidad de Oviedo

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 4: Definición de funciones

Otras formas gramaticales de una disyunción serán: Otras formas gramaticales de la conjunción serán: p así mismo q

Tema 4: Definición de funciones

Introducción TEORÍA DE LA COMPUTACIÓN INTRODUCCIÓN. Lógica

Una manera de describir un conjunto es por extensión y consiste en enumerar sus elementos entre llaves

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Temario

Tema 6: Teoría Semántica

El lenguaje C. 1. Identificadores, constantes y variables

Ciencias de la Computación I

Lógica Proposicional. Significado de una Fórmula Proposicional

Lenguaje de programación S (Davis/Sigal/Weyuker) Lógica y Computabilidad. Ejemplo 1. Ejemplo 2

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Ejemplo 8 Los niños nacidos en un país del continente americano.

Arquitectura de Computadoras Algebra de Boole Basadas en las Notas de Teórico Versión 1.0 del Dpto. de Arquitectura-InCo-FIng

Lógica Proposicional

Introducción a la programación. Cecilia Manzino

Funciones Segunda parte

Análisis semántico: Comprobación de tipos

GRAMÁTICAS LIBRES DE CONTEXTO

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

Tema 5. Series de Potencias

Introducción a la complejidad computacional

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 2: Lógica de Predicados y Métodos de Demostración

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

Lógica Clásica de Predicados

Ejercicios de Lógica Proposicional *

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

Matemáticas Discretas

Álgebra Booleana. Suma Booleana. El término suma es 1 si al menos uno de sus literales son 1. El término suma es 0 solamente si cada literal es 0.

Tema 4. Funciones de orden superior

3.3. TEORÍA BÁSICA DE CONJUNTOS Utilizar tablas de verdad para comprobar la equivalencia lógica p q p q.

Tema 1: Fundamentos.

Clase Práctica 1 - Inducción estructural, conectivos adecuados y consecuencia - Viernes 23 de marzo de 2012

Capítulo 4. Lógica matemática. Continuar

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

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Examen. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003.

Transcripción:

Capítulo 1 Cálculo-λ 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 máquinas. Alonzo Church inventó un sistema formal llamado Cálculo-λ y la noción de función computable en su sistema. Los lenguajes imperativos como Pascal, C, etc., así como el lenguaje ensamblador están basados en la máquina de Turing. Los lenguajes funcionales como ML, Miranda, Haskell etc., están basados en el cálculo-λ. Objetivo: Introducir el cálculo-λ y mostrar como este sistema captura todas las funciones computables. 1.1. Sintaxis: donde: x pertenece a un conjunto de variables. M ::= x λx.m MM λx.m representa la función cuyo argumento es x y cuya especificación es M (se les conoce como abstracciones). M 1 M 2 representa la aplicación de M 1 a M 2 (se les conoce como aplicaciones). 1.2. Términos que corresponde en Java a: λx.x

2 Cálculo-λ public int id(int x){return x;} o en C a: int id(int x){return x;} 1.3. Asociaciones LM N se asocia hacía la izquierda λx.λy.m se asocia hacia la derecha λx.λy.xyz una aplicación tiene precedencia sobre una abstracción. si M,N son las expresiones respectivamente entonces y no M λx.x ((LM)N) (λx.(λy.m)) λx.λy.((xy)z) MN = (λx.x)y λx.(xy) Ejemplos: Decidir si son términos bien formados y asociar. Expresiones λ: λx.λy.xyλz.z λx.λy.λz.xzyz λx.λy.λz.xz(yz) λx.λy.λz.x(zy)z N y Más reglas: Para simplificar la notación los siguientes términos se tomarán como equivalentes: Considerando los ejemplos anteriores: λx.λy.xyλz.z λxy.xyλz.z λx.λy.λz.xzyz λxyz.xzyz λx.λy.λz.xz(yz) λxyz.xz(yz) λx.λy.λz.x(zy)z λxyz.x(zy)z λx 1.(λx 2.(...(λx n.m)...)) λx 1 x 2...x n.m

1.4 Variables 3 1.4. Variables 1.4.1. Conjunto de variables libres El conjunto de variables libres se define de manera inductiva como: FV (x) = {x} FV (λx.m) = FV (M) {x} FV (M 1 M 2 ) = FV (M 1 ) FV (M 2 ) 1.4.2. Conjunto de variables acotadas El conjunto de variables acotadas se define de manera inductiva como: BV (x) = BV (λx.m) = BV (M) {x} BV (M 1 M 2 ) = BV (M 1 ) BV (M 2 ) 1.5. Término cerrado Un término M se llama cerrado si FV (M) =. En caso contrario el término se conoce como abierto. Note que los conjuntos de variables acotadas y libres no son necesariamente disjuntas; por ejemplo x(λxy.x) Considera el término: λxy.xyz Donde x y y son variables acotadas y z es una variable libre. El término λxy.xxy es cerrado. Subtérminos: Subtérminos de un término Un subtérmino de un término-λ es alguna parte del término que esta bien formada de acuerdo a la gramática. El conjunto de subtérminos se puede definir de la siguiente manera Sub :: T PT Sub(x) = {x} Sub(λx.M) = Sub(M) {(λx.m)} Sub(M 1 M 2 ) = Sub(M 1 ) Sub(M 2 ) {M 1 M 2 } Ejemplos: Calcular el conjunto de variables libres, acotadas y subtérminos de las siguientes expresiones λ λx.λy.xyλz.z

4 Cálculo-λ λx.λy.λz.xzyz λx.λy.λz.xz(yz) λx.λy.λz.x(zy)z 1.6. Conversión En esta sección introducimos el cáculo-λ de manera formal. 1.6.1. Definición El conjunto de términos-λ (notación Λ) se construye a partir de un conjunto infinito de variables V = x 1,x 2,x 3,... usando aplicación y abstracción. Ejemplos: Los siguientes son términos-λ x V x Λ M,N Λ (MN) Λ M Λ,x V (λx.m) Λ y (yx) 1.7. Sustitución Asumiendo que M y N son términos-λ y x una variable, la expresión se lee: M[x := N] sustituir las ocurrencias libres de la variable x por N en M. En algunos libros también se representa mediante {N/x}M. Definición inductiva de M[x := N]: 1. x[x := N] N; 2. y[x := N] y siempre que y x; 3. (PQ)[x := N] (P[x := N])(Q[x := N]);

1.8 Cambio de Variable: Axioma α 5 4. (λy.p)[x := N] λy.(p[x := N]), siempre que y x y y FV (N); 5. (λx.p)[x := N] (λx.p). Ejemplos λy.yz[z := λx.wx] λy.yz[z := λx.yx] 1.8. Cambio de Variable: Axioma α Definición Cambio de variables acotadas: M se genera a partir de M por un cambio de las variables acotadas si M λx.n y M λy.(n[x := y]) donde y no ocurre para nada en N. Axioma α M es α-equivalente a N, se escribe como M α N, si N es el resultado de aplicar a M una serie de cambios de variables acotadas. Es decir: λx.m = λy.m[x := y], siempre que y no ocurra en M. Ejemplo: Cuales expresiones son α-equivalentes?: λx.xy? α λz.zy λx.xy? α λy.yy Regla para la sustitución: (λxyz.x(λy.yz)w)? α (λtuv.t(λz.zv))w Si se desea sustituir M[x := N] no importando que términos denotan M y N, verifique que todas las variables acotadas de M sean diferentes de las variables libres de N. Si lo anterior no se cumple, aplique un cambio de variable en N o bien sustituya a M por un término α-equivalente, hasta que se cumpla el criterio anterior. Posteriormente se pueden aplicar las reglas de sustitución. Ejemplos: λy.yz[z := λx.yx] (λxyz.xzy)[x := λxz.x] (λxyz.xzy)(λxz.x) = (λyz.(λxw.x)zy) = (λyz.(λw.z)y) = (λyz.z)

6 Cálculo-λ 1.9. Teoría ecuacional del cálculo-λ (λx.m)n = M[x := N] regla β Relaciones de equivalencia: Reflexiva M = M Simétrica Transitiva: Otras reglas: M = N N = M M = N N = L M = L M = N MZ = NZ M = N ZM = ZN M = N λx.m = λx.n regla ξ 1.10. Semántica operacional La evaluaci de una expresió se compone de pasos de reducción donde cada uno de los pasos se obtiene por reescritura: e e Partimos de un estado inicial (e) y mediante un proceso de reescritura (reducción) se obtiene un estado final. Cada reducción de e, reemplaza cierta subexpresión de acuerdo con ciertas reglas; tales subexpresiones se llaman redex (reducible expression). Se considera terminada la reducción cuando ya no hay más redex.

1.11 reducciones-λ 7 1.11. reducciones-λ Las reglas de reescritura que se utilizan para reescribir un redex son: α-reduccíon β-reduccíon η-reduccíon 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.mx η M El λ-término λx.m x es un η-redex, es decir, se puede reducir mediante una η-reducción. También se dice que M se expande o se extiende a λx.mx. Ejemplos: λxy. + yx η λy. + y η + λx.(λy.y)x η λy.y 1.12. Forma normal Si M = N es demostrable en el cálculo-λ, entonces se denota como λ M = N o sólo como M = N y se dice que M y N son β-reemplazables. M N denota que M y N son el mismo término o que uno se puede obtener a partir del otro a través de renombrar variables acotadas. Ejemplo: (λx.y)z (λx.y)z (λx.x)z (λy.y)z (λx.x)z (λx.y)z Definición: Forma Normal Si M es un término-λ, entonces M está en forma normal si, M no tiene subtérminos de la forma (λx.r)s Si M es un término-λ, entonces M tiene una forma normal si, existe un N tal que N = M y N esta en forma normal. Un λ-término está en forma normal si no contiene ningún redex. Si un λ-término M se reduce a una λ-término N en forma normal, es decir, M N. decimos que N es una forma normal de M. Ejemplo:

8 Cálculo-λ λx.x esta en forma normal. (λxy.x)(λx.x) no esta en forma normal, cuál es su forma normal?. (λx.xx)(λy.yy) no tiene una forma normal! Porqué? Teorema (de Church-Rosser) Para todo λ-término M, si M P y M Q, existe un λ-término E, tal que P E y Q E (propiedad del diamante). Si una secuencia M... termina, entonces lo hace en una forma normal. Es decir, M admite forma normal. 1.13. Combinadores estandar Define los combinadores: I λx.x, K λxy.y, K λxy.x, S λxyz.xz(yz), demostrar si las siguientes ecuaciones son válidas en el cálculo lambda: IM = M, KMN = M, K MN = N, SMNL = ML(NL), En el cálculo-λ se pueden representar expresiones booleanas T K λxy.x F K λxy.y if B then P else Q BPQ. T representa true, verdadero y F representa false, falso. Demuestre que if true then P else Q = P if false then P else Q = Q

1.14 Operaciones aritmeticas 9 Operadores lógicos not λt.tft and λxy.xyf or λxy.xty Imp λxy.xyt Demuestre: Las tablas de valores de verdad de cada conectivo Proponga el termino-λ para bicondicional y verifique su tabla de valores de verdad Ejercicios en clase En el cálculo-λ se pueden representar pares (a,b) = λx.if x then a else b fst λp.p true snd λp.p false. Demuestre que fst(a,b) = a snd(a,b) = b 1.14. Operaciones aritmeticas En el cálculo-λ también se pueden representar numerales (de hecho existe más de una forma aquí se presenta la propuesta de Scott): 0 λxy.x 1 λxy.y 0 2 λxy.y 1 i.e n λxy.y(n 1) También se pueden representar funciones entre numerales succ λzxy.yz

10 Cálculo-λ pred λz.z 0(λx.x) iszero λz.z true(λx.false) Demostrar que: succ 2 = 3 pred 1 = 0 iszero 1 = F 1.14.1. Numerales de Church 0 c 0 λs.λz.z; 1 c 1 λs.λz.sz; 2 c 2 λs.λz.s(sz); 3 c 3 λs.λz.s(s(sz)); etc. Cada número es representado por un combinador c n que toma dos argumentos, s y z (para sucesor y cero), y aplica s, n veces, a z. Sucesor Definiciones: Se define la función sucesor sobre los numerales de Church como sigue: scc λn.λs.λz.s(nsz) El término scc es un combinador que toma un numeral de Church n y regresa otro numeral de Church - es decir, nos da una función que toma argumentos s y z y aplica s repetidamente a z. Obtenemos el numero a la derecha de aplicaciones de s a z por primero pasar s y z como argumentos a n, y entonces explicitamente aplicamos s una vez más al resultado. La función sucesor aplicada a nuestra representación para cero da: scc λw.λy.λx.y(wyx) scc0 (λw.λy.λx.y(wyx))(λs.λz.z) = λy.λx.y((λs.λz.z)yx) = λy.λx.y((λz.z)x) = λy.λx.y(x) 1 Ejercicio: scc1 = 2 Observa que el proposito de aplicar el número λs.λz.s(z) a los argumentos y y x es sólo para renombrar las variables usadas en la definición del numero.

1.14 Operaciones aritmeticas 11 Suma Utilizando la definición anterior de scc, definimos la suma de 2 + 3 = 5: 2scc3 = scc(scc3) = scc4 = 5 Similarmente, la suma de numerales de Church pude ejecutarse por un termino plus que toma dos numerales Church, m y n, como argumentos, y da otro numeral Church (función) que acepta argumentos s y z, aplica s iterando n veces a z (pasando s y z como argumentos a n), y entonces aplica s iterando m veces mas al resultado: Producto plus λm.λn.λs.λz.ms(nsz) La multiplicación de dos numeros x y y puede computarse usando la siguiente función: Ejemplo: El producto de 2 por 2 es: (λxyz.x(yz))22 = λz,2(2z) =... = 4 Otra forma de representar el producto es: prod λxyz.x(yz) times λm.λn.m(plus n)c 0 Ejercicio: Obtenga el resultado de times 2 1 = 2 Potencia excepto para m = 0 Ejercicio: exp 2 1 = 2 Demostrar que: exp λxy.yx succ 2 = 3 plus 1 0 = 1 times 1 2 = 2