'Return the cartesian product of self and other, which is the set of
pairs where the first element is a member of self and the second
element is a member of other.
NOTE: Unlike what one might expect from the way the cartesian product
may be defined mathematically, the operation as implemented here is
nonassociative, i.e.
a*b*c == (a*b)*c != a*(b*c)
In the mathematical case, a*b*c would be a set of triples, but here it
becomes a set of pairs with the first element in (a*b) and the second
element in c.
To create sets of triples etc. the cprod() factory function in Spec.py
could be used directly.'

def __mul__(self, other):

    if (not isinstance(other, UniSet)):
        other = self.fam.c_uniset(other)
    return self.fam.c_mul(self, other)
