I refer to "Sheaves in Geometry and Logic", by S. MacLane.


Let **C** be a category. Dealing with a *subobject* of an object $D \in \text{Ob}\_{\mathbf C}$, one defines an equivalence relation between morphisms towards *D*:



> 
> Two monomorphisms $f:A\to D$, $g:B\to D$ with a common codomain *D* are called *equivalent* if there exists an isomorphism $h\colon A\to B$ such that *gh*= *f*.
>  A *sbobject* of *D* is an equivalence class of monos towards *D*. The collection Sub**C**(*D*) of subobject of *D* carries a natural partial order [...].
>  Then Sub**C**(*D*) is **the set** of all subobjects of *D* in the category **C**.
> 
> 
> 


I can't figure out *why* Sub**C**(*D*) is a set, rather than a proper class! Indeed, we are considering something like an qeuivalence relation on


$\displaystyle \coprod\_{A\in \text{Ob}} \text{Hom}\_{\bf C}(A,D)$


which is not a set, as soon as **C** isn't small.


So, how can I avoid the problem?



Is the subobject functor really a presheaf?
For a general category the subobjects do indeed not have to form a set. 


In the context of MacLane/Moerdijk you only look at toposes and there one has a natural isomorphism $Sub\_{\mathbf{C}}(D) \cong Hom\_{\mathbf{C}}(D,\Omega)$, where $\Omega$ is the subobject classifier. 


So it follows from the axioms of a topos, *(edit, thanks Mike:) if it is locally small*, that $Sub\_{\mathbf{C}}(D)$ is a set. When you prove that the basic examples, sheaves, finite sets, products of those, etc. are toposes you exhibit an object $\Omega$ and establish the above bijection. Before that point the left hand side could a priori be a proper class but the right hand side is a set, since you know that your category is locally small, and your bijection then shows that subobjects form a set.


Knowing this you can conclude that objects in full subcategories *(edit, thanks again:) whose embedding preserves monos (e.g. if they are reflective)* of toposes also have a set of subobjects, e.g. in all locally presentable categories...


