diff --git a/_freeze/posts/chebyshev/1/index/execute-results/html.json b/_freeze/posts/chebyshev/1/index/execute-results/html.json
new file mode 100644
index 0000000..3914367
--- /dev/null
+++ b/_freeze/posts/chebyshev/1/index/execute-results/html.json
@@ -0,0 +1,12 @@
+{
+ "hash": "f0d1956695c45b1ca4b803d88c0a4bf5",
+ "result": {
+ "engine": "jupyter",
+ "markdown": "---\ntitle: \"Generating Polynomials, Part 1: Regular Constructibility\"\ndescription: |\n What kinds of regular polygons are constructible with compass and straightedge?\nformat:\n html:\n html-math-method: katex\ndate: \"2021-08-18\"\ndate-modified: \"2025-06-17\"\ncategories:\n - geometry\n - generating functions\n - algebra\n - python\n---\n\n\n\n\n\n[Recently](/posts/misc/platonic-volume), I used coordinate-free geometry to derive\n the volumes of the Platonic solids, a problem which was very accessible to the ancient Greeks.\nOn the other hand, they found certain problems regarding which figures can be constructed via\n compass and straightedge to be very difficult. For example, they struggled with problems\n like [doubling the cube](https://en.wikipedia.org/wiki/Doubling_the_cube)\n or [squaring the circle](https://en.wikipedia.org/wiki/Squaring_the_circle),\n which are known (through circa 19th century mathematics) to be impossible.\nHowever, before even extending planar geometry by a third dimension or\n calculating the areas of circles, a simpler problem becomes apparent.\nNamely, what kinds of regular polygons are constructible?\n\n\nRegular Geometry and a Complex Series\n-------------------------------------\n\nWhen constructing a regular polygon, one wants a ratio between the length of a edge\n and the distance from a vertex to the center of the figure.\n\n{.wide}\n\nIn a convex polygon, the total central angle is always one full turn, or 2π radians.\nThe central angle of a regular *n*-gon is ${2\\pi \\over n}$ radians,\n and the green angle above (which we'll call *θ*) is half of that.\nThis means that the ratio we're looking for is $\\sin(\\theta) = \\sin(\\pi / n)$.\nWe can multiply by *n* inside the function on both sides to give\n $\\sin(n\\theta) = \\sin(\\pi) = 0$.\nTherefore, constructing a polygon is actually equivalent to solving this equation,\n and we can rephrase the question as how to express $\\sin(n\\theta)$ (and $\\cos(n\\theta)$).\n\n\n### Complex Recursion\n\nThanks to [Euler's formula](https://en.wikipedia.org/wiki/Euler%27s_formula)\n and [de Moivre's formula](https://en.wikipedia.org/wiki/De_Moivre%27s_formula),\n the expressions we're looking for can be phrased in terms of the complex exponential.\n\n$$\n\\begin{align*}\n e^{i\\theta}\n &= \\text{cis}(\\theta) = \\cos(\\theta) + i\\sin(\\theta)\n & \\text{ Euler's formula}\n \\\\\n \\text{cis}(n \\theta) = e^{i(n\\theta)}\n &= e^{(i\\theta)n} = {(e^{i\\theta})}^n = \\text{cis}(\\theta)^n\n \\\\\n \\cos(n \\theta) + i\\sin(n \\theta)\n &= (\\cos(\\theta) + i\\sin(\\theta))^n\n & \\text{ de Moivre's formula}\n\\end{align*}\n$$\n\nDe Moivre's formula for $n = 2$ gives\n\n$$\n\\begin{align*}\n \\text{cis}(\\theta)^2\n &= (\\text{c} + i\\text{s})^2\n \\\\\n &= \\text{c}^2 + 2i\\text{cs} - \\text{s}^2 + (0 = \\text{c}^2 + \\text{s}^2 - 1)\n \\\\\n &= 2\\text{c}^2 + 2i\\text{cs} - 1\n \\\\\n &= 2\\text{c}(\\text{c} + i\\text{s}) - 1\n \\\\\n &= 2\\cos(\\theta)\\text{cis}(\\theta) - 1\n\\end{align*}\n$$\n\nThis can easily be massaged into a recurrence relation.\n\n$$\n\\begin{align*}\n \\text{cis}(\\theta)^2\n &= 2\\cos(\\theta)\\text{cis}(\\theta) - 1\n \\\\\n \\text{cis}(\\theta)^{n+2}\n &= 2\\cos(\\theta)\\text{cis}(\\theta)^{n+1} - \\text{cis}(\\theta)^n\n \\\\\n \\text{cis}((n+2)\\theta)\n &= 2\\cos(\\theta)\\text{cis}((n+1)\\theta) - \\text{cis}(n\\theta)\n\\end{align*}\n$$\n\nRecurrence relations like this one are powerful.\nThrough some fairly straightforward summatory manipulations,\n the sequence can be interpreted as the coefficients in a Taylor series,\n giving a [generating function](https://en.wikipedia.org/wiki/Generating_function).\nCall this function *F*. Then,\n\n$$\n\\begin{align*}\n \\sum_{n=0}^\\infty \\text{cis}((n+2)\\theta)x^n\n &= 2\\cos(\\theta) \\sum_{n=0}^\\infty \\text{cis}((n+1)\\theta) x^n\n - \\sum_{n=0}^\\infty \\text{cis}(n\\theta) x^n\n \\\\\n {F(x; \\text{cis}(\\theta)) - 1 - x\\text{cis}(\\theta) \\over x^2}\n &= 2\\cos(\\theta) {F(x; \\text{cis}(\\theta)) - 1 \\over x}\n - F(x; \\text{cis}(\\theta))\n \\\\[10pt]\n F - 1 - x\\text{cis}(\\theta)\n &= 2\\cos(\\theta) x (F - 1)\n - x^2 F\n \\\\\n F - 2\\cos(\\theta) x F + x^2 F\n &= 1 + x(\\text{cis}(\\theta) - 2\\cos(\\theta))\n \\\\[10pt]\n F(x; \\text{cis}(\\theta))\n &= {1 + x(\\text{cis}(\\theta) - 2\\cos(\\theta)) \\over\n 1 - 2\\cos(\\theta)x + x^2}\n\\end{align*}\n$$\n\nSince $\\text{cis}$ is a complex function, we can separate *F* into real and imaginary parts.\nConveniently, these correspond to $\\cos(n\\theta)$ and $\\sin(n\\theta)$, respectively.\n\n$$\n\\begin{align*}\n \\Re[ F(x; \\text{cis}(\\theta)) ]\n &= {1 + x(\\cos(\\theta) - 2\\cos(\\theta)) \\over 1 - 2\\cos(\\theta)x + x^2}\n \\\\\n &= {1 - x\\cos(\\theta) \\over 1 - 2\\cos(\\theta)x + x^2} = A(x; \\cos(\\theta))\n \\\\\n \\Im[ F(x; \\text{cis}(\\theta)) ]\n &= {x \\sin(\\theta) \\over 1 - 2\\cos(\\theta)x + x^2} = B(x; \\cos(\\theta))\\sin(\\theta)\n\\end{align*}\n$$\n\nIn this form, it becomes obvious that the even though the generating function *F* was originally\n parametrized by $\\text{cis}(\\theta)$, *A* and *B* are parametrized only by $\\cos(\\theta)$.\nExtracting the coefficients of *x* yields an expression for $\\cos(n\\theta)$ and $\\sin(n\\theta)$\n in terms of $\\cos(\\theta)$ (and in the latter case, a common factor of $\\sin(\\theta)$).\n\nIf $\\cos(\\theta)$ in *A* and *B* is replaced with the parameter *z*, then all trigonometric functions\n are removed from the equation, and we are left with only polynomials[^1].\nThese polynomials are [*Chebyshev polynomials*](https://en.wikipedia.org/wiki/Chebyshev_polynomial)\n *of the first (A) and second (B) kind*.\nIn actuality, the polynomials of the second kind are typically offset by 1\n (the x in the numerator of *B* is omitted).\nHowever, retaining this term makes indexing consistent between *A* and *B*\n (and will make things clearer later).\n\n[^1]:\n This can actually be observed as early as the recurrence relation.\n\n $$\n \\begin{align*}\n \\text{cis}(\\theta)^{n+2}\n &= 2\\cos(\\theta)\\text{cis}(\\theta)^{n+1} - \\text{cis}(\\theta)^n\n \\\\\n a_{n+2}\n &= 2 z a_{n+1} - a_n\n \\\\\n \\Re[ a_0 ]\n &= 1,~~ \\Im[ a_0 ] = 0\n \\\\\n \\Re[ a_1 ]\n &= z,~~ \\Im[ a_1 ] = 1 \\cdot \\sin(\\theta)\n \\end{align*}\n $$\n\n\nWe were primarily interested in $\\sin(n\\theta)$, so let's tabulate\n the first few polynomials of the second kind (at $z / 2$).\n\n::: {#tbl-chebyshevu .cell .plain tbl-cap='[OEIS A049310](http://oeis.org/A049310)' execution_count=3}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=2}\n*n* $[x^n]B(x; z / 2) = U_{n - 1}(z / 2)$ Factored\n----- --------------------------------------------- -------------------------------------------------------------------------------------------------\n0 $0$ $0$\n1 $1$ $1$\n2 $z$ $z$\n3 $z^{2} - 1$ $\\left(z - 1\\right) \\left(z + 1\\right)$\n4 $z^{3} - 2 z$ $z \\left(z^{2} - 2\\right)$\n5 $z^{4} - 3 z^{2} + 1$ $\\left(z^{2} - z - 1\\right) \\left(z^{2} + z - 1\\right)$\n6 $z^{5} - 4 z^{3} + 3 z$ $z \\left(z - 1\\right) \\left(z + 1\\right) \\left(z^{2} - 3\\right)$\n7 $z^{6} - 5 z^{4} + 6 z^{2} - 1$ $\\left(z^{3} - z^{2} - 2 z + 1\\right) \\left(z^{3} + z^{2} - 2 z - 1\\right)$\n8 $z^{7} - 6 z^{5} + 10 z^{3} - 4 z$ $z \\left(z^{2} - 2\\right) \\left(z^{4} - 4 z^{2} + 2\\right)$\n9 $z^{8} - 7 z^{6} + 15 z^{4} - 10 z^{2} + 1$ $\\left(z - 1\\right) \\left(z + 1\\right) \\left(z^{3} - 3 z - 1\\right) \\left(z^{3} - 3 z + 1\\right)$\n10 $z^{9} - 8 z^{7} + 21 z^{5} - 20 z^{3} + 5 z$ $z \\left(z^{2} - z - 1\\right) \\left(z^{2} + z - 1\\right) \\left(z^{4} - 5 z^{2} + 5\\right)$\n:::\n:::\n\n\nEvaluating the polynomials at $z / 2$ cancels the 2 in the denominator (and recurrence),\n making these expressions much simpler.\nThis evaluation has an interpretation in terms of the previous diagram --\n recall we used *half* the length of a side as a leg of the right triangle.\nFor a unit circumradius, the side length itself is then $2\\sin( {\\pi / n} )$.\nTo compensate for this doubling, the Chebyshev polynomial must be evaluated at half its normal argument.\n\n\n### Back on the Plane\n\nThe constructibility criterion is deeply connected to the Chebyshev polynomials.\nIn compass and straightedge constructions, one only has access to linear forms (lines)\n and quadratic forms (circles).\nThis means that a figure is constructible if and only if the root can be expressed using\n normal arithmetic (which is linear) and square roots (which are quadratic).\n\n\n#### Pentagons\n\nLet's look at a regular pentagon.\nThe relevant polynomial is\n\n$$\n[x^5]B ( x; z / 2 )\n = z^4 - 3z^2 + 1\n = (z^2 - z - 1) (z^2 + z - 1)\n$$\n\nAccording to how we derived this series, when $z = 2\\cos(\\theta)$, the roots of this polynomial\n correspond to when $\\sin(5\\theta) / \\sin(\\theta) = 0$.\nThis relation itself is true when $\\theta = \\pi / 5$, since $\\sin(5 \\pi / 5) = 0$.\n\nOne of the factors must therefore be the minimal polynomial of $2\\cos(\\pi / 5 )$.\nThe former happens to be correct correct, since $2\\cos( \\pi / 5 ) = \\varphi$, the golden ratio.\nNote that the second factor is the first evaluated at -*z*.\n\n\n#### Heptagons\n\nAn example of where constructability fails is for $2\\cos( \\pi / 7 )$.\n\n$$\n\\begin{align*}\n [x^7]B ( x; z / 2 )\n &= z^6 - 5 z^4 + 6 z^2 - 1\n \\\\\n &= ( z^3 - z^2 - 2 z + 1 ) ( z^3 + z^2 - 2 z - 1 )\n\\end{align*}\n$$\n\nWhichever is the minimal polynomial (the former), it is a cubic, and constructing\n a regular heptagon is equivalent to solving it for *z*.\nBut there are no (nondegenerate) cubics that one can produce via compass and straightedge,\n and all constructions necessarily fail.\n\n\n#### Decagons\n\nOne might think the same of $2\\cos(\\pi /10 )$\n\n$$\n\\begin{align*}\n [x^{10}]B ( x; z / 2 )\n &= z^9 - 8 z^7 + 21 z^5 - 20 z^3 + 5 z\n \\\\\n &= z ( z^2 - z - 1 )( z^2 + z - 1 )( z^4 - 5 z^2 + 5 )\n\\end{align*}\n$$\n\nThis expression also contains the polynomials for $2\\cos( \\pi / 5 )$.\nThis is because a regular decagon would contain two disjoint regular pentagons,\n produced by connecting every other vertex.\n\n\n\nThe polynomial which actually corresponds to $2\\cos( \\pi / 10 )$ is the quartic,\n which seems to suggest that it will require a fourth root and somehow decagons are not constructible.\nHowever, it can be solved by completing the square...\n\n$$\n\\begin{align*}\n z^4 - 5z^2 &= -5\n \\\\\n z^4 - 5z^2 + (5/2)^2 &= -5 + (5/2)^2\n \\\\\n ( z^2 - 5/2)^2 &= {25 - 20 \\over 4}\n \\\\\n ( z^2 - 5/2) &= {\\sqrt 5 \\over 2}\n \\\\\n z^2 &= {5 \\over 2} + {\\sqrt 5 \\over 2}\n \\\\\n z &= \\sqrt{ {5 + \\sqrt 5 \\over 2} }\n\\end{align*}\n$$\n\n...and we can breathe a sigh of relief.\n\n\nThe Triangle behind Regular Polygons\n------------------------------------\n\nPreferring *z* to be halved in $B(x; z/2)$ makes something else more evident.\nObserve these four rows of the Chebyshev polynomials\n\n::: {#273cfec0 .cell .plain execution_count=4}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=3}\n*n* $[x^n]B(x; z / 2)$ *k* $[z^{k}][x^n]B(x; z / 2)$\n----- ------------------------------- ----- ---------------------------\n4 $z^{3} - 2 z$ 3 1\n5 $z^{4} - 3 z^{2} + 1$ 2 -3\n6 $z^{5} - 4 z^{3} + 3 z$ 1 3\n7 $z^{6} - 5 z^{4} + 6 z^{2} - 1$ 0 -1\n:::\n:::\n\n\nThe last column looks like an alternating row of Pascal's triangle\n (namely, ${n - \\lfloor {k / 2} \\rfloor - 1 \\choose k}(-1)^k$).\nThis resemblance can be made more apparent by listing the coefficients of the polynomials in a table.\n\n::: {#92d420a6 .cell .plain execution_count=5}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=4}\n n $z^9$ $z^8$ $z^7$ $z^6$ $z^5$ $z^4$ $z^3$ $z^2$ $z$ $1$\n--- ------------------------------ ------------------------------------ ------------------------------------- ----------------------------------- ----------------------------------- ----------------------------------- ------------------------------------ ------------------------------------- ------------------------------------- -------------------------------------\n 1 1\n 2 1 0\n 3 1 0 -1\n 4 1 0 -2 0\n 5 1 0 -3 0 1\n 6 1 0 -4 0 3 0\n 7 1 0 -5 0 6 0 -1\n 8 1 0 -6 0 10 0 -4 0\n 9 1 0 -7 0 15 0 -10 0 1\n 10 1 0 -8 0 21 0 -20 0 5 0\n:::\n:::\n\n\nThough they alternate in sign, the rows of Pascal's triangle appear along diagonals,\n which I have marked in rainbow.\nMeanwhile, alternating versions of the naturals (1, 2, 3, 4...),\n the triangular numbers (1, 3, 6, 10...),\n the tetrahedral numbers (1, 4, 10, 20...), etc.\n are present along the columns, albeit spaced out by 0's.\n\nThe relationship of the Chebyshev polynomials to the triangle is easier to see if\n the coefficient extraction of $B(x; z / 2)$ is reversed.\nIn other words, we extract *z* before extracting *x*.\n\n$$\n\\begin{align*}\n B(x; z / 2) &= {x \\over 1 - zx + x^2}\n = {x \\over 1 + x^2 - zx}\n = {x \\over 1 + x^2}\n \\cdot {1 \\over {1 + x^2 \\over 1 + x^2} - z{x \\over 1 + x^2}}\n \\\\[10pt]\n [z^n]B(x; z / 2) &= {x \\over 1 + x^2} [z^n] {1 \\over 1 - z{x \\over 1 + x^2}}\n = {x \\over 1 + x^2} \\left( {x \\over 1 + x^2} \\right)^n\n \\\\\n &= \\left( {x \\over 1 + x^2} \\right)^{n+1}\n = x^{n+1} (1 + x^2)^{-n - 1}\n \\\\\n &= x^{n+1} \\sum_{k=0}^\\infty {-n - 1 \\choose k}(x^2)^k\n \\quad \\text{Binomial theorem}\n\\end{align*}\n$$\n\nWhile the use of the binomial theorem is more than enough to justify\n the appearance of Pascal's triangle (along with explaining the 0's),\n I'll simplify further to explicitly show the alternating signs.\n\n$$\n\\begin{align*}\n {(-n - 1)_k} &= (-n - 1)(-n - 2) \\cdots (-n - k)\n \\\\\n &= (-1)^k (n + k)(n + k - 1) \\cdots (n + 1)\n \\\\\n &= (-1)^k (n + k)_k\n \\\\\n \\implies {-n - 1 \\choose k}\n &= {n + k \\choose k}(-1)^k\n \\\\[10pt]\n [z^n]B(x; z / 2)\n &= x^{n+1} \\sum_{k=0}^\\infty {n + k \\choose k} (-1)^k x^{2k}\n\\end{align*}\n$$\n\nSquinting hard enough, the binomial coefficient is similar to the earlier\n which gave the third row of Pascal's triangle.\nIf k is fixed, then this expression actually generates the antidiagonal entries\n of the coefficient table, which are the columns with uniform sign.\nThe alternation instead occurs between antidiagonals (one is all positive,\n the next is 0's, the next is all negative, etc.).\nThe initial $x^{n+1}$ lags these sequences so that they reproduce the triangle.\n\n\n### Imagined Transmutation\n\nThe generating function of the Chebyshev polynomials resembles other two term recurrences.\nFor example, the Fibonacci numbers have generating function\n\n$$\n\\sum_{n = 0}^\\infty \\text{Fib}_n x^n = {1 \\over 1 - x - x^2}\n$$\n\nThis resemblance can be made explicit with a simple algebraic manipulation.\n\n$$\n\\begin{align*}\n B(ix; -iz / 2)\n &= {1 \\over 1 -\\ (-i z)(ix) + (ix)^2}\n = {1 \\over 1 -\\ (-i^2) z x + (i^2)(x^2)}\n \\\\\n &= {1 \\over 1 -\\ z x -\\ x^2}\n\\end{align*}\n$$\n\nIf $z = 1$, these two generating functions are equal.\nThe same can be said for $z = 2$ with the generating function of the Pell numbers,\n and so on for higher recurrences (corresponding to metallic means) for higher integral *z*.\n\nIn terms of the Chebyshev polynomials, this series manipulation removes the alternation in\n the coefficients of $U_n$, restoring Pascal's triangle to its nonalternating form.\nRelated to the previous point, it is possible to find the Fibonacci numbers (Pell numbers, etc.)\n in Pascal's triangle, which you can read more about\n [here](http://users.dimi.uniud.it/~giacomo.dellariccia/Glossary/Pascal/Koshy2011.pdf).\n\n\nManipulating the Series\n-----------------------\n\nLook back to the table of $U_{n - 1}(z / 2)$ (@tbl-chebyshevu).\nWhen I brought up $U_{10 - 1}(z / 2)$ and decagons, I pointed out their relationship to pentagons\n as an explanation for why $U_{5 -\\ 1}(z / 2)$ appears as a factor.\nConveniently, $U_{2 -\\ 1}(z / 2) = z$ is also a factor, and 2 is likewise a factor of 10.\n\nThis pattern is present throughout the table; $n = 6$ contains factors for\n $n = 2 \\text{ and } 3$ and the prime numbers have no smaller factors.\nIf this observation is legitimate, call the newest term $f_n(z)$\n and denote $p_n(z) = U_{n -\\ 1}( z / 2 )$.\n\n\n### Factorization Attempts\n\nThe relationship between $p_n$ and the intermediate $f_d$, where *d* is a divisor of *n*,\n can be made explicit by a [Möbius inversion](https://en.wikipedia.org/wiki/M%C3%B6bius_inversion_formula).\n\n$$\n\\begin{align*}\n p_n(z) &= \\prod_{d|n} f_n(z)\n \\\\\n \\log( p_n(z) )\n &= \\log \\left( \\prod_{d|n} f_d(z) \\right)\n = \\sum_{d|n} \\log( f_d(z) )\n \\\\\n \\log( f_n(z) ) &= \\sum_{d|n} { \\mu \\left({n \\over d} \\right)}\n \\log( p_d(z) )\n \\\\\n f_n(z) &= \\prod_{d|n} p_d(z)^{ \\mu (n / d) }\n \\\\[10pt]\n f_6(z) = g_6(z)\n &= p_6(z)^{\\mu(1)}\n p_3(z)^{\\mu(2)}\n p_2(z)^{\\mu(3)}\n \\\\\n &= {p_6(z) \\over p_3(z) p_2(z)}\n\\end{align*}\n$$\n\nUnfortunately, it's difficult to apply this technique across our whole series.\nMöbius inversion over series typically uses more advanced generating functions such as\n [Dirichlet series](https://en.wikipedia.org/wiki/Dirichlet_series#Formal_Dirichlet_series)\n or [Lambert series](https://en.wikipedia.org/wiki/Lambert_series).\nHowever, naively reaching for these fails for two reasons:\n\n- We built our series of polynomials on a recurrence relation, and these series\n are opaque to such manipulations.\n- To do a proper Möbius inversion, we need these kinds of series over the *logarithm*\n of each polynomial (*B* is a series over the polynomials themselves).\n\nIgnoring these (and if you're in the mood for awful-looking math) you may note\n the Lambert equivalence[^2]:\n\n[^2]:\n This equivalence applies to other polynomial series obeying the same factorization rule\n such as the [cyclotomic polynomials](https://en.wikipedia.org/wiki/Cyclotomic_polynomial).\n\n$$\n\\begin{align*}\n \\log( p_n(z) )\n &= \\sum_{d|n} \\log( f_d(z) )\n \\\\\n \\sum_{n = 1}^\\infty \\log( p_n ) x^n\n &= \\sum_{n = 1}^\\infty \\sum_{d|n} \\log( f_d ) x^n\n \\\\\n &= \\sum_{k = 1}^\\infty \\sum_{m = 1}^\\infty \\log( f_m ) x^{m k}\n \\\\\n &= \\sum_{m = 1}^\\infty \\log( f_m ) \\sum_{k = 1}^\\infty (x^m)^k\n \\\\\n &= \\sum_{m = 1}^\\infty \\log( f_m ) {x^m \\over 1 - x^m}\n\\end{align*}\n$$\n\nEither way, the number-theoretic properties of this sequence are difficult to ascertain\n without advanced techniques.\nIf research has been done, it is not easily available in the OEIS.\n\n\n### Total Degrees\n\nIt can be also be observed that the new term is symmetric ($f(z) = f(-z)$), and is therefore\n either irreducible or the product of polynomial and its reflection (potentially negated).\nFor example,\n\n$$\np_9(z) = \\left\\{\n\\begin{matrix}\n (z - 1)(z + 1)\n & \\cdot\n & (z^3 - 3z - 1)(z^3 - 3z + 1)\n \\\\\n \\shortparallel && \\shortparallel\n \\\\\n f_3(z)\n & \\cdot\n & f_9(z)\n \\\\\n \\shortparallel && \\shortparallel\n \\\\\n g_3(z) \\cdot g_3(-z)\n & \\cdot\n & g_9(z) \\cdot -g_9(-z)\n\\end{matrix}\n\\right.\n$$\n\nThese factor polynomials $g_n$ are the minimal polynomials of $2\\cos( \\pi / n )$.\n\nMultiplying these minimal polynomials by their reflection can be observed in the Chebyshev polynomials\n for $n = 3, 5, 7, 9$, strongly implying that it occurs on the odd terms.\nAssuming this is true, we have\n\n$$\nf_n(z) = \\begin{cases}\n g_n(z) & \\text{$n$ is even}\n \\\\\n g_n(z)g_n(-z)\n & \\text{$n$ is odd and ${\\deg(f_n) \\over 2}$ is even}\n \\\\\n -g_n(z)g_n(-z)\n & \\text{$n$ is odd and ${\\deg(f_n) \\over 2}$ is odd}\n\\end{cases}\n$$\n\nWithout resorting to any advanced techniques, the degrees of $f_n$ are\n not too difficult to work out.\nThe degree of $p_n(z)$ is $n -\\ 1$, which is also the degree of $f_n(z)$ if *n* is prime.\nIf *n* is composite, then the degree of $f_n(z)$ is $n -\\ 1$ minus the degrees\n of the divisors of $n -\\ 1$.\nThis leaves behind how many numbers less than *n* are coprime to *n*.\nTherefore $\\deg(f_n) = \\phi(n)$, the\n [Euler totient function](https://en.wikipedia.org/wiki/Euler_totient_function) of the index.\n\nThe totient function can be used to examine the parity of *n*.\nIf *n* is odd, it is coprime to 2 and all even numbers.\nThe introduced factor of 2 to 2*n* removes the evens from the totient, but this is compensated by\n the addition of the odd multiples of old numbers coprime to *n* and new primes.\nThis means that $\\phi(2n) = \\phi(n)$ for odd *n* (other than 1).\n\nThe same argument can be used for even *n*: there are as many odd numbers from 0 to *n* as there are\n from *n* to 2*n*, and there are an equal number of numbers coprime to 2*n* in either interval.\nTherefore, $\\phi(2n) = 2\\phi(n)$ for even *n*.\n\nThis collapses all cases of the conditional factorization of $f_n$ into one,\n and the degrees of $g_n$ are\n\n$$\n\\begin{align*}\n \\deg( g_n(z) )\n &= \\begin{cases}\n \\deg( f_n(z) )\n = \\phi(n)\n & n \\text{ is even} & \\implies \\phi(n) = \\phi(2n) / 2\n \\\\\n \\deg( f_n(z) ) / 2\n = \\phi(n) / 2\n & n \\text{ is odd} & \\implies \\phi(n) / 2 = \\phi(2n) / 2\n \\end{cases}\n \\\\\n &= \\varphi(2n) / 2\n\\end{align*}\n$$\n\nThough they were present in the earlier Chebyshev table,\n the $g_n$ themselves are presented again, along with the expression for their degree\n\n::: {#835a5369 .cell .plain execution_count=6}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=5}\nn $\\varphi(2n)/2$ $g_n(z)$ Coefficient list, rising powers\n--- --------------------------------------- ------------------------- ---------------------------------------\n2 1 $z$ [0, 1]\n3 1 $z - 1$ [-1, 1]\n4 2 $z^{2} - 2$ [-2, 0, 1]\n5 2 $z^{2} - z - 1$ [-1, -1, 1]\n6 2 $z^{2} - 3$ [-3, 0, 1]\n7 3 $z^{3} - z^{2} - 2 z + 1$ [1, -2, -1, 1]\n8 4 $z^{4} - 4 z^{2} + 2$ [2, 0, -4, 0, 1]\n9 3 $z^{3} - 3 z - 1$ [-1, -3, 0, 1]\n9 3 $z^{3} - 3 z + 1$ [1, -3, 0, 1]\n10 4 $z^{4} - 5 z^{2} + 5$ [5, 0, -5, 0, 1]\n- [OEIS A055034](http://oeis.org/A055034) - [OEIS A187360](http://oeis.org/A187360)\n:::\n:::\n\n\nClosing\n-------\n\nMy initial jumping off point for writing this article was completely different.\nHowever, in the process of writing, its share of the article shrank and shrank until its\n introduction was only vaguely related to what preceded it.\nBut alas, the introduction via geometric constructions flows better coming off my\n [post about the Platonic solids](/posts/misc/platonic-volume).\nAlso, it reads better if I rely less on \"if you search for this sequence of numbers\"\n and more on how to interpret the definition.\n\nConsider reading [the follow-up](../2) to this post if you're interested in another way\n one can obtain the Chebyshev polynomials.\n\nDiagrams created with GeoGebra.\n\n\n\n",
+ "supporting": [
+ "index_files"
+ ],
+ "filters": [],
+ "includes": {}
+ }
+}
\ No newline at end of file
diff --git a/_freeze/posts/permutations/1/index/execute-results/html.json b/_freeze/posts/permutations/1/index/execute-results/html.json
new file mode 100644
index 0000000..a363e57
--- /dev/null
+++ b/_freeze/posts/permutations/1/index/execute-results/html.json
@@ -0,0 +1,12 @@
+{
+ "hash": "895ef8d2c498a83dc789e762bbc35fd2",
+ "result": {
+ "engine": "jupyter",
+ "markdown": "---\ntitle: \"A Game of Permutations, Part 1\"\ndescription: |\n Some basic, interesting connections between graph theory and permutation groups.\nformat:\n html:\n html-math-method: katex\njupyter: haskell\ndate: \"2022-01-18\"\ndate-modified: \"2025-07-04\"\ncategories:\n - graph theory\n - group theory\n - sorting algorithms\n---\n\n\n\nIn the time since [my last post](../chebyshev/2) discussing graphs,\n I have been spurred on to continue playing with them, with a slight focus on abstract algebra.\nThis post will primarily focus on some fundamental concepts before launching into some constructions which will make the journey down this road more manageable.\nHowever, I will still assume you are already familiar with what both a\n [group](https://mathworld.wolfram.com/Group.html) and a\n [graph](https://mathworld.wolfram.com/Graph.html) are.\n\n\nThe Symmetric Group\n-------------------\n\nSome of the most important finite groups are the symmetric groups of degree *n* ($S_n$).\nThey are the groups formed by permutations of lists containing *n* items.\nThere is a group element for each permutation, so the order of the group is the\n same as the number of permutations, *n!*.\n\n On lists versus sets
\n\n The typical definition of the symmetric group uses sets, which are fundamentally unordered.\n This is potentially confusing, since it can appear as though an object after applying\n a permutation is the same object as before.\n\n For example, let *p* be the permutation swapping \"1\" and \"3\".\n Then,\n\n $$\n \\begin{align*}\n p(\\{ 1, 2, 3 \\}) = \\{ p(1), p(2), p(3) \\} = \\{ 3, 2, 1 \\}\n \\\\\n p([ 1, 2, 3 ]) = [ p(1), p(2), p(3) ] = [ 3, 2, 1 ]\n \\end{align*}\n $$\n\n After applying *p*, the set is unchanged, since all of the elements are the same.\n On the other hand, the lists differ in the first element and cannot be equal.\n\n Sets are still useful as a container.\n For example, the elements of a group are unordered.\n To keep vocabulary simple, I will do my best to refer to objects in a group as\n \"group elements\" and the objects in a list as \"items\".\n
\n Middle: $\\{(1 ~ 2 ~ 3), (2 ~ 3 ~ 4)\\}$, cuboctahedral graph
\n Right: $\\{(2 ~ 3), (3 ~ 4), (2 ~ 3 ~ 4)\\}$, octahedral graph
\n Generating sets obtained from the previous MathWorld article.\n](./s4_cayley_graphs.png)\n\nOwing to the way in which they are defined, Cayley graphs have a few useful properties as graphs.\nAt every vertex, we have as many outward edges as we do generators in the generating set,\n so the outward (and in fact, inward) degree of each vertex is the same.\nIn other words, it is a regular graph.\nMore than that, it is [vertex-transitive](https://mathworld.wolfram.com/Vertex-TransitiveGraph.html),\n since labelling a single vertex's outward edges will label that of the entire graph.\n\nIn general, the Cayley graph is a directed graph.\nHowever, if for every member of the generating set, we also include its inverse,\n every directed edge will be matched by an edge in the opposite direction,\n and the Cayley graph may be considered undirected.\n\n\nGraphs to Graphs\n----------------\n\nAll 2-cycles are their own inverse, so generating sets which include only them\n produce undirected Cayley graphs.\nSince this kind of generating set can itself be thought of as a graph,\n we may consider an operation on graphs that maps a swap diagram to its Cayley graph.\n\n\n\nIt seems to be the case that $\\exp( A \\oplus B ) = \\exp( A ) \\times \\exp( B )$,\n where $\\oplus$ signifies the disjoint uinion and $\\times$ signifies the\n [Cartesian (box) product of graphs](https://en.wikipedia.org/wiki/Cartesian_product_of_graphs)[^2].\nUnlike *γ* from the previous post, both the input and output of this operation are graphs.\nBecause of this and the sum/product relationship, I've taken to calling this operation the\n \"graph exponential\"[^3].\n\n[^2]: Graphs have many product structures, such as the tensor product and strong product.\n The Cartesian product is (categorically) more natural when paired with disjoint unions.\n\n[^3]: Originally, I called this operation the \"graph factorial\", since it involves permutations\n and the number of vertices in the resulting graph grows factorially.\n\nThis operation is my own invention, so I am unsure whether or not\n it constitutes anything useful.\nIn fact, the possible graphs grow so rapidly that computing anything about the exponential\n of order 8 graphs starts to overwhelm a single computer.\nIt is, however, interesting, as I will hopefully be able to convince.\n\nA random graph will not generally correspond to an interesting generating set,\n and therefore, will also generally have an uninteresting exponential graph.\nHence, I will continue with the examples used previously: paths, stars, and complete graphs.\nThey are among the simplest graphs one can consider, and as we will see shortly,\n have exponentials which appear to have natural correspondences to other graph families.\n\n\nSome Small Exponential Graphs\n-----------------------------\n\nBecause of [the difficulty in determining graph isomorphism](\n https://en.wikipedia.org/wiki/Graph_isomorphism_problem\n ), it is challenging for a computer to find a graph in an encyclopedia.\nComputers think of graphs as a list of vertices and their outward edges,\n but this implementation faces inherent labelling issues.\nThese persist even if the graph is described as a list of (un)ordered pairs,\n an adjacency matrix, or an incidence matrix,\n the latter two of which have very large memory footprints[^4].\n\n[^4]: I was able to locate a project named the\n [Encyclopedia of Finite Graphs](https://github.com/thoppe/Encyclopedia-of-Finite-Graphs),\n but it is only able to build a database simple connected graphs which\n can be queried by invariants (and is outdated since it uses Python 2).\n\nHowever, as visual objects, humans can compare graphs fairly easily\n -- the name means \"drawing\" after all.\nExponentials of order 3 and order 4 graphs are neither so small as to be uninteresting\n nor so big as to be unparsable by humans.\n\n\n### Order 3\n\n{.narrow}\n\nAt this stage, we only really have two graphs to consider, since $P_3 = \\bigstar_3$.\nImmediately, one can see that $\\exp( P_3 ) = \\exp( \\bigstar_3 ) = C_6$,\n the 6-cycle graph (or hexagonal graph).\nIt is also apparent that $\\exp( K_3 )$ is the utility graph, $K_{3,3}$.\n\n\n\nHere, we can again demonstrate the sum rule of the graph exponential with $\\exp( P_3 \\oplus P_2 )$.\nSimplifying, since we know $\\exp( P_3 ) = C_6$, the result is $C_6 \\times P_2 = \\text{Prism}_6$,\n the hexagonal prism graph.\n\n\n### Order 4 (and beyond)\n\n::: {layout=\"[[1,1],[1]]\"}\n\n\n\n\n\n:::\n\nWith some effort, $\\exp( P_4 )$ can be imagined as a projection of a 3D object,\n the [truncated octahedron](https://en.wikipedia.org/wiki/Truncated_octahedron).\nBecause of its correspondence to a 3D solid, this graph is planar.\nBoth the hexagon and this solid belong to a class of polytopes called\n [*permutohedra*](https://en.wikipedia.org/wiki/Permutohedron), which are figures\n that are also formed by permutations of the coordinate (1, 2, 3, ..., *n*) in Euclidean space[^5].\nTechnically, there is a distinction between the Cayley graphs and permutohedra\n since their labellings differ.\nBoth have edges generated by swaps, but in the latter case, the connected vertices are expected to be\n separated by a certain distance.\nMore information about the distinction can be found at this article on [Wikimedia](\n https://commons.wikimedia.org/wiki/Category:Permutohedron_of_order_4_%28raytraced%29#Permutohedron_vs._Cayley_graph\n )[^6].\n\n[^5]: In fact, these figures are able to completely tessellate the $n-1$ dimensional subspace of\n $\\mathbb{R}^n$ where the coordinates sum to the $n-1$th triangular number.\n Note also that the previous graph in the sequence of $\\exp(P_n)$, the hexagonal graph,\n is visible in the truncated octahedron.\n This corresponds to the projection $(x,y,z,w) \\mapsto (x,y,z)$ over\n the coordinates of the permutohedra.\n\n[^6]: Actually, if one considers a *right* Cayley graph, where each generator is right-multiplied\n to the permutation at a node rather than left-multiplied, then a true correspondence is obtained,\n at least for order 4.\n\nMeanwhile, $\\exp( \\bigstar_4 )$ is more difficult to identify, at least without rearranging its vertices.\nIt turns out to be isomorphic to the [Nauru graph](https://mathworld.wolfram.com/NauruGraph.html),\n a graph with many strange properties.\nNotably, whereas the graph isomorphic to the permutohedron is obviously a spherical polyhedron,\n the Nauru graph can be topologically embedded on a torus.\nThe Nauru graph also belongs to the family of\n [permutation star graphs](https://mathworld.wolfram.com/PermutationStarGraph.html)\n $PS_n$ (*n* = 4), which also includes the hexagonal graph (*n* = 3).\nThe MathWorld article confirms some kind of correspondence, stating graphs of this form\n are generated by pairwise swaps.\n\nMy attempts at finding a graph isomorphic to $\\exp( K_4 )$ have thus far ended in failure.\nIt is certainly *not* isomorphic to $K_{4,4}$, since this graph has 8 vertices,\n as opposed to 24 in $\\exp( K_4 )$.\n\n\nGraph Invariants\n----------------\n\nWhile I have managed to identify the families to which some of these graphs belong,\n I am rather fond of computing (and conjecturing) sequences from objects.\nNot only is it much easier to consult something like [the OEIS](https://oeis.org/) for these quantities,\n but after finding a matching sequence, there are ample articles to consult for more information.\nBy linking to their respective entries, I hope you'll consider reading more there.\n\nEven though I have obtained these values empirically, I am certain that the sequences for\n $\\exp( P_n )$ and $\\exp( \\bigstar_n )$ match the corresponding OEIS entries.\nI also have great confidence in the sequences I found for $\\exp( K_n )$.\n\n\n### Edge Counts\n\nDespite knowing how many vertices there are (*n*!, the order of the symmetric group),\n we don't necessarily know how many edges there are.\n\n::: {#a412d7a0 .cell .plain execution_count=3}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=7}\n*n* $\\#E(\\exp( P_n ))$ $\\#E(\\exp( \\bigstar_n ))$ $\\#E(\\exp( K_n ))$\n-------- ------------------------------------------------------------------------- --------------------------- --------------------------------------\n3 6 6 9\n4 36 36 72\n5 240 240 600\n6 1800 1800 5400\n7 15120 15120 52920\nSequence Second column of Lah numbers
[OEIS A001286](http://oeis.org/A001286) Same as previous [OEIS 001809](http://oeis.org/A001809)\nRule $L(n,2) = n!{(n-1)(n-2) \\over 4}$ $n!{n(n-1) \\over 4}$\n:::\n:::\n\n\n### Radius and Distance Classes\n\nThe radius of a graph is the smallest possible distance which separates two maximally-separated vertices.\nDue to vertex transitivity, the greatest distance between two vertices is the same for every vertex.\n\n::: {#8a1cc334 .cell .plain execution_count=4}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=8}\n*n* $r(\\exp( P_n ))$ $r(\\exp( \\bigstar_n ))$ $r(\\exp( K_n ))$\n-------- --------------------------------------------------------------- -------------------------------------------------------------------------------- ------------------\n3 4 4 3\n4 7 5 4\n5 11 7 5\n6 16 8 6\n7 22 10 7\nSequence Triangular numbers
[OEIS A000217](http://oeis.org/A000217) Integers not congruent to 2 (mod 3)
[OEIS A032766](http://oeis.org/A032766) *n* - 1\nRule $\\Delta_{n-1} = {n(n-1) \\over 2}$ $\\lfloor {n-1 \\over 2} \\rfloor + n -\\ 1$\n:::\n:::\n\n\nThese quantities are somewhat reductive.\nIf a vertex is distinguished, the remaining vertices may be partitioned into classes by their\n distance from it.\nIncluding the vertex itself (which is distance 0 away), there will be $r + 1$ such classes,\n where *r* is the radius.\nThese classes are the same for every vertex due to transitivity.\n\nIn the case of these graphs, they are a partition of *n*!.\n\n::: {#b3698cfa .cell .plain execution_count=5}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=9}\n*n* $\\text{dists}(\\exp( P_n ))$ $\\text{dists}(\\exp( \\bigstar_n ))$ $\\text{dists}(\\exp( K_n ))$\n-------- -------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------\n3 [1, 2, 2, 1] [1, 2, 2, 1] [1, 3, 2]\n4 [1, 3, 5, 6, 5, 3, 1] [1, 3, 6, 9, 5] [1, 6, 11, 6]\n5 [1, 4, 9, 15, 20, 22, 20, 15, 9, 4, 1] [1, 4, 12, 30, 44, 26, 3] [1, 10, 35, 50, 24]\n6 [1, 5, 14, 29, 49, 71, 90, 101
101, 90, 71, 49, 29, 14, 5, 1] [1, 5, 20, 70, 170, 250, 169, 35] [1, 15, 85, 225, 274, 120]\n7 [1, 6, 20, 49, 98, 169, 259, 359, 455, 531, 573
573, 531, 455, 359, 259, 169, 98, 49, 20, 6, 1] [1, 6, 30, 135, 460, 1110, 1689, 1254, 340, 15] [1, 21, 175, 735, 1624, 1764, 720]\nSequence Mahonian numbers
[OEIS A008302](http://oeis.org/A008302) Whitney numbers of the second kind (star poset)
[OEIS A007799](http://oeis.org/A007799) Stirling numbers of the first kind
[OEIS A132393](http://oeis.org/A132393)\n:::\n:::\n\n\nI am certain that the appearance of the Stirling numbers here is legitimate,\n since these numbers count the number of permutations of *n* objects with *k* disjoint cycles.\nObviously, the identity element is distance 1 from all 2-cycles since they are all in the generating set;\n likewise, all 3-cycles are distance 2 from the identity (but distance 1 from the 2-cycles),\n and so on until the entire graph has been mapped.\nThe shapes induced by these classes were used to create the diagrams\n of $\\exp( K_3 )$ and $\\exp( K_4 )$ above.\n\n\n#### Spectrum\n\nThe eigenvalues of the adjacency matrix of a graph can be interesting\n and sometimes help in identifying a graph.\nUnfortunately, eigenvalues are not necessarily integers, and therefore not easily\n found in the OEIS (though they are always real for graphs).\n\n::: {#1ce3c98e .cell .plain execution_count=6}\n\n::: {.cell-output .cell-output-display .cell-output-markdown execution_count=10}\n *n* $\\text{Spec}(\\exp( P_n ))$ $\\text{Spec}(\\exp( \\bigstar_n )$ $\\text{Spec}(\\exp( K_n ))$\n----- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n 3 $$\\begin{gather*}(\\pm1)^{2\\phantom{0}} \\\\ (\\pm2)^{1\\phantom{0}}\\end{gather*}$$ $$\\begin{gather*}(\\pm1)^{2\\phantom{0}} \\\\ (\\pm2)^{1\\phantom{0}}\\end{gather*}$$ $$\\begin{gather*}(0)^{4\\phantom{0}} \\\\ (\\pm3)^{1\\phantom{0}}\\end{gather*}$$\n 4 $$\\begin{gather*}(\\pm1)^{3} (\\pm3)^{1} \\\\ \\left(x^{2} - 3\\right)^{2} \\\\ \\left(x^{2} + 2 x - 1\\right)^{3} \\\\ \\left(x^{2} - 2 x - 1\\right)^{3} \\\\ \\left(x^{2} + 2 x - 1\\right)^{3} \\\\ \\left(x^{2} - 2 x - 1\\right)^{3}\\end{gather*}$$ $$\\begin{gather*}(0)^{4\\phantom{0}} \\\\ (\\pm1)^{3\\phantom{0}} \\\\ (\\pm2)^{6\\phantom{0}} \\\\ (\\pm3)^{1\\phantom{0}}\\end{gather*}$$ $$\\begin{gather*}(0)^{4\\phantom{0}} \\\\ (\\pm2)^{9\\phantom{0}} \\\\ (\\pm6)^{1\\phantom{0}}\\end{gather*}$$\n 5 $$\\begin{gather*}(0)^{12} (\\pm1)^{6} (\\pm4)^{1} \\\\ \\left(x^{2} - 5\\right)^{6} \\\\ \\left(x^{2} - 5 x + 5\\right)^{4} \\\\ \\left(x^{2} + 5 x + 5\\right)^{4} \\\\ \\left(x^{2} - 3 x + 1\\right)^{4} \\\\ \\left(x^{2} + 3 x + 1\\right)^{4} \\\\ \\left(x^{2} + 2 x - 1\\right)^{5} \\\\ \\left(x^{2} - 2 x - 1\\right)^{5} \\\\ \\left(x^{3} + 2 x^{2} - 5 x - 4\\right)^{5} \\\\ \\left(x^{3} - 2 x^{2} - 5 x + 4\\right)^{5}\\end{gather*}$$ $$\\begin{gather*}(0)^{30\\phantom{00}} \\\\ (\\pm1)^{4\\phantom{00}} \\\\ (\\pm2)^{28\\phantom{00}} \\\\ (\\pm3)^{12\\phantom{00}} \\\\ (\\pm4)^{1\\phantom{00}}\\end{gather*}$$ $$\\begin{gather*}(0)^{36\\phantom{00}} \\\\ (\\pm2)^{25\\phantom{00}} \\\\ (\\pm5)^{16\\phantom{00}} \\\\ (\\pm10)^{1\\phantom{00}}\\end{gather*}$$\n 6 $$\\begin{gather*}(0)^{20} (\\pm1)^{25} (\\pm2)^{15}\\\\(\\pm3)^{5} (\\pm4)^{5} (\\pm5)^{1} \\\\ \\left(x^{2} - 3\\right)^{20}\\end{gather*}$$Not shown: 558 other roots $$\\begin{gather*}(0)^{168\\phantom{000}} \\\\ (\\pm1)^{30\\phantom{000}} \\\\ (\\pm2)^{120\\phantom{000}} \\\\ (\\pm3)^{105\\phantom{000}} \\\\ (\\pm4)^{20\\phantom{000}} \\\\ (\\pm5)^{1\\phantom{000}}\\end{gather*}$$ $$\\begin{gather*}(0)^{256\\phantom{000}} \\\\ (\\pm3)^{125\\phantom{000}} \\\\ (\\pm5)^{81\\phantom{000}} \\\\ (\\pm9)^{25\\phantom{000}} \\\\ (\\pm15)^{1\\phantom{000}}\\end{gather*}$$\n 7 $$\\begin{gather*}(0)^{35\\phantom{00}} \\\\ (\\pm1)^{20\\phantom{00}} \\\\ (\\pm2)^{45\\phantom{00}} \\\\ (\\pm6)^{1\\phantom{00}}\\end{gather*}$$Not shown: 4873 other roots $$\\begin{gather*}(0)^{840\\phantom{000}} \\\\ (\\pm1)^{468\\phantom{000}} \\\\ (\\pm2)^{495\\phantom{000}} \\\\ (\\pm3)^{830\\phantom{000}} \\\\ (\\pm4)^{276\\phantom{000}} \\\\ (\\pm5)^{30\\phantom{000}} \\\\ (\\pm6)^{1\\phantom{000}}\\end{gather*}$$ $$\\begin{gather*}(0)^{400\\phantom{0000}} \\\\ (\\pm1)^{441\\phantom{0000}} \\\\ (\\pm3)^{1225\\phantom{0000}} \\\\ (\\pm6)^{196\\phantom{0000}} \\\\ (\\pm7)^{225\\phantom{0000}} \\\\ (\\pm9)^{196\\phantom{0000}} \\\\ (\\pm14)^{36\\phantom{0000}} \\\\ (\\pm21)^{1\\phantom{0000}}\\end{gather*}$$\n 8 Not shown: all 40320 roots $$\\begin{gather*}(0)^{3960\\phantom{0000}} \\\\ (\\pm1)^{5691\\phantom{0000}} \\\\ (\\pm2)^{2198\\phantom{0000}} \\\\ (\\pm3)^{6321\\phantom{0000}} \\\\ (\\pm4)^{3332\\phantom{0000}} \\\\ (\\pm5)^{595\\phantom{0000}} \\\\ (\\pm6)^{42\\phantom{0000}} \\\\ (\\pm7)^{1\\phantom{0000}}\\end{gather*}$$ $$\\begin{gather*}(0)^{9864\\phantom{0000}} \\\\ (\\pm2)^{3136\\phantom{0000}} \\\\ (\\pm4)^{6125\\phantom{0000}} \\\\ (\\pm7)^{4096\\phantom{0000}} \\\\ (\\pm8)^{196\\phantom{0000}} \\\\ (\\pm10)^{784\\phantom{0000}} \\\\ (\\pm12)^{441\\phantom{0000}} \\\\ (\\pm20)^{49\\phantom{0000}} \\\\ (\\pm28)^{1\\phantom{0000}}\\end{gather*}$$\n:::\n:::\n\n\nFrom what I have been able to identify, the spectrum of an exponential graph is symmetric about 0,\n by which I mean that the characteristic polynomial is even.\nThis has been the case for all graphs I have tried testing, even outside these graph families.\n\nSince all eigenvalues of $\\exp( \\bigstar_n )$ calculated are integers,\n it appears they are integral graphs, a fact of which I am reasonably sure\n because of the aforementioned correspondence to permutation star graphs.\nAdditionally, the eigenvalues are very conveniently the integers up to $n-1$ and down to $-n+1$.\nUnfortunately, despite the ease of reading the eigenvalues themselves,\n there isn't an OEIS entry for the multiplicities.\nI was able to identify the multiplicity of the 0 eigenvalue with\n [OEIS A217213](http://oeis.org/A217213), which counts orderings on Dyck paths.\nIf this is truly the sequence being generated, it means there is a 1:1 correspondence between\n these orderings and a basis of the nullspace of the adjacency matrix.\n\nIt seems to be the case that $\\exp( K_n )$ are also integral graphs.\nPerplexingly, the multiplicities for each of the eigenvalues appear to mostly be perfect powers.\nThis is the case until n = 8, which ruins the pattern because neither of\n $9864 = 2^3 \\cdot 3^2 \\cdot 137$ or $6125 = 5^3 \\cdot 7^2$ are perfect powers.\nI find both this[^7] and the fact that such a large prime appears among the factorization of the former\n rather creepy since all other primes which appear here are small -- 2, 3, 5, and 7.\n\n[^7]: Some physicists are fond of 137 for its closeness to the reciprocal\n of the fine structure constant (a bit of mostly-harmless numerology).\n\n\n### Notes about Spectral Computation\n\nFor *n* = 3 through 6, exactly computing the spectrum\n (or more accurately, the characteristic polynomial)\n is possible, although it takes upwards of 10 minutes for *n* = 6 on my machine using `sympy`.\nThe spectra of *n* = 7, 8 are marked with an asterisk because they were computed numerically,\n which still took nearly 8 hours in the case of the latter.\nIn fact, these graphs grow so quickly that it becomes nearly impossible to compute\n the spectrum without an explicit formula.\n\nFor *n* = 8, even storing the adjacency matrix in memory is a problem.\nAssuming the use of single-precision floating point, this behemoth of a matrix is\n $(8!)^2 \\cdot 4 \\text{ bytes} = 6.5\\text{GB}$.\nThis doesn't even factor in additional space requirements for eigenvalue algorithms,\n and is the reason I certainly won't be attempting to compute the spectrum for *n* = 9.\n\n\nGallery of Adjacency Matrices\n-----------------------------\n\nThe patterns in adjacency matrices depend on an enumeration of $S_n$ so that the vertices\n can be labelled from 1 to *n*!.\nWhile this is a fascinating topic unto itself, this post is already long enough,\n and I feel comfortable with just sharing the pictures.\n\n\n### [Plain Changes](https://en.wikipedia.org/wiki/Steinhaus%E2%80%93Johnson%E2%80%93Trotter_algorithm)\n\n::: {layout-ncol=\"3\"}\n\n\n\n\n\n\n\n\n\n\n\n:::\n\n\n### [Heap's Algorithm](https://en.wikipedia.org/wiki/Heap%27s_algorithm)\n\n:::: {}\n::: {layout-ncol=\"3\"}\n\n\n\n\n\n\n\n\n\n\n\n:::\n\nNote: GHC's `Data.List.permutations` is slightly different from Heap's algorithm as displayed on Wikipedia\n::::\n\n\nClosing\n-------\n\nAs previously stated, I am only mostly sure of the validity of the exponential law for graphs.\nIt *seems* too good to be true, but testing it directly on some graphs by comparing the spectra\n of the exponential of the sum against the product of the exponentials shows that they are at least cospectral.\nTry it yourself, preferably with a better tool than [the ones I made in Haskell](https://github.com/queue-miscreant/SymmetricGraph).\n\nFrom the articles I was able to find, permutation star graphs have applications to parallel computing,\n which is somewhat ironic considering how little care I had for the topic when writing this article.\nIf I needed ruthless efficiency, I probably could have used a library with GPU algorithms\n (or taken a stab at writing a shader myself).\nHowever, I *was* able to use this as a learning experience regarding mutable objects in Haskell.\nWith only immutable objects (and enough garbage to create an island in the Pacific),\n I was running out of memory even with 16GB of RAM and 16GB of swap.\nIntroducing mutability not only brought improvements in space, but also a great deal of speedup,\n enough to make rendering adjacency matrix images of order 8 graphs just barely doable within\n a reasonable time span.\n\nSaid images are cursed.\nRemember, as raw bitmaps, these files are on the order of *gigabytes* big.\nOn a much weaker computer than I used to render the images, merely opening my file explorer\n to the folder containing *the folder containing* the images\n caused its all-too-eager thumbnailer to run.\nThis started consuming all of my system resources, crashed all of my browser's tabs,\n distorted audio, and finally locked up the computer.\nDespite this, PNG is a wonderful format that is able to compress them down to just 4MB,\n which demonstrates just how sparse these matrices are.\n\nDespite everything I was able to find about permutation star graphs and permutohedra,\n I was surprised that there is no information about the Cayley graphs generated by *all*\n 2-cycles (or at least information which is easy to find).\nThis is especially disappointing considering the phantom pattern which gets destroyed by 137,\n and I would love to know more about why this happens in the first place.\n\nGraph diagrams made with GeoGebra and NetworkX (GraphViz).\n\n\n### Additional Links\n\n- [Whitney Numbers of the Second Kind for the Star Poset (\n Paper from ScienceDirect\n )](https://www.sciencedirect.com/science/article/pii/S0195669813801278)\n - This article includes a section about representing a list of generators as a graph,\n making me wonder if someone has tried defining this operation before\n- [Whitney Numbers (Josh Cooper's Mathpages)](https://people.math.sc.edu/cooper/graph.html)\n- [\n The Many Faces of the Nauru Graph (Blogpost by David Eppstein)\n ](https://11011110.github.io/blog/2007/12/12/many-faces-of.html)\n\n",
+ "supporting": [
+ "index_files"
+ ],
+ "filters": [],
+ "includes": {}
+ }
+}
\ No newline at end of file
diff --git a/_quarto.yml b/_quarto.yml
index a13a08f..976dea5 100644
--- a/_quarto.yml
+++ b/_quarto.yml
@@ -2,7 +2,7 @@ project:
type: website
website:
- favicon: ./logo.png
+ favicon: ./logo-favicon.png
title: "zenzicubi.co"
navbar:
logo: "/logo-vector.svg"
diff --git a/index.qmd b/index.qmd
index b813b7e..3a63b58 100644
--- a/index.qmd
+++ b/index.qmd
@@ -2,8 +2,10 @@
title: "Posts by topic"
listing:
contents:
- - posts/polycount/index.*
+ - posts/permutations/index.*
+ - posts/chebyshev/index.*
- posts/pentagons/index.*
+ - posts/polycount/index.*
- posts/misc/*/index.*
- sort: "date desc"
+ sort: false
---
diff --git a/logo-favicon.png b/logo-favicon.png
new file mode 100644
index 0000000..e24a6a9
Binary files /dev/null and b/logo-favicon.png differ
diff --git a/logo.png b/logo.png
deleted file mode 100644
index 6891c2f..0000000
Binary files a/logo.png and /dev/null differ
diff --git a/posts/chebyshev/1/index.qmd b/posts/chebyshev/1/index.qmd
index 60cf94c..9f59527 100644
--- a/posts/chebyshev/1/index.qmd
+++ b/posts/chebyshev/1/index.qmd
@@ -1,7 +1,7 @@
---
title: "Generating Polynomials, Part 1: Regular Constructibility"
description: |
- "What kinds of regular polygons are constructible with compass and straightedge?"
+ What kinds of regular polygons are constructible with compass and straightedge?
format:
html:
html-math-method: katex
diff --git a/posts/chebyshev/2/index.qmd b/posts/chebyshev/2/index.qmd
index 78f2dd8..6d9eb6e 100644
--- a/posts/chebyshev/2/index.qmd
+++ b/posts/chebyshev/2/index.qmd
@@ -1,7 +1,7 @@
---
title: "Generating Polynomials, Part 2: Ghostly Chains"
description: |
- "What do polygons without distance still know about planar geometry?"
+ What do polygons without distance still know about planar geometry?
format:
html:
html-math-method: katex
diff --git a/posts/chebyshev/_metadata.yml b/posts/chebyshev/_metadata.yml
new file mode 100644
index 0000000..eaf1857
--- /dev/null
+++ b/posts/chebyshev/_metadata.yml
@@ -0,0 +1,5 @@
+# freeze computational output
+freeze: auto
+
+# Enable banner style title blocks
+title-block-banner: true
diff --git a/posts/chebyshev/extra/index.qmd b/posts/chebyshev/extra/index.qmd
index db8e471..de56084 100644
--- a/posts/chebyshev/extra/index.qmd
+++ b/posts/chebyshev/extra/index.qmd
@@ -1,7 +1,7 @@
---
title: "Generating Polynomials Extra: Legendary"
description: |
- "Another series of related, orthogonal polynomials"
+ Another series of related, orthogonal polynomials
format:
html:
html-math-method: katex
diff --git a/posts/chebyshev/index.qmd b/posts/chebyshev/index.qmd
new file mode 100644
index 0000000..ce9ef14
--- /dev/null
+++ b/posts/chebyshev/index.qmd
@@ -0,0 +1,10 @@
+---
+title: "Chebyshev Polynomials"
+listing:
+ contents: .
+ sort: "date"
+---
+
+Articles about the generating Chebyshev polynomials (and other related families).
+
+Publication dates correspond to the original WordPress publication dates.
diff --git a/posts/permutations/1/P4_powers.png b/posts/permutations/1/P4_powers.png
new file mode 100644
index 0000000..7978099
Binary files /dev/null and b/posts/permutations/1/P4_powers.png differ
diff --git a/posts/permutations/1/bubble_sort.gif b/posts/permutations/1/bubble_sort.gif
new file mode 100644
index 0000000..30d21ec
Binary files /dev/null and b/posts/permutations/1/bubble_sort.gif differ
diff --git a/posts/permutations/1/destructive_selection_sort.gif b/posts/permutations/1/destructive_selection_sort.gif
new file mode 100644
index 0000000..bf4baca
Binary files /dev/null and b/posts/permutations/1/destructive_selection_sort.gif differ
diff --git a/posts/permutations/1/example_graphs.png b/posts/permutations/1/example_graphs.png
new file mode 100644
index 0000000..edd24c3
Binary files /dev/null and b/posts/permutations/1/example_graphs.png differ
diff --git a/posts/permutations/1/index.qmd b/posts/permutations/1/index.qmd
new file mode 100644
index 0000000..9d82a3b
--- /dev/null
+++ b/posts/permutations/1/index.qmd
@@ -0,0 +1,491 @@
+---
+title: "A Game of Permutations, Part 1"
+description: |
+ Some basic, interesting connections between graph theory and permutation groups.
+format:
+ html:
+ html-math-method: katex
+jupyter: haskell
+date: "2022-01-18"
+date-modified: "2025-07-04"
+categories:
+ - graph theory
+ - group theory
+ - sorting algorithms
+---
+
+
+
+In the time since [my last post](../chebyshev/2) discussing graphs,
+ I have been spurred on to continue playing with them, with a slight focus on abstract algebra.
+This post will primarily focus on some fundamental concepts before launching into some constructions which will make the journey down this road more manageable.
+However, I will still assume you are already familiar with what both a
+ [group](https://mathworld.wolfram.com/Group.html) and a
+ [graph](https://mathworld.wolfram.com/Graph.html) are.
+
+
+The Symmetric Group
+-------------------
+
+Some of the most important finite groups are the symmetric groups of degree *n* ($S_n$).
+They are the groups formed by permutations of lists containing *n* items.
+There is a group element for each permutation, so the order of the group is the
+ same as the number of permutations, *n!*.
+
+ On lists versus sets
+
+ The typical definition of the symmetric group uses sets, which are fundamentally unordered.
+ This is potentially confusing, since it can appear as though an object after applying
+ a permutation is the same object as before.
+
+ For example, let *p* be the permutation swapping "1" and "3".
+ Then,
+
+ $$
+ \begin{align*}
+ p(\{ 1, 2, 3 \}) = \{ p(1), p(2), p(3) \} = \{ 3, 2, 1 \}
+ \\
+ p([ 1, 2, 3 ]) = [ p(1), p(2), p(3) ] = [ 3, 2, 1 ]
+ \end{align*}
+ $$
+
+ After applying *p*, the set is unchanged, since all of the elements are the same.
+ On the other hand, the lists differ in the first element and cannot be equal.
+
+ Sets are still useful as a container.
+ For example, the elements of a group are unordered.
+ To keep vocabulary simple, I will do my best to refer to objects in a group as
+ "group elements" and the objects in a list as "items".
+
+ Middle: $\{(1 ~ 2 ~ 3), (2 ~ 3 ~ 4)\}$, cuboctahedral graph
+ Right: $\{(2 ~ 3), (3 ~ 4), (2 ~ 3 ~ 4)\}$, octahedral graph
+ Generating sets obtained from the previous MathWorld article.
+](./s4_cayley_graphs.png)
+
+Owing to the way in which they are defined, Cayley graphs have a few useful properties as graphs.
+At every vertex, we have as many outward edges as we do generators in the generating set,
+ so the outward (and in fact, inward) degree of each vertex is the same.
+In other words, it is a regular graph.
+More than that, it is [vertex-transitive](https://mathworld.wolfram.com/Vertex-TransitiveGraph.html),
+ since labelling a single vertex's outward edges will label that of the entire graph.
+
+In general, the Cayley graph is a directed graph.
+However, if for every member of the generating set, we also include its inverse,
+ every directed edge will be matched by an edge in the opposite direction,
+ and the Cayley graph may be considered undirected.
+
+
+Graphs to Graphs
+----------------
+
+All 2-cycles are their own inverse, so generating sets which include only them
+ produce undirected Cayley graphs.
+Since this kind of generating set can itself be thought of as a graph,
+ we may consider an operation on graphs that maps a swap diagram to its Cayley graph.
+
+
+
+It seems to be the case that $\exp( A \oplus B ) = \exp( A ) \times \exp( B )$,
+ where $\oplus$ signifies the disjoint uinion and $\times$ signifies the
+ [Cartesian (box) product of graphs](https://en.wikipedia.org/wiki/Cartesian_product_of_graphs)[^2].
+Unlike *γ* from the previous post, both the input and output of this operation are graphs.
+Because of this and the sum/product relationship, I've taken to calling this operation the
+ "graph exponential"[^3].
+
+[^2]: Graphs have many product structures, such as the tensor product and strong product.
+ The Cartesian product is (categorically) more natural when paired with disjoint unions.
+
+[^3]: Originally, I called this operation the "graph factorial", since it involves permutations
+ and the number of vertices in the resulting graph grows factorially.
+
+This operation is my own invention, so I am unsure whether or not
+ it constitutes anything useful.
+In fact, the possible graphs grow so rapidly that computing anything about the exponential
+ of order 8 graphs starts to overwhelm a single computer.
+It is, however, interesting, as I will hopefully be able to convince.
+
+A random graph will not generally correspond to an interesting generating set,
+ and therefore, will also generally have an uninteresting exponential graph.
+Hence, I will continue with the examples used previously: paths, stars, and complete graphs.
+They are among the simplest graphs one can consider, and as we will see shortly,
+ have exponentials which appear to have natural correspondences to other graph families.
+
+
+Some Small Exponential Graphs
+-----------------------------
+
+Because of [the difficulty in determining graph isomorphism](
+ https://en.wikipedia.org/wiki/Graph_isomorphism_problem
+ ), it is challenging for a computer to find a graph in an encyclopedia.
+Computers think of graphs as a list of vertices and their outward edges,
+ but this implementation faces inherent labelling issues.
+These persist even if the graph is described as a list of (un)ordered pairs,
+ an adjacency matrix, or an incidence matrix,
+ the latter two of which have very large memory footprints[^4].
+
+[^4]: I was able to locate a project named the
+ [Encyclopedia of Finite Graphs](https://github.com/thoppe/Encyclopedia-of-Finite-Graphs),
+ but it is only able to build a database simple connected graphs which
+ can be queried by invariants (and is outdated since it uses Python 2).
+
+However, as visual objects, humans can compare graphs fairly easily
+ -- the name means "drawing" after all.
+Exponentials of order 3 and order 4 graphs are neither so small as to be uninteresting
+ nor so big as to be unparsable by humans.
+
+
+### Order 3
+
+{.narrow}
+
+At this stage, we only really have two graphs to consider, since $P_3 = \bigstar_3$.
+Immediately, one can see that $\exp( P_3 ) = \exp( \bigstar_3 ) = C_6$,
+ the 6-cycle graph (or hexagonal graph).
+It is also apparent that $\exp( K_3 )$ is the utility graph, $K_{3,3}$.
+
+
+
+Here, we can again demonstrate the sum rule of the graph exponential with $\exp( P_3 \oplus P_2 )$.
+Simplifying, since we know $\exp( P_3 ) = C_6$, the result is $C_6 \times P_2 = \text{Prism}_6$,
+ the hexagonal prism graph.
+
+
+### Order 4 (and beyond)
+
+::: {layout="[[1,1],[1]]"}
+
+
+
+
+
+:::
+
+With some effort, $\exp( P_4 )$ can be imagined as a projection of a 3D object,
+ the [truncated octahedron](https://en.wikipedia.org/wiki/Truncated_octahedron).
+Because of its correspondence to a 3D solid, this graph is planar.
+Both the hexagon and this solid belong to a class of polytopes called
+ [*permutohedra*](https://en.wikipedia.org/wiki/Permutohedron), which are figures
+ that are also formed by permutations of the coordinate (1, 2, 3, ..., *n*) in Euclidean space[^5].
+Technically, there is a distinction between the Cayley graphs and permutohedra
+ since their labellings differ.
+Both have edges generated by swaps, but in the latter case, the connected vertices are expected to be
+ separated by a certain distance.
+More information about the distinction can be found at this article on [Wikimedia](
+ https://commons.wikimedia.org/wiki/Category:Permutohedron_of_order_4_%28raytraced%29#Permutohedron_vs._Cayley_graph
+ )[^6].
+
+[^5]: In fact, these figures are able to completely tessellate the $n-1$ dimensional subspace of
+ $\mathbb{R}^n$ where the coordinates sum to the $n-1$th triangular number.
+ Note also that the previous graph in the sequence of $\exp(P_n)$, the hexagonal graph,
+ is visible in the truncated octahedron.
+ This corresponds to the projection $(x,y,z,w) \mapsto (x,y,z)$ over
+ the coordinates of the permutohedra.
+
+[^6]: Actually, if one considers a *right* Cayley graph, where each generator is right-multiplied
+ to the permutation at a node rather than left-multiplied, then a true correspondence is obtained,
+ at least for order 4.
+
+Meanwhile, $\exp( \bigstar_4 )$ is more difficult to identify, at least without rearranging its vertices.
+It turns out to be isomorphic to the [Nauru graph](https://mathworld.wolfram.com/NauruGraph.html),
+ a graph with many strange properties.
+Notably, whereas the graph isomorphic to the permutohedron is obviously a spherical polyhedron,
+ the Nauru graph can be topologically embedded on a torus.
+The Nauru graph also belongs to the family of
+ [permutation star graphs](https://mathworld.wolfram.com/PermutationStarGraph.html)
+ $PS_n$ (*n* = 4), which also includes the hexagonal graph (*n* = 3).
+The MathWorld article confirms some kind of correspondence, stating graphs of this form
+ are generated by pairwise swaps.
+
+My attempts at finding a graph isomorphic to $\exp( K_4 )$ have thus far ended in failure.
+It is certainly *not* isomorphic to $K_{4,4}$, since this graph has 8 vertices,
+ as opposed to 24 in $\exp( K_4 )$.
+
+
+Graph Invariants
+----------------
+
+While I have managed to identify the families to which some of these graphs belong,
+ I am rather fond of computing (and conjecturing) sequences from objects.
+Not only is it much easier to consult something like [the OEIS](https://oeis.org/) for these quantities,
+ but after finding a matching sequence, there are ample articles to consult for more information.
+By linking to their respective entries, I hope you'll consider reading more there.
+
+Even though I have obtained these values empirically, I am certain that the sequences for
+ $\exp( P_n )$ and $\exp( \bigstar_n )$ match the corresponding OEIS entries.
+I also have great confidence in the sequences I found for $\exp( K_n )$.
+
+
+### Edge Counts
+
+Despite knowing how many vertices there are (*n*!, the order of the symmetric group),
+ we don't necessarily know how many edges there are.
+
+```{python}
+#| echo: false
+#| classes: plain
+
+Markdown(tabulate(
+ [
+ [i, pathG.edge_count, starG.edge_count, completeG.edge_count]
+ for i in range(3, 8)
+ for pathG, starG, completeG in (
+ [path.data[i], star.data[i], complete.data[i]],
+ )
+ ] + [
+ [
+ "Sequence",
+ "Second column of Lah numbers
[OEIS A001286](http://oeis.org/A001286)",
+ "Same as previous",
+ "[OEIS 001809](http://oeis.org/A001809)",
+ ],
+ [
+ "Rule",
+ r"$L(n,2) = n!{(n-1)(n-2) \over 4}$",
+ "",
+ r"$n!{n(n-1) \over 4}$"
+ ]
+ ],
+ headers=[
+ "*n*",
+ r"$\#E(\exp( P_n ))$",
+ r"$\#E(\exp( \bigstar_n ))$",
+ r"$\#E(\exp( K_n ))$"
+ ]
+))
+```
+
+
+### Radius and Distance Classes
+
+The radius of a graph is the smallest possible distance which separates two maximally-separated vertices.
+Due to vertex transitivity, the greatest distance between two vertices is the same for every vertex.
+
+```{python}
+#| echo: false
+#| classes: plain
+
+Markdown(tabulate(
+ [
+ [i, len(pathG), len(starG), len(completeG)]
+ for i in range(3, 8)
+ for pathG, starG, completeG in (
+ [path.data[i].distance_classes, star.data[i].distance_classes, complete.data[i].distance_classes],
+ )
+ ] + [
+ [
+ "Sequence",
+ "Triangular numbers
[OEIS A000217](http://oeis.org/A000217)",
+ "Integers not congruent to 2 (mod 3)
[OEIS A032766](http://oeis.org/A032766)",
+ "*n* - 1"
+ ],
+ [
+ "Rule",
+ r"$\Delta_{n-1} = {n(n-1) \over 2}$",
+ r"$\lfloor {n-1 \over 2} \rfloor + n -\ 1$"
+ ]
+ ],
+ headers=[
+ "*n*",
+ r"$r(\exp( P_n ))$",
+ r"$r(\exp( \bigstar_n ))$",
+ r"$r(\exp( K_n ))$"
+ ]
+))
+```
+
+These quantities are somewhat reductive.
+If a vertex is distinguished, the remaining vertices may be partitioned into classes by their
+ distance from it.
+Including the vertex itself (which is distance 0 away), there will be $r + 1$ such classes,
+ where *r* is the radius.
+These classes are the same for every vertex due to transitivity.
+
+In the case of these graphs, they are a partition of *n*!.
+
+```{python}
+#| echo: false
+#| classes: plain
+
+half_break = lambda x: str(x[:len(x) // 2])[:-1] + "
" + str(x[len(x) // 2:])[1:]
+
+Markdown(tabulate(
+ [
+ [i, pathG if i <= 5 else half_break(pathG), starG, completeG]
+ for i in range(3, 8)
+ for pathG, starG, completeG in (
+ [path.data[i].distance_classes, star.data[i].distance_classes, complete.data[i].distance_classes],
+ )
+ ] + [
+ [
+ "Sequence",
+ "Mahonian numbers
[OEIS A008302](http://oeis.org/A008302)",
+ "Whitney numbers of the second kind (star poset)
[OEIS A007799](http://oeis.org/A007799)",
+ "Stirling numbers of the first kind
[OEIS A132393](http://oeis.org/A132393)"
+ ]
+ ],
+ headers=[
+ "*n*",
+ r"$\text{dists}(\exp( P_n ))$",
+ r"$\text{dists}(\exp( \bigstar_n ))$",
+ r"$\text{dists}(\exp( K_n ))$"
+ ]
+))
+```
+
+I am certain that the appearance of the Stirling numbers here is legitimate,
+ since these numbers count the number of permutations of *n* objects with *k* disjoint cycles.
+Obviously, the identity element is distance 1 from all 2-cycles since they are all in the generating set;
+ likewise, all 3-cycles are distance 2 from the identity (but distance 1 from the 2-cycles),
+ and so on until the entire graph has been mapped.
+The shapes induced by these classes were used to create the diagrams
+ of $\exp( K_3 )$ and $\exp( K_4 )$ above.
+
+
+#### Spectrum
+
+The eigenvalues of the adjacency matrix of a graph can be interesting
+ and sometimes help in identifying a graph.
+Unfortunately, eigenvalues are not necessarily integers, and therefore not easily
+ found in the OEIS (though they are always real for graphs).
+
+```{python}
+#| echo: false
+#| classes: plain
+
+Markdown(tabulate(
+ [
+ [i, pathG.to_markdown(), starG.to_markdown(), completeG.to_markdown()]
+ for i in range(3, 9)
+ for pathG, starG, completeG in (
+ [path.data[i].spectrum, star.data[i].spectrum, complete.data[i].spectrum],
+ )
+ ],
+ headers=[
+ "*n*",
+ r"$\text{Spec}(\exp( P_n ))$",
+ r"$\text{Spec}(\exp( \bigstar_n )$",
+ r"$\text{Spec}(\exp( K_n ))$"
+ ]
+))
+```
+
+From what I have been able to identify, the spectrum of an exponential graph is symmetric about 0,
+ by which I mean that the characteristic polynomial is even.
+This has been the case for all graphs I have tried testing, even outside these graph families.
+
+Since all eigenvalues of $\exp( \bigstar_n )$ calculated are integers,
+ it appears they are integral graphs, a fact of which I am reasonably sure
+ because of the aforementioned correspondence to permutation star graphs.
+Additionally, the eigenvalues are very conveniently the integers up to $n-1$ and down to $-n+1$.
+Unfortunately, despite the ease of reading the eigenvalues themselves,
+ there isn't an OEIS entry for the multiplicities.
+I was able to identify the multiplicity of the 0 eigenvalue with
+ [OEIS A217213](http://oeis.org/A217213), which counts orderings on Dyck paths.
+If this is truly the sequence being generated, it means there is a 1:1 correspondence between
+ these orderings and a basis of the nullspace of the adjacency matrix.
+
+It seems to be the case that $\exp( K_n )$ are also integral graphs.
+Perplexingly, the multiplicities for each of the eigenvalues appear to mostly be perfect powers.
+This is the case until n = 8, which ruins the pattern because neither of
+ $9864 = 2^3 \cdot 3^2 \cdot 137$ or $6125 = 5^3 \cdot 7^2$ are perfect powers.
+I find both this[^7] and the fact that such a large prime appears among the factorization of the former
+ rather creepy since all other primes which appear here are small -- 2, 3, 5, and 7.
+
+[^7]: Some physicists are fond of 137 for its closeness to the reciprocal
+ of the fine structure constant (a bit of mostly-harmless numerology).
+
+
+### Notes about Spectral Computation
+
+For *n* = 3 through 6, exactly computing the spectrum
+ (or more accurately, the characteristic polynomial)
+ is possible, although it takes upwards of 10 minutes for *n* = 6 on my machine using `sympy`.
+The spectra of *n* = 7, 8 are marked with an asterisk because they were computed numerically,
+ which still took nearly 8 hours in the case of the latter.
+In fact, these graphs grow so quickly that it becomes nearly impossible to compute
+ the spectrum without an explicit formula.
+
+For *n* = 8, even storing the adjacency matrix in memory is a problem.
+Assuming the use of single-precision floating point, this behemoth of a matrix is
+ $(8!)^2 \cdot 4 \text{ bytes} = 6.5\text{GB}$.
+This doesn't even factor in additional space requirements for eigenvalue algorithms,
+ and is the reason I certainly won't be attempting to compute the spectrum for *n* = 9.
+
+
+Gallery of Adjacency Matrices
+-----------------------------
+
+The patterns in adjacency matrices depend on an enumeration of $S_n$ so that the vertices
+ can be labelled from 1 to *n*!.
+While this is a fascinating topic unto itself, this post is already long enough,
+ and I feel comfortable with just sharing the pictures.
+
+
+### [Plain Changes](https://en.wikipedia.org/wiki/Steinhaus%E2%80%93Johnson%E2%80%93Trotter_algorithm)
+
+::: {layout-ncol="3"}
+
+
+
+
+
+
+
+
+
+
+
+:::
+
+
+### [Heap's Algorithm](https://en.wikipedia.org/wiki/Heap%27s_algorithm)
+
+:::: {}
+::: {layout-ncol="3"}
+
+
+
+
+
+
+
+
+
+
+
+:::
+
+Note: GHC's `Data.List.permutations` is slightly different from Heap's algorithm as displayed on Wikipedia
+::::
+
+
+Closing
+-------
+
+As previously stated, I am only mostly sure of the validity of the exponential law for graphs.
+It *seems* too good to be true, but testing it directly on some graphs by comparing the spectra
+ of the exponential of the sum against the product of the exponentials shows that they are at least cospectral.
+Try it yourself, preferably with a better tool than [the ones I made in Haskell](https://github.com/queue-miscreant/SymmetricGraph).
+
+From the articles I was able to find, permutation star graphs have applications to parallel computing,
+ which is somewhat ironic considering how little care I had for the topic when writing this article.
+If I needed ruthless efficiency, I probably could have used a library with GPU algorithms
+ (or taken a stab at writing a shader myself).
+However, I *was* able to use this as a learning experience regarding mutable objects in Haskell.
+With only immutable objects (and enough garbage to create an island in the Pacific),
+ I was running out of memory even with 16GB of RAM and 16GB of swap.
+Introducing mutability not only brought improvements in space, but also a great deal of speedup,
+ enough to make rendering adjacency matrix images of order 8 graphs just barely doable within
+ a reasonable time span.
+
+Said images are cursed.
+Remember, as raw bitmaps, these files are on the order of *gigabytes* big.
+On a much weaker computer than I used to render the images, merely opening my file explorer
+ to the folder containing *the folder containing* the images
+ caused its all-too-eager thumbnailer to run.
+This started consuming all of my system resources, crashed all of my browser's tabs,
+ distorted audio, and finally locked up the computer.
+Despite this, PNG is a wonderful format that is able to compress them down to just 4MB,
+ which demonstrates just how sparse these matrices are.
+
+Despite everything I was able to find about permutation star graphs and permutohedra,
+ I was surprised that there is no information about the Cayley graphs generated by *all*
+ 2-cycles (or at least information which is easy to find).
+This is especially disappointing considering the phantom pattern which gets destroyed by 137,
+ and I would love to know more about why this happens in the first place.
+
+Graph diagrams made with GeoGebra and NetworkX (GraphViz).
+
+
+### Additional Links
+
+- [Whitney Numbers of the Second Kind for the Star Poset (
+ Paper from ScienceDirect
+ )](https://www.sciencedirect.com/science/article/pii/S0195669813801278)
+ - This article includes a section about representing a list of generators as a graph,
+ making me wonder if someone has tried defining this operation before
+- [Whitney Numbers (Josh Cooper's Mathpages)](https://people.math.sc.edu/cooper/graph.html)
+- [
+ The Many Faces of the Nauru Graph (Blogpost by David Eppstein)
+ ](https://11011110.github.io/blog/2007/12/12/many-faces-of.html)
diff --git a/posts/permutations/2/plain-changes/plain_k_5.png b/posts/permutations/2/plain-changes/plain_k_5.png
new file mode 100644
index 0000000..67924f7
Binary files /dev/null and b/posts/permutations/2/plain-changes/plain_k_5.png differ
diff --git a/posts/permutations/2/plain-changes/plain_k_6.png b/posts/permutations/2/plain-changes/plain_k_6.png
new file mode 100644
index 0000000..1d20978
Binary files /dev/null and b/posts/permutations/2/plain-changes/plain_k_6.png differ
diff --git a/posts/permutations/2/plain-changes/plain_path_5.png b/posts/permutations/2/plain-changes/plain_path_5.png
new file mode 100644
index 0000000..e7ef642
Binary files /dev/null and b/posts/permutations/2/plain-changes/plain_path_5.png differ
diff --git a/posts/permutations/2/plain-changes/plain_path_6.png b/posts/permutations/2/plain-changes/plain_path_6.png
new file mode 100644
index 0000000..a8509f1
Binary files /dev/null and b/posts/permutations/2/plain-changes/plain_path_6.png differ
diff --git a/posts/permutations/2/plain-changes/plain_star_5.png b/posts/permutations/2/plain-changes/plain_star_5.png
new file mode 100644
index 0000000..f1324f3
Binary files /dev/null and b/posts/permutations/2/plain-changes/plain_star_5.png differ
diff --git a/posts/permutations/2/plain-changes/plain_star_6.png b/posts/permutations/2/plain-changes/plain_star_6.png
new file mode 100644
index 0000000..79cfa68
Binary files /dev/null and b/posts/permutations/2/plain-changes/plain_star_6.png differ
diff --git a/posts/permutations/2/s4_cayley_graphs.png b/posts/permutations/2/s4_cayley_graphs.png
new file mode 100644
index 0000000..c82b9a6
Binary files /dev/null and b/posts/permutations/2/s4_cayley_graphs.png differ
diff --git a/posts/permutations/3/coxeter_a2.png b/posts/permutations/3/coxeter_a2.png
new file mode 100644
index 0000000..c40816d
Binary files /dev/null and b/posts/permutations/3/coxeter_a2.png differ
diff --git a/posts/permutations/3/coxeter_a2_both.png b/posts/permutations/3/coxeter_a2_both.png
new file mode 100644
index 0000000..8070733
Binary files /dev/null and b/posts/permutations/3/coxeter_a2_both.png differ
diff --git a/posts/permutations/3/coxeter_a3_generator_b.png b/posts/permutations/3/coxeter_a3_generator_b.png
new file mode 100644
index 0000000..4086726
Binary files /dev/null and b/posts/permutations/3/coxeter_a3_generator_b.png differ
diff --git a/posts/permutations/3/coxeter_a3_pair.png b/posts/permutations/3/coxeter_a3_pair.png
new file mode 100644
index 0000000..d9b6fe0
Binary files /dev/null and b/posts/permutations/3/coxeter_a3_pair.png differ
diff --git a/posts/permutations/3/coxeter_an.png b/posts/permutations/3/coxeter_an.png
new file mode 100644
index 0000000..4c400dc
Binary files /dev/null and b/posts/permutations/3/coxeter_an.png differ
diff --git a/posts/permutations/3/index.qmd b/posts/permutations/3/index.qmd
new file mode 100644
index 0000000..f223a1e
--- /dev/null
+++ b/posts/permutations/3/index.qmd
@@ -0,0 +1,424 @@
+---
+title: "A Game of Permutations, Part 3"
+description: |
+ Extending swap diagrams (with apologies to H.S.M. Coxeter).
+format:
+ html:
+ html-math-method: katex
+date: "2022-05-20"
+date-modified: "2025-07-06"
+categories:
+ - graph theory
+ - group theory
+---
+
+
+
+
+This post assumes you have read the [first post](../1), which talks about swap diagrams
+ and the symmetric group.
+The section about Cayley graphs from the [second post](../2) will also be useful.
+
+To summarize from the first post, a swap diagram is a graph where each vertex represents
+ a list index and each edge represents the permutation which swaps the two entries.
+I singled out three graph families for their symmetry:
+
+- Paths, which link adjacent swaps
+- Stars, in which all swaps contain a distinguished index
+- Complete graphs, which contain all possible swaps
+
+Swap diagrams are ultimately limited by only being able to describe collections of 2-cycles.
+If we wanted to include higher-order elements, we'd require a weaker
+ mathematical structure called a [hypergraph](https://en.wikipedia.org/wiki/Hypergraph).
+These are even more difficult to draw than simple graphs, much less understand.
+
+Another way we are limited is in the kinds of groups which can be encoded.
+One can rather quickly notice that swap diagrams will only generate symmetric groups
+ and direct products thereof.
+Also, while edges are members of a generating set, the vertices contain information
+ which is ultimately irrelevant to the group.
+
+
+Upgrading Diagrams
+------------------
+
+What if we forgot the roles of the vertices, allowed the edges to take their place?
+In other words, we want to make a graph where the vertices represent generators,
+ rather than the edges.
+
+Ideally, we'd still like to preserve some information about coincident edges.
+Graph-theoretically, we can elevate the role of the edges to that of the vertices
+ by making a [line graph](https://en.wikipedia.org/wiki/Line_graph).
+This operation produces a graph such that
+
+- Every edge in the original graph becomes a vertex in the new graph
+- Coincident edges in the new graph are connected by an edge in the new graph
+ - In other words, we convert adjacent edges to adjacent vertices.
+
+
+
+The line graph of a swap diagram results in a graph where the vertices are the 2-cycles.
+In a swap diagram, when two distinct 2-cycles share an index (vertex), their product has order 3.
+Thus, in the line graph, the edges mean that the product of the two vertices has order 3.
+Non-adjacent vertices still have a product with order 2, since they represent disjoint 2-cycles.
+
+To push the group/graph correspondence the even further, we can impose a final restriction.
+Namely, a subgraph should represent a sub*group*.
+Specifically, we want an *induced* subgraph
+ (one where if two connected vertices are included, then so is the edge joining them)
+ since this maintains the relationship between the generators.
+Unfortunately, this restriction disqualifies many of the line graphs of swap diagrams.
+At least our beloved paths are left untouched, since $L(P_n) = P_{n-1}$.
+
+
+### Coxeter Diagrams
+
+As it turns out, these restrictions are significant and produce some very deep mathematical objects,
+ known as *Coxeter diagrams* (named for the same Coxeter as in [Goldberg-Coxeter](/posts/pentagons/1)).
+In this domain, the aforementioned rules about vertices and edges apply:
+ each vertex corresponds to an order 2 element and each edge signifies
+ that the product of two elements has order 3.
+Furthermore, *disconnected* vertices correspond to elements which commute with one another,
+ just like disjoint 2-cycles.
+However, each vertex need not correspond to a single 2-cycle,
+ and can instead be *any* element of order 2, i.e., a product of disjoint 2-cycles.
+
+
+
+
+
+
+
+
+
+