Lambda Cálculo Tipado (1/3)

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

Algoritmos y programas. Algoritmos y Estructuras de Datos I

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

GUÍA BÁSICA DE SCHEME v.4

IIC2213. IIC2213 Teorías 1 / 42

MMAF: Espacios normados y espacios de Banach

Tema 1 Programación Funcional

Lenguajes y Gramáticas

Trabajo Práctico Final

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

Métodos de Inteligencia Artificial

4. Operadores Operador asignación

Grupos libres. Presentaciones.

Tema 6: Teoría Semántica

Tema 9: Cálculo Deductivo

Manual de turbo pascal

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

Tipos Abstractos de Datos

Tema 3.- Predicados y sentencias condicionales

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

Semánticas de procesos y aplicaciones

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

Autómatas de Pila y Lenguajes Incontextuales

Semana02[1/23] Conjuntos. 9 de marzo de Conjuntos

El lenguaje C. 1. Identificadores, constantes y variables

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 45

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 42

ALGEBRA DE BOOLE George Boole C. E. Shannon E. V. Hungtington [6]

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

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

Semántica Denotacional

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

Semana03[1/17] Funciones. 16 de marzo de Funciones

Teoría de la Computabilidad

El ente básico de la parte de la matemática conocida como ANÁLISIS, lo constituye el llamado sistema de los número reales.

Introducción a la Programación en MATLAB

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

John Venn Matemático y filósofo británico creador de los diagramas de Venn

1. Sucesiones y redes.

Terminaremos el capítulo con una breve referencia a la teoría de cardinales.

Conjuntos, relaciones y funciones Susana Puddu

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

Introducción a la Lógica

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

INTRODUCCION A LA INTELIGENCIA ARTIFICIAL MÓDULO 6- CÁLCULO DE PREDICADOS Y LÓGICA DE PRIMER ORDEN

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

PHP: Lenguaje de programación

UNIVERSIDADES DE ANDALUCÍA PRUEBA DE ACCESO A LA UNIVERSIDAD

Ejercicios de Lógica Proposicional *

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

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

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

Lógica proposicional. Ivan Olmos Pineda

APENDICE REGLAS Y LEYES DE LA LOGICA DE PRIMER ORDEN

UNIVERSIDAD LIBRE PROGRAMAS ANALÍTICOS SECCIONAL: PEREIRA FACULTAD: INGENIERIAS. PROGRAMA ACADÉMICO: Ingeniería de Sistemas

Tema 3 - Modelado con HDL a nivel RTL

Econometría de series de tiempo aplicada a macroeconomía y finanzas

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

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

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 3: Relaciones, Funciones, y Notación Asintótica

RESOLUCIÓN DE SISTEMAS MEDIANTE DETERMINANTES

Elementos léxicos del lenguaje de programación Java

Universidad de Managua

Lógica Proposicional. Sergio Stive Solano Sabié. Marzo de 2012

ESCUELA: UNIVERSIDAD DEL ISTMO

SESIÓN N 07 III UNIDAD RELACIONES Y FUNCIONES

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

13.3. MT para reconocer lenguajes

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

5. Sentencias selectivas o condicionales

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

Matemáticas Básicas para Computación

Modelos Estocásticos I Tercer Examen Parcial Respuestas

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Práctico 5. Definiciones Inductivas - Segunda Parte -

CONTINUIDAD DE FUNCIONES. SECCIONES A. Definición de función continua. B. Propiedades de las funciones continuas. C. Ejercicios propuestos.

Análisis Matemático I: Numeros Reales y Complejos

MAT2715 VARIABLE COMPLEJA II Ayudantia 5 Rodrigo Vargas. g(z) e u(z) 1. u(z) a log z + b

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

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

Polaridad. Tangentes. Estudio geométrico de cónicas y cuádricas

Lógicas para la inteligencia natural y artificial

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Conjuntos. () April 4, / 32

Lenguajes de Dominio Específico (o Lenguajes para Todos)

Java para no Programadores

Inteligencia en Redes de Comunicaciones. Razonamiento lógico. Julio Villena Román.

Ingeniería a de Software CC51A

FUNDAMENTOS DE INFORMÁTICA

