The Hom functor is a bifunctor that’s covariant in one argument and contravariant in the other.

One can view the construction of group rings as a bifunctor that is covariant in both arguments.

But what is a (hopefully not contrived) example of a bifunctor that is contravariant in both arguments?

  • 1
    $\begingroup$ I'm assuming you would consider $(V,W) \mapsto (V \oplus W)^*$ as a bifunctor from $\text{Vect} \times \text{Vect} \to \text{Vect}$ "contrived"? $\endgroup$ Dec 12, 2020 at 4:54
  • 5
    $\begingroup$ If you write it as bilinear maps $V \times W \to k$ I think it's not contrived at all! $\endgroup$ Dec 12, 2020 at 6:01
  • $\begingroup$ @HallaSurvivor You may as well offer it as a solution, because you never know if your idea will be the most natural one that occurs to anybody. $\endgroup$
    – rschwieb
    Dec 12, 2020 at 17:16

2 Answers 2


Given any covariant bifunctor $A \times B \to C$ and a contravariant functor $C \to D^\text{op}$ we can compose to get a contravariant bifunctor.

One simple example of this might be $(V, W) \mapsto (V \oplus W)^*$ which sends a pair of vector spaces to the dual of their direct sum.

If we do the same construction with the tensor product instead of the direct sum, then we can write this in a slicker way by looking at bilinear maps $V \times W \to k$, which of course gives you $(V \otimes W)^*$. This is a nice observation due to Qiaochu, and is a natural object to study.

I hope this helps ^_^

  • 2
    $\begingroup$ The first description alone was what I was thinking of as artificial, since it basically caters directly to the request. But by finding the specific thing in the second half, I am totally satisfied that it’s a nice organic example! (And the first half justifies the second.) thank you! $\endgroup$
    – rschwieb
    Dec 12, 2020 at 21:54

I do not have an abstract mathematical example, but one of applied category theory---specifically in software. In Apache Kafka, records are stored in the log as a key and a value (think a Cartesian pair 𝐴×𝐵). What is called a producer for these records (a client that write them to the log) can be modeled as an endofunctor in the category in which the types of the programming language in question are objects and the functions are morphisms. This endofunctor is contravariant in both arguments, because the type of the key and the type of the value can both be mapped over with functions that go in the reverse direction as compared to the function that represents that whole mapping.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .