Appearance
Polytopes & their combinatorics
Many of enumeratio's collections aren't just lists — they're the faces of a polytope. A set composition is a face of the permutahedron; a signed subset a face of the cross-polytope; a dissection a face of the associahedron. This page is a short field guide to those polytopes, the coordinates that place them in space, and the named maps that relate them. Every collection named below is live in the explorer — toggle Polytope on a polytope collection, or open the Projective space tab to see them together.
The idea
A polytope's faces of every dimension — vertices, edges, 2-faces, … up to the whole body — are themselves a combinatorial collection. The correspondence is always the same shape:
- the vertices (0-faces) are the "maximal" objects (permutations, triangulations, …),
- higher faces are "partial" versions of them (ordered set partitions, dissections, …),
- a face's dimension drops as it gets coarser:
dim = (top dim) − (how refined it is), - a coordinate (usually the barycentre of the vertices it spans) embeds each face as a point.
So a polytope collection carries its geometry as properties (a coordinate, a dimension), and maps to its combinatorial representative and to other collections.
The three polytopes
| polytope | collection (faces) | vertices | dimension | # faces | coordinate |
|---|---|---|---|---|---|
| permutahedron | set_compositions | permutations | Fubini | barycentre | |
| cross-polytope (octahedron at ) | signed_subsets | (signed singletons) | signed indicator | ||
| associahedron | dissections | triangulations = binary trees | little Schröder | Loday |
The polytope itself is surfaced as its own collection — permutahedron, cross_polytope, associahedron — an order-isomorphic sibling of the combinatorial one that carries the realization and maps back to it.
Faces as partial permutations
The permutahedron is the cleanest example. Its vertices are the permutations. A face of dimension is a strict weak ordering with classes — i.e. an ordered set partition (a set composition) into blocks. So
A single block (dim ) is the whole body; all singletons (dim 0) is a permutation. The face poset is exactly the Fubini number of ordered set partitions. The other polytopes work the same way: cross-polytope faces are signed subsets (dim ), associahedron faces are dissections (dim ).
The projective space
To draw a -dimensional polytope whose coordinates are a -vector, we project onto the hyperplane using a fixed orthonormal basis — the Helmert basis (the "H" projection). It sends the -component coordinates to a genuine -D scene with an origin and negative half-axes, and it's shared across polytopes, so several can be laid into one projective space at once (the Projective tab). There you can see the containment
with the simplex and its dual as the two tetrahedra inscribed in the cube traced by the axis points. The two concentric octahedra in that view are hypersimplices — the rectified simplices (orbit polytopes of ). They are octahedra only at ; they are not the cross-polytope of the table above (that is its own signed_subsets collection, with vertices ).
The polytope zoo
The projective space isn't only the three headline polytopes — it's a whole family, tied together by duality, containment, and the truncation operations of Coxeter geometry. Here's the wider cast (-vectors are the solid; ✓ = enumeratio has the collection, — = not yet):
| polytope | dual | coordinate | rep collection | () | tiles? |
|---|---|---|---|---|---|
| simplex (tetrahedron) | self-dual | — (Boolean lattice of subsets) | 4,6,4,1 | no | |
| permutahedron | tetrakis hexahedron () | barycentre | set_compositions ✓ | 24,36,14,1 | yes () |
| associahedron | (no classical name) | Loday | dissections ✓ | 14,21,9,1 | no |
| cube / hypercube | cross-polytope | axis-aligned | subsets ✓ | 8,12,6,1 | yes () |
| cross-polytope (octahedron) | cube | signed_subsets ✓ | 6,12,8,1 | no | |
| hypersimplex | cube (at ) | with two 1's | subsets fibre | 6,12,8,1 | no |
| cuboctahedron | rhombic dodecahedron | perms of | — | 12,24,14,1 | no |
| rhombic dodecahedron | cuboctahedron | — | 14,24,12,1 | yes (FCC/) | |
| truncated tetrahedron | triakis tetrahedron | perms of , even | — | 12,18,8,1 | no |
| truncated cuboctahedron (type-B permutahedron) | disdyakis dodecahedron | perms of | signed_permutations † | 48,72,26,1 | yes () |
The first three rows plus the cross-polytope are wired polytope collections (order-isomorphic siblings of their representatives, carrying the coordinate + face maps); the cube/hypercube is a live layer whose base_polytope wiring is still to come; † the flat combinatorics is realized (signed_permutations) but its geometry is unbuilt; everything from the cuboctahedron down is future.
Duality
- cube ↔ cross-polytope — exact metric polar duals ( polar ): vertices and facets swap, edge count fixed. At , cube octahedron . (The
signed_subsetscarrier already holds the cross-polytope's faces; read under the polar-dual convention it's a cube face too.) - simplex is self-dual in every dimension.
- cuboctahedron ↔ rhombic dodecahedron — the Archimedean/Catalan pair ().
- permutahedron ↔ tetrakis hexahedron, a Catalan solid (no clean name for the dual at general ). The associahedron has no Catalan partner — it is neither vertex- nor facet-transitive.
Containment
simplex, both hypersimplex shells, and the permutahedron are all generalized permutahedra — -orbit polytopes on the same braid arrangement — so their nesting is provable, not just visual. By the majorization (Rado) theorem, one orbit polytope contains another exactly when its generating vector majorizes the other's; at ,
gives, rigorously, . The associahedron sits between the permutahedron and the simplex (Loday's coordinates truncate the simplex; the Tonks projection collapses the permutahedron onto it). The dual simplex is the exact antipode of the simplex through the origin — together they are the stella octangula whose hull is a cube.
Truncations — one construction, many solids
Most of the zoo is a single operation applied to the simplex and its symmetry group:
- permutahedron = omnitruncated simplex — truncate the -simplex at every face under (Coxeter type ). At the truncated octahedron is the omnitruncated tetrahedron.
- hypersimplex = rectified simplex — at the rectified tetrahedron is the octahedron (a real coincidence, not a general pattern).
- cuboctahedron = rectified cube = rectified octahedron — but only at : the -cube and -cross-polytope share an edge count () only there.
- truncated cuboctahedron = omnitruncated simplex under — the exact type-B mirror of the permutahedron, with vertices against the permutahedron's .
The general fact worth keeping: omnitruncate a finite reflection group and you get its permutahedron; omnitruncate an affine Weyl group and you get a monohedral honeycomb — which is why both the permutahedron () and the type-B permutahedron () tile.
Which tile, and the parallelohedra
Three of the space-fillers here are among Fedorov's five parallelohedra (convex bodies that tile by translation alone): the cube (), the truncated octahedron = permutahedron (the /BCC lattice), and the rhombic dodecahedron (the /FCC lattice — the dual lattice). The permutahedron's tiling carries the richest combinatorics (the affine symmetric group); the cube's is the free abelian .
The type-B frontier
signed_permutations already carries genuine type-B statistics — type-B descents/inversions, with the Eulerian distribution (summing to ). What's missing is the geometry: a base_polytope realizing the type-B permutahedron (the truncated cuboctahedron). Building it extends the existing permutahedron pattern to the Coxeter group — the same machinery, a different reflection group.
Tessellation & the affine symmetric group
The permutahedron tiles its hyperplane: translating by the dual root lattice (integer vectors summing to 0 with equal residues mod ; generators are the permutations of ) fills space with copies, each sharing a facet with its neighbours. At this is the regular hexagonal tiling; at the bitruncated cubic honeycomb. (Toggle ⊞ on the permutahedron chip in the Projective tab, .)
That tiling is the geometry of the affine symmetric group (Coxeter type ) — the affine_permutations. An affine permutation is a window of integers, distinct mod and summing to ; it factors as , i.e. — a finite permutation plus a lattice translation (which tile you land in). The finite is one fundamental domain; the translations are the affine part.
In the Projective tab you can navigate the tiling — slide a cell along the lattice axes ( for the permutahedron, for the cube). Whole steps land on a genuine tile (an affine permutation, or an integer vector for the cube); fractional steps sit between tiles — points of the continuous translation group of which the lattice (, or ) is the discrete subgroup. So the enumerable objects are exactly the integer points; the slider shows the continuum they're embedded in.
Which polytopes tile — and what the tiling means
Not every polytope is a space-filler. When one does tile, the tiling is a group of motions with the polytope as fundamental domain — so the tessellation is itself a combinatorial (indeed group-theoretic) object:
- permutahedron — tiles by ; the group is the affine symmetric group, the tiles are the
affine_permutationsabove. - cube / hypercube — tiles by the integer lattice (the cubic honeycomb); its group is the free abelian of integer translations — the abelian analogue of the affine symmetric group. Combinatorially the hypercube is subsets / binary words, and a lattice translate just offsets the coordinate by an integer vector — while a Gray code is a Hamiltonian path along the cube's own edges (
gray_codes). (Live in the Projective tab — toggle ⊞ on the hypercube chip; abase_polytopewiring for a cube collection is still to come.) - simplex, associahedron, cross-polytope — do not tile space on their own.
So "moving around the space" is two distinct kinds of motion: the rigid motions of a single polytope (its symmetry group — the maps below), and the translations that carry it to a neighbouring tile (its affine/lattice group). Only the first are endomaps of a collection; the second are the affine collection.
The maps (a glossary)
Relationships between the collections, and the motions of the polytopes, are all maps — composable in the CLI with --through and visible on the --at element card.
- Tonks projection — the cellular surjection permutahedron associahedron. Realized on vertices by the sylvester map
permutations → binary_trees: insert the word into a binary search tree and take its shape. Its fibres are the sylvester classes (permutations with the same BST), counted by . - Loday realization — integer coordinates of the associahedron: a triangulation's -th coordinate is (leaves left)·(leaves right) at internal node (infix order), on the hyperplane .
- First-return decomposition — a Dyck word factors as (a leading up-step, its matching down-step, the interior , the remainder ); the recursion behind Dyck ↔ binary tree ↔ triangulation.
- Biane bijection — Dyck paths ↔ non-crossing partitions.
- RSK (Robinson–Schensted–Knuth) — a permutation ↔ a pair of same-shape standard tableaux, by row insertion. See Tableaux for the worked correspondence, the hook-length formula, and the partition-algebra (Schur–Weyl) connection.
- cycle type / cycle partition — a permutation's cycles as an integer partition / a set partition.
Rigid motions of the permutahedron
The symmetry group is ; three permutation maps generate the motions (compose them with --through):
complement() — the central inversion (antipode).reverse(read the word backwards) — a reflection.cyclic_shift(the -cycle on values) — a rotation (order ).
The tessellation translations are not symmetries of a single permutahedron — they leave the fundamental tile, and belong to the affine group above.
Named number sequences
Each polytope/collection is counted by a classic sequence:
Their triangles (a statistic's distribution per size) are one command away — enumeratio permutations size=1:6 --triangle inversions prints the Mahonian triangle; --triangle descents the Eulerian; set-partition blocks the Stirling triangle; Dyck valleys the Narayana.