# Sets

A set is an unordered collection of unique elements. Both Sage and Mathematica provide a means for working with sets, creating sets and performing various operations on them.

## Creating a Set

### Sage

Sets are a built-in type in Python and as such Sage provides built-in support for sets. To create a Set in Sage you use the syntax set(list).

Example - Creating a Set

```mySet = set( [1,2,3,4,5] )
```

### Mathematica

Mathematica doesn't have a separate data-type, instead sets are represented in Mathematica using lists. Mathematica then provides special functions for performing set operations on lists.

Example - Creating a Set

```mySet = {1,2,3,4,5}
```

## Adding Values to a Set

### Sage

The set class in Python provides a method called add for adding an element to a set. Note if add is passed an element already in the set then the set remains unmodified.

Example - Add an element to a set

```mySet = set([1,2,3,4])
```

## Removing a Value from a Set

### Sage

The set class in Python provides a method called remove for removing an element from a set. Note that if remove is passed an element not in the set a KeyError will be raised.

Example - Remove an element from a set

```mySet = set([1,2,3,4])
mySet.remove(2)
```

## Union

The union of two sets a,b is the set of all the elements that are in either a or b.

### Sage

Python provides to ways for getting the union of two sets. One is with the | operator, and the other is with the method union.

Example - Union of a and b

```a = set([1,2,3])
b = set([4,5,6])
#all the statements below are equivalent
a|b
a.union(b)
b.union(a)
#output set([1, 2, 3, 4, 5, 6])
```

### Mathematica

Mathematica provides two ways for getting the union of two sets. One is to use the mathematical notation $a \cup b$. The other is to use the Union function.

Example - Union of a and b

```a = {1,2,3}
b = {4,5,6}
Union[a,b]
(* Output: {1, 2, 3, 4, 5, 6} *)
```

## Intersection

The intersection of two sets a,b is the set of all elements that are in both a and b.

### Sage

Python provides two ways for getting the intersection of two sets. One is to use the & operator and the other is to use the method intersection.

Example - Intersection of a and b

```a = set([1,2,3,9])
b = set([1,2,5,6,7,9])
#The statements below are equivalent
a & b
a.intersection(b)
b.intersection(a)
#Output set([1,2,9])
```

### Mathematica

Mathematica provides two ways for getting the intersection of two sets. One is to use the mathematical notation $a\cap b$. The other is to use the function Intersection.

Example - Intersection of a and b

```a = {1,2,3,9}
b = {1,2,5,6,7,9}
Intersection[a,b]
(* Output: {1,2,9} *)
```

## Complement

The complement of a set b in a set a is a set of all elements in a but not in b.

### Sage

Python provides two ways for determining the complement of a set in another set. One is to use the - operator and the other is to use the method difference.

Example

```a = set([1,2,3])
b = set([1,4,5])
a - b
#output set([2,3])
b - a
#output set([4,5])
a.difference(b)
#output set([2,3])
```

### Mathematica

In Mathematica the complement of a set a in the set b is determined using the function Complement.

Example

```a = {1,2,3}
b = {1,4,5}
Complement[a,b]
#output {2,3}
Complement[b,a]
#output {4,5}
```

## Symmetric Difference

Python also provides an operation on sets called the symmetric difference. The symmetric difference of a set a and a set b is the set of all elements that are in either a or b, but not both.

### Sage

Python provides two ways for getting the symmetric difference of two sets a and b. One is to use the method symmetric_difference. The other is to use the ^ operator. Important: The ^ operator only works in Python it does not work in Sage. The reason for this is that Sage's preprocessor considers the ^ operator to mean a raised to the power b, and converts it to **.

Example

```a = set([1,2,3])
b = set([1,4,5])
a.symmetric_difference(b)
#output set([2,3,4,5])
```

## Subsets

A set a is a subset of b if every element of a is also an element of b.

### Determining Subsets

#### Sage

To determine if a set a is a subset of the set b you use the method issubset.

Example:

```a = set([2,3])
b = set([1,2,3])
a.issubset(b)
#Output True
b.issubset(a)
#Output False
```

### Getting a list of all Subsets

#### Sage

Python doesn't natively provide a means of getting a list of all subsets of a set. However Sage provides a class called Subsets that can be used to get a list of all subsets of a set.

Example:

```a = set([1,2,3,4])
ls = Subsets(a)
ls.list()
#Output: [{}, {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4},
#{1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}, {1, 2, 3, 4}]
ls = Subsets(a,3)
ls.list()
#Output: [{1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}]
```

#### Mathematica

Mathematica provides a function Subsets that returns a list of all the subsets of a set.

Example:

```a = {1,2,3,4}
Subsets[a]
#Output: {{}, {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3,
#  4}, {1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}, {1, 2, 3, 4}}
Subsets[a,{3}]
#Output: {{1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}}```