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

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

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Trabajo Práctico Final

GUÍA BÁSICA DE SCHEME v.4

13.3. MT para reconocer lenguajes

Lenguajes y Gramáticas

Modelos Estocásticos I Tercer Examen Parcial Respuestas

Expresiones Regulares y Derivadas Formales

Conjunto R 3 y operaciones lineales en R 3

Teoría de la Computabilidad

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

RESOLUCIÓN DE SISTEMAS MEDIANTE DETERMINANTES

Nota 2. Luis Sierra. Marzo del 2010

Ampliación Matemática Discreta. Justo Peralta López

Programación Funcional en Haskell

Inducción en definiciones y demostraciones AUTÓMATAS Y LENGUAJES FORMALES PRELIMINARES MATEMÁTICOS. Números naturales. Inducción matemática

Guía práctica de estudio 05: Diagramas de flujo

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL

Tema: Autómata de Pila

Problemas de Espacios Vectoriales

Espacios Vectoriales

Tema 9: Cálculo Deductivo

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

Tema 1 Programación Funcional


Curso de Java Introducción a la Programación III

JUNIO Bloque A

Estatutos de Control C# Estatutos de Decisión (Selección)

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Teorema Central del Límite (1)

MMAF: Espacios normados y espacios de Banach

Práctico 5. Definiciones Inductivas - Segunda Parte -

MISIÓN UNIVERSIDAD DEL ISTMO VICERRECTORIA ACADÉMICA PROGRAMA ANALÍTICO

Ejemplo de Diseño. Algoritmos y Estructuras de Datos II. Departamento de Computación FCEyN UBA

NÚMEROS COMPLEJOS: C

Objetivo: Construir un programa integrando sentencias de decisión MARCO TEÓRICO

Macros en Lisp Cómo funcionan las macros?

8. Sentencia return y métodos

2 INTRODUCCIÓN A LISP

Espacios Vectoriales

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS

Anexo I. Profesorado en Matemática/Profesorado en Computación (Plan 1998) Prácticos: 4 horas semanales Teórico-prácticos:

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto

Estructuras de Datos. Dr. Pablo E. Fidel Martínez López Lic. en Ciencias de la Computación UNR

Tipos de datos en S. Lógica y Computabilidad. Codificación de variables y etiquetas de S. Codificación de programas en S

Elección de estructuras

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Receptor de Correlación. Sistemas de Comunicación

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

Paso 1: Autómata. A 1 sin estados inútiles, que reconoce el lenguaje denotado por a a* b*

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables aleatorias múltiples

Ciclos. Recordando Estructuras de Control Básicas: SELECCIÓN (condición) SECUENCIAL

SEMINARIO DE ESPECIFICACIONES ALGEBRAICAS

El Autómata con Pila: Transiciones

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Introducción a la Lógica

(Quinta clase: Ejemplos de producto. Coproducto) Recordemos que se dijo que el diagrama

ELEMENTOS DE GEOMETRÍA ANALÍTICA

Tema 6: Teoría Semántica

Interpretación y Argumentación Jurídica

Guía 2: Funciones, listas, recursión e inducción

Teoría de Lenguajes. Clase Teórica 7 Autómatas de Pila y Lenguajes Independientes del Contexto Primer cuartimestre 2014

Lógica Matemática, Sistemas Formales, Cláusulas de Horn

Matrices, determinantes y sistemas lineales

Teoría de colas I. Investigación Operativa, Grado en Estadística y Empresa, 2011/12

ÍNDICE PRIMERA PARTE METODOLOGÍA JURÍDICA

Tema 3.- Predicados y sentencias condicionales

Repaso de Lógica de Primer Orden

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Taller: Introducción a las Relaciones de Recurrencia.

May 4, 2012 CAPÍTULO 5: OPTIMIZACIÓN

Grupos libres. Presentaciones.

Introducción a los códigos compresores

Nano Taller de Python

Lenguajes y Compiladores

ALGEBRA y ALGEBRA LINEAL. Primer Semestre CAPITULO I LOGICA Y CONJUNTOS.

Procesadores de Lenguaje

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Tipos Abstractos de Datos

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

PROGRAMACIÓN LÓGICA INTRODUCCIÓN. Juan Juárez Fuentes

