Re: Intersection @ Complement

• To: mathgroup at smc.vnet.net
• Subject: [mg58141] Re: Intersection @ Complement
• From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
• Date: Mon, 20 Jun 2005 05:21:17 -0400 (EDT)
• Organization: The Open University, Milton Keynes, England
• References: <d90tcg\$99f\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Zak Seidov wrote:
> Some crazy thing Mmca does with
> Intersection/Complement:
>
> s1={1,2,5,7,4,4,1};s2={1,6,3,5,7,7,1,6};
> Intersection[s1,s2]
> {1,5,7} (* not {1,1,5,7} ?!*)
> Complement[s1,s2]
> {2,4} (* not {2,4,4} ?!*)
> Complement[s2,s1]
> {3,6} (* not {3,6,6,7} ?!*)
>
> Interestingly, in both cases Mmca Help
> says that the result is SORTED list,
> while actually it's UNION not SORT that works?!
> And note that in the last case 7 is absent at all ?!
>
Hi Zak,

I am afraid that there is nothing crazy at all in Mathematica behavior!
Mathematica works just has expected with *set* operators such as
intersection or complement.

We do not have a specific data type for *sets* built-in Mathematica. So
the only way I am aware of to represent a *set* is to use a list (here I
might be wrong but the Mathematica gurus in this forum will correct me
if needed).

So whenever you feed Mathematica with some lists ordered in a specific
way and containing repeated elements and then use *set* operations such
as intersection or complement on these lists, Mathematica first
reorganizes internally these lists as equivalent of *sets*: it orders
them in lexicographic order (here too I might be wrong about the most
general cases) and keeps only one occurrence of each elements. Then the
*set* operation is applied and a list that represents a *set* is returned.

For example, first we create two lists

In[1]:=
lst1 = {1, 2, 5, 7, 4, 4, 1}
lst2 = {1, 6, 3, 5, 7, 7, 1, 6}

Out[1]=
{1, 2, 5, 7, 4, 4, 1}

Out[2]=
{1, 6, 3, 5, 7, 7, 1, 6}

Now we create the "associated" *sets*
In[3]:=
s1 = Union[lst1]
s2 = Union[lst2]

Out[3]=
{1, 2, 4, 5, 7}

Out[4]=
{1, 3, 5, 6, 7}

In[5]:=
Intersection[s1, s2]

Out[5]=
{1, 5, 7}

In[6]:=
Intersection[lst1, lst2]

Out[6]=
{1, 5, 7}

And we can see that both operations yield the same result.

Best regards,
/J.M.

```

• Prev by Date: Weird Graphics Behaviour-Mathematica 4.2
• Next by Date: Re: plot command
• Previous by thread: Re: Intersection @ Complement
• Next by thread: plot command