let rec fold_implies hs labels = function
  | Pimplies(p,q) -> fold_implies (fold_and hs labels p) [] q
  | Pnamed(label,p) -> fold_implies hs (label::labels) p
  | p -> List.rev hs , apply_labels p labels