Instance Expr_expr : @Expr typ _ (@expr typ func) :=
  { exprD' := fun tus tvs e t => @exprD' _ _ _ _ _ tus tvs t e
  ; wf_Expr_acc := @wf_expr_acc typ func
(*  ; mentionsAny := mentionsAny *)
  }.

(* Specifications: *)
Lemma exprD'_App_L_rw : forall tus tvs td t e1 e2 e1D e2D, typeof_expr tus tvs e1 = Some (typ2 td t) -> exprD' tus tvs (typ2 td t) e1 = Some e1D -> exprD' tus tvs td e2 = Some e2D -> exprD' tus tvs t (App e1 e2) = Some (exprT_App e1D e2D).
Lemma exprD'_App_R_rw : forall tus tvs td t e1 e2 e1D e2D, typeof_expr tus tvs e2 = Some td -> exprD' tus tvs td e2 = Some e2D -> exprD' tus tvs (typ2 td t) e1 = Some e1D -> exprD' tus tvs t (App e1 e2) = Some (exprT_App e1D e2D).