Proof with auto.
intros.
unfold open_tt.
apply subst_tt_open_tt_rec...
Qed.
(** The next lemma is a direct corollary of the immediately preceding lemma---here, we're opening the term with a variable.  In practice, this lemma seems to be needed as a left-to-right rewrite rule, when stated in its current form. *)

(* Specifications: *)
Lemma subst_tt_open_tt_var : forall (X Y:atom) P T,
Y <> X ->
type P ->
open_tt (subst_tt X P T) Y = subst_tt X P (open_tt T Y).