proposition: Lemma subst_eq_var: forall (x : atom) u, [x ~> u]x = u.
proof: Proof. Admitted. Lemma subst_neq_var : forall (x y : atom) u, y <> x -> [x ~> u]y = y. Proof. Admitted. Fixpoint fv (e : exp) {struct e} : atoms := match e with | bvar i => empty | fvar x => singleton x | abs t e1 => fv e1 | app e1 e2 => (fv e1) `union` (fv e2) end. Lemma f_equal_demo : forall e1 e2, e1 = e2 -> fv e1 = fv e2. Proof. intros e1 e2 EQ. f_equal. assumption. Qed.
imports: Metalib.Metatheory String