Polynomial Invariants#

The goal of these notes is to work through several examples of polynomial invariants, constructed from the symmetries of platonic solids.

After building up some preliminary results for the tetrahedron and octahedron, corresponding expressions for the icosahedron and dodecahedron are constructed using the former results as building blocks.

Preliminaries#

Rotation (in three dimensions) of the vector r about the direction n^ by an angle θ:

r=rcosθ+(rn^)n^(1cosθ)r×n^sinθ

or, in components,

ri=[δijcosθ+ninj(1cosθ)ϵijknksinθ]rj:=Oijrj.

Introducing the variables

ai=nisin(θ/2),d:=cos(θ/2),

we see the rotation matrix Oij can be rewritten as follows:

Oij=(2d21)δij+2(aiajϵijkakd).

(Recall that cosθ=2cos2(θ/2)1=12sin2(θ/2) and that sinθ=2sin(θ/2)cos(θ/2).)

The orthogonality of O can be verified by computing OkiOkj using the expression above, which gives

(OTO)ij=δij+4(d2+a21)(d2δij+aiaj)=δij

where the second equality follows from the definition of a and d, along with the trig identity sin2(θ/2)+cos2(θ/2)=1 which enforces the constraint

a2+d2=1.
# Imports
from functools import reduce
from sympy import I, Matrix, conjugate, expand, simplify, sqrt, symbols
# Check of the above:
a1, b1, c1, d1 = symbols("a1 b1 c1 d1")


def o_mat(a, b, c, d):
    return Matrix(
        [
            [2 * d**2 - 1 + 2 * a**2, 2 * (a * b - c * d), 2 * (a * c + b * d)],
            [2 * (a * b + c * d), 2 * d**2 - 1 + 2 * b**2, 2 * (b * c - a * d)],
            [2 * (a * c - b * d), 2 * (b * c + a * d), 2 * d**2 - 1 + 2 * c**2],
        ]
    )


O1 = o_mat(a1, b1, c1, d1)
expand((O1 * O1.transpose()).subs(d1, sqrt(1 - a1**2 - b1**2 - c1**2)))
[100010001]

Two such rotations can be composed as follows:

OC:=OBOA

where, if OA=OA(aA,dA) and OB=OB(aB,dB) then OC=OC(aC,dC) with

a1C=a1AdB+a1BdAa2Aa3B+a2Ba3Aa2C=a2AdB+a2BdAa3Aa1B+a3Ba1Aa3C=a3AdB+a3BdAa1Aa2B+a1Ba2AdC=a1Aa1Ba2Aa2Ba3Aa3B+dAdB.
# Check of the above:
a2, b2, c2, d2 = symbols("a2 b2 c2 d2")
O2 = o_mat(a2, b2, c2, d2)

expand(
    (
        O2 * O1
        - o_mat(
            a1 * d2 + a2 * d1 - b1 * c2 + b2 * c1,
            b1 * d2 + b2 * d1 - c1 * a2 + c2 * a1,
            c1 * d2 + c2 * d1 - a1 * b2 + a2 * b1,
            -a1 * a2 - b1 * b2 - c1 * c2 + d1 * d2,
        )
    )
    .subs(d1, sqrt(1 - a1**2 - b1**2 - c1**2))
    .subs(d2, sqrt(1 - a2**2 - b2**2 - c2**2))
)
[000000000]

Stereographic Projection#

In what follows, it’s helpful to map the rotations on the sphere to the complex plane, by performing an equatorial spherical projection from the point where n^=(0,0,1) down onto the complex plane. Denoting a general point on the unit sphere as r^=(ξ,η,ζ) in the general case, and writing z=x+iy with real and imaginary axes parallel to the (ξη) plane, we find (using similar triangles) that

z=x+iy=ξ+iη1ζ.

Inverting, we find

ξ=z+z¯r,η=i(z¯z)r,ζ=zz¯1r

where we define r:=1+zz¯.

Rotations about the ζ-axis are particularly simple in this representation, as they correspond to multiplying z by a pure phase:

zz=eiθzξ=ξcosθηsinθη=ξsinθ+ηcosθ.

If we wish to write an arbitrary rotation of a point on the sphere about some direction specified by n^, θ (or, equivalently, a, d), we can leverage the simplicity of the above by noting that the rotation leaves the antipodal points z1=0, z2= fixed, and that a more general rotation about the direction n^ should do the same for the points

z1=n1+in21n3,z2=n1in21+n3,

which satisfy the antipodal relation z1z¯2=1, as well as the following other useful relations:

z1+z2z1z2=n3,2z1z2z2z1=n1+in2,2z1z2=n1in2.
# Check of the above
n1, n2, n3 = symbols("n1 n2 n3", real=True)
z1 = (n1 + I * n2) / (1 - n3)
z1A = (-n1 - I * n2) / (1 + n3)
simplify((z1 * conjugate(z1A)).subs(n3, sqrt(1 - n1**2 - n2**2)))
1
simplify((z1 + z1A) / (z1 - z1A))
n3
simplify((2 * z1 * z1A) / (z1A - z1))
n1+in2
simplify((2 / (z1 - z1A)).subs(n3, sqrt(1 - n1**2 - n2**2)))
n1in2

As such, the rotation leaving such points fixed is

zz2zz1=eiθzz2zz1.

Solving for z, the above general rotation can be expressed as

zz=z[(z1z2)cos(θ/2)+i(z1+z2)sin(θ/2)]2isin(θ/2)z1z22zisin(θ/2)+[(z1z2)cos(θ/2)i(z1+z2)sin(θ/2)]=(d+ia3)z(a2ia1)(a2+ia1)z+(dia3)

where we make use of the notation introduced above which interrelates {n^,θ} with {a,d}. (The above can be readily checked by substituting r^=(ξ,η,ζ)=Or^ into the expression z=(ξ+iη)/(1ζ).)

Fractionalized Coordinates#

Lastly, to re-interpret the above transformation in the complex plane as a homogeneous one, it is conventional to write z in terms of its numerator and denominator in projective coordinates:

z=uv.

In terms of u, v, the transformation above is given by

u=(d+ia3)u(a2ia1)vv=(a2+ia1)u+(dia3)v.

In this space, the rotations described above are a subgroup of GL(2,C) where the operator

O=(ABCD)such that(uv)=O(uv)

satisfies detO=1, D=A, B=C. The inverse of such a transformation is given by

O1=(DBCA).