let rec eq_preds p q =
  match p,q with
    | Papp(f,xs) , Papp(g,ys) ->
        f = g && List.for_all2 eq_terms xs ys
    | Ptrue , Ptrue -> true
    | Pfalse , Pfalse -> true
    | Pnamed(_,p) , q -> eq_preds p q
    | p , Pnamed(_,q) -> eq_preds p q
    | Pnot p , Pnot q -> eq_preds p q
    | _ -> false