Tetrahedral Symmetry#
A tetrahedron is formed by joining alternating vertices as one traverses the edges of a cube. Taking these four vertices to be
(such that they each lie on the unit sphere) we find that the corresponding spherically-projected coordinates are
(Note that an equivalent tetrahedron could be constructed using the points antipodal to the ones above; this is referred to as the “diametral tetrahedron”.)
The discrete rotational symmetries of the tetrahedron can be constructed by composing the two-fold rotation about the \(z\) axis (which maps \({\bf V}_1 \leftrightarrow{\bf V}_2\), \({\bf V}_3 \leftrightarrow{\bf V}_4\)) with the three-fold rotation about the \({\bf V}_1\) axis (which maps \({\bf V}_2 \rightarrow {\bf V}_3\), \({\bf V}_3 \rightarrow {\bf V}_4\), \({\bf V}_4 \rightarrow {\bf V}_2\)). On the complex plane, these correspond to
respectively.
from sympy import I, Matrix, Rational, conjugate, cos, exp, pi, simplify, sqrt, symbols
# Check of the above:
sp1 = (1 + I) / (sqrt(3) - 1)
sp2 = -(1 + I) / (sqrt(3) - 1)
sp3 = (1 - I) / (sqrt(3) + 1)
sp4 = (-1 + I) / (sqrt(3) + 1)
# fmt: off
((sp1 + I) / (sp1 - I)).equals(sp1) and \
((sp2 + I) / (sp2 - I)).equals(sp3) and \
((sp3 + I) / (sp3 - I)).equals(sp4) and \
((sp4 + I) / (sp4 - I)).equals(sp2)
# fmt: on
True
In terms of the homogeneous coordinates \(u\) and \(v\), these two transformations map directly to
Polynomial Invariants#
Keeping in mind that all symmetry transformations of the tetrahedron merely exchange a number of vertices with one another, it’s expected that a polynomial with roots at the locations of the vertices in the complex plane will be invariant under such transformations. To see this, consider the product
and apply the transformation \((u, v) \to (u', v')\) as before. In the general case, this gives
where we define
In the case of both transformations \(I\) and \(II\), the product \(\prod_{i=1}^4 \left(u - k_i'\, v\right)\) is clearly invariant, because the vertices all transform into one another under any of the transformations. For transformation \(I\), the product \(\prod_{i=1}^4 \left(A - k_i\, C\right) = 1\) because \(A=i\) and \(C=0\). For transformation \(II\), this product instead gives
The above guarantees that the function \(\Phi^3(u,v)\) is an absolute invariant under the symmetries of the tetrahedral group.
# Check of the above
simplify(
(Rational(1, 2) * (1 + I)) ** 4 * (1 - sp1) * (1 - sp2) * (1 - sp3) * (1 - sp4)
)
The above can also be done for the edge midpoints, and face centers, of the tetrahedron. In the latter case, it’s as simple as trading \(k_i \to -1/\bar k_i\) in the above expression for \(\Phi\) (since the face centers are in line with the antipodes of the vertices). This yields
(The second-last equality follows since \(k_1k_4 = k_2k_3 =-1\).) As one might expect, under transformation \(II\) the function \(\Psi(u,v)\) becomes
Therefore, the combinations \(\Phi \Psi\) and \(\Psi^3\) are also absolute invariants.
orth = Rational(1, 2) * Matrix([[1 + I, -1 + I], [1 + I, 1 - I]])
u, v = symbols("u v")
U, V = symbols("U V")
uv = Matrix([u, v])
uv_prime = orth * uv
print(f"{uv_prime=}")
Phi = (u - sp1 * v) * (u - sp2 * v) * (u - sp3 * v) * (u - sp4 * v)
# print(Phi.subs(u, uv_prime[0]))
Phi_prime = Phi.subs([(u, U), (v, V)]).subs([(U, uv_prime[0]), (V, uv_prime[1])])
(Phi_prime / exp(2 * pi * I / 3)).rewrite(cos).radsimp().expand()
uv_prime=Matrix([
[u*(1/2 + I/2) + v*(-1/2 + I/2)],
[ u*(1/2 + I/2) + v*(1/2 - I/2)]])
In contrast, the six midpoints are at \(z=0\), \(z=\infty\), \(z=\pm 1\), and \(z=\pm i\). In this case, the invariant polynomial is given by
Under the transformation \(II\) (with \(A=\tfrac12(1+i)=-B^*=C=D^*\)), we see that
where, in the last line, we make use of \(A^2 = i/2 = -A^{*2}\). Similarly, \(t(u',v') = t(u,v)\) under transformation \(I\) where \(A=i=D^*\), \(B=C=0\), we find
Therefore, \(t(u,v)\) is an absolute invariant as well.
By direct computation, one can evaluate the combination \(\Psi^3- \Phi^3\). As it turns out, this expression has a particularly simple form:
# Check of the above:
Phi = (u - sp1 * v) * (u - sp2 * v) * (u - sp3 * v) * (u - sp4 * v)
Psi = (
(u - conjugate(sp1) * v)
* (u - conjugate(sp2) * v)
* (u - conjugate(sp3) * v)
* (u - conjugate(sp4) * v)
)
simplify(Psi**3 - Phi**3).factor()
# Second check:
t = u * v * (u - v) * (u + v) * (u**2 + v**2)
(Psi**3 - Phi**3).equals(12 * sqrt(3) * I * t**2)
True
e_3, z_1 = symbols("e_3 z_1")
zs = [0, z_1, z_1 * e_3, z_1 * e_3]