let p_xor p1 p2 = match val_of p1, val_of p2 with
  | Ptrue , Ptrue -> cut (cut Pfalse p2) p1
  | Ptrue ,_ -> cut Ptrue p1
  | _,Ptrue -> cut Ptrue p2
  | Pfalse , _ -> p2 
  | _ , Pfalse -> p1
  | _ -> Pnot(Piff(p1,p2))