===== Tarea 2: Subtipos y contratos ===== **Parte 1: records y subtipos** * Extienda su lenguaje con records, y subtipos, basandose en lo visto en clases. No se olvide que su lenguaje debe incluir `if'. Su verificador de tipos debe retornar el tipo mínimo del termino dado, si existe, y señalar un error sino. * Provea los tests suficientes para demostrar el buen funcionamiento de su verificador en presencia de subtipos. **Parte 2: subtipos y contratos** En su lenguaje, los tipos pueden tener un contrato, condición que se verifica dinámicamente. En lo que sigue notamos los tipos T@C, para referirnos al tipo T con contrato C. - Explique como se puede reconciliar la noción de "subsumption" con contratos. Es decir, explique que debe significar que T1@C1 <: T2@C2 - Complemente la verificación de contratos teniendo particular cuidado con la asignación de culpa (blame) en caso de que se viole un contrato. (Hint: ahora, la culpa puede provenir del uso de una función, de su implementación, o tambien de un contrato) **Parte 3 (opcional pregrado / obligatorio posgrado)** - reformule/extienda la formulación (y prueba) de coherencia para el sistema con subtipos y contratos, enfocandose en los contratos (o sea, lo que solo tiene que ver con lo visto en clase no lo tiene que repetir). **Instrucciones** Como siempre, para cada paso entregue código debidamente comentado, con tests y ejemplos ilustrativos. Puntaje: * pregrado: P1=3 / P2=3 / P3=+1 (opcional) * posgrado: P1=2 / P2=2 / P3=2 Fecha de entrega: Miercoles 17 de Noviembre, por U-Cursos.