let p_not p = match val_of p with
  | Ptrue -> cut Pfalse p
  | Pfalse -> cut Ptrue p
  | Papp"eq" , w ) -> p_app "neq" w
  | Papp"neq" , w ) -> p_app "eq" w
  | Papp"le_int" , [a;b] ) -> p_app "lt_int" [b;a]
  | Papp"lt_int" , [a;b] ) -> p_app "le_int" [b;a]
  | _ -> Pnot p