let triangle reverse xpred ypred common =
  if not (S.is_empty common) then
    let xrest = S.diff xpred ypred in
    let yrest = S.diff ypred xpred in
    let pred_pred = 
      S.fold (fun z acc -> 
        S.union (to_set reverse.(z)) acc
      ) common S.empty 
    in
    (S.subset xrest pred_pred) && (S.subset yrest pred_pred)
  else
    false