(** Many common applications of opening replace index zero with an
    expression or variable.  The following definition provides a
    convenient shorthand for such uses.  Note that the order of
    arguments is switched relative to the definition above.  For
    example, [(open e x)] can be read as "substitute the variable [x]
    for index [0] in [e]" and "open [e] with the variable [x]."
    Recall that the coercions above let us write [x] in place of
    [(fvar x)].
*)

Definition open e u := open_rec 0 u e.

(* Specifications: *)
Lemma demo_open : open (app (abs typ_base (app 1 0)) 0) Y = (app (abs typ_base (app Y 0)) Y).
Lemma demo_open : open (app (abs typ_base (app 1 0)) 0) Y = (app (abs typ_base (app Y 0)) Y).