3 ms·
Exponents are probably the easier aspect to understand. For instance, what is the number of distinct functions between a set X and a set Y? Well, for every inpu
by Twisol 6y ago
Exponents are probably the easier aspect to understand. For instance, what is the number of distinct functions between a set X and a set Y? Well, for every input value of X, we get to choose any single output value of Y. There are |Y| choices of output, so we have |Y| * |Y| * ... * |Y|, where there are |X| factors in that multiplication. In short, there are |Y| ^ |X| functions from X to Y. So we'll often denote the function space by Y^X itself, and thus it gets called an "exponential".
In the category Set, the "exponential" of two sets X and Y is exactly the set of functions from X to Y. In other categories with a concept of exponential, you get a similar internalization of collections of the category's morphisms as objects of the category. You also almost always have an exponential law, (Z^Y)^X = Z^(X*Y)). (If you interpret ^ as "if" and * as "and", you get a common law of logic that we often use when refactoring nested if-statements!)
For a functor to "preserve" an exponential operation (or any other operation) is to be able to do the exponentiation either before or after the functor without changing the result. In symbols, F(X^Y) = F(X)^F(Y). (Compare with linear transformations from linear algebra, in which f(a*x + y) = a*f(x) + f(y).)
Limits are a bit more fundamentally categorical, and I still don't have a good intuition for them. If you think of a functor as projecting the shadow of some index category onto your target category, a limit is in some sense a "best pre-approximation" in the target category, such that if you have a function from elsewhere in the target category into the part under your functor, you can equivalently make a pit stop at the limit object before continuing on into the functor's image.
In some sense, it's like an optimal border control point just outside your functor's image -- you can systematically divert traffic through the limit without actually changing the results.
I'm not sure how to intuitively interpret "preserves limits", since I guess you'd need another functor lying around whose limit is preserved under composition with your first functor. Something like F(Lim(G)) = Lim(F . G), perhaps. But now I'm just reading Wikipedia.
- 6gvONxR4sf7o 6y agoThanks! I like the "if" "and" example. Do you have any other examples of the "internalization of the category's morphisms?"
- Twisol 6y agoMost of the common examples are mathematical widgets. For example, for any two vector spaces V, W, there's a vector space of linear transformations from V to W. Given a vector in V and a transformation W^V, you can get a vector in W -- I think categorically this is called the hom-tensor adjunction? It's a long-standing desire of mine to find categorical examples closer to software engineering. The usual example is the family of cartesian-closed categories corresponding to simply-typed lambda calculi -- "first-class functions" is exactly saying that you can take and return functions themselves as values, which witnesses that the morphisms of the category are "internalized" as elements of some type. I've never found it to give a very visceral intuition for the concept though.