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