# Re: cross operator and empty list

```[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
```