(* The "backpatching" fixpoint combinator, AKA Landin's knot. *)
Definition refY :=
  Lam (e_let (New (Lam diverge))
             (Update (Var 0) (Lam (App (App (Var 2) (Deref (Var 1))) (Var 0))) (Deref (Var 0)) )).

(* Specifications: *)
Lemma refY_typ : forall A B, Typ nil refY (ty_lam (ty_lam (ty_lam A B) (ty_lam A B)) (ty_lam A B)).