Definition e_let (def body:expr) :=
(App (Lam body) def).
Definition option (a:pred world) :=
ALL b:pred world, ty_lam b (ty_lam (ty_lam a b) b).
Definition none : expr := Lam (Lam (Var 1)).
Definition some : expr := Lam (Lam (Lam (App (Var 0) (Var 2)))).
Definition out  : expr := Lam (Lam (App (App (Var 0) (Var 1)) (Lam (Var 0)))).

(* Specifications: *)
Lemma out_typ :
Typ nil out (ALL tau:pred world, ty_lam tau (ty_lam (option tau) tau)).
Lemma none_typ :
Typ nil none (ALL tau:pred world, option tau).
Lemma some_typ :
Typ nil some (ALL tau:pred world, ty_lam tau (option tau)).