proposition: Lemma subst_fresh : forall (x : atom) e u, x `notin` fv e -> [x ~> u] e = e.
proof: Proof. Admitted. Lemma subst_notin_fv : forall x y u e, x `notin` fv e -> x `notin` fv u -> x `notin` fv ([y ~> u]e). Proof. intros x y u e Fr1 Fr2. induction e; simpl in *. Case "bvar". assumption. Case "fvar". destruct (a == y). assumption. simpl. assumption. Case "abs". apply IHe. assumption. Case "app". destruct_notin. apply notin_union. apply IHe1. assumption. apply IHe2. assumption. Qed.
imports: Metalib.Metatheory String