Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Las soluciones que aparecen en este documento tomenlas solo como guas, no son exhaustivas y
algunas secciones de las pruebas no estan formalmente escritas.
1. Axiomas
(S-Refl)
S <: S
S <: T T <: U
(S-Trans)
S <: U
{li |1 i n} {kj |1 j m} kj = li Sj <: Ti
(S-RCD)
{kj : Sj |1 j m} <: {li : Ti |1 i n}
A <: A0 B <: B 0
(S-Arrow)
A0 B <: A B 0
(S-BoolNat)
Bool <: N at
(S-NatInt)
N at <: Int
(S-IntFloat)
Int <: F loat
1.1. Ejercicio 1
Dar una derivacion que pruebe:
{x : N at} {x : N at, y : Bool} <: {x : Bool, y : N at} {y : N at}
Para poder aplicar la regla S-Arrow tenemos que ver que:
1. {x : Bool, y : N at} <: {x : N at}
2. {x : N at, y : Bool} <: {y : N at}
1:
{x} {x, y} (S-BoolNat)
Bool <: N at (S-RCD)
{x : Bool, y : N at} <: {x : N at}
2:
{y} {x, y} (S-BoolNat)
Bool <: N at (S-RCD)
{x : N at, y : Bool} <: {y : N at}
{x : Bool, y : N at} <: {x : N at}(1) {x : N at, y : Bool} <: {y : N at}(2)
(S-Arrow)
{x : N at} {x : N at, y : Bool} <: {x : Bool, y : N at} {y : N at}
1
1.2. Ejercicio 2
Cuantos subtipos y supertipos (no estrictos) tiene {x : N at, y : Bool} N at? Contar los
tipos equivalentes (permutacion de labels en los registros) como un unico tipo.
1.3. Ejercicio 3
Reemplazar cada una de las letras A, B, C y D por alguno de los tipos Bool, N at, Int o F loat
de manera que cada letra sea asignada un tipo distinto y que sea cierto:
{x : A B, y : D} <: {x : C D, y : C}
1.4. Ejercicio 4
Supongamos solo podemos construir tipos a partir de un tipo basico y funciones (no hay
registros). Demostrar que S <: T sii S y T son sintacticamente iguales.
Lemma 1.1. T <: S sii ambos tipos son funciones, o registros o tipos basicos.
Demostracion. Es facil de ver. Razonar por el absurdo y analizar por induccion que regla se podra
haber aplicado para concluir esto.
2
Ahora s, podemos intentar demostrarlo por induccion en la construccion del tipo. Queremos
ver que S <: T implica que S y T son iguales. Hagamos induccion simultanea en S y T .
1.5. Ejercicio 5
Encontrar tipos S y T tal que haya infinitos X que verifiquen S <: X <: T
S = {x : {} Bool}
T = {}
Notar que S <: T , y ademas para cualquier tipo registro R no vaco cumple R <: {}, y por lo
tanto {x : {} Bool} <: {x : R Bool}. Es muy facil ver que hay infinitos tipos no vacos R
tal que R <: {}.