the hierarchical product to produce (a) “skinny” and (b) “fat” trees. In each case, the hierarchy $K_3^{{\mathbin{\Pi_\alpha}}3}$ is drawn, with the thickness of edges illustrating the weight of those edges. Depending on whether $\alpha < 1$ or $\alpha > 1$, this can lead to either lower-weighted high-level edges as in (a) or higher-weighted ones as in (b). Note that, for ease of visualization, here we break the usual convention of taking the lowest-level edges as unit weight.[]{data-label="fig:trees"}](trees){width=".45\textwidth"}

Allowing a clear separation of the modular system into hierarchical levels, each of which can be assigned unique edge weight, enables straightforward discussion of computation that occurs both within and between modules in a unified framework. When two nodes interact, we can assign this a cost that depends on the edges between them.

![Addressing nodes in the hierarchy, layer by layer. Shown is a three-level hierarchy with the triangle graph $K_3$ as its base. Each vertex is represented as a 3-digit number in base 3. The first digit points to a node at the top level (red solid triangle), the second to a location in the second level (blue dashed triangle), and finally, the last digit (yellow dotted triangle) specifies the node location 