  Sharing of notations and theories across an inheritance hierarchy of
mathematical structures, e.g., groups and rings, is important for productivity
when formalizing mathematics in proof assistants. The packed classes
methodology is a generic design pattern to define and combine mathematical
structures in a dependent type theory with records. When combined with
mechanisms for implicit coercions and unification hints, packed classes enable
automated structure inference and subtyping in hierarchies, e.g., that a ring
can be used in place of a group. However, large hierarchies based on packed
classes are challenging to implement and maintain. We identify two hierarchy
invariants that ensure modularity of reasoning and predictability of inference
with packed classes, and propose algorithms to check these invariants. We
implement our algorithms as tools for the Coq proof assistant, and show that
they significantly improve the development process of Mathematical Components,
a library for formalized mathematics.
