Module docstring
{"# Discrete categories
We define Discrete α as a structure containing a term a : α for any type α,
and use this type alias to provide a SmallCategory instance
whose only morphisms are the identities.
There is an annoying technical difficulty that it has turned out to be inconvenient
to allow categories with morphisms living in Prop,
so instead of defining X ⟶ Y in Discrete α as X = Y,
one might define it as PLift (X = Y).
In fact, to allow Discrete α to be a SmallCategory
(i.e. with morphisms in the same universe as the objects),
we actually define the hom type X ⟶ Y as ULift (PLift (X = Y)).
Discrete.functor promotes a function f : I → C (for any category C) to a functor
Discrete.functor f : Discrete I ⥤ C.
Similarly, Discrete.natTrans and Discrete.natIso promote I-indexed families of morphisms,
or I-indexed families of isomorphisms to natural transformations or natural isomorphism.
We show equivalences of types are the same as (categorical) equivalences of the corresponding discrete categories. "}