Module docstring
{"# Induced categories and full subcategories
Given a category D and a function F : C → Dfrom a type C to the
objects of D, there is an essentially unique way to give C a
category structure such that F becomes a fully faithful functor,
namely by taking $$ HomC(X, Y) = HomD(FX, FY) $$. We call this the
category induced from D along F.
Implementation notes
It looks odd to make D an explicit argument of InducedCategory,
when it is determined by the argument F anyways. The reason to make D
explicit is in order to control its syntactic form, so that instances
like InducedCategory.has_forget₂ (elsewhere) refer to the correct
form of D. This is used to set up several algebraic categories like
def CommMon : Type (u+1) := InducedCategory Mon (Bundled.map @CommMonoid.toMonoid)
-- not InducedCategory (Bundled Monoid) (Bundled.map @CommMonoid.toMonoid),
-- even though MonCat = Bundled Monoid!
"}