A set is a collection of things that are all mutually distinct.

You can represent a set of symbols as a list of symbols such that all
symbols are mutually unequal (`symbol=?`).

Design the function `element-of?`, which determines whether a given
element is in a given set.

Design the function `add-element`, which consumes a symbol and a set
and constructs a new set that includes this symbol.

Design the function `remove-element`, which removes a given symbol
from a given set. Hint: Is it always true that

```
(boolean=? (element-of? e (remove-element e s)) false)
```

for all elements `e` and sets `s`?
Design the function `union`, which creates a set from the elements of
two given sets.

Design the function `intersect`, which creates a set from the
elements that are common to two given sets.

[Note: This problem continues problem 2.]

A relation is a set of tuples. For illustrative purposes, we use tuples of
symbols:

```
;; A tuple is (list Symbol Symbol).
;; Example:
(define a-tuple '(a b))
;; A relation is a set of tuples.
```

Design the function `domain`, which collects all firsts from a given
relation in a set.

Design the function `range`, which collects all seconds from a given
relation in a set.

Design the function `at`. It consumes a set `S`and a relation
`R`. Its purpose is to collect all the seconds from all tuples in
`R` whose first is a member of `S`.

Design the function `x`. It consumes two sets and creates a relation
that combines all elements from the first set with all elements from the second
set. Example:

```
(equal? (x '(a b) '(x y z))
'((a x) (a y) (a z) (b x) (b y) (b z)))
```