+ +The easiest way to install the latest released version of Hierarchy Builder +is via [OPAM](https://opam.ocaml.org/doc/Install.html): + +```shell +opam repo add coq-released https://coq.inria.fr/opam/released +opam install coq-hierarchy-builder +``` + +
+
+To instead build and install manually, do:
+
+``` shell
+git clone https://github.com/math-comp/hierarchy-builder.git
+cd hierarchy-builder
+make # or make -j
-HB works on Coq 8.10 and 8.11. - -- You can install it via OPAM - -```shell -opam repo add coq-released https://coq.inria.fr/opam/released -opam install coq-hierarchy-builder -``` +- You can use it in nix with the attribute `coqPackages_8_13.hierarchy-builder` e.g. via `nix-shell -p coq_8_13 -p coqPackages_8_13.hierarchy-builder` -- You can use it in nix with the attribute `coqPackages_8_11.hierarchy-builder` e.g. via `nix-shell -p coq_8_11 -p coqPackages_8_11.hierarchy-builder` -
+ + - You can use it in nix with the attribute `coqPackages_8_13.hierarchy-builder` e.g. via `nix-shell -p coq_8_13 -p coqPackages_8_13.hierarchy-builder` + +
+ + - a *mixin* is a bare bone building block of the hierarchy, it packs operations + and axioms. + + - a *factory* is a package of operations and properties that is elaborated by + HB to one or more mixin. A mixin is hence a trivial factory. + + - a *structure* is declared by attaching zero or more factories to a type. + + - a *builder* is a user provided piece of code capable of + building one or more mixins from a factory. + + - an *instance* is an example of a structure: it provides all operation and + fulfills all axioms. + +
+ + - `HB.mixin` declares a mixin + - `HB.structure` declares a structure + - `HB.factory` declares a factory + - `HB.builders` and `HB.end` declares a set of builders + - `HB.instance` declares a structure instance + - `HB.status` dumps the contents of the hierarchy (debug purposes) + + Their documentation can be found in the comments of [structures.v](structures.v), + search for `Elpi Command` and you will find them. All commands can be + prefixed with the attribute `#[verbose]` to get an idea of what they are doing. + +
+ + - [demo1](demo1/) and [demo3](demo3/) declare and evolve a hierarchy up to + rings with various clients that are tested not to break when the hierarchy + evolves + - [demo2](demo2/) describes the subtle triangular interaction between groups, + topological space and uniform spaces. Indeed, 1. all uniform spaces induce a + topology, which makes them topological spaces, but 2. all topological groups + (groups that are topological spaces such that the addition and opposite are + continuous) induce a uniformity, which makes them uniform spaces. We solve + this seamingly mutual dependency using HB. + +