Tema 2: Equivalencias y formas normales

4. Complementos sobre Problemas de Contorno para S.D.O. Lineales. 4. Complementos sobre Problemas de Contorno

Teorema del Valor Medio

Material diseñado para los estudiantes del NUTULA, alumnos del profesor Álvaro Moreno.01/10/2010 Lógica Proposicional

Capitulo IV - Inecuaciones

Receptor de Correlación. Sistemas de Comunicación

Taller Matemático. Lógica. Cristóbal Pareja Flores antares.sip.ucm.es/cpareja Facultad de Estadística Universidad Complutense de Madrid

PRODUCTO CARTESIANO RELACIONES BINARIAS

Repaso de Lógica de Primer Orden

Transcripción:

Lambda Cálculo Tipado (1/3) Eduardo Bonelli Departamento de Computación FCEyN UBA There may, indeed, be other applications of the system other than its use as a logic Alonzo Church, 1932 3 de abril, 2007

Qué es el Lambda Cálculo? Modelo de computación basado en funciones da origen a la programación funcional Introducido por Alonzo Church en 1934 Computacionalmente completo (i.e. Turing completo) También considerado como modelo fiable de lenguajes de programación en general The next 700 programming languages, Peter Landin, 1966 Lema: Usar lambda cálculo para probar nuevos conceptos de programación

Por qué Lambda Cálculo? En un lenguaje industrial-strength es difícil determinar con precisión/rigurosidad propiedades básicas sobre semántica y sistema de tipos efecto de extender el lenguaje con nuevas construcciones la relación con otros lenguajes o paradigmas Es conveniente restringir el lenguaje a un subconjunto que sea representativo (del paradigma o área de problemas) conciso reducido en cuanto a primitivas riguroso en su formulación

Qué vamos a estudiar sobre Lambda Cálculo? La formulación original es sin tipos Dado nuestro interés en lenguajes de programación, vamos a estudiar el Lambda Cálculo Tipado (A. Church, 1941) En el marco del Lambda Cálculo Tipado vamos a presentar 1. Tipos, términos, tipado, evaluación (Clase 1/3 y 2/3) 2. Inferencia de tipos (Clase 3/3) Comenzaremos con Lambda Cálculo Tipado con expresiones booleanas y luego iremos enriqueciendo el lenguaje con otras construcciones

Expresiones de tipos Las expresiones de tipos (o simplemente tipos) de LC b son σ ::= Bool σ τ Descripción informal: Bool es el tipo de los booleanos, σ τ es el tipo de las funciones de tipo σ en tipo τ

Términos de LC b Sea X un conjunto infinito enumerable de variables y x X. Los términos de LC b están dados por M ::= x true false if M then P else Q λx : σ.m M N

Términos de LC b Descripción informal: x es una variable de términos, true y false son las constantes de verdad, if M then P else Q es el condicional, λx : σ.m es una función que cuyo parámetro formal es x y cuyo cuerpo es M y M N es la aplicación de la función denotada por el término M al argumento N.

Ejemplos λx : Bool.x λx : Bool.if x then false else true λf : σ τ.λx : σ.f x (λf : Bool Bool.f true)(λy : Bool.y) x y

Variables libres Una variable puede ocurrir libre o ligada en un término. Decimos que x ocurre libre si no se encuentra bajo el alcance de una ocurrencia de λx. Caso contrario ocurre ligada. λx : Bool.if }{{} x ligada λx : Bool.λy : Bool.if true then λx : Bool.if (λx : Bool.if x }{{} ligada x }{{} ligada then true else false x }{{} ligada then true else y }{{} libre then true else false) else x }{{} libre y }{{} ligada

Variables libres: Definición formal FV (x) FV (true) = FV (false) FV (if M then P else Q) FV (M N) FV (λx : σ.m) def = {x} def = def = FV (M) FV (P) FV (Q) def = FV (M) FV (N) def = FV (M) \ {x}

Sustitución M{x N} Sustituir todas las ocurrencias libres de x en el término M por el término N Operación importante que se usa para darle semántica a la aplicación de funciones (entre otras) Es sencilla de definir pero requiere cuidado en el tratamiento de los ligadores de variables (i.e. con λx )

Sustitución x{x N} a{x N} (if M then P else Q){x N} (M 1 M 2 ){x N} (λy : σ.m){x N} def = N def = a si a {true, false} def = if M{x N} then P{x N} else Q{x N} def = M 1 {x N} M 2 {x N} def =?

Captura de variables Sustituir el término z por la variable x (λz : σ.x){x z} = λz : σ.z Hemos convertido a la función constante λz : σ.x en la función identidad! El problema: λz : σ capturó la ocurrencia libre de z Hipótesis: los nombres de las variables ligadas no son relevantes la ecuación de arriba debería ser comparable con (λw : σ.x){x z} = λw : σ.z Conclusión: Para definir (λy : σ.m){x N} asumiremos que la variable ligada y se renombró de tal manera que no ocurre libre en M

α-equivalencia α-equivalencia Dos términos M y N que difieren solamente en el nombre de sus variables ligadas se dicen α-equivalentes α-equivalencia es una relación de equivalencia De aquí en más identificaremos términos α-equivalentes. λx : Bool.x = α λy : Bool.y λx : Bool.y = α λz : Bool.y λx : Bool.y α λx : Bool.z λx : Bool.λx : Bool.x α λy : Bool.λx : Bool.y

Sustitución - Revisada x{x N} a{x N} (if M then P else Q){x N} (M 1 M 2 ){x N} (λy : σ.m){x N} def = N def = a si a {true, false} def = if M{x N} then P{x N} else Q{x N} def = M 1 {x N} M 2 {x N} def = λy : σ.m{x N} x y, y / FV (N) 1. NB: la condición x y, y / FV (N) siempre puede cumplirse renombrando apropiadamente 2. Técnicamente, la sust. está definida sobre clases de α-equivalencia de términos

Sistema de tipado Sistema formal de deducción (o derivación) que utiliza axiomas y reglas de tipado para caracterizar un subconjunto de los términos llamados tipados. Los axiomas de tipado establecen que ciertos juicios de tipado son derivables. Las reglas de tipado establecen que ciertos juicios de tipado son derivables siempre y cuando ciertos otros lo sean. Motivar juicios de tipado: Qué tipo le asignaría a true? Y a if x then true else false?

Sistema de tipado Un contexto de tipado es un conjunto de pares x i : σ i, anotado {x 1 : σ 1,..., x n : σ n } donde los {x i } i 1..n son distintos. Usamos letras Γ,,... para contextos de tipado. Un juicio de tipado es una expresión de la forma Γ M : σ que se lee: el término M tiene tipo σ asumiendo el contexto de tipado Γ

Sistema de tipado El significado de Γ M : σ se establece a través de la introducción de axiomas y reglas de tipado. Si Γ M : σ puede derivarse usando los axiomas y reglas de tipado decimos que es derivable. A continuación presentaremos los axiomas y reglas de tipado de LC b

Axiomas de tipado x : σ Γ (T-Var) Γ x : σ (T-True) Γ true : Bool (T-False) Γ false : Bool

Reglas de tipado Γ M : Bool Γ P : σ Γ Q : σ (T-If) Γ if M then P else Q : σ Γ, x : σ M : τ Γ λx : σ.m : σ τ (T-Abs) Γ M : σ τ Γ M N : τ Γ N : σ (T-App)

Ejemplos de derivaciones de juicios de tipado Vamos a mostrar que los siguientes juicios de tipado son derivables: 1. λx : Bool.λf : Bool Bool.fx : Bool 2. x : Bool, y : Bool if x then y else y : Bool 3. λf : ρ τ.λg : σ ρ.λx : σ.f (gx) : τ 4. Γ, σ tal que Γ x x : σ?

Resultados básicos Unicidad de tipos Si Γ M : σ y Γ M : τ son derivables, entonces σ = τ Weakening+Strengthening Si Γ M : σ es derivable y Γ Γ contiene a todas las variables libres de M, entonces Γ M : σ Sustitución Si Γ, x : σ M : τ y Γ N : σ son derivables, entonces Γ M{x N} : τ es derivable

Semántica Habiendo definido la sintaxis de LC b, nos interesa formular cómo se evalúan o ejecutan los términos Hay varias maneras de definir rigurosamente la semántica de un lenguaje de programación Operacional Denotacional Axiomática Vamos a definir una semántica operacional para LC b

Qué es semántica operacional? Consiste en interpretar a los términos como estados de una máquina abstracta y definir una función de transición que indica, dado un estado, cuál es el siguiente estado Significado de un término M: el estado final que alcanza la máquina al comenzar con M como estado inicial Formas de definir semántica operacional 1. Small-step: la función de transición describe un paso de computación 2. Big-step (o Natural Semantics): la función de transición, en un paso, evalúa el término a su resultado

Semántica operacional La formulación se hace a través de juicios de evaluación M N que se leen: el término M reduce, en un paso, al término N El significado de un juicio de evaluación se establece a través de: Axiomas de evaluación: establecen que ciertos juicios de evaluación son derivables. Reglas de evaluación establecen que ciertos juicios de evaluación son derivables siempre y cuando ciertos otros lo sean.

Semántica operacional small-step de LC b Vamos a presentar una semántica operacional small-step para LC b Lo haremos por partes Primero abordamos las expresiones booleanas Luego el resto de las expresiones Además de introducir la función de transición es conveniente introducir también los valores Valores: Los posibles resultados de evaluación de términos bien-tipados y cerrados

Semántica Operacional - Expr. booleanas Valores V ::= true false Todo término bien-tipado y cerrado de tipo Bool evalúa, en cero o más pasos, a true o false Este resultado se demuestra formalmente

Semántica Operacional - Expr. booleanas Juicio de evaluación en un paso (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)

Ejemplos (E-IfFalse) if false then false else true true (E-If) if (if false then false else true) then false else true if true then false else true Observar que No existe M tal que true M (idem con false).

Ejemplos if true then (if false then false else true) else true if true then true else true La estrategia de evaluación corresponde con el orden habitual en leng. de prog. 1. Primero evaluar la guarda del condicional 2. Una vez que la guarda sea un valor, seguir con la expresión del then o del else, según corresponda

Propiedades Lema (Determinismo del juicio de evaluación en un paso) Si M M y M M, entonces M = M

Propiedades Una forma normal es un término que no puede evaluarse más (i.e. M tal que no existe N, M N) Recordar que un valor es resultado al que puede evaluar un término bien-tipado y cerrado Lema Todo valor está en forma normal No vale el recíproco: ejemplos if x then true else false x

Evaluación en muchos pasos El juicio de evaluación de muchos pasos es la clausura reflexiva, transitiva de. Es decir, la menor relación tal que 1. Si M M, entonces M M 2. M M para todo M 3. Si M M y M M, entonces M M if true then (if false then false else true) else true true

Evaluación en muchos pasos - Propiedades Lema (Unicidad de formas normales) Si M U y M V con U, V formas normales, entonces U = V Lema (Terminación) Para todo M existe una forma normal N tal que M N

Semántica operacional - funciones Valores V ::= true false λx : σ.m Todo término bien-tipado y cerrado de tipo Bool evalúa, en cero o más pasos, a true, false σ τ evalúa, en cero o más pasos, a λx : σ.m, para alguna variable x y término M

Semántica operacional - funciones Juicio de evaluación en un paso M 1 M 1 M 1 M 2 M 1 M 2 (E-App1) M 2 M 2 (E-App2) V 1 M 2 V 1 M 2 (E-AppAbs) (λx : σ.m) V M{x V }

Ejemplo (λy : Bool.y) true true (λx : Bool Bool.x true) (λy : Bool.y) (λy : Bool.y) true (λz : Bool.z) ((λy : Bool.y) true) (λz : Bool.z) true No existe M tal que x M x está en forma normal pero no es un valor

Estados de error Estado de error Estado (=término) que no es un valor pero en el que la evaluación está trabada NB: Representa estado en el cual el sistema de run-time en una implementación real generaría una excepción Objetivo de un sistema de tipos: garantizar la ausencia de estados de error Si un término cerrado está bien tipado (y termina!), entonces evalúa a un valor C.f. Type systems, Luca Cardelli, The Computer Science and Engineering Handbook, CRC Press, 2004.

Correctitud Correctitud = Progreso + Preservación Progreso Si M es cerrado y bien tipado entonces 1. M es un valor 2. o bien existe M tal que M M La evaluación no puede trabarse para términos cerrados, bien tipados que no son valores Preservación Si Γ M : σ y M N, entonces Γ N : σ La evaluación preserva tipos

Tipos y términos σ ::= Bool Nat σ ρ M ::=... 0 succ(m) pred(m) iszero(m) Descripción informal: succ(m): evaluar M hasta arrojar un número e incrementarlo pred(m): evaluar M hasta arrojar un número y decrementar iszero(m): evaluar M hasta arrojar un número, luego retornar true/false según sea cero o no

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

Valores y evaluación en un paso (1/2) Valores V ::=... n donde n abrevia succ n (0). Juicio 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(n + 1) n M 1 M 1 (E-Pred) pred(m 1 ) pred(m 1)

Valores y evaluación en un paso (2/2) Juicio de evaluación en un paso (2/2) (E-IsZeroZero) iszero(0) true (E-IsZeroSucc) iszero(n + 1) false M 1 M 1 (E-IsZero) iszero(m 1 ) iszero(m 1)

Tipos y términos σ ::=... Unit M ::=... unit Descripción informal: Unit es un tipo unitario y el único valor posible de una expresión de ese tipo es unit. Cumple rol similar a void en C o Java

Tipado (T-Unit) Γ unit : Unit NB: No hay reglas de evaluación y extendemos el conjunto de valores V con unit.

Utilidad Su utilidad principal es en lenguajes con efectos laterales (próxima clase) En estos lenguajes es útil poder evaluar varias expresiones en secuencia M 1 ; M 2 def = (λx : Unit.M 2 ) M 1 x / FV (M 2 ) La evaluación de M 1 ; M 2 consiste en primero evaluar M 1 y luego M 2 Con la definición dada, este comportamiento se logra con las reglas de evaluación definidas previamente

Tipos y términos M ::=... let x = M in N Descripción informal: let x = M in N: evaluar M a un valor V, ligar x a V y evaluar N Mejora la legibilidad La extensión con let no implica agregar nuevos tipos

Ejemplo let x = 2 in succ(x) pred (let x = 2 in x) let x = 2 in let x = 3 in x

Tipado Γ M : σ 1 Γ, x : σ 1 N : σ 2 (T-Let) Γ let x = M in N : σ 2

Semántica operacional M 1 M 1 (E-Let) let x = M 1 in M 2 let x = M 1 in M 2 (E-LetV) let x = V 1 in M 2 M 2 {x V 1 }

Tipos y términos Sea L un conjunto de etiquetas σ ::=... {l i : σ i i 1..n } {nombre : String, edad : Nat} {persona : {nombre : String, edad : Nat}, cuil : Nat} {nombre : String, edad : Nat} {edad : Nat, nombre : String}

Tipos y términos M ::=... {l i = M i i 1..n } M.l Descripción informal: El registro {l i = M i i 1..n } evalúa a {l i = V i i 1..n } donde V i es el valor al que evalúa M i, i 1..n M.l: evaluar M hasta que arroje {l i = V i i 1..n }, luego proyectar el campo correspondiente

Ejemplos λx : Nat.λy : Bool.{edad = x, sexo = y} λp : {edad : Nat, sexo : Bool}.p.edad (λp : {edad : Nat, sexo : Bool}.p.edad) {edad = 20, sexo = false}

Tipado Γ M i : σ i para cada i 1..n (T-Rcd) Γ {l i = M i 1..n i } : {l i : σ i 1..n i } Γ M : {l i : σ i i 1..n } j 1..n (T-Proj) Γ M.l j : σ j

Semántica operacional Valores V ::=... {l i = V i i 1..n }

Semántica operacional j 1..n {l i = V i i 1..n }.l j V j (E-ProjRcd) M M (E-Proj) M.l M.l M j M j {l i = V i i 1..j 1, l j = M j, l i = M i i j+1..n } {l i = V i i 1..j 1, l j = M j, l i = M i i j+1..n } (E-Rcd)