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.
-- Mark Biggar [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] -------------- Original message ---------------------- From: Darren Duncan <[EMAIL PROTECTED]> > Adriano, I think perhaps what Tsa is trying to get at is the identity value > for the X operator, and I believe I know what it is. > > In the relational model of data, both the version of the model where tuples > have unordered named attributes/elements (which I prefer), and the version > where tuples have ordered attributes/elements (which Perl 6 seems to be > using in its X operator), the relational cross product operator is > analogous to numeric multiplication or logical 'and' in its properties > (except that the ordered version isn't commutative). > > With respect to relational join being like multiplication, the special > values 0 and 1 are represented by the nilary (zero attribute) relation with > either 0 or 1 tuples respectively, which in common Perl array-of-hash (or > array-of-array) notation for rowsets is > > [] > > and > > [ {} ] or [ [] ] > > respectively; I'll call them R0 and R1 for now. Joining any relation R > with R0 gives R0 (or alternately a relation with the same attributes as R > but zero tuples; its zero tuples either way), and joining any relation R > with R1 gives R. > > So R1 is the identity value for cross product, meaning the identity value > for X, in Perl 6 would be a one-element array|seq whose element is the > empty array|seq. That is, > > [X] () > > equals this: > > ( () ) > > Larry et al, on a related note, the list of identity values for reduce in > S03 should be updated to account for this; [X] wasn't on the list last I > looked. > > -- Darren Duncan