7.8. SU(2) → SO(3) homomorphism#

The Cornwell theorem from the group theory (see for example Section 3, Chapter 5 of [3]) gives the relation between the rotation of the transition amplitude and the physical vector of polarization sensitivity:

Rij(ϕ,θ,χ)=12tr(D1/2(ϕ,θ,χ)σiPD1/2(ϕ,θ,χ)σjP),

where tr represents the trace operation applied to the product of the two-dimensional matrices, D and σP, and Rij(ϕ,θ,χ) is a three-dimensional rotation matrix implementing the Euler transformation to a physical vector.

Hide code cell source
from sympy import Matrix, cos, sin, symbols


def Rz(α):
    return Matrix(
        [
            [cos(α), -sin(α), 0],
            [sin(α), cos(α), 0],
            [0, 0, 1],
        ]
    )


def Ry(α):
    return Matrix(
        [
            [cos(α), 0, sin(α)],
            [0, 1, 0],
            [-sin(α), 0, cos(α)],
        ]
    )


θ, ϕ, χ = symbols("theta phi chi", positive=True)
R_SO3 = Rz(ϕ) @ Ry(θ) @ Rz(χ)
R_SO3
[sin(χ)sin(ϕ)+cos(χ)cos(ϕ)cos(θ)sin(χ)cos(ϕ)cos(θ)sin(ϕ)cos(χ)sin(θ)cos(ϕ)sin(χ)cos(ϕ)+sin(ϕ)cos(χ)cos(θ)sin(χ)sin(ϕ)cos(θ)+cos(χ)cos(ϕ)sin(ϕ)sin(θ)sin(θ)cos(χ)sin(χ)sin(θ)cos(θ)]
Hide code cell source
from sympy import S, Trace, conjugate, expand, expand_trig, simplify
from sympy.physics.matrices import msigma
from sympy.physics.quantum.dagger import Dagger
from sympy.physics.quantum.spin import WignerD


def R(Dx, i, j):
    return Trace(Dx @ msigma(i) @ Dagger(Dx) @ msigma(j)) / 2


h = S(1) / 2
Dx = conjugate(
    Matrix([[WignerD(h, i, j, ϕ, θ, χ) for i in [+h, -h]] for j in [+h, -h]])
)
Rij = Matrix([[R(Dx, j, i).doit() for i in range(1, 4)] for j in range(1, 4)])
hangle = {
    cos(θ / 2) ** 2: (1 + cos(θ)) / 2,
    sin(θ / 2) ** 2: (1 - cos(θ)) / 2,
}
R_SU2 = expand_trig(simplify(expand(Rij, complex=True).subs(hangle)))
R_SU2
[sin(χ)sin(ϕ)+cos(χ)cos(ϕ)cos(θ)sin(χ)cos(ϕ)cos(θ)sin(ϕ)cos(χ)sin(θ)cos(ϕ)sin(χ)cos(ϕ)+sin(ϕ)cos(χ)cos(θ)sin(χ)sin(ϕ)cos(θ)+cos(χ)cos(ϕ)sin(ϕ)sin(θ)sin(θ)cos(χ)sin(χ)sin(θ)cos(θ)]
assert R_SO3 == R_SU2