One of the main lessons of category theory is that whenever you think about some kind of mathematical gadget, you should also think about maps _between_ gadgets of this kind. For example, when you think about sets you should also think about functions. When you think about vector spaces you should also think about linear maps. And so on.
We've been talking about various kinds of monoidal preorders. So, let's think about maps _between_ monoidal preorders.
As I explained in [Lecture 22](https://forum.azimuthproject.org/discussion/2084/lecture-22-chapter-2-symmetric-monoidal-preorders/p1), a monoidal preorder is a crossbreed or hybrid of a _preorder_ and a _monoid_. So let's think about maps between preorders, and maps between monoids, and try to hybridize those.
We've already seen maps between preorders: they're called [monotone functions](https://forum.azimuthproject.org/discussion/1828/lecture-4-chapter-1-galois-connections/p1):
**Definition.** A **monotone function** from a preorder \\((X,\le_X)\\) to \\((Y,\le_Y)\\) is a function \\(f : X \to Y\\) such that
\[ x \le_X x' \textrm{ implies } f(x') \le_Y f(x') \]
for all elements \\(x,x' \in X\\).
So, these functions preserve what a preorder has, namely the relation \\(\le\\). A monoid, on the other hand, has an associative operation \\(\otimes\\) and a unit element \\(I\\). So, a map between monoids should preserve th0se! That's how this game works.
Just to scare people, mathematicians call these maps "homomorphisms":
**Definition.** A **homomorphism** from a monoid \\( (X,\otimes_X,I_X) \\) to a monoid \\( (Y,\otimes_Y,I_Y) \\) is a function \\(f : X \to Y\\) such that:
\[ f(x \otimes_X x') = f(x) \otimes_Y f(x') \]
for all elements \\(x,x' \in X\\), and
\[ f(I_X) = I_Y .\]
You've probably seen a lot of homomorphisms between monoids. Some of them you barely noticed. For example, the set of integers \\(\mathbb{Z}\\) is a monoid with addition as \\(\otimes\\) and the number \\(0\\) as \\(I\\). So is the set \\(\mathbb{R}\\) of real numbers! There's a function that turns each integer into a real number:
\[ i: \mathbb{Z} \to \mathbb{R} . \]
It's such a bland function you may never have thought about it: it sends each integer to _itself_, but _regarded as a real number_. And this function is a homomorphism!
What does that mean? Look at the definition. It means you can either add two natural numbers and then regard the result as a real number... or first regard each of them as a real number and then add them... and you get the same answer either way. It also says that integer \\(0\\), regarded as a real number, is the real number we call \\(0\\).
Boring facts! But utterly crucial facts. Computer scientists need to worry about these things, because for them integers and real numbers (or floating-point numbers) are different [data types](https://en.wikipedia.org/wiki/Data_type), and \\(i\\) is doing ["type conversion"](https://en.wikipedia.org/wiki/Type_conversion).
You've also seen a lot of other, more interesting homomorphisms between monoids.
For example, the whole point of the logarithm function is that it's a homomorphism. It carries multiplication to addition:
\[ \log(x \cdot x') = \log(x) + \log(x') \]
and it carries the identity for multiplication to the identity for addition:
\[ \log(1) = 0. \]
People invented tables of logarithms, and later slide rules, precisely for this reason! They wanted to convert multiplication problems into easier addition problems.
You may also have seen linear maps between vector spaces. A vector space gives a monoid with addition as \\(\otimes\\) and the zero vector as \\(I\\); any linear map between vector spaces then gives a homomorphism.
**Puzzle 80.** Tell me a few more homomorphisms between monoids that you routinely use, or at least know.
I hope I've convinced you: monotone functions between preorders are important, and so are homomorphisms between monoids. Thus, if we hybridize these concepts, we'll get a concept that's likely to be important.
It turns out there are a few different ways! The most obvious way is simply to combine all the conditions. There are other ways, so this way is called "strict":
**Definition.** A **strict monoidal monotone** from a monoidal preorder \\( (X,\le_X,\otimes_X,I_X) \\) to a monoidal preorder \\( (Y,\le_Y,\otimes_Y,I_Y) \\) is a function \\(f : X \to Y\\) such that:
\[ x \le_X x' \textrm{ implies } f(x') \le_Y f(x') \]
and
\[ f(x) \otimes_Y f(x') = f(x \otimes_X x') \]
for all elements \\(x,x' \in X\\), and also
\[ I_Y = f(I_X) . \]
For example, the homomorphism
\[ i : \mathbb{Z} \to \mathbb{R} ,\]
is a strict monoidal monotone: if one integer is \\(\le\\) another, then that's still true when we regard them as real numbers. So is the logarithm function.
What other definition could we possibly use, and why would we care? It turns out sometimes we want to replace some of the equations in the above definition by inequalities!
**Definition.** A **lax monoidal monotone** from a monoidal preorder \\((X,\le_X,\otimes_X,I_X)\\) to a monoidal preorder \\((Y,\le_Y,\otimes_Y,I_Y)\\) is a function \\(f : X \to Y\\) such that:
\[ x \le_X x' \textrm{ implies } f(x') \le_Y f(x') \]
and
\[ f(x) \otimes_Y f(x') \le_Y f(x \otimes_X x') \]
for all elements \\(x,x' \in X\\), and also
\[ f(1_X) \le_Y I_Y . \]
Fong and Spivak call this simply a **monoidal monotone**, since it's their favorite kind. But I will warn you that others call it "lax".
We could also turn around those last two inequalities:
**Definition.** An **oplax monoidal monotone** from a monoidal preorder \\((X,\le_X,\otimes_X,I_X)\\) to a monoidal preorder \\((Y,\le_Y,\otimes_Y,I_Y)\\) is a function \\(f : X \to Y\\) such that:
\[ x \le_X x' \textrm{ implies } f(x') \le_Y f(x') \]
and
\[ f(x \otimes_X x') \le_Y f(x) \otimes_Y f(x') \]
for all elements \\(x,x' \in X\\), and also
\[ I_Y \le f(I_X) . \]
You are probably drowning in definitions now, so let me give some examples to show that they're justified. The monotone function
\[ i : \mathbb{Z} \to \mathbb{R} \]
has a right adjoint
\[ \lfloor \cdot \rfloor : \mathbb{R} \to \mathbb{Z} \]
which provides the approximation _from below_ to the nonexistent inverse of \\(i\\): that is, \\( \lfloor x \rfloor \\) is the greatest integer that's \\(\le x\\). It also has a left adjoint
\[ \lceil \cdot \rceil : \mathbb{R} \to \mathbb{Z} \]
which is the best approximation _from above_ to the nonexistent inverse of \\(i\\): that is, \\( \lceil x \rceil \\) is the least integer that's \\(\ge x\\).
**Puzzle 81.** Show that one of the functions \\( \lfloor \cdot \rfloor : \mathbb{R} \to \mathbb{Z} \\), \\( \lceil \cdot \rceil : \mathbb{R} \to \mathbb{Z} \\) is a lax monoidal monotone and the other is an oplax monoidal monotone, where we make the integers and reals into monoids using addition.
So, you should be sensing some relation between left and right adjoints, and lax and oplax monoidal monotones. We'll talk about this more! And we'll see why all this stuff is important for resource theories.
Finally, for the bravest among you:
**Puzzle 82.** Find a function between monoidal preorders that is both lax and oplax monoidal monotone but not strict monoidal monotone.
In case you haven't had enough jargon for today: a function between monoidal preorders that's both lax and oplax monoidal monotone is called **strong** monoidal monotone.
**[To read other lectures go here.](http://www.azimuthproject.org/azimuth/show/Applied+Category+Theory#Chapter_2)**