Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
teaching:cc5104:2010-2:tarea1 [2010/08/20 23:18] – etanter | teaching:cc5104:2010-2:tarea1 [2010/08/25 18:14] (current) – etanter | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== Tarea 1: Sistemas de tipos y contratos ===== | ||
+ | |||
+ | **Parte 1: sistema de tipos** | ||
+ | - Implemente un interprete para un lenguaje con booleanos, numeros, if, y funciones de primera clase con scope léxico. | ||
+ | - Implemente un verificador de tipos para este lenguaje, basado en el simply-typed lambda calculus | ||
+ | |||
+ | **Parte 2: contratos** | ||
+ | - Extienda su lenguaje con la posibilidad de aumentar tipos con // | ||
+ | < | ||
+ | (define (in-range min max) | ||
+ | (lambda (v) | ||
+ | (and (> v min) (< v max)))) | ||
+ | | ||
+ | (lambda (n : nat[(in-range 0 10)]) ...) | ||
+ | </ | ||
+ | Esa función sólo acepta un parámetro númerico en el rango ]0;10[. | ||
+ | - Los contratos no pueden ser verificados estáticamente (¿porque? | ||
+ | - Extienda su sistema de contratos para poder especificar un contrato sobre el valor retornado por una función. | ||
+ | |||
+ | **Parte 3: contratos de orden superior** | ||
+ | |||
+ | PLT Scheme tiene un sistema de contratos que permite especificar contratos de //orden superior//, o sea, contratos sobre // | ||
+ | < | ||
+ | (define foo | ||
+ | (lambda (f : nat[(in-range 0 10)] -> nat[(in-range 20 30)]) | ||
+ | ...)) | ||
+ | </ | ||
+ | La función foo acepta como parámetro una función que debe respetar el hecho de que: dado un parámetro entre 0 y 10, retorna un valor entre 20 y 30. | ||
+ | Analiza //cuando// es posible verificar cumplimiento de un contrato de orden superior. Notese que en el ejemplo, el contrato sobre el parámetro f puede fallar si (a) f es aplicada con un parametro que no esta entre 0 y 10 (ahi la " | ||
+ | - Extienda su lenguaje para soportar contratos de orden superior (nuevamente, | ||
+ | |||
+ | **Parte 4 (opcional pregrado / obligatorio posgrado)** | ||
+ | |||
+ | - Formalize su lenguaje con contratos de orden superior | ||
+ | - Explique y formule precisamente una noción de coherencia (soundness) para este lenguaje | ||
+ | - Demuestre la coherencia de su lenguaje. | ||
+ | |||
+ | **Instrucciones** | ||
+ | |||
+ | Como siempre, para cada paso entregue código debidamente comentado, con tests y ejemplos ilustrativos. | ||
+ | |||
+ | Para la parte 4, use LaTeX (o algo equivalente, | ||
+ | Si necesita ayuda con LaTeX, estudie ese [[teaching: | ||
+ | |||
+ | Puntaje: | ||
+ | * pregrado: P1=2 / P2=2 / P3=2 / P4=+1 (opcional) | ||
+ | * posgrado: P1=1 / P2=1.5 / P3=1.5 / P4=2 | ||
+ | |||
+ | Fecha de entrega: Miercoles 22 de Septiembre, por U-Cursos. |