
  [;1m-spec relative_product(ListOfBinRels, BinRel1) -> BinRel2[0m
  [;1m                          when[0m
  [;1m                              ListOfBinRels :: [BinRel, ...],[0m
  [;1m                              BinRel :: binary_relation(),[0m
  [;1m                              BinRel1 :: binary_relation(),[0m
  [;1m                              BinRel2 :: binary_relation();[0m
  [;1m                      (BinRel1, BinRel2) -> BinRel3[0m
  [;1m                          when[0m
  [;1m                              BinRel1 :: binary_relation(),[0m
  [;1m                              BinRel2 :: binary_relation(),[0m
  [;1m                              BinRel3 :: binary_relation().[0m

  If [;;4mListOfBinRels[0m is a non-empty list [R[1], ..., R[n]] of binary
  relations and [;;4mBinRel1[0m is a binary relation, then [;;4mBinRel2[0m is
  the relative product of the ordered set (R[i], ..., R[n]) and [;;4m[0m
  [;;4mBinRel1[0m.

  If [;;4mBinRel1[0m is omitted, the relation of equality between the
  elements of the Cartesian product of the ranges of R[i],
  range R[1] × ... × range R[n], is used instead (intuitively,
  nothing is "lost").

    1> TR = sofs:relation([{1,a},{1,aa},{2,b}]),
    R1 = sofs:relation([{1,u},{2,v},{3,c}]),
    R2 = sofs:relative_product([TR, R1]),
    sofs:to_external(R2).
    [{1,{a,u}},{1,{aa,u}},{2,{b,v}}]

  Notice that [;;4mrelative_product([R1], R2)[0m is different from [;;4m[0m
  [;;4mrelative_product(R1, R2)[0m; the list of one element is not
  identified with the element itself.

  Returns the relative product of the binary relations [;;4mBinRel1[0m and [;;4m[0m
  [;;4mBinRel2[0m.
