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