The essense of the solutions: Q1: A |- x : A(x) A[x:u] |- e : t --------------------------- l in s s A |- lambda^l x.e: u ---> t s A |- e_1 : u ---> t A |- e_2 : u ------------------------------------ where s ranges over sets of labels, A |- e_1 e_2 : t just like u,t range over types, and e_1,e_2 range over expressions. Q2: No. Q3: Fix some type u. psi(t) = (t* -> u) -> u int* = int (s->t)*= s* -> ((t* -> u) -> u) Gamma({x:t,...}) = {x:t*,...} Q4: {2,3}.