let rec fold_exp_in_pred do_exp acc p =
  let frec = fold_exp_in_pred do_exp in
  match p with
  | Ptrue | Pfalse  -> acc
  | Pif (t,p1,p2) ->
      let acc = do_exp acc t in
      let acc = frec acc p1 in
      let acc = frec acc p2 in
        acc
  | Pnot p -> frec acc p
  | Pforall (_v,p') | Pexists (_v,p') ->
        fold_exp_in_pred do_exp acc p'
  | Plet (_x,e,p) ->
      let acc = do_exp acc e in
      fold_exp_in_pred do_exp acc p
  | Pnamed (_n,p) -> frec acc p
  | Pimplies (p1,p2) | Pand (p1,p2) | Por (p1,p2) | Piff (p1,p2)
    -> frec (frec acc p1) p2
  | Papp (_n,t) -> List.fold_left do_exp acc t