A Coq plugin providing high-level commands to declare and manage hierarchies of algebraic structures using packed classes.
Hierarchy Builder is a Coq plugin that provides high-level commands to declare and manage hierarchies of algebraic structures using the packed classes discipline. It simplifies the process of defining structures, developing their theory, and automatically applying that theory to all instances, while supporting alternative interfaces and backward compatibility.
Coq users and formal verification researchers working with algebraic hierarchies, particularly those using or extending the Mathematical Components library who need robust and maintainable structure management.
Developers choose Hierarchy Builder because it abstracts the complex low-level Coq mechanisms of packed classes into declarative commands, reducing boilerplate, minimizing errors, and making hierarchy evolution and theory reuse more manageable.
High level commands to declare a hierarchy based on packed classes
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides high-level Coq commands like HB.mixin and HB.structure that abstract complex packed classes discipline, reducing boilerplate and errors as shown in the example code.
Developed theory for a structure automatically applies to all instances, enabling efficient proof reuse across the hierarchy, as demonstrated with lemmas applying to Z instances.
Includes HB.graph for generating hierarchy visualizations and HB.howto for finding factory sequences, aiding in debugging and understanding complex structures.
Allows declaration of alternative interfaces with glue code, facilitating hierarchy evolution and maintenance without breaking existing code.
Requires deep understanding of the packed classes discipline and HB-specific concepts like mixins and factories, which the documentation admits can be complex for newcomers.
Heavily tied to the Mathematical Components library and Coq ecosystem, limiting its utility for projects outside this niche or those using other proof assistants.
Debugging hierarchy issues is challenging, as indicated by the need for specialized commands like HB.status and verbose logging, which add overhead.