Octahedral Symmetry#
The six vertices of the octahedron can be taken as identical to the six edge midpoints of the tetrahedron. As such they have \(t(u,v)\) as their polynomial invariant.
The octahedral symmetry group is generated by transformations \(I\) and \(II\) above, along with
Under transformation \(III\) with \(A=e^{i\pi/4} = D^*\), \(B=C=0\), we find that
Therefore, only \(t^2(u,v)\) is an absolute invariant under the octahedral symmetry group.
The 8 face centers of the octahedron are formed by combining the 8 tetrahedral roots \(\{k_i, \bar{k}_i\}\) found before. As such, the octahedral polynomial invariant for the face centers is given by
# Check of the above:
from sympy import I, diff, simplify, sqrt, symbols
from tetra import Phi, Psi, t
from functools import reduce
u, v = symbols("u v")
W = simplify(Phi * Psi)
W
In order to work out the transformation properties of \(W(u,v)\), it is useful to note that \(t\) and \(W\) are inter-related as follows:
In other words, \(W(u,v)\) is the Hessian of \(t(u,v)\). As such, since \(t \to -t\) under transformation \(III\) (and since \(W \sim t^2\)), \(W(u,v)\) is clearly invariant under all three octahedral symmetry generators.
# Check of the above:
def hessian(f, u, v):
du2 = diff(diff(f, u), u)
dudv = diff(diff(f, u), v)
dv2 = diff(diff(f, v), v)
return du2 * dv2 - dudv**2
hessian(t, u, v).equals(-25 * Phi * Psi)
True
The edge midpoints of the octahedron form a polynomial invariant, \(\chi(u,v)\), which we will compute next.
The edge midpoints can be labeled as follows:
The corresponding stereographically-projected points in the complex plane are given by
One way to compute \(\chi(u,v)\) is to blindly multiply together. Doing so gives
# Check of the above:
def stereo(v1, v2, v3):
return (v1 + I * v2) / (1 - v3)
ls = []
ls.append(stereo(1 / sqrt(2), 1 / sqrt(2), 0))
ls.append(stereo(1 / sqrt(2), -1 / sqrt(2), 0))
ls.append(stereo(-1 / sqrt(2), 1 / sqrt(2), 0))
ls.append(stereo(-1 / sqrt(2), -1 / sqrt(2), 0))
ls.append(stereo(0, 1 / sqrt(2), 1 / sqrt(2)))
ls.append(stereo(0, 1 / sqrt(2), -1 / sqrt(2)))
ls.append(stereo(0, -1 / sqrt(2), 1 / sqrt(2)))
ls.append(stereo(0, -1 / sqrt(2), -1 / sqrt(2)))
ls.append(stereo(1 / sqrt(2), 0, 1 / sqrt(2)))
ls.append(stereo(1 / sqrt(2), 0, -1 / sqrt(2)))
ls.append(stereo(-1 / sqrt(2), 0, 1 / sqrt(2)))
ls.append(stereo(-1 / sqrt(2), 0, -1 / sqrt(2)))
chi = reduce(lambda x, y: x * y, [u - x * v for x in ls])
simplify(chi)
Alternatively, we can make use of the four-fold symmetry relating the midpoints
and similarly for \((l_5, l_6, l_7, l_8)\), \((l_9, l_{10}, l_{11}, l_{12})\). Grouping in this way, we can write
where each \(\chi_{\rm part}(u,v,x)\) is given by
# Check of the above
x = symbols("x")
def reduce_multiply(any_list):
return reduce(lambda x, y: x * y, any_list)
expr = reduce_multiply([u - x * I**k * v for k in range(4)])
simplify(expr)
chi_part1 = expr.subs(x, 1 / sqrt(2) * (1 + I)).expand()
chi_part1
chi_part5 = expr.subs(x, 1 + sqrt(2)).expand()
chi_part5
chi_part9 = expr.subs(x, -1 + sqrt(2)).expand()
chi_part9
chi = (chi_part1 * chi_part5 * chi_part9).expand()
chi
As it turns out, \(\chi(u,v)\) is also related to \(t(u,v)\) and \(W(u,v)\): \(\chi\) is proportional to the Jacobian of \({\bf V}(u,v) := [t(u,v), W(u,v)]\):
# Check of the above:
def jacobian(f, g, u, v):
return diff(f, u) * diff(g, v) - diff(f, v) * diff(g, u)
jacobian(t, W, u, v).equals(-8 * chi)
True
Since \(\chi \sim t\), and since \(t\to-t\) under transformation \(III\), we deduce that \(\chi^2\) is an absolute invariant of the octahedral symmetry group.
Lastly, by direct computation we can verify that the absolute invariants \(\chi^2\), \(W^3\), and \(t^4\) (all sharing the same order of homogeneity) are inter-related:
# Check of the above:
simplify(chi**2 - W**3).factor()
# Second check:
(chi**2 - W**3).equals(-108 * t**4)
True