This version of all_disjoint/1 is a weak global constraint, but stronger than the simple posting of all pairwise disjoint/2 constraints, since it posts the additional constraint that the sum of the cardinalities of SetVars must be less than or equal to the cardinality of the union of all the initial LUBs.
?- all_disjoint([[7],[8],[i,k]]). yes ?- all_disjoint([[7,8],[i],[8]]). no ?- sets([X,Y,Z], [],[1,2,7,8,9], [cardinality:2]), all_disjoint([X,Y,Z]). no ?- sets([X,Y,Z], [],[1,2,7,8,9], [cardinality:2]), all_disjoint([X,Y,Z]), 2 `@ X, lub(Y,LubY), lub(Z,LubZ) LubY = [1,7,8,9], LubZ = [1,7,8,9]