Índice Proposiciones y Conectores Lógicos Tablas de Verdad Lógica de Predicados Inducción

El lenguaje C. 1. Identificadores, constantes y variables

Series. Capítulo Introducción. Definición 4.1 Sea (x n ) n=1 una sucesión de números reales. Para cada n N. S n = x k = x 1 + x x n.

Órdenes de la convergencia de sucesiones. Condiciones de la convergencia lineal y cuadrática del método de iteración simple

APUNTES PARA LENGUAJES Y COMPILADORES

OPTIMIZACIÓN VECTORIAL

Algoritmos glotones. mat-151

Introduc)on to Programming (in C++) Ejemplos de tratamiento de secuencia de secuencias. Emma Rollón Departament of Computer Science

Ejercicios de Lógica Proposicional *

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

A1.- Determina a y b sabiendo que el sistema de ecuaciones. x + 3y +z = 1 -x + y +2z = -1 ax + by + z = 4 tiene, al menos, dos soluciones distintas.

Equivalencia Entre PDA y CFL

dt Podemos verificar que la velocidad definida de esta forma no transforma como un vector bajo una T.L. En clases mostramos que el intervalo

Escenas de episodios anteriores

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

4. Operadores Operador asignación

Transcripción:

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

Para qué sirve el cálculo lambda? Provee un modelo de cómputo simple que permite representar todas las funciones computables. Sirve como marco formal para estudiar propiedades de procesos de cómputo, programas, lenguajes... Facilita la realización de pruebas de concepto antes de incorporar extensiones a lenguajes de programación....etc. (ver bibliografía).

Empecemos con un ejemplo (λx : Bool.λy : Bool Bool.y(yx))((λz : Bool.true)false)(λw : Bool.w) Qué significa esto? Tiene sentido? Representa un valor? Cómo nos damos cuenta?

Componentes del cálculo lambda (y de todas sus extensiones) Para poder modelar formalmente cualquier aspecto de la programación en este lenguaje, necesitamos definir: Sintaxis de los tipos Sintaxis de los términos Reglas de tipado Qué consideramos como valores Reglas de semántica Todo esto lo iremos viendo a lo largo de esta clase (y también en la siguiente, para nuevas extensiones).

Repasemos los primeros tipos y términos Las expresiones de tipos (o simplemente tipos) de λ b son σ ::= Bool σ τ Sea X un conjunto infinito enumerable de variables y x X. Los términos de λ b están dados por M ::= x true false if M then P else Q λx : σ.m M N

Cuáles de estas expresiones son términos? λx : Bool Bool.(x true) (λx : Bool Bool.(x true))(λy : Bool.y) if x then y else λz : Bool.z x(λy : Bool.y) λx : Bool λx : Bool.y true false if true then λx : Bool.x

Convenciones Convención de paréntesis Convención de limpieza Poner paréntesis en wzλx : (σ σ) τ τ.xλy : σ.y

Términos con y sin sentido true false es un término, aunque medio sospechoso. Intuitivamente: qué querríamos obtener al evaluarlo? x x también es un término. Intuitivamente: qué tipo debería tener? Moraleja: aun sobre términos válidos caben preguntas como... En nuestro contexto / para nuestros fines, esto tiene sentido? Sería deseable que tenga sentido? Qué tipo debería tener? Debería tener tipo? Podría tener alguno? De este filtro se ocupará nuestro sistema de tipado. ( Entre otras cosas! Más detalles en la tercera teórica de cálculo lambda, cuando veamos inferencia de tipos.)

Axiomas y reglas de tipado x : σ Γ (T-Var) Γ x : σ (T-True) Γ true : Bool (T-False) Γ false : Bool Γ M : Bool Γ P : σ Γ Q : σ (T-If) Γ if M then P else Q : σ Γ, x : σ M : τ Γ λx : σ.m : σ τ (T-Abs) Γ M : σ τ Γ M N : τ Γ N : σ (T-App)

Ejercicio Demostrar la validez del siguiente juicio de tipado: (λx : Bool.λy : Bool.if x then true else y) false : Bool Bool...Y ahora tipemos nuestro primer ejemplo: (λx : Bool.λy : Bool Bool.y(yx))((λz : Bool.true)false)(λw : Bool.w):? Podemos hacerlo, ya que las anotaciones de tipos nos dicen de qué tipo es el argumento de cada función.

