[EMAIL PROTECTED] wrote:

Technically the Cartesian cross operator doesn't have an identity value. There is no set X such thatA x X = A. Now any singleton set gives a result that is naturally isomorphic to the original set, I.e, there is a obvious bijection between the two sets, but they are not equal sets.

`If you were talking about ordinary set operators, then what you say is`

`probably true. However, my solution was specific to the relational model`

`of data, whose operators correspond to a superset of plain set operators.`

In this context, when I say "plain set operators", I mean things like: union (or|add) intersection (and|multiply) difference symmetric difference (xor)

`and in the relational model, each of those operators requires their input`

`relations to have the same headings, that is their tuples are all of the`

`same degree and have the same attribute names, and so the headings of the`

`results match both of the inputs.`

Extra operators in the relational model that aren't in the plain set include: natural join (and|multiply) cartesian product is a special case intersection is a special case semijoin is a special case semidifference divide (divide)

`These extra operators are effectively working in 2 dimensions, where one`

`dimension is the set of tuples, and the other is the elements per tuple.`

`Also, every tuple element can itself be any type, either scalar or tuple or`

`relation. And that feature is orthogonal to the 2 dimensions I mentioned.`

`Given this context, the identity value of relational join or cross product`

`was specifically a 2-dimensional value.`

`This said, the identity value of joining 2 tuples still goes under the same`

`principle, even though that is a 1-dimensional operation. Joining any`

`tuple T with a tuple having zero elements is the first tuple T.`

Since the normal output of X is 2-dimensional, it stands to reason that ( () ) should be a reasonable identity value for X, I think. -- Darren Duncan