let p_if c p1 p2 = match c, val_of p1, val_of p2 with
  | (_,PtruePtrue ) -> cut (cut Ptrue p2) p1
  | (_,PfalsePfalse ) -> cut (cut Pfalse p2) p1
  | (t,_ , _) -> Pif (t,p1,p2)