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