I am in a Discrete Math course and am trying to replicate De Morgan's law of

Complement(B union C) = Complement(B) intersect Complement(C).

I tried searching for Python's ability to perform a complement on a set, but I didn't see much if anything.

So I just tried this in IDLE. Does this appear correct?

```
U = {'pink', 'purple', 'red', 'blue', 'gray', 'orange', 'green', 'yellow', 'indigo', 'violet'}
A = {'purple', 'red', 'orange', 'yellow', 'violet'}
B = {'blue', 'gray', 'orange', 'green'}
C = {'pink', 'red','blue','violet'}
Comp_B = U - B
Comp_C = U - C
Comp_Union_BC = Comp_B.intersection(Comp_C)
print(Comp_Union_BC)
```

## Answer

The complement of a set is everything *not* in the set, but part of the 'universal set'. Without a definition of the universal set, you can't really give a standard-library definition of *the complement of a set*.

Moreover, the Python `set`

type deals in sets of discrete objects, not a mathematical construct that could be infinitely large, such as *all natural numbers*. So Python doesn't support the general, nebulous and infinite idea of a single universal set.

For specific domains, if you can define the universal set in discrete terms, simply define your own `complement()`

callable. For example, given a global definition of the universal set *U*, you can define the complement of a set `a`

as the difference between *U* and that set:

```
U = {'pink', 'purple', 'red', 'blue', 'gray', 'orange', 'green', 'yellow', 'indigo', 'violet'}
def complement(a):
# difference between a global universal set U and the given set a
return U - a
```

or, simpler still:

```
complement = U.difference
```

Then just pass a set to `complement()`

to test the hypothesis:

```
>>> # set | set == set union, set & set == set intersection
...
>>> complement(B | C) == complement(B) & complement(C)
True
```

So yes, your interpretation is correct, `U - B`

produces the complement of `B`

.