
  [;1m-spec family_intersection(Family1) -> Family2[0m
  [;1m                             when[0m
  [;1m                                 Family1 :: family(),[0m
  [;1m                                 Family2 :: family().[0m

  If [;;4mFamily1[0m is a family and [;;4mFamily1[0m[i] is a set of sets for
  every i in the index set of [;;4mFamily1[0m, then [;;4mFamily2[0m is the
  family with the same index set as [;;4mFamily1[0m such that [;;4mFamily2[0m[i]
  is the intersection of [;;4mFamily1[0m[i].

  If [;;4mFamily1[0m[i] is an empty set for some i, the process exits with
  a [;;4mbadarg[0m message.

    1> F1 = sofs:from_term([{a,[[1,2,3],[2,3,4]]},{b,[[x,y,z],[x,y]]}]),
    F2 = sofs:family_intersection(F1),
    sofs:to_external(F2).
    [{a,[2,3]},{b,[x,y]}]

  [;1m-spec family_intersection(Family1, Family2) -> Family3[0m
  [;1m                             when[0m
  [;1m                                 Family1 :: family(),[0m
  [;1m                                 Family2 :: family(),[0m
  [;1m                                 Family3 :: family().[0m

  If [;;4mFamily1[0m and [;;4mFamily2[0m are families, then [;;4mFamily3[0m is the
  family such that the index set is the intersection of [;;4mFamily1[0m:s
  and [;;4mFamily2[0m:s index sets, and [;;4mFamily3[0m[i] is the intersection
  of [;;4mFamily1[0m[i] and [;;4mFamily2[0m[i].

    1> F1 = sofs:family([{a,[1,2]},{b,[3,4]},{c,[5,6]}]),
    F2 = sofs:family([{b,[4,5]},{c,[7,8]},{d,[9,10]}]),
    F3 = sofs:family_intersection(F1, F2),
    sofs:to_external(F3).
    [{b,[4]},{c,[]}]
