(** *** Recommended Exercise [subst_exp_fresh_eq]  To show the ease of reasoning with these definitions, we will prove a standard result from lambda calculus: if a variable does not appear free in a term, then substituting for it has no effect.  HINTS: Prove this lemma by induction on [e].  - You will need to use [simpl] in many cases.  You can [simpl] everything everywhere (including hypotheses) with the pattern [simpl in *].  - Part of this proof includes a false assumption about free variables. Destructing this hypothesis produces a goal about finite set membership that is solvable by [fsetdec].  - The [f_equal] tactic converts a goal of the form [f e1 = f e1'] in to one of the form [e1 = e1'], and similarly for [f e1 e2 = f e1' e2'], etc.  *)

Lemma subst_exp_fresh_eq : forall (x : var) e u,
x `notin` fv_exp e -> [x ~> u] e = e.