Semántica operacional (1/3) Valores V ::= true false λx : σ.m Cuáles de estos términos son valores? if true then λx : Bool.x else λx : Bool.false if x then false else true λx : Bool.false (λx : Bool.x)false λx : Bool.(λy : Bool.x)false λx : Bool.x true

Semántica operacional (2/3) Reglas de evaluación en un paso (1/2) (E-IfTrue) if true then M 2 else M 3 M 2 (E-IfFalse) if false then M 2 else M 3 M 3 M 1 M 1 if M 1 then M 2 else M 3 if M 1 then M 2 else M 3 (E-If)

Semántica operacional (3/3) Reglas de evaluación en un paso (2/2) M 1 M 1 M 1 M 2 M 1 M 2 (E-App1 o µ) M 2 M 2 (E-App2 o ν) V 1 M 2 V 1 M 2 (E-AppAbs o β) (λx : σ.m) V M{x V }

Ejercicios Volvamos a los términos que vimos antes: (λx : Bool.λy : Bool.if x then true else y) false (λx : Bool.λy : Bool Bool.y(yx))((λz : Bool.true)false)(λw : Bool.w) Cuál es el resultado de evaluarlos? Y este otro? if (λb : Bool.true) false then (λx : Bool.x) true else (λy : Bool.y) false

Simplificando la escritura Podemos definir macros para expresiones que vayamos a utilizar con frecuencia. Por ejemplo: and def = λx : Bool.λy : Bool.if x then y else false Qué otras macros podemos definir?

Un nuevo tipo: los Naturales σ ::= Bool σ ρ Nat M ::=... 0 succ(m) pred(m) iszero(m)

Tipado (T-Zero) Γ 0 : Nat Γ M : Nat Γ M : Nat (T-Succ) (T-Pred) Γ succ(m) : Nat Γ pred(m) : Nat Γ M : Nat (T-IsZero) Γ iszero(m) : Bool

Probemos... pred(succ(0)) : Nat {x : Nat} iszero(pred(succ(x))) : Bool

Semántica operacional (1/2) Valores V ::=... n donde n abrevia succ n (0). Reglas de evaluación en un paso (1/2) M 1 M 1 (E-Succ) succ(m 1 ) succ(m 1) (E-PredZero) pred(0) 0 (E-PredSucc) pred(succ(n)) n M 1 M 1 (E-Pred) pred(m 1 ) pred(m 1)

Semántica operacional (2/2) Reglas de evaluación en un paso (2/2) (E-IsZeroZero) iszero(0) true (E-IsZeroSucc) iszero(succ(n)) false M 1 M 1 (E-IsZero) iszero(m 1 ) iszero(m 1)

...Y ahora evaluemos (λx : Nat. iszero(pred(succ(x)))) 0 Y si en vez de 0 dijera succ(0)? O succ(succ(0))? Cuál es la forma normal de succ(pred(pred(succ(0))))? Y la de succ(pred(pred(succ(x))))?

Recursión y punto fijo Veamos esta extensión: M ::=... fix M Γ M : σ 1 σ 1 (T-Fix) Γ fix M : σ 1 M 1 M 1 (E-Fix) fix M 1 fix M 1 (E-FixBeta) fix (λx : σ.m) M{x fix (λx : σ.m)} (El conjunto de tipos y el de valores no se modifican.)

Recursión como punto fijo Qué tipo tiene el siguiente término? Qué representa? M = (λx : Nat. fix(λs : Nat Nat.λy : Nat.if iszero(y) then x else succ(s pred(y)))) Verifiquemos: M : Nat Nat Nat...Y ahora evaluemos: M 3 2

Definiendo funciones recursivas Podemos definir la suma como macro. Por ejemplo: suma def = (λx : Nat. fix(λs : Nat Nat.λy : Nat.if iszero(y) then x else succ(s pred(y)))) (No es la única definición posible.) Ejercicio: definir el producto como macro usando suma y fix. Una solución posible: producto def = λx : Nat. fix (λp : Nat Nat.λy : Nat.if iszero(y) then 0 else suma x (p pred(y)))

En la próxima clase... Ejemplos rápidos y sofisticados Cómo definir nuevas extensiones

Continuará...????????????? (λx : clase.fin x) (Cálculo Lambda I )