If C is a category, there is a type ObjectProperty C of properties
of objects of C, i.e. predicates C → Prop. For example, if X is an
object of a category C, one may define the property of objects of C
that are isomorphic to X, show that this property is closed
under isomorphisms, and that it is the closure under isomorphisms of
the property of objects that is only satisfied by X:
The full subcategory of C consisting of objects X : C satisfying
a given property P : ObjectProperty C is P.FullSubcategory and
the inclusion functor P.FullSubcategory ⥤ C is P.ι:
Similarly to the type ObjectProperty C of properties of objects of C,
we have the type MorphismProperty C of properties of morphisms in C
(which resembles the type ObjectProperty (Arrow C) of properties
of objects in the category of arrows in C). Similarly, certain typeclasses
express that W : MorphismProperty C is stable under composition
(MorphismProperty.IsStableUnderComposition), is stable under
base change (MorphismProperty.IsStableUnderBaseChange), etc.
If W : MorphismProperty C is multiplicative (MorphismProperty.IsMultiplicative),
i.e. contains identities and is stable under composition, then we may also
consider the widesubcategory of C consisting of the morphisms satisfying W: