In , a subobject classifier is a special object Ω of a category such that, intuitively, the subobjects of any object X in the category correspond to the morphisms from X to Ω. In typical examples, that morphism assigns "true" to the elements of the subobject and "false" to the other elements of X. Therefore, a subobject classifier is also known as a "truth value object" and the concept is widely used in the categorical description of logic. Note however that subobject classifiers are often much more complicated than the simple binary logic truth values {true, false}.
As an example, the set Ω = {0,1} is a subobject classifier in the and functions: to every subset A of S defined by the inclusion function j : A → S we can assign the function χA from S to Ω that maps precisely the elements of A to 1 (see characteristic function). Every function from S to Ω arises in this fashion from precisely one subset A.
To be clearer, consider a subset A of S (A ⊆ S), where S is a set. The notion of being a subset can be expressed mathematically using the so-called characteristic function χA : S → {0,1}, which is defined as follows:
(Here we interpret 1 as true and 0 as false.) The role of the characteristic function is to determine which elements belong to the subset A. In fact, χA is true precisely on the elements of A.
In this way, the collection of all subsets of S and the collection of all maps from S to Ω = {0,1} are isomorphic.
To categorize this notion, recall that, in category theory, a subobject is actually a pair consisting of an object and a monic arrow (interpreted as the inclusion into another object). Accordingly, true refers to the element 1, which is selected by the arrow: true: {0} → {0, 1} that maps 0 to 1. The subset A of S can now be defined as the of true along the characteristic function χA, shown on the following diagram:
Defined that way, χ is a morphism SubC(S) → HomC(S, Ω). By definition, Ω is a subobject classifier if this morphism is an isomorphism.
For the general definition, we start with a category C that has a terminal object, which we denote by 1.