let p_subst alpha x v p =
    match v with
      | Fol.Tvar y when (Fol.Var.equal x y) -> p
      | (Fol.Tconst _ | Fol.Tvar _ | Fol.Tapp(_,[])) ->
          Fol.pred_replace alpha x v p
      | _ -> Fol.p_let x v p