From Platonic Solids to Dynkin Diagrams ======================================== The same Diophantine inequality :math:`\frac{1}{p+1} + \frac{1}{q+1} + \frac{1}{r+1} > 1` that classifies ADE Dynkin diagrams (see :doc:`classification_proof`) also classifies the Platonic solids, finite rotation groups, and spherical triangle groups. This section traces the chain of connections. 1. Euler's Formula and Regular Polyhedra ----------------------------------------- A **regular polyhedron** (Platonic solid) is a convex polyhedron whose faces are congruent regular polygons and whose vertices all have the same valence. Let a regular polyhedron have: - :math:`V` vertices, each of valence :math:`q` (edges meeting at each vertex) - :math:`E` edges - :math:`F` faces, each a regular :math:`p`-gon **Euler's polyhedron formula** gives: .. math:: V - E + F = 2 Each edge borders 2 faces and connects 2 vertices, so: .. math:: pF = 2E, \qquad qV = 2E Substituting into Euler's formula: .. math:: \frac{2E}{q} - E + \frac{2E}{p} = 2 Dividing by :math:`2E`: .. math:: \frac{1}{q} + \frac{1}{p} - \frac{1}{2} = \frac{1}{E} Since :math:`E > 0`, we need: .. math:: :label: platonic-ineq \frac{1}{p} + \frac{1}{q} > \frac{1}{2} with :math:`p \geq 3` (faces are at least triangles) and :math:`q \geq 3` (at least 3 edges meet at each vertex). 2. Enumerating Solutions ------------------------- We enumerate all integer solutions of :eq:`platonic-ineq` with :math:`3 \leq p \leq q` (by duality, swapping :math:`p` and :math:`q` gives the dual polyhedron): **Case** :math:`p = 3` (triangular faces): .. math:: \frac{1}{3} + \frac{1}{q} > \frac{1}{2} \quad\Longleftrightarrow\quad q < 6 - :math:`q = 3`: :math:`E = 6` -- **Tetrahedron** (4 vertices, 4 faces) - :math:`q = 4`: :math:`E = 12` -- **Octahedron** (6 vertices, 8 faces) - :math:`q = 5`: :math:`E = 30` -- **Icosahedron** (12 vertices, 20 faces) **Case** :math:`p = 4` (square faces): - :math:`q = 3`: :math:`E = 12` -- **Cube** (8 vertices, 6 faces) -- dual of octahedron **Case** :math:`p = 5` (pentagonal faces): - :math:`q = 3`: :math:`E = 30` -- **Dodecahedron** (20 vertices, 12 faces) -- dual of icosahedron **Case** :math:`p \geq 6`: :math:`\frac{1}{p} + \frac{1}{q} \leq \frac{1}{6} + \frac{1}{6} < \frac{1}{2}`. **No solutions.** That gives exactly **5 Platonic solids** (3 + 2 duals). Each is labeled below with its corresponding Dynkin type -- the tetrahedron corresponds to :math:`E_6`, the cube/octahedron dual pair to :math:`E_7`, and the dodecahedron/icosahedron dual pair to :math:`E_8`. **Interactive 3D viewer** -- click and drag to rotate, scroll to zoom (`open fullscreen <_static/platonic_viewer.html>`__): .. raw:: html 3. The Rotation Groups ------------------------ Each Platonic solid has a **rotation group** -- the group of orientation-preserving symmetries. Up to conjugacy, these are exactly the finite subgroups of :math:`SO(3)`: .. list-table:: :header-rows: 1 * - Solid - :math:`(p, q)` - Rotation group - Order - Generators * - Tetrahedron - (3, 3) - :math:`A_4` (alternating) - 12 - 3-fold and 2-fold rotations * - Cube / Octahedron - (4, 3) / (3, 4) - :math:`S_4` (symmetric) - 24 - 4-fold, 3-fold, 2-fold rotations * - Dodecahedron / Icosahedron - (5, 3) / (3, 5) - :math:`A_5` (alternating) - 60 - 5-fold, 3-fold, 2-fold rotations Additionally, there are two infinite families of finite subgroups of :math:`SO(3)`: - **Cyclic groups** :math:`C_n` (rotation by :math:`2\pi/n` about an axis) - **Dihedral groups** :math:`D_n` (rotations of a regular :math:`n`-gon, including flips) **Theorem.** *The finite subgroups of* :math:`SO(3)` *are exactly: cyclic* :math:`C_n`, *dihedral* :math:`D_n`, *and the three polyhedral groups* :math:`A_4, S_4, A_5`. 4. The McKay Correspondence: From SO(3) to SU(2) to Dynkin ------------------------------------------------------------ The rotation group :math:`SO(3)` has a double cover :math:`SU(2)` (the group of unit quaternions). Every finite subgroup :math:`G \subset SO(3)` lifts to a **binary** subgroup :math:`\tilde{G} \subset SU(2)` of twice the order: .. list-table:: :header-rows: 1 * - :math:`SO(3)` subgroup - :math:`SU(2)` lift - Order - Dynkin diagram * - :math:`C_n` (cyclic) - Binary cyclic :math:`\tilde{C}_n` - :math:`2n` - :math:`A_{n-1}` * - :math:`D_n` (dihedral) - Binary dihedral :math:`\tilde{D}_n` - :math:`4n` - :math:`D_{n+2}` * - :math:`A_4` (tetrahedral) - Binary tetrahedral :math:`\tilde{T}` - 24 - :math:`E_6` * - :math:`S_4` (octahedral) - Binary octahedral :math:`\tilde{O}` - 48 - :math:`E_7` * - :math:`A_5` (icosahedral) - Binary icosahedral :math:`\tilde{I}` - 120 - :math:`E_8` The **McKay correspondence** (John McKay, 1980) explains *how* the Dynkin diagram emerges from the group. It works as follows: **Step 1.** Let :math:`\tilde{G} \subset SU(2)` be a finite subgroup. The natural 2-dimensional representation :math:`\rho` of :math:`\tilde{G}` (inherited from :math:`SU(2)`) is called the **fundamental representation**. **Step 2.** List all irreducible representations :math:`\rho_0, \rho_1, \ldots, \rho_r` of :math:`\tilde{G}`, where :math:`\rho_0` is the trivial representation. **Step 3.** For each :math:`\rho_i`, decompose the tensor product with the fundamental representation: .. math:: \rho \otimes \rho_i = \bigoplus_j a_{ij} \rho_j **Step 4.** Build a graph with one node per irreducible representation, and :math:`a_{ij}` edges between nodes :math:`i` and :math:`j`. **Result.** The graph obtained is the **extended** (affine) Dynkin diagram :math:`\tilde{A}_{n-1}`, :math:`\tilde{D}_{n+2}`, :math:`\tilde{E}_6`, :math:`\tilde{E}_7`, or :math:`\tilde{E}_8`. Removing the node corresponding to the trivial representation :math:`\rho_0` gives the ordinary Dynkin diagram. 5. Spherical Triangle Groups ------------------------------ A **spherical triangle** is a triangle on the unit sphere :math:`S^2` with angles :math:`\pi/p`, :math:`\pi/q`, :math:`\pi/r`. The **triangle group** :math:`\Delta(p, q, r)` is generated by reflections in the sides of this triangle. On a sphere, the angle sum of a triangle exceeds :math:`\pi`: .. math:: \frac{\pi}{p} + \frac{\pi}{q} + \frac{\pi}{r} > \pi Dividing by :math:`\pi`: .. math:: \frac{1}{p} + \frac{1}{q} + \frac{1}{r} > 1 This is exactly the same inequality as in the ADE classification (see :doc:`classification_proof`, equation :eq:`diophantine`), with the identification :math:`p \to p+1`, :math:`q \to q+1`, :math:`r \to r+1` (the triangle group uses the actual angles, while the Dynkin classification uses arm lengths). The spherical triangle groups are: .. list-table:: :header-rows: 1 * - Triangle :math:`(p, q, r)` - Triangle group - Rotation subgroup - Dynkin diagram * - :math:`(2, 2, n)` - Dihedral - :math:`D_n` - :math:`A_{n-1}` / :math:`D_{n+2}` * - :math:`(2, 3, 3)` - Tetrahedral - :math:`A_4` - :math:`E_6` * - :math:`(2, 3, 4)` - Octahedral - :math:`S_4` - :math:`E_7` * - :math:`(2, 3, 5)` - Icosahedral - :math:`A_5` - :math:`E_8` When :math:`\frac{1}{p} + \frac{1}{q} + \frac{1}{r} = 1`, the triangle is **Euclidean** (flat) and tiles the plane -- these correspond to the affine Dynkin diagrams. When the sum is :math:`< 1`, the triangle is **hyperbolic**. 6. The Unified Picture ----------------------- All these classifications are manifestations of the same Diophantine constraint. The connections can be summarized as: .. math:: \frac{1}{p} + \frac{1}{q} + \frac{1}{r} > 1 .. list-table:: :header-rows: 1 :widths: 10 20 20 20 20 * - :math:`(p,q,r)` - Dynkin - Platonic solid - :math:`SO(3)` group - Singularity * - :math:`(2,2,n)` - :math:`D_{n+2}` - :math:`n`-gon prism - Dihedral :math:`D_n` - :math:`x^2 y + y^{n+1}` * - :math:`(2,3,3)` - :math:`E_6` - Tetrahedron - :math:`A_4` - :math:`x^3 + y^4` * - :math:`(2,3,4)` - :math:`E_7` - Cube / Octahedron - :math:`S_4` - :math:`x^3 + xy^3` * - :math:`(2,3,5)` - :math:`E_8` - Dodecahedron / Icosahedron - :math:`A_5` - :math:`x^3 + y^5` The :math:`A_n` family (path graphs) corresponds to the cyclic groups and the :math:`x^{n+1}` singularities. They don't correspond to Platonic solids (which require :math:`p, q \geq 3`), but rather to the simpler geometry of a regular polygon. We can verify the Dynkin diagrams and root counts for all these types: .. code-block:: pycon >>> from mutation_game import MutationGame >>> # the five exceptional connections >>> for name, solid in [("E6", "Tetrahedron"), ... ("E7", "Cube/Octahedron"), ... ("E8", "Dodecahedron/Icosahedron")]: ... game = MutationGame.from_dynkin(name) ... roots = game.calculate_roots() ... pos = [r for r in roots if all(v >= 0 for v in r)] ... print(f" {name} ({solid}): {len(pos)} positive roots, {len(roots)} total") E6 (Tetrahedron): 36 positive roots, 72 total E7 (Cube/Octahedron): 63 positive roots, 126 total E8 (Dodecahedron/Icosahedron): 120 positive roots, 240 total Root systems as geometric shapes ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Before jumping to 3D, let us build the intuition in 2D with the simplest interesting example. A\ :sub:`2`\ : the hexagon (2D) """"""""""""""""""""""""""""""""" **Where do the roots live?** The :math:`A_2` Dynkin diagram has 2 nodes connected by one edge: ``0 — 1``. The mutation game produces 6 roots: 3 positive and 3 negative. But these are just coordinate vectors in :math:`\mathbb{R}^2` — abstract lists of numbers. To *see* the geometry, we need to understand what shape they make when drawn as points. **Step 1: Compute the roots from the mutation game.** This is the definition: the roots are whatever the mutation game produces, starting from the simple roots :math:`(1, 0)` and :math:`(0, 1)`, by applying the mutation matrices :math:`M_0` and :math:`M_1` in every possible sequence. .. code-block:: pycon >>> from mutation_game import MutationGame >>> game = MutationGame.from_dynkin("A2") >>> # The two mutation matrices >>> print("M_0 ="); print(game.mutation_matrix(0)) M_0 = [[-1 1] [ 0 1]] >>> print("M_1 ="); print(game.mutation_matrix(1)) M_1 = [[ 1 0] [ 1 -1]] >>> # Start from simple root (1, 0) and apply mutations >>> import numpy as np >>> v = np.array([1, 0]) # simple root alpha_0 >>> print("Start:", v) Start: [1 0] >>> print("M_1 @ v:", game.mutation_matrix(1) @ v) # mutate at node 1 M_1 @ v: [1 1] >>> # (1, 1) is new! That's the third positive root. >>> # Mutating (1, 1) at node 0: >>> print("M_0 @ (1,1):", game.mutation_matrix(0) @ np.array([1, 1])) M_0 @ (1,1): [0 1] >>> # We got back to (0, 1) — the other simple root. No new roots this way. >>> # Mutating (1, 0) at node 0 just negates it: >>> print("M_0 @ v:", game.mutation_matrix(0) @ v) M_0 @ v: [-1 0] >>> # (-1, 0) is the negative of a simple root >>> # The full BFS gives all 6 roots >>> roots = game.calculate_roots() >>> for r in roots: ... print(list(map(int, r))) [-1, -1] [-1, 0] [0, -1] [0, 1] [1, 0] [1, 1] So the mutation game has produced 6 roots in :math:`\mathbb{R}^2`: :math:`(1,0)`, :math:`(0,1)`, :math:`(1,1)`, and their negatives. These are abstract vectors in the **simple root basis**. The question is: what shape do they make? **Step 2: Try plotting in** :math:`\mathbb{R}^2` **directly.** These are vectors in :math:`\mathbb{R}^2`, so we can just plot them on a grid. Let's do it: .. image:: _static/a2_skewed.png :width: 70% :align: center :alt: A2 roots plotted in the simple root basis -- distorted The roots form a *rectangle*. The two simple roots :math:`\alpha_0 = (1,0)` and :math:`\alpha_1 = (0,1)` appear to be at a **90-degree angle** (the red dashed arc). But should we trust this picture? When we plot points on a grid, we are implicitly using the **standard dot product** to measure angles and distances: :math:`u \cdot v = u_1 v_1 + u_2 v_2`. In the standard dot product, :math:`(1,0)` and :math:`(0,1)` are perpendicular by definition. But the root space has its own natural way of measuring angles, given by the **Cartan matrix**. Let's see what it says. **The Cartan inner product.** Recall from the :doc:`background` that the Cartan matrix :math:`C = 2I - A^T` encodes the structure of the root system. We can use it to define an **inner product** — a generalization of the dot product that "knows about" the geometry of the roots. Given two vectors :math:`u` and :math:`v` (expressed in the simple root basis), their Cartan inner product is: .. math:: \langle u, v \rangle = u^T \, C \, v This looks like the dot product :math:`u \cdot v`, but with the matrix :math:`C` inserted in the middle. When :math:`C` is the identity matrix, this reduces to the ordinary dot product. When :math:`C` has off-diagonal entries (as it does for :math:`A_2`), it "mixes" the components, changing how angles are measured. For :math:`A_2`, the Cartan matrix is :math:`C = \bigl(\begin{smallmatrix} 2 & -1 \\ -1 & 2 \end{smallmatrix}\bigr)`. Let's compute the inner products of the simple roots step by step. **Length of** :math:`\alpha_0 = (1, 0)`: .. math:: \langle \alpha_0, \alpha_0 \rangle = \begin{pmatrix} 1 & 0 \end{pmatrix} \begin{pmatrix} 2 & -1 \\ -1 & 2 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 1 & 0 \end{pmatrix} \begin{pmatrix} 2 \\ -1 \end{pmatrix} = 2 **Length of** :math:`\alpha_1 = (0, 1)`: .. math:: \langle \alpha_1, \alpha_1 \rangle = \begin{pmatrix} 0 & 1 \end{pmatrix} \begin{pmatrix} 2 & -1 \\ -1 & 2 \end{pmatrix} \begin{pmatrix} 0 \\ 1 \end{pmatrix} = \begin{pmatrix} 0 & 1 \end{pmatrix} \begin{pmatrix} -1 \\ 2 \end{pmatrix} = 2 Both simple roots have the same length (:math:`\sqrt{2}` in the Cartan metric). So far, same as the standard dot product would give. **Inner product between** :math:`\alpha_0` **and** :math:`\alpha_1`: .. math:: \langle \alpha_0, \alpha_1 \rangle = \begin{pmatrix} 1 & 0 \end{pmatrix} \begin{pmatrix} 2 & -1 \\ -1 & 2 \end{pmatrix} \begin{pmatrix} 0 \\ 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 \end{pmatrix} \begin{pmatrix} -1 \\ 2 \end{pmatrix} = -1 Here is the key difference: the standard dot product gives :math:`(1,0) \cdot (0,1) = 0` (perpendicular), but the Cartan inner product gives :math:`-1` (not perpendicular at all). **The angle.** The angle :math:`\theta` between two vectors satisfies: .. math:: \cos\theta = \frac{\langle u, v \rangle} {\sqrt{\langle u, u \rangle \cdot \langle v, v \rangle}} This is the same formula as for the ordinary dot product, but using the Cartan inner product. Plugging in: .. math:: \cos\theta = \frac{-1}{\sqrt{2 \cdot 2}} = -\frac{1}{2} \quad\Longrightarrow\quad \theta = 120° The simple roots actually meet at **120 degrees**, not 90. Our :math:`\mathbb{R}^2` plot used the standard dot product to draw the grid, which assumes the basis vectors are perpendicular. Since they aren't (under the Cartan metric), the picture is distorted. **Step 3: Finding a space where the geometry is honest.** We want to draw the roots in a way that shows the true angles and distances. That means we need to find concrete vectors in some :math:`\mathbb{R}^m` (with the ordinary dot product) whose dot products match the Cartan inner products. Specifically, we need two vectors :math:`v_0, v_1 \in \mathbb{R}^m` such that: .. math:: v_0 \cdot v_0 = 2, \qquad v_1 \cdot v_1 = 2, \qquad v_0 \cdot v_1 = -1 Can we do this in :math:`\mathbb{R}^2`? We need two vectors of length :math:`\sqrt{2}` at a 120-degree angle. Yes — for example :math:`v_0 = (\sqrt{2}, 0)` and :math:`v_1 = (-\frac{1}{\sqrt{2}}, \frac{\sqrt{6}}{2})`. That works but looks ugly. There is a much cleaner choice in :math:`\mathbb{R}^3`. Consider the **differences of standard basis vectors**: .. math:: v_0 = e_1 - e_2 = (1, -1, 0), \qquad v_1 = e_2 - e_3 = (0, 1, -1) Check the dot products (ordinary dot product in :math:`\mathbb{R}^3`): .. math:: v_0 \cdot v_0 = 1 + 1 + 0 = 2 \quad\checkmark .. math:: v_1 \cdot v_1 = 0 + 1 + 1 = 2 \quad\checkmark .. math:: v_0 \cdot v_1 = 0 + (-1) + 0 = -1 \quad\checkmark All three match. So the embedding :math:`\alpha_0 \mapsto e_1 - e_2`, :math:`\alpha_1 \mapsto e_2 - e_3` is not arbitrary — it is the unique (up to rotation) simplest embedding where the ordinary dot product reproduces the Cartan inner product. We use :math:`\mathbb{R}^3` (not :math:`\mathbb{R}^2` or :math:`\mathbb{R}^{17}`) because 3 = n+1 is the smallest dimension where this clean construction works for :math:`A_n`. Now define the standard basis of :math:`\mathbb{R}^3`: .. math:: e_1 = (1, 0, 0), \quad e_2 = (0, 1, 0), \quad e_3 = (0, 0, 1) The **simple roots** of :math:`A_2` are embedded as: .. math:: \alpha_0 = e_1 - e_2 = (1, -1, 0), \qquad \alpha_1 = e_2 - e_3 = (0, 1, -1) These are the two vectors that correspond to the nodes of the Dynkin diagram. They are the "building blocks" that generate all the roots. **Step 4: Translate all 6 roots into** :math:`\mathbb{R}^3`. Each root :math:`(a, b)` in the simple root basis means :math:`a \cdot \alpha_0 + b \cdot \alpha_1`: .. math:: \begin{array}{rcccl} (1, 0) &=& 1 \cdot \alpha_0 + 0 \cdot \alpha_1 &=& e_1 - e_2 = (1, -1, 0) \\ (0, 1) &=& 0 \cdot \alpha_0 + 1 \cdot \alpha_1 &=& e_2 - e_3 = (0, 1, -1) \\ (1, 1) &=& 1 \cdot \alpha_0 + 1 \cdot \alpha_1 &=& e_1 - e_3 = (1, 0, -1) \\[6pt] (-1, 0) &=& -\alpha_0 &=& e_2 - e_1 = (-1, 1, 0) \\ (0, -1) &=& -\alpha_1 &=& e_3 - e_2 = (0, -1, 1) \\ (-1, -1) &=& -\alpha_0 - \alpha_1 &=& e_3 - e_1 = (-1, 0, 1) \end{array} Look at the result: the 6 roots in :math:`\mathbb{R}^3` are exactly **all differences** :math:`e_i - e_j` with :math:`i \neq j`. This is not a definition — it is a consequence of the mutation game. The mutations happened to produce precisely the vectors that can be written as :math:`e_i - e_j`. Each negative root is the opposite of a positive root: :math:`-(e_1 - e_2) = e_2 - e_1`. **Step 5: All roots lie on a plane.** Check the coordinates — every root has components that sum to zero: .. math:: (1) + (-1) + (0) = 0, \quad (0) + (1) + (-1) = 0, \quad \text{etc.} This means all 6 vectors lie on the plane :math:`x + y + z = 0` inside :math:`\mathbb{R}^3`. This plane passes through the origin and is 2-dimensional, so we can draw the roots as points on a flat sheet of paper. **Step 6: See the hexagon.** When we project these 6 points onto the plane, they are all at the same distance from the origin (:math:`\sqrt{2}`), and equally spaced at 60-degree intervals. They form a perfect **regular hexagon**: .. image:: _static/a2_hexagon.png :width: 80% :align: center :alt: A2 root system forming a regular hexagon The two **simple roots** :math:`e_1 - e_2` and :math:`e_2 - e_3` (shown as larger dots with white borders) are adjacent vertices of the hexagon. The third positive root :math:`e_1 - e_3` is their sum — it sits between them. The three negative roots sit on the opposite side. **Step 7: The symmetry group.** The hexagon has the symmetry of an **equilateral triangle** (the triangle formed by the 3 positive roots). This symmetry group is :math:`S_3` — the group of all permutations of 3 objects — which has :math:`3! = 6` elements (3 rotations + 3 reflections). Why :math:`S_3`? Because permuting the indices :math:`\{1, 2, 3\}` in :math:`e_i - e_j` sends roots to roots. For example, the transposition :math:`(1 \leftrightarrow 2)` sends :math:`e_1 - e_2 \mapsto e_2 - e_1`, which swaps a positive root with its negative. This is exactly what a **mutation** does — and the group generated by all mutations is the Weyl group :math:`S_3`. .. code-block:: pycon >>> # The Cartan matrix: inner products of simple roots >>> print(game.cartan_matrix()) [[ 2 -1] [-1 2]] >>> # The Coxeter element (product of both mutations) >>> M = game.mutation_matrix(0) @ game.mutation_matrix(1) >>> print(M) [[ 0 -1] [ 1 -1]] >>> # This matrix has order 3: M^3 = I (a 120-degree rotation of the hexagon) >>> print(M @ M @ M) [[1 0] [0 1]] The mutation graph also forms a hexagon — the same shape! Here each node is a root vector, and the edges show which mutation transforms one root into another: .. image:: _static/a2_all_roots.png :width: 100% :alt: A2 mutation graph -- 6 roots, 6 edges in a hexagonal pattern The hexagonal shape appears in both the root geometry (points in the plane) and the mutation graph (how roots are connected by mutations). This is not a coincidence — it reflects the underlying :math:`S_3` symmetry. A\ :sub:`3`\ : the cuboctahedron (3D) """"""""""""""""""""""""""""""""""""""" Now we go up one dimension. The :math:`A_3` Dynkin diagram has 3 nodes in a path: ``0 — 1 — 2``. The exact same construction that gave us a hexagon in 2D now gives us a 3D shape. **Step 1: Standard basis vectors in** :math:`\mathbb{R}^4`. .. math:: e_1 = (1,0,0,0), \quad e_2 = (0,1,0,0), \quad e_3 = (0,0,1,0), \quad e_4 = (0,0,0,1) **Step 2: Form the roots.** All differences :math:`e_i - e_j` with :math:`i \neq j`. There are :math:`4 \times 3 = 12` of them — 6 positive (:math:`i < j`) and 6 negative (:math:`i > j`). **Step 3: Project to 3D.** All 12 vectors satisfy :math:`x + y + z + w = 0`, so they lie on a 3-dimensional hyperplane inside :math:`\mathbb{R}^4`. **Step 4: See the cuboctahedron.** The 12 points form a **cuboctahedron** — an Archimedean solid with 8 triangular faces and 6 square faces. It is the shape you get by cutting every corner of a cube at the midpoint of each edge. **Step 5: The symmetry group.** The cuboctahedron has the symmetry of the **cube** (and its dual the octahedron). The rotation group is :math:`S_4` (permutations of 4 objects, order 24) — exactly the Weyl group of :math:`A_3`. The pattern: .. list-table:: :header-rows: 1 * - Type - Roots - Shape - Weyl group - Symmetry of... * - :math:`A_1` - 2 - Line segment - :math:`S_2 = \mathbb{Z}/2` (order 2) - \— * - :math:`A_2` - 6 - Regular hexagon - :math:`S_3` (order 6) - Equilateral triangle * - :math:`A_3` - 12 - Cuboctahedron - :math:`S_4` (order 24) - Cube / Octahedron * - :math:`A_4` - 20 - 4D polytope - :math:`S_5` (order 120) - 5-cell (4D simplex) Each step up adds one dimension and one node to the Dynkin diagram, and the root polytope gains a dimension accordingly. The mutation graph of the full :math:`A_3` root system (both positive and negative roots), with 12 roots and 15 mutation edges: .. image:: _static/a3_all_roots.png :width: 100% :alt: A3 full mutation graph -- 12 roots, 15 edges The same 12 roots realized as vertices of the cuboctahedron in 3D (`open fullscreen <_static/roots_viewer.html>`__): .. raw:: html Each vertex of the cuboctahedron is a root :math:`e_i - e_j`, colored by the **dominant simple root** using the same tab10 palette as the mutation graph: node 0 in blue, node 1 in orange, node 2 in green. Lighter shades mark positive roots (:math:`i < j`), darker shades mark negative roots. Simple roots :math:`e_i - e_{i+1}` appear as larger saturated spheres. Edges are colored by **mutation index** -- blue edges correspond to mutation at node 0, orange to node 1, green to node 2 -- matching the edge labels in the static mutation graph. The cuboctahedral geometry reflects the :math:`S_4` symmetry of the Weyl group -- the same group as the rotation group of the cube/octahedron. .. note:: The 240 roots of :math:`E_8` can be realized as vectors in :math:`\mathbb{R}^8`. Their convex hull is the **Gosset polytope** :math:`4_{21}`, a remarkable 8-dimensional object with 240 vertices, 6720 edges, and deep connections to string theory and the octonions. 7. The du Val Singularities ----------------------------- The circle closes with the **du Val singularities** (also called rational double points or Kleinian singularities). Given a finite subgroup :math:`\tilde{G} \subset SU(2)`, consider its action on :math:`\mathbb{C}^2`. The quotient :math:`\mathbb{C}^2 / \tilde{G}` is a surface with an isolated singularity at the origin, and this singularity is of ADE type: .. list-table:: :header-rows: 1 * - Group :math:`\tilde{G}` - Quotient singularity - Equation in :math:`\mathbb{C}^3` - Type * - Binary cyclic :math:`\tilde{C}_n` - :math:`\mathbb{C}^2 / \tilde{C}_n` - :math:`x^2 + y^2 + z^n = 0` - :math:`A_{n-1}` * - Binary dihedral :math:`\tilde{D}_n` - :math:`\mathbb{C}^2 / \tilde{D}_n` - :math:`x^2 + y^2 z + z^{n-1} = 0` - :math:`D_{n+2}` * - Binary tetrahedral :math:`\tilde{T}` - :math:`\mathbb{C}^2 / \tilde{T}` - :math:`x^2 + y^3 + z^4 = 0` - :math:`E_6` * - Binary octahedral :math:`\tilde{O}` - :math:`\mathbb{C}^2 / \tilde{O}` - :math:`x^2 + y^3 + yz^3 = 0` - :math:`E_7` * - Binary icosahedral :math:`\tilde{I}` - :math:`\mathbb{C}^2 / \tilde{I}` - :math:`x^2 + y^3 + z^5 = 0` - :math:`E_8` The equations in the right column are exactly the ADE singularities from Arnold's classification (see :doc:`singularities`). The resolution of these surface singularities produces a configuration of exceptional curves whose intersection graph is the corresponding Dynkin diagram. This completes the circle: .. math:: \boxed{\text{Platonic solid}} \to \boxed{\text{Rotation group}} \to \boxed{\text{Binary group } \tilde{G} \subset SU(2)} \to \boxed{\mathbb{C}^2 / \tilde{G}} \to \boxed{\text{ADE singularity}} \to \boxed{\text{Dynkin diagram}} References ----------- .. [McKay1980] J. McKay, "Graphs, singularities, and finite groups," *Proceedings of Symposia in Pure Mathematics* 37 (1980), 183--186. .. [Klein1884] F. Klein, *Vorlesungen uber das Ikosaeder und die Auflosung der Gleichungen vom funften Grade*, Teubner, 1884. English translation: *Lectures on the Icosahedron*, Dover, 2003. .. [duVal1934] P. du Val, "On isolated singularities of surfaces which do not affect the conditions of adjunction," *Proceedings of the Cambridge Philosophical Society* 30 (1934), 453--459.