Adjoint Functors
Statement
Functors and are adjoint () if there is a natural bijection:
natural in both and . Equivalently, there exist natural transformations (unit) and (counit) satisfying the triangle identities:
Visualization
Free monoid underlying set in vs :
L = FreeMonoid : Set ─────▶ Mon (L(S) = S* = finite words over S)
R = forget : Mon ─────▶ Set (R(M) = underlying set of M)
Natural bijection for S = {a,b}, M = (ℤ, +):
┌─────────────────────────────────────────────────────────┐
│ MonHom(FreeMonoid{a,b}, (ℤ,+)) ≅ SetMap({a,b}, ℤ) │
│ │
│ f ↦ (a↦3, b↦-1) ←→ a↦3, b↦-1 │
│ f(ab) = 3 + (-1) = 2 │
│ f(aab) = 3+3+(-1) = 5 │
│ │
│ Unit η_S : S ──▶ R(L(S)) = S*: s ↦ [s] (singleton) │
│ Counit ε_M : L(R(M)) = M* ──▶ M: [m1,m2] ↦ m1·m2 │
└─────────────────────────────────────────────────────────┘
Triangle identity check:
ε_{LS} ∘ L(η_S) : LS ─▶ L(R(L(S))) ─▶ LS
[w] ──▶ <a class="concept-link" data-concept="w">w</a> ──▶ [w] ✓ (flatten-of-singleton = identity)
Proof Sketch
-
From hom-set bijection to unit/counit: The unit is the image of under the bijection . The counit is the preimage of under .
-
Triangle identities: The first triangle follows because both sides correspond to under the bijection (by naturality in ). The second is symmetric.
-
From unit/counit to bijection: Given , map to . Given , map to . The triangle identities ensure these are inverse.
-
Uniqueness: An adjoint functor is unique up to natural isomorphism once is fixed (and vice versa), by the Yoneda lemma.
Connections
Adjoint functors generalize Galois connections and appear in every corner of mathematics. The hom-set bijection is a manifestation of the Yoneda LemmaYoneda LemmaNatural transformations from a representable functor y_X to F biject with elements of F(X)Read more →. Limits and colimits are characterized by adjunctions — see Limits and ColimitsLimits and ColimitsUniversal cones over diagrams: limits generalize products and equalizers; colimits generalize coproducts and coequalizersRead more →.
Lean4 Proof
import Mathlib.CategoryTheory.Adjunction.Basic
open CategoryTheory
/-- The hom-set bijection for an adjunction L ⊣ R.
Mathlib provides this as `Adjunction.homEquiv`.
Note: `(L.obj X ⟶ Y) ≃ (X ⟶ R.obj Y)` is a Type (Equiv), not a Prop,
so we use `def` instead of `theorem`. -/
def adjunction_hom_equiv {C D : Type*} [Category C] [Category D]
{L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) (X : C) (Y : D) :
(L.obj X ⟶ Y) ≃ (X ⟶ R.obj Y) :=
adj.homEquiv X Y
/-- Unit of the adjunction: id_C ⟹ R ∘ L. -/
theorem adjunction_unit_naturality {C D : Type*} [Category C] [Category D]
{L : C ⥤ D} {R : D ⥤ C} (adj : L ⊣ R) (X : C) :
adj.homEquiv X (L.obj X) (𝟙 (L.obj X)) = adj.unit.app X :=
adj.homEquiv_id XReferenced by
- Natural TransformationCategory Theory
- Representable FunctorCategory Theory
- Functor CompositionCategory Theory
- Yoneda LemmaCategory Theory
- MonadCategory Theory
- Limits and ColimitsCategory Theory