Let *G* be a directed graph whose nodes are the positive integers and whose edges represent relations between two integers. In our first example we’ll draw an edge from *x* to *y* if *x* is a multiple of *y*. In our second example we’ll draw an edge from *x* to *y* if *x* ≥ *y*.

In both examples we define a function *p*(*x*, *y*) to be the unique node such that whenever a node *z* has directed edges going to *x* and to *y*, there is also a directed node from *z* to *p*(*x*, *y*).

## Multiplication example

In this example there will be an edge from *x* to *y* if (and only if) *x* is a multiple of *y*. So, for instance, there is an edge from every even number to 2. There are edges from 15 to 1, 3, 5, and 15.

Now suppose there is some node with edges to 6 and 7. Call this node *p*(6, 7) or just *p*. Then *p* must be some multiple of 6 and 7. Also, by our definition of *p* we know that if there is an edge from any node *z* to 6 and 7, there must also be an edge from *z* to *p*. This says every multiple of 6 and 7 must also be a multiple of *p*. So *p* = 42. The node labeled *z* could be 4200, for example, but *p* can only be 42.

To generalize from this example, the node *p*(*x*, *y*) is the least common multiple of *x* and *y*.

## Order example

In this example there will be an edge from *x* to *y* if and only if *x* ≥ *y*. Every positive integer points to itself and to every smaller integer.

Now what would *p*(*x*, *y*) be? It’s something no less than *x* and no less than *y*. And by definition of *p*, every number greater than *p*(*x*, *y*) is at least as big as *p*(*x*, *y*). That is, *p*(*x*, *y*) is the smallest integer no less than *x* or *y*, i.e. the maximum of *x* and *y*.

## The reveal

The integer *p*(*x*, *y*) is the product of *x* and *y* in the sense of category theory. It may also be the product in the basic sense of multiplying two numbers together, but it might not be. The definition in terms of nodes and edges generalizes the notion of product, so that the familiar product is an example, the canonical example, but not the only example.

The category theory notion of a product abstracts something that multiplication and maximum have in common. More on this here.

We could go back and define a function *c*(*x*, *y*) by saying replacing “to” with “from” in the definition of *p*. That is, *c*(*x*, *y*) is the unique node such that whenever a node *z* has directed edges coming from *x* and from *y*, there is also a directed node to *z* coming from *c*(*x*, *y*). The function *c* is the coproduct.

## Emphasizing the edges

In category theory, definitions, such as the definition of product and coproduct, depend not just on the objects but on the morphisms between them. In graph theory language, definitions depend not just on the nodes but also on the edges. Keep the same objects but define different morphisms and you get different products, as we did above.

Often there is a standard set of morphisms (edges), so standard that they are often left implicit. That’s usually OK, but sometimes the morphisms need to be emphasized, either because they are not the usual morphisms or because we need to stress some property of the morphisms. Morphisms are typically structure-preserving functions, and we may need to emphasize the structure-preserving part.