Part 13 of 15. E₈'s 240 roots are a specific finite set of vectors in ℝ⁸, and that set has three faces we care about. As a set of coordinates, we can enumerate and verify it by hand. As a geometric object it is the Gosset polytope 421, with 6,720 edges and a peeling structure that exposes E₇, E₆, D₅ nested inside. As an image it is the famous Coxeter-plane mandala, 8 concentric rings of 30 roots.
The previous explainer gave us E₈ as the endpoint of the spherical-Diophantine chain. Now we meet its 240 roots directly. This article moves through three lenses on the same object: (1) the vectors themselves (two families of coordinates totalling 240) (2) the Gosset polytope 421 whose vertices are those same roots, and (3) the Coxeter-plane projection that turns the 240 into a symmetric mandala.
Here is the mandala, so we have something to aim at. The rest of the article explains where it comes from.
Figure 0. E₈ projected onto its Coxeter plane. Click a mode to see a different cross-section of the structure — the two coordinate families, the 8-ring decomposition, the 56-edge neighbourhood of a single root, the full mandala, the 30-fold symmetry, and the Petrie polygon. The rest of this article builds each piece rigorously.
From the earlier climb through Dn, we know the minimum vectors of D8. They are all integer vectors in with exactly two nonzero coordinates, each chosen to be . Counting: choose two positions out of eight (28 ways), then choose signs for the two nonzero entries (4 ways), giving vectors.
Every integer root has squared length . This is the entire family, nothing hidden.
Figure 1. The 112 integer roots of E₈ in parallel coordinates. Each polyline represents one vector; it touches axis k at height xk. All 112 polylines have exactly two spikes at ±1 and six zeros.
The new family is the one that turns D8 (with 112 minimal vectors) into E8 (with 240). These are the vectors whose eight coordinates are all equal to , subject to one constraint: the number of negative signs must be even.
Let's count. Eight coordinates, each ±½, gives sign patterns. Exactly half of these have an even number of minus signs (a standard parity argument), so the half-integer family has vectors.
The squared length of any half-integer vector is , the same as an integer root. So every vector in both families has squared length 2, which will be the uniform minimum squared length of the combined 240-vector set.
Figure 2. The 128 half-integer roots. Every polyline visits both horizontal lines at ±½ across all 8 axes — no zeros anywhere. The constraint "even number of minuses" halves the possible sign patterns.
Why the even-minus constraint? Without it, we would have 256 half-integer vectors, and the resulting set would not be a root system: some inner products would fall outside the tight {−2, −1, 0, 1, 2} window. The even-sign constraint picks out exactly the 128 vectors that fit. The odd-sign counterparts are related to E₈ as well, but they are not roots, they live in a different lattice coset, and we'll meet them again when we construct the E₈ lattice in the next article.
Figure 3. All sign patterns of (±½, …, ±½), one cell per pattern. Cells are coloured by the parity of the minus-sign count: even-minus (128, admitted as roots) vs odd-minus (128, rejected). The histogram bins the 256 patterns by Hamming weight (number of minus signs); even and odd columns alternate. Closure under Weyl reflections — the operation that generates the whole root system from any single root — requires even parity, so the odd half has to go.
Put the two families together and you have E₈'s root system:
That is the complete recipe. The two families together (and nothing else) form the set of 240 roots. Every root has squared length 2; every pair of roots has an inner product drawn from a very short list.
Figure 4. The two families together. Toggle to see each family in isolation. The integer family produces "sparse" polylines with two spikes; the half-integer family produces "dense" polylines that touch every axis at ±½.
This is where you stop taking our word for anything and verify the structural claims yourself.
Figure 5. The coordinate workbench. Select root A and root B from the list on the left. The right panels show their 8 coordinates exactly. The blue box below computes the inner product and squared lengths live.
Try a few specific pairs to convince yourself of the structural claims. Pick root 0 and root 3: inner product −2, the antipodal pair. Pick root 0 and root 112: inner product 1, a 60° edge-neighbour. Try to find two roots whose inner product is not in {−2, −1, 0, 1, 2}. You won't, but going through enough pairs to believe it is what makes the constraint memorable.
Instead of checking pairs one at a time, we can check all of them at once. Compute for every pair of distinct roots (there are pairs) and tally how many pairs land at each value.
Figure 6. Inner-product histogram across the 28,680 unordered pairs of distinct roots. The −2 bar contains exactly 120 pairs — the 120 antipodal pairs (α, −α). The +2 column is empty because no two distinct roots are parallel in the same direction (that would make them equal). The middle zeros dominate: roughly half of all pairs are perpendicular.
Four bars occupied, one empty. Every pair of distinct roots sits in one of the buckets −2, −1, 0, 1. The zero bucket is largest by far: more than half of all pairs of roots are perpendicular, which makes the geometry of the 240 roots surprisingly open.
So far we have treated the 240 roots as a set: 240 vectors you can list. But the set has combinatorial structure. Certain pairs of roots are "neighbours" in a geometrically meaningful sense; those neighbour relations form edges, the edges bound faces, the faces bound cells, and the whole tower of incidences defines a specific uniform polytope in 8 dimensions, the Gosset polytope 421. Discovered by Thorold Gosset in 1900, it is the largest member of a small family of exceptional uniform polytopes and it is the "natural habitat" of the E₈ root system.
Two roots α and β are connected by an edge of the Gosset polytope iff their inner product is exactly 1. Since every root has squared length 2, the angle between neighbouring roots is:
Sixty degrees. From any fixed root, the neighbours are exactly those roots at a 60° angle from it. From the inner-product histogram above, we know each root has the same angular distribution with the others:
| Inner product | Angle | # roots | Role |
|---|---|---|---|
| +2 | 0° | 1 | the root itself |
| +1 | 60° | 56 | edge neighbours |
| 0 | 90° | 126 | perpendicular |
| −1 | 120° | 56 | anti-neighbours |
| −2 | 180° | 1 | the antipodal root |
Figure 7. Neighbour counts by angle. Every root of E₈ has the same profile: 1 + 56 + 126 + 56 + 1 = 240. In particular, each root has 56 edge-neighbours, so the Gosset polytope has a regular vertex degree of 56.
With 240 vertices each of degree 56, the total number of edges is:
Six thousand seven hundred and twenty edges. That is a lot of edges for an 8-dimensional object whose vertex set we can write down by hand, and it is one of the reasons the Gosset polytope is visually striking in any projection, even a poor one.
A uniform polytope in 8 dimensions has faces of every dimension from 0 (vertices) up to 7 (facets). Gosset computed all of these counts for 421 in 1900.
| Face dimension | Count | Face type |
|---|---|---|
| 0 (vertices) | 240 | — |
| 1 (edges) | 6,720 | — |
| 2 (faces) | 60,480 | triangles |
| 3 (cells) | 241,920 | tetrahedra |
| 4 | 483,840 | 4-simplices (and 4-cross-polytopes) |
| 5 | 483,840 | 5-simplices (and 5-cross-polytopes) |
| 6 | 207,360 | 6-simplices |
| 7 (facets) | 19,440 | 7-simplices (17,280) + 7-cross-polytopes (2,160) |
Figure 8. Face counts of 421, as computed by Gosset. Each number comes from a Weyl-group orbit count divided by stabiliser size. The bottom row is notable: 19,440 facets split into two orbits — 17,280 copies of the 7-simplex and 2,160 copies of the 7-cross-polytope — confirming that 421 is a uniform polytope, not regular.
We cannot draw 421 directly; it lives in 8 dimensions. But we can project it into 3 dimensions by choosing three orthonormal directions in ℝ8 and mapping each root to its three inner products with those directions. Different choices give different shadows; the one below uses three specific directions that reveal a lot of the polytope's symmetry.
The 56 green neighbours above form the vertex set of 321 (the 56-dimensional minuscule representation of E7) — a different orbit from the 126-root E7 subsystem shown in red below.
Figure 9. A 3D projection of the Gosset polytope 421. The 240 vertices project to 240 distinct points; the 6,720 edges make the dense mesh you see. "Highlight a vertex" picks one vertex at random and colours its 56 edge-neighbours, showing the degree-56 local structure.
The shadow above is a projection: every point of the polytope collapses onto a single picture. The complementary move is slicing: freeze seven coordinates of ℝ8, scrub a hyperplane along the eighth, and render only its intersection with 421. What the screen shows is no longer a shadow but an honest 7-dimensional cross-section, further flattened for display. A Flatlander watching a 3-sphere pass through a plane sees a dot grow into a circle, reach a maximum, and shrink back to a dot. An 8D polytope sweeping past a 3D screen is the same experience, five dimensions up.
Most slice levels catch only edge midpoints; a generic hyperplane cuts 421's 6,720 edges but misses all 240 vertices. At five halt levels along any coordinate axis, though, a whole sheet of vertices sits exactly on the hyperplane. The halts partition the 240 roots as 14 + 64 + 84 + 64 + 14: the x = 0 layer catches 84 roots (exactly the 84 roots with coordinate zero there, the D7 subsystem from Figure 14 below), x = ±1 catches 14 integer roots each, and x = ±½ catches 64 half-integer roots each. Between halts, nothing but edge crossings.
Figure 10. Slicing 421 along a chosen coordinate axis. Left: the wireframe in a 3D view built from the slicing axis (depth) and the E8 Coxeter plane (the face); the pink sheet is the current hyperplane and red dots are its intersections with edges. Right: the same cross-section head-on. Drag the 3D view to rotate. Snap to next halt jumps the slider to one of the five halt values where the hyperplane passes exactly through a sheet of vertices; the dashed ring in the head-on panel flags those moments.
Swap axes and the picture of which 14 roots appear at x = ±1 changes, but the count profile stays the same: every axis of ℝ8 slices 240 into 14 + 64 + 84 + 64 + 14. That uniformity is the hyperoctahedral symmetry of the underlying coordinate system showing through, the polytope does not privilege any one axis.
The vertex figure of a polytope is the shape you get when you take the edge neighbours of a single vertex and ask what polytope they form. For the Gosset polytope 421, the 56 neighbours of any vertex are themselves the vertex set of a smaller uniform polytope called 321, the polytope of the 56-dimensional minuscule representation of E7. (Note: 321 is not the E7 root polytope — that has 126 vertices, one per E7 root. The 56 vertices and the 126 roots are two different E7-Weyl orbits.)
The vertex figure gives us a clue: the 56 neighbours of any E8 root carry an E7 action and live in a 7-dimensional hyperplane. We can make this concrete in two ways: by looking at the neighbourhood directly, or by working algebraically with the Dynkin diagram.
Figure 11. The vertex figure of 421. For a chosen root α, we collect its 56 edge-neighbours (roots β with ⟨α,β⟩ = 1), shift by −α⁄2 into the 7D hyperplane orthogonal to α, and project to 3D. Every vertex of Gosset 421 has the same local structure — its 56 neighbours are the vertices of another famous polytope, 321, the polytope of E7's minuscule 56-dimensional representation (distinct from E7's root polytope, which has 126 vertices). Edges shown are pairs with inner product 1 among the 56 (expected: 56·27⁄2 = 756, the edge count of 321).
Pick any simple root αi and delete it. The remaining seven simple roots span a 7-dimensional subspace of ℝ8. The roots of E₈ that live in that subspace are exactly the roots whose αi-coefficient is zero in the simple-root basis; they form a new root system, a rank-7 subsystem of E₈. Its type depends on which node you deleted.
For example: deleting α8 (the far end of the long leg) leaves a diagram with legs of length (1, 2, 3) meeting at α4. That's the Dynkin diagram of E7, with 126 roots: exactly the 126 roots of E₈ whose α8-coefficient is zero.
Figure 12. Interactive Dynkin deletion. Click any of the 8 simple-root nodes; the deleted node fades and the remaining diagram is identified as a specific rank-7 root system. The subsystem's roots are the ones whose coefficient for the deleted node is zero — a linear-algebra consequence of the deletion, not magic.
The subsystem is a subset of the original 240 roots, visible directly in the Coxeter-plane projection (introduced in full detail below).
Figure 13. Subsystem roots drawn in a Coxeter-plane projection of all 240 E₈ roots. The full 240 are grey; the subsystem is red. Notice the subsystem is not a simple "slice" — the red points are spread across all 8 rings of the Coxeter-plane image. Press Play peeling to auto-animate the canonical chain E₈ → E₇ → E₆ → D₅ → A₄ → A₃ → A₂ → A₁, deleting one Dynkin node per step.
Going through all 8 possible deletions produces 8 different rank-7 subsystems. Some are connected (a single piece), others split into disconnected components. The connected ones are named after irreducible root systems (An, Dn, En); the disconnected ones are products.
| Delete | Remaining diagram | Type | # roots |
|---|
Figure 14. All rank-7 subsystems obtained by deleting a single simple root from E₈. Counts verified by the shared library: for each deletion, we count the E₈ roots whose corresponding simple coefficient is zero. Click any row to see that subsystem highlighted in the Coxeter-plane view above.
The deletion move can be repeated. Start with E8, delete α8 to get E7. Now E7's Dynkin diagram has a "long leg" of its own; delete its end to get E6. E6 has a shorter long leg; deleting its end gives D5. D5 has a fork; keep peeling to reach A4, and from there the rest of the A-family.
Figure 15. Iterated peeling from E8 down the exceptional chain. Each bar shows the number of roots in that step's root system. The exceptional chain ends at D5; from there the peeling becomes classical (D-family, then A-family).
Why the chain stops. E9 is not a finite root system (it's affine, and has infinitely many roots), so there is no "E9 → E8" peeling step above. On the other end, the chain goes below E6 into D-types because E5 is formally just D5, the "exceptional" character of the E-family requires a three-legged branch with a long leg, and below dimension 6 the long leg shrinks to zero.
If you have ever seen a picture of E₈, on a T-shirt, in a physics paper, in a Wikipedia article, you have seen the Coxeter-plane projection. It's a symmetric mandala: 240 dots arranged in 8 concentric rings of 30 points each, with edges drawn between them. Every rotation by 12° maps the image to itself. The structure looks inevitable and a little mystical. It is not mystical. It comes from a specific 2-plane in ℝ8 chosen to make exactly those 8 rings appear.
Here it is. This is the Coxeter-plane projection of the 240 roots of E₈, with edges drawn between every pair of roots whose inner product is 1 (the same edge rule as the Gosset polytope above). The rest of this section explains how this specific 2-plane is chosen and why the result has 8 rings of 30.
Figure 16. The Coxeter-plane projection of E₈. Every ring contains exactly 30 points; there are exactly 8 rings. The total 8 × 30 = 240 equals the number of roots, and the 30-fold symmetry of the image equals the Coxeter number h of E₈.
The Weyl group of E₈ has 696,729,600 elements. Among them, some are more interesting than others. A Coxeter element is a specific element obtained by composing all eight simple reflections exactly once:
Different orderings of the eight reflections produce different Coxeter elements, but they are all conjugate to each other (they differ by a change of basis), so we can pick any ordering and call the result "the Coxeter element." Its key property is its order: the smallest positive integer such that ch is the identity. For E₈:
This number, 30, is called the Coxeter number, and it is the same as the number of rings in the image above. Not a coincidence.
The Coxeter element c is a linear map on ℝ8, so it has 8 eigenvalues (counted over the complex numbers). Because c has order 30, every eigenvalue λ satisfies λ30 = 1; they are all 30th roots of unity. For E₈, the specific eigenvalues come in four complex-conjugate pairs:
The integers {1, 7, 11, 13, 17, 19, 23, 29} are called the exponents of E₈. They are a classical invariant of the root system, in fact, they determine the Weyl group order via the formula .
Each complex-conjugate pair of eigenvalues (λ, λ̄) corresponds to a real 2-plane that the Coxeter element rotates. For the pair (e2πi/30, e−2πi/30), the rotation angle is 2π/30 = 12°. This is the slowest of the four rotation rates: the other pairs (corresponding to exponents 7, 11, 13) rotate faster per step. The plane that rotates slowest (the one corresponding to the smallest exponent) is what we call the Coxeter plane.
| pair | m | angle | dim |
|---|
Figure 17. The eight eigenvalues of c on the unit circle, grouped into four complex-conjugate pairs. Each pair is one 2D eigenspace — a real plane on which c acts as a rotation by . The pair (highlighted) is the slowest rotation: the Coxeter plane. Every exponent m is coprime to 30, so gcd(m, 30) = 1 and each orbit closes in exactly 30 steps — that is why the Coxeter number h equals 30.
Once we have an orthonormal basis (u, v) for the Coxeter plane, projecting any vector x ∈ ℝ8 onto the plane is a two-inner-product operation:
Apply this to each of the 240 roots and you get 240 points in 2D, the finished mandala above. Inside the library, E8.coxeterPlane stores the basis (u, v), computed once from the null space of the matrix (c2 − 2 cos(2π/30) c + I), which is how we extract the 2-eigenspace for the eigenvalue pair (e2πi/30, e−2πi/30) without complex arithmetic.
Each ring of the projection is a single orbit of the Coxeter element. Starting from any root α and repeatedly applying c, the orbit has length at most 30 (since c30 = id). For E₈, it happens that every orbit has length exactly 30, and there are exactly 240/30 = 8 orbits.
Each orbit traces out a regular 30-gon in the Coxeter plane, a Petrie polygon. The 8 Petrie polygons have 8 different radii (because roots in different orbits project to different distances from the origin). Stacked on top of each other they form the mandala.
Figure 18. The 8 Coxeter-element orbits that produce the 8 rings. Each ring is a regular 30-gon whose vertices are connected by applying c. In "one ring at a time" mode you can step through the orbits individually.
Pick one root and apply the Coxeter element to it 30 times. The result is a closed 30-vertex polygon (the Petrie polygon) whose vertices trace out one of the 8 rings. The animation below follows one root through its 30-step orbit.
Figure 19. A single Petrie polygon. The red point is the current position; the red arrows show the path traced so far. Click "Play" to watch c applied once per second, tracing the full 30-gon automatically. After 30 steps the polygon closes back to where it started.
The Coxeter plane is the most symmetric lens, but it is one of infinitely many. The space of 2-planes in ℝ8 is a 12-dimensional Grassmannian. Let's explore it.
Two sliders parameterise a 2D slice through the 12-dimensional Grassmannian Gr(2, 8); a set of preset buttons jumps to specific planes that lie elsewhere. You watch the 240 roots rearrange themselves in real time. The lesson is not "here is another picture", it is that every picture of E₈ is a choice, and moving between pictures is the exercise of genuinely seeing 8 dimensions.
You are exploring a 2D window inside a 12-dimensional space of projection planes. The sliders move within the window; the presets jump outside it.
Figure 20. The projection rotator. Move the sliders to tilt the Coxeter plane by Givens rotations into two orthogonal directions. Click presets to jump to other canonical planes. The stats panel re-computes on every frame, showing distinct radii, tightest ring, and approximate rotational symmetry of the current shadow.
At slider positions (0, 0), the projection plane is the Coxeter plane. Slider 1 ("tilt") applies a Givens rotation in the plane spanned by u (the first Coxeter-plane basis vector) and a vector w1 orthogonal to both u and v. Slider 2 ("twist") does the same with v and a different orthogonal vector w2. The rotated basis is:
At (0, 0) you recover the Coxeter plane. At (π/2, 0), u has been replaced by w1, giving a completely different projection plane with typically much less symmetry. The Grassmannian Gr(2, 8) has dimension 12; two sliders expose 2 of those dimensions, and the preset buttons jump to planes outside the reachable slice.
The 8 Coxeter-plane rings come in four golden-ratio pairs. For every inner radius r in the mandala there is an outer radius exactly rφ (where φ = (1+√5)/2 ≈ 1.6180 is the golden ratio), and the two members of each pair carry 30 roots each, so the 240 split as 120 at inner radii, 120 at outer radii. This is not an accident of the projection. It reflects a structural identity: the E8 root system is the disjoint union of two copies of H4, the non-crystallographic root system of the 4-dimensional regular 600-cell, with one copy scaled by φ.
H4 has 120 roots, exactly the vertices of the 600-cell. Unlike the Lie-theoretic root systems in the previous sections, H4 is non-crystallographic, its angles involve the irrational φ, so no integer lattice accommodates it. But two copies of H4 related by the factor φ do fit inside ℝ8 as an integer lattice: that lattice is E8. The Coxeter numbers happen to agree (h(H4) = h(E8) = 30), which is why projecting both onto their respective Coxeter planes yields the same angular grid and the fold appears as a pixel-perfect overlap in 2D.
Figure 21. The golden fold in the Coxeter plane. Blue = inner 120 roots (one copy of H4). Gold = outer 120 roots (the other copy, at radius × φ). Click any root to see its partner — same angle, radius scaled by φ. Pull the fold slider right to collapse the outer copy inward by 1/φ; at fold = 1 the two copies overlap pointwise, confirming they are the same 120 angles at two different scales.
Root counts alone don't give this away: 240 = 120 + 120 is arithmetic, but "the two halves of 120 are each an H4, related by φ" is structure. The payoff travels further than the picture. The golden ratio is why E8 shows up in icosahedral quasicrystals, Penrose tilings, and the fixed-point sets of certain symmetries of 8-dimensional lattices; wherever φ appears in higher-dimensional geometry, H4 ⊕ φH4 is usually the reason. In the other direction: the 600-cell's vertices are 120 unit quaternions (the binary icosahedral group), so E8 has a secondary description as 240 special quaternion pairs, an alternative to the Dynkin-diagram and lattice viewpoints used throughout this article.
The golden fold gives two 600-cells of 120 vertices each. Each 600-cell carries a finer partition. Identified with unit quaternions via the icosian ring, the 120 vertices form the binary icosahedral group 2I. Sitting inside 2I is the binary tetrahedral group 2T, of order 24, whose 24 unit quaternions are exactly the vertices of a single 24-cell (Schläfli symbol {3, 4, 3}, the self-dual regular 4-polytope with 24 octahedral cells). Since |2I| / |2T| = 5, each 600-cell is the disjoint union of five 24-cells: the five left cosets of 2T in 2I.
Both shells do this independently. The inner 600-cell breaks into five 24-cells; the outer 600-cell breaks into its own five. Ten 24-cells in total, 24 vertices each:
Every E8 root belongs to exactly one of these ten 24-cells. Five of them sit on the inner golden shell (saturated colours), five on the outer shell (pastels). The partition is the combinatorial spine that the parallel-coordinates explainer #16 unfolds step by step, Petrie mandala → two 600-cells → ten 24-cells → merged back into E8.
Figure 22. The 240 E8 roots in the Coxeter plane, recoloured by which of the ten 24-cells they belong to. Five saturated colours for the inner 600-cell's five 24-cells, five pastels for the outer. Every colour appears exactly 24 times. Click any root on the canvas to isolate its 24-cell (or use the Ik/Ok buttons). The info panel lists the 24 E8 coordinates of the selected cell, grouped into the 8 integer roots (±ei±ej) and 16 half-integer roots (±½ combinations) that make up the underlying D4 / 24-cell skeleton.