Jonathan wrote:

> John wrote:

> > Maybe someone can expound a bit more on the notion of 'consistency' that I'm vaguely alluding to. All I mean is that a bunch of squares commute... but it's good to try to tease out the meaning of this, and express it in something resembling plain English.

> Well, I'm not sure if this is exactly what you're referring to, but maybe it's close?

> Generally speaking, homomorphisms identify a substructure of a target object that resembles (i.e. preserves the behavior of) the source object [...]

Your answer is great, but I was fishing for a more down-to-earth answer connected to the database examples we're looking at. Something like this:

When we change databases using a natural transformation, relationships are preserved.

For example if Vanessa is a friend of Bodo and we rename Bodo as "Herr Schmidt" and rename Vanessa as "Signora Cucinelli", naturality demands that Signora Cucinelli be a friend of Herr Schmidt!

We say a transformation \\(\alpha: F \Rightarrow G \\) between database instances \\(F,G : \mathcal{C} \to \mathbf{Set}\\) is **natural** if for each morphism \\(f : x \to y\\) in \\(\mathcal{C}\\), this square commutes:

or in other words,

\[ G(f) \alpha_x = \alpha_y F(f) .\]

In our database examples, \\(F\\) and \\(G\\) each map every "data type" (=object of \\(\mathcal{C}\\) to a set of entities of that type, and every "relationship" (=morphism of \\(\mathcal{C}\\) to a function between sets. Here I'm using the word "relationship" for morphisms of \\(\mathcal{C}\\) simply because we've seen examples like

\[ \textrm{FriendOf} : \textrm{German} \to \textrm{Italian} .\]

The natural transformation \\(\alpha\\) "renames" elements of the set \\(F(x)\\), turning them into elements of \\(G(x)\\) via

\[ \alpha_x : F(x) \to G(x) .\]

Similarly, it renames elements of \\(F(y)\\), turning them into elements of \\(G(y)\\). We want this renaming process to be **consistent** in the sense that if \\(a \in F(x) \\) is related to \\(b \in F(y)\\) by the relationship \\(f\\) in our first database:

\[ b = F(f) (a) \]

then \\(\alpha_x (a) \in G(x) \\) is related to \\(\alpha_y (b) \in G(y)\\) by the relationship \\(f\\) in our second database:

\[ \alpha_y (b) = G(f) (\alpha_x(a)) .\]

So for example if \\(b = \\) Vanessa is a friend of \\(a = \\) Bodo and we rename Bodo as "Herr Schmidt" and rename Vanessa as "Signora Cucinelli", we want Signora Cucinelli to be a friend of Herr Schmidt.

Saying

\[ b = F(f) (a) \quad \implies \quad \alpha_y (b) = G(f) (\alpha_x(a)) \]

is just another way of saying that this square commutes:

> John wrote:

> > Maybe someone can expound a bit more on the notion of 'consistency' that I'm vaguely alluding to. All I mean is that a bunch of squares commute... but it's good to try to tease out the meaning of this, and express it in something resembling plain English.

> Well, I'm not sure if this is exactly what you're referring to, but maybe it's close?

> Generally speaking, homomorphisms identify a substructure of a target object that resembles (i.e. preserves the behavior of) the source object [...]

Your answer is great, but I was fishing for a more down-to-earth answer connected to the database examples we're looking at. Something like this:

When we change databases using a natural transformation, relationships are preserved.

For example if Vanessa is a friend of Bodo and we rename Bodo as "Herr Schmidt" and rename Vanessa as "Signora Cucinelli", naturality demands that Signora Cucinelli be a friend of Herr Schmidt!

We say a transformation \\(\alpha: F \Rightarrow G \\) between database instances \\(F,G : \mathcal{C} \to \mathbf{Set}\\) is **natural** if for each morphism \\(f : x \to y\\) in \\(\mathcal{C}\\), this square commutes:

or in other words,

\[ G(f) \alpha_x = \alpha_y F(f) .\]

In our database examples, \\(F\\) and \\(G\\) each map every "data type" (=object of \\(\mathcal{C}\\) to a set of entities of that type, and every "relationship" (=morphism of \\(\mathcal{C}\\) to a function between sets. Here I'm using the word "relationship" for morphisms of \\(\mathcal{C}\\) simply because we've seen examples like

\[ \textrm{FriendOf} : \textrm{German} \to \textrm{Italian} .\]

The natural transformation \\(\alpha\\) "renames" elements of the set \\(F(x)\\), turning them into elements of \\(G(x)\\) via

\[ \alpha_x : F(x) \to G(x) .\]

Similarly, it renames elements of \\(F(y)\\), turning them into elements of \\(G(y)\\). We want this renaming process to be **consistent** in the sense that if \\(a \in F(x) \\) is related to \\(b \in F(y)\\) by the relationship \\(f\\) in our first database:

\[ b = F(f) (a) \]

then \\(\alpha_x (a) \in G(x) \\) is related to \\(\alpha_y (b) \in G(y)\\) by the relationship \\(f\\) in our second database:

\[ \alpha_y (b) = G(f) (\alpha_x(a)) .\]

So for example if \\(b = \\) Vanessa is a friend of \\(a = \\) Bodo and we rename Bodo as "Herr Schmidt" and rename Vanessa as "Signora Cucinelli", we want Signora Cucinelli to be a friend of Herr Schmidt.

Saying

\[ b = F(f) (a) \quad \implies \quad \alpha_y (b) = G(f) (\alpha_x(a)) \]

is just another way of saying that this square commutes: