let e_subst alpha x v t =
    match v with
      | Fol.Tvar y when (Fol.Var.equal x y) -> t
      | (Fol.Tconst _ | Fol.Tvar _ | Fol.Tapp(_,[])) ->
          Fol.term_replace alpha x v t
      | _ -> Fol.e_let x v t