[EMAIL PROTECTED] wrote:
Technically the Cartesian cross operator doesn't have an identity value. There is no set X such that
A 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