Okay, let me discuss some answers to the puzzles!

**Puzzle 122.** Let C be the free category on this graph:

Let's use this as a database schema. Draw an example of a database built using this schema. Mathematically it's a functor \$$F:\mathcal{C} \to \textrm{Set}\$$. But what does this mean in concrete terms? You can draw it as a table, like you would see in a spreadsheet.

Keith wrote:

> \$\begin{array}{c|c} \text{People} & \mathrm{FriendOf} \\\\ \hline Alice & Bob \\\\ Bob & Alice \\\\ \vdots & \vdots \\\\ Stan & Tyler \\\\ Tyler & Stan \\\\ \vdots & \vdots \end{array} \$

Yes! That's right. However, you've done an example with symmetries that aren't required. We could have Alice be a friend of Bob even though Bob is not a friend of Alice, etc.

Just like lots of people "friend" Tom Cruise on Facebook even though he doesn't friend them back!

**Puzzle 123.** Let \$$\mathcal{D}\$$ be the free category on this graph:

Again this can be used as a database schema. What does a database built using this schema amount to, in concrete terms?

Keith wrote:

> If I did it correctly, it should be two tables:

> \$\begin{array}{c|c} \text{Germans} & \mathrm{FriendOf} \\\\ \hline Adele & Sara\\\\ Bertram & Antonio \\\\ \vdots & \vdots \\\\ Siegmund & Teresa \\\\ Tyler & Bruno \\\\ \vdots & \vdots \end{array} \quad \begin{array}{c|c} \text{Italians} & \mathrm{FriendOf}^\prime \\\\ \hline Antonio & Bertram \\\\ Bruno & Bertram \\\\ \vdots & \vdots \\\\ Sara & Adele \\\\ Teresa & Siegmund \\\\ \vdots & \vdots \end{array} \$

Yes, that's right! Nice names, too!

Owen wrote to Keith:

> If you combine your answers to Puzzles 122 and 124 to get an answer to Puzzle 125, you get something like this:

> \$\begin{array}{c|c} \text{Germans} & \mathrm{FriendOf} \\\\ \hline Alice_0 & Bob_1 \\\\ Bob_0 & Alice_1 \\\\ \vdots & \vdots \\\\ Stan_0 & Tyler_1 \\\\ Tyler_0 & Stan_1 \\\\ \vdots & \vdots \end{array} \quad \begin{array}{c|c} \text{Italians} & \mathrm{FriendOf}' \\\\ \hline Alice_1 & Bob_0 \\\\ Bob_1 & Alice_0 \\\\ \vdots & \vdots \\\\ Stan_1 & Tyler_0 \\\\ Tyler_1 & Stan_0 \\\\ \vdots & \vdots \end{array} \$

> Which seems to duplicate every person into both a German *and* an Italian version, but make all the German versions' friends the Italian versions and vice versa. Weird!

Right! This is the correct answer to Puzzle 125.

You say the answer is weird... and you're right! When I posed the puzzle, I said:

> Don't be shocked if the answer to this last puzzle is sort of weird. You are taking a database about \$$\textrm{People}\$$ and their friends and turning it into a database about \$$\textrm{Germans}\$$ and \$$\textrm{Italians}\$$... without having any information at hand about which people are Germans and which are Italians! This is bound to give something strange.

Since you're not saying whether Alice is German or Italian, and you're forcing the math to make a decision about this, without flipping a coin to break the symmetry, all the math can do is posit _both_ a German _and_ an Italian version of Alice! And similarly with Bob, and all the rest.

Next, you're demanding that Germans have only Italian friends and Italians have only German friends, and you're saying Alice is a friend of Bob. So, all the math can do is guess that the German Alice has the Italian Bob as a friend, and the Italian Alice has the German Bob as a friend.

It's wacky, but it's about the best the poor math can do, given what you're demanding of it.