Choose sets X and Y with between two and four elements each, and choose a function \\( f: X \rightarrow Y \\).

1. Choose two different subsets \\( B_1 , B_2 \subseteq Y \\) and find \\( f^{−1}(B_1) \\) and \\( f^{-1}(B_2) \\).
2. Choose two different subsets \\( A_1 , A_2 \subseteq X \\) and find \\( f_!( A_1 ) \\) and \\( f_! (A_2) \\).
3. With the same \\( A_1 , A_2 \subseteq X \\), find \\( f_* (A_1) \\) and \\( f_* (A_2 ) \\).

**Example 1.101**.

Let \\( f : X \rightarrow Y \\) be a function between sets.
We can imagine X as a set of balls, \\( Y \\) as a set of buckets, and \\( f \\) as putting each ball in a bucket.
Then we have the monotone map \\( f^*: \mathbb{P} Y \rightarrow \mathbb{P} X \\) that category theorists call “pullback along f ”.
This map takes a subset \\( B \subseteq Y \\) to its preimage \\( f^{−1} B \subseteq X: \\) that is,
it takes a collection \\( B \\) of buckets, and tells you all the balls that lie in them.
This operation is monotonic (more buckets means more balls) and it has both a left and a right adjoint.
The left adjoint \\( f_! (A) \\) is given by the direct image: it maps a subset \\( A \subseteq X \\) to

\[ f_{!} (A) := \\{ y \in Y | \exists a \in A \text{ such that } f(a) = y \\} \]

This map hence takes a set \\( A \\) of balls, and tells you all the buckets that contain at least one of these balls.
The right adjoint \\( f_* \\) maps a subset \\( A \subseteq X \\) to

\[ f_* (A) := \\{ y \in Y | \forall a \text{ such that } f(a) = y \text{ we have } a \in A \\} \]