let rec pred_calls f = function
  | Ptrue | Pfalse -> false
  | Papp(g,ts) -> f=g || List.exists (term_calls f) ts
  | Pimplies(a,b) | Pand(a,b) | Por(a,b) | Piff(a,b) -> 
      pred_calls f a || pred_calls f b
  | Pnamed(_,p) | Pnot p | Pforall(_,p) | Pexists(_,p) -> 
      pred_calls f p
  | Pif(a,p,q) -> 
      term_calls f a || pred_calls f p || pred_calls f q
  | Plet(_,a,p) -> 
      term_calls f a || pred_calls f p