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