------------------------------------------------------------------------------ Category Theory Library for Coq (coq-categories) Adam Megacz One of the difficulties with putting together a formalization of category theory is deciding how to organize it. For example: should the formalization of exponential objects be grouped with the formalization of adjunctions or the formalization of monoidal categories? I took the easy route and imitated the structure of Awodey's book __Category Theory__. If you're looking for a concept (like exponential objects), find it in his book first, then look in the file witht he corresponding chapter number. IMPORTANT NOTE ABOUT BIFUNCTORS: I've come across this really hideous performance bug in Coq which seems to be triggered whenever you start using functors whose domain or codomain is the product of two categories (i.e., product object in __Cat__). Nobody on coq-club seems to know what's going on, and several different representations all trigger the bug. Therefore, I have -- unfortunately -- chosen definitions which avoid product categories and bifunctors wherever possible. IMPORTANT NOTE ABOUT SUBCATEGORIES: non-wide subcategories (that is, subcategories which do not include all objects of the parent category) are awkward to handle in Coq. This is because they unavoidably involve reasoning about equality of objects, and objects are the indices of the types of hom-sets. Coq is not very good at dealing with equality between types which are the indices of other types. For this reason, I have two kinds of subcategory: WideSubcategory (which behaves quite nicely) and FullSubcategory (which can cause problems). Every subcategory of C is a full subcategory of a wide subcategory of C, and you must formalize it this way.