A functor F: C → D between categories assigns to each object A in C an object F(A) in D, and to each morphism f: A → B a morphism F(f): F(A) → F(B), preserving composition and identities: F(g∘f) = F(g)∘F(f) and F(id_A) = id_{F(A)}. Functors are the morphisms of the category of categories; they include familiar constructions like the forgetful functor from Grp to Set, the free group functor, and the fundamental group functor in topology. A contravariant functor reverses the direction of morphisms and can be viewed as a covariant functor from C^op.
Work through at least three concrete functors: the forgetful functor from groups to sets, the power set functor on Set, and the hom-functor Hom(A, -). Verify functoriality axioms explicitly for each. Then identify where contravariance arises naturally (e.g., Hom(-, B) reverses arrows).
In category theory, you have seen that a category consists of objects, morphisms between them, composition of morphisms, and identity morphisms — and that all of the interesting information lives in the morphisms, not just in the objects. A functor is the natural notion of a structure-preserving map between categories: it translates one category into another in a way that respects all of this structure.
Formally, a functor F: C → D has two components. First, an object map: for every object A in C, it assigns an object F(A) in D. Second, a morphism map: for every morphism f: A → B in C, it assigns a morphism F(f): F(A) → F(B) in D. These two components must satisfy the functoriality axioms: F preserves composition, meaning F(g∘f) = F(g)∘F(f), and F preserves identities, meaning F(id_A) = id_{F(A)}. If either axiom fails, the map is not a functor — it does not respect categorical structure.
The forgetful functor U: Grp → Set is the most accessible example. It sends each group (G, ·) to its underlying set G, forgetting the multiplication structure. Each group homomorphism h: G → H is already a function between sets, so U(h) = h as a bare function. Composition and identities are preserved trivially. The power set functor P: Set → Set is another example: it sends each set X to its power set P(X), and each function f: X → Y to the function P(f): P(X) → P(Y) defined by P(f)(S) = {f(s) | s ∈ S}. Checking functoriality here requires a small calculation worth doing.
Contravariant functors arise when the morphism map reverses arrows: F sends f: A → B to F(f): F(B) → F(A). The most important example is the contravariant hom-functor Hom(-, B): C^op → Set, which sends each object A to the set of morphisms Hom(A, B) and each morphism f: A → A' to the pre-composition function f*: Hom(A', B) → Hom(A, B). This reversal is not an anomaly but a fundamental feature: contravariant functors appear naturally whenever you are mapping into a target rather than out of it. The clean way to handle them is to note that a contravariant functor C → D is the same as a covariant functor C^op → D, so all theorems about covariant functors apply.
Functors are not merely curiosities — they are the morphisms of the category Cat (the category of all small categories), so they allow you to reason about categories as objects in their own right. More concretely, every major construction in mathematics that maps between mathematical structures and does so coherently — fundamental groups in topology, homology groups in algebraic topology, free constructions in algebra — is a functor. The discipline of checking that a construction is actually functorial (rather than just defined on objects) is what forces mathematical precision and reveals hidden structure. Natural transformations, which you will study next, are the morphisms between functors, and together they give you the tools to compare mathematical structures at a level of abstraction that pays off across all of modern mathematics.