On Atiyah's solution to the Berry-Robbins problem

Previously, we attempted to gain insight into the connection between spin and statistics. On the one hand, we considered the behavior of spins under rotations, where half integer spins pick up a negative sign after a single rotation, but not for interger spins. On the other hand, we had the techniques of bosonic and fermionic second quantization, where we constructed multiparticle states of "indistinguishable" particles in either permutation symmetric or antisymmetric states, states where if you permute (in the tensor product) two subsystems, they either come back to themselves, or else to $-1$ times themselves.

On the third hand, we have the idea of literally swapping the locations of the particles in space.

Using ideas from relativistic quantum field theory, one can show a connection between spin and statistics: that in 3+1 dimensions, half integer spins must be quantized as antisymmetric fermions and integer spins must be quantized as symmetric bosons. Here instead we take inspiration from a paper of Berry and Robbins which attempts to show something like the connection between spin and statistics on more elementary, even geometrical, grounds.

First, the Berry-Robbins oscillator construction unifies the idea of a rotation and a permutation. The idea is: we take two spins and split them into two $\uparrow$ and $\downarrow$ oscillators each, and then join the $\uparrow$ oscillators and the $\downarrow$ oscillators, across the original spins, into two new spins. If we look at what happens to the original spins under a simultaneous $Y$ rotation of these two new "exchange" spins by $\pi$, the original spins permute their places in the tensor product. And moreover, they pick up a $-1$ if they're half integer, and $1$ if they're integer spin.

So that's two out of the three ideas: rotations and permutations. But what about the idea of actually exchanging the positions of the particles? We want somehow the act of dragging two particles around each other, switching positions, to correspond to: a permutation of the tensor product of the spins which is also an exchange rotation, picking up the proper sign. It would be interesting if there were somehow a smooth map from the positions of the particles into the space of exchange rotations. Atiyah's claim is that there is.


We begin in a "classical setting."

First, consider the fact that the following matrices form a basis for $n$ x $n$ Hermitian matrices: the $n$ matrices with a single $1$ on the diagonal; the $n\frac{n-1}{2}$ matrices with components $E^{(x, i, j)}_{i,j} = E^{(x, i, j)}_{j,i} = 1$, with $i < j$; and the $n\frac{n-1}{2}$ matrices with components $E^{(x, i, j)}_{i,j} = i, E^{(x, i, j)}_{j,i} = -i$, with $i < j$. In other words, for $n=3$:

$\begin{pmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix}$

$\begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 1 \\ 0 & 0 & 0 \\ 1 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix}$

$\begin{pmatrix} 0 & i & 0 \\ -i & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & i \\ 0 & 0 & 0 \\ -i & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & i \\ 0 & -i & 0 \end{pmatrix}$

(We may want to normalize these a little.)

As I say, these $n^{2}$ matrices $E_{m}$ form a basis for $n$ x $n$ Hermitian matrices. In other words, any such matrix $H$ can be decomposed as $\sum_{E} tr(E_{m}H)E_{m}$, where we take the inner product (via the trace) of the two matrices to get the component in the "direction" of that matrix.

In other words, we can describe a Hermitian matrix as a vector in a $n^{2}$ real vector space. If we allow our vectors to be complex, we get the $n$ x $n$ unitary matrices, which arise as exponentials of the Hermitian matrices.

You might have noticed in the second two cases a similarity to the Pauli $X$ and $Y$ matrices:

$X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, Y = \begin{pmatrix} 0 & i \\ -i & 0 \end{pmatrix}$

For each $i, j$ for $i < j$, we have $E^{(x, i, j)}_{i, i} = X_{0,0}, E^{(x, i, j)}_{i, j} = X_{0,1}, E^{(x, i, j)}_{j, i} = X_{1,0}, E^{(x, i, j)}_{j, j} = X_{1,1}$, and the same for $E^{(y, i, j)}$. And for that matter, we could form some $E^{(z, i, j)}$'s the same way, using $Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}$: these would be linear combinations of the diagonal matrices. Each set of such $X, Y, Z$ operators satisifies the angular momentum commutation rules, and commutes with the other sets. We're going to use these as our basic "exchange rotations."

In [5]:
import qutip as qt
import numpy as np

def su(n):
    annotations = []
    diagonals = [np.zeros((n,n), dtype=complex) for i in range(n)]
    for i in range(n):
        diagonals[i][i,i] = 1
        annotations.append(('Ez', i))
    xlike = [np.zeros((n, n), dtype=complex) for i in range(int(n*(n-1)/2))]
    r = 0
    for i in range(n):
        for j in range(n):
            if i < j:
                xlike[r][i,j] = 1/np.sqrt(2)
                xlike[r][j,i] = 1/np.sqrt(2)
                r +=1 
                annotations.append(('Ex', i, j))
    ylike = [np.zeros((n, n), dtype=complex) for i in range(int(n*(n-1)/2))]
    r = 0
    for i in range(n):
        for j in range(n):
            if i < j:
                ylike[r][i,j] = 1j/np.sqrt(2)
                ylike[r][j,i] = -1j/np.sqrt(2)
                r +=1 
                annotations.append(('Ey', i, j))
    return [qt.Qobj(o) for o in diagonals + xlike + ylike], annotations

n = 5
H = qt.rand_herm(n)
E, anno = su(5)
C = [(e*H).tr() for e in E]
H2 = sum([C[i]*e for i, e in enumerate(E)])
print(H == H2)
True

Suppose we have $n$ "classical" spinors. In other words, to combine them we don't use the tensor product, but simple concatenation.

So if we had $3$ spinors, $\begin{pmatrix} \alpha_{0} \\ \beta_{0} \end{pmatrix}, \begin{pmatrix} \alpha_{1} \\ \beta_{1} \end{pmatrix}, \begin{pmatrix} \alpha_{2} \\ \beta_{2} \end{pmatrix}$, we could form the vector: $\begin{pmatrix} \alpha_{0} \\ \beta_{0} \\ \alpha_{1} \\ \beta_{1} \\ \alpha_{2} \\ \beta_{2} \end {pmatrix}$, which lives in a $2n$ dimensional vector space, and is just the two components of each of the spinors stuck together in a column. The Pauli matrices which act on each spinor are just block diagonal matrices, e.g.,:

$\begin{pmatrix} 1 & 0 & 0 & 0 & 0 & 0\\ 0 & -1 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & i & 0 & 0 & 0 & 0 \\ -i & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{pmatrix}$

$\begin{pmatrix} 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & i & 0 & 0 \\ 0 & 0 & -i & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{pmatrix}$

$\begin{pmatrix} 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & -1 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 \end{pmatrix}, \begin{pmatrix} 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & i \\ 0 & 0 & 0 & 0 & -i & 0 \end{pmatrix}$

Obviously, the matrices in each set satisfy the usual angular momentum relations, and commute with the operators in the other sets. So we can rotate the spinors individually, and also easily extract their rotation axis via expectation values with the $X, Y, Z$'s.

Again, we're in a $2n$ dimensional space, whose operators are $2n$ x $2n$ dimensional.

Now here's the thing: if we take our $E_{m}$ operators from before, which were $n$ x $n$ dimensional, and we upgrade them to act on this $2n$ dimensional space by simply tensoring them with the $2$ x $2$ identity, in other words, $E_{m} \rightarrow E_{m} \otimes I_{2}$, then the $E^{(\sigma, i, j)}$'s generate exchange rotations on the space of $n$ spinors, between spinors $i$ and $j$.

In other, words we can form a "classical" model of the exchange rotations.

In [11]:
import qutip as qt
import numpy as np
import vpython as vp
from examples.magic import *
import scipy as sc

def su2(n, half=True):
    XYZ = {"X": qt.sigmax(), "Y": qt.sigmay(), "Z": qt.sigmaz()}
    S = [dict([(o, (0.5 if half else 1)*qt.Qobj(\
          sc.linalg.block_diag(*\
            [np.zeros((2,2)) if i !=j else XYZ[o].full() \
                for j in range(n)]))) \
                    for o in XYZ.keys()])
                        for i in range(n)]
    sun, annotations = su(n)
    E = [(1/np.sqrt(2))*qt.tensor(o, qt.identity(2)) for o in sun]
    for e in E:
        e.dims = [[e.shape[0]], [e.shape[0]]]
    return S, E, annotations

def rand_su2n_state(n):
    return su2n_state([qt.rand_ket(2) for i in range(n)])

def su2n_state(spinors):
    return qt.Qobj(np.concatenate([q.full().T[0] for q in spinors]))

def split_su2n_state(state):
    v = state.full().T[0]
    return [qt.Qobj(np.array([v[i], v[i+1]])) for i in range(0, len(v), 2)]

def su2n_phases(state):
    return [get_phase(spinor) for spinor in split_su2n_state(state)]

def decompose_su2n(O, S, E):
    s = [dict([(o, (S[i][o]*O).tr()) for o in ["X", "Y", "Z"]]) for i in range(len(S))]
    e = [(E[i]*O).tr() for i in range(len(E))]
    return s, e

def reconstruct_su2n(s, e, S, E):
    terms = []
    for i in range(len(S)):
        for o in ["X", "Y", "Z"]:
            terms.append(s[i][o]*S[i][o]) if not np.isclose(s[i][o], 0) else None
    for i in range(len(E)):
        terms.append(e[i]*E[i]) if not np.isclose(e[i], 0) else None
    return sum(terms)

def display_su2n(s, e, annotations):
    r = 0
    for i in range(len(S)):
        print("s%d: %s" % (i, "".join(["%s: %s " % (o, s[i][o]) for o in ["X", "Y", "Z"]])))
    for i in range(len(E)):
        print("%s : %s" % (annotations[i], e[i]))

def su_xyz(n, big=False, half=True):
    XYZ = {"X": qt.sigmax(), "Y": qt.sigmay(), "Z": qt.sigmaz()}
    E = {}
    for i in range(n):
        for j in range(n):
            if i < j:
                xyz = {}
                for o in XYZ.keys():
                    O = XYZ[o].full()
                    M = np.zeros((n, n), dtype=complex)
                    M[i, i] = O[0][0]
                    M[i, j] = O[0][1]
                    M[j, i] = O[1][0]
                    M[j, j] = O[1][1]
                    Op = qt.tensor((0.5 if half else 1)*qt.Qobj(M), qt.identity(2)) if big\
                        else qt.Qobj(M/(np.sqrt(2) if half else 1))
                    Op.dims = [[Op.shape[0]], [Op.shape[0]]]
                    xyz[o] = Op 
                E[(i, j)] = xyz
    return E

###############################################################################################

n = 2
show_exchange = True

S, E, anno = su2(n)
state = rand_su2n_state(n)
phases = su2n_phases(state)
spinors = split_su2n_state(state)

scene = vp.canvas(background=vp.color.white, width=800, height=600)
vcolors = [vp.color.red, vp.color.blue, vp.color.green, vp.color.yellow]
pts = [np.array([2*i - n/2, 0, 0]) for i in range(n)]
vspheres = [vp.sphere(radius=spinors[i].norm(), color=vcolors[i], opacity=0.3,\
                      pos=vp.vector(*pts[i]))\
                for i in range(n)]
vspins = [vp.arrow(pos=vspheres[i].pos,\
                   axis=2*vp.vector(qt.expect(S[i]["X"], state),\
                                    qt.expect(S[i]["Y"], state),\
                                    qt.expect(S[i]["Z"], state)))\
            for i in range(n)]
vphases = [vp.arrow(pos=vspheres[i].pos,color=vp.color.magenta,\
                    headlength=0,\
                    axis=vp.vector(phases[i].real, phases[i].imag, 0))\
                for i in range(n)]

vorig = [[vp.sphere(pos=vspheres[i].pos+vspins[j].axis,\
            color=vcolors[j], radius=0.15) \
        for j in range(n)] for i in range(n)]
vphases_ = [vp.arrow(pos=vspheres[i].pos, color=vp.color.yellow,\
                    headlength=0,\
                    axis=vphases[i].axis)\
                for i in range(n)]

def update_viz():
    global n, state
    spinors = split_su2n_state(state)
    phases = su2n_phases(state)
    for i in range(n):
        vspheres[i].radius = spinors[i].norm()
        vspins[i].axis = 2*vp.vector(qt.expect(S[i]["X"], state),\
                                     qt.expect(S[i]["Y"], state),\
                                     qt.expect(S[i]["Z"], state))
        vphases[i].axis = vp.vector(phases[i].real, phases[i].imag, 0)
    vp.rate(5000)

dt = 0.001
H = E[anno.index(('Ey', 0, 1))]
U = (-1j*dt*H).expm()

if show_exchange:
    Exyz = su_xyz(n, big=True)
    exp = np.array([qt.expect(Exyz[(0,1)]["X"], state),\
                    qt.expect(Exyz[(0,1)]["Y"], state),\
                    qt.expect(Exyz[(0,1)]["Z"], state)])
    vexchange = vp.sphere(pos=(vspheres[0].pos+vspheres[1].pos)/2+vp.vector(0,2,0),\
                          color=vp.color.magenta, opacity=0.4, radius=np.linalg.norm(exp))
    vexchange_spin = vp.sphere(pos=vexchange.pos+vp.vector(*exp),\
                               radius=0.1, emissive=True, make_trail=True)

    phase = get_phase(state)
    vp.arrow(pos=vp.vector(0,-2,0), axis=vp.vector(phase.real, phase.imag, 0), color=vp.color.yellow)
    vph = vp.arrow(pos=vp.vector(0,-2,0), axis=vp.vector(phase.real, phase.imag, 0), color=vp.color.magenta)
    
T = 0
theta = np.pi
while T < theta:
    T = T+dt
    state = U*state
    update_viz()
    if show_exchange:
        vexchange_spin.pos = vexchange.pos+vp.vector(qt.expect(Exyz[(0,1)]["X"], state),\
                                                       qt.expect(Exyz[(0,1)]["Y"], state),\
                                                       qt.expect(Exyz[(0,1)]["Z"], state))
        phase = get_phase(state)
        vph.axis = axis=vp.vector(phase.real, phase.imag, 0)

To either side you see the red and blue spinors. Their rotation axis is in grey, its original phase is in yellow, and its current phase is in magenta. Above you see the expected rotation axis of the "exchange spinor". Below you see the overall phase.

After a turn of $\pi$, the red and blue spinors swap places, and pick up a phase of $-1$ relative to each other. You can see that after one exchange, the phase of the blue guy (now pointing in the red direction) has exactly the opposite phase of the red guy at the beginning.


So now we have a classical model of our exchange rotations. Instead of acting on $n$ quantum spins, split each into two oscillators, we act on $n$ spinors who live in a $2n$ dimensional space. We can recover the quantum model from before via second quantization. If we have $n$ spins, we have $2n$ oscillators. E.g., if $n=3$, we have $a_{0, \uparrow}, a_{0, \downarrow}, a_{1, \uparrow}, a_{1, \downarrow},$ $a_{2, \uparrow}, a_{2, \downarrow}$. Then given a $6$ dim classical state of $3$ spinors, we can second quantize it into a raising operator by multiplying each of the components by the corresponding creation operator and summing, just like before. This will raise a second quantized state out of the vacuum, which matches the classical state in its expectation values. Furthermore, we can second quantize the $2n$ x $2n$ operators, by wedging them between a row of creation operators and a column of annihilation operators, in other words: $ \textbf{O} = \sum_{i, j} a_{i}^{\dagger} O_{i, j} a_{j} $.

In fact, if you multiply everything out, you get exactly the same expressions for the $X, Y, Z$ operators formed from the normal spins and the "cross spins" from before. And under these operations, the expectation values of the quantum version reproduce the values of the classical spinors. This can only be fully appreciated in general if you work with actual quantum harmonic oscillators, not finite approximations. In other words, one has to work with the integrals, which is in general very slow. Check out exact_exchange_quantization.py if you dare. In any case, in what follows, we'll be working with the classical model, realizing that the same will apply to the quantum model, as long as we stick to the program.

One interesting thing you'll note is that the norms of the spinors change during the rotation, which we can interpret as them spinning at different rates. In the quantum case, this corresponds to mixed states of the spins, in other words: as entanglement between the two spins.


Okay, now finally, the geometry. This is the most beautiful part.

Suppose we have $n$ points arranged in 3D. We imagine a little sphere around each point. We connect up all the points to each other with lines, and we add a "star" to each sphere at each intersection with one of these lines. So we end up with $n$ constellations each of $n-1$ stars, and the constellation at each point encodes the directions to the other points. Naturally, the constellations are independent of the distance between the points; only the relative angles are encoded. And any two points have two stars in opposite directions on their spheres.

Well, we know what we can do with $n-1$ stars: we can form a degree $n-1$ polynomial or better yet an $n$ dimensional complex vector in the $j=\frac{n-1}{2}$ spin representation. We could even form an $n$ x $n$ matrix which has these $n$ vectors as its columns, e.g., $\begin{pmatrix}\alpha_{0} & \beta_{0} & \gamma_{0} \\ \alpha_{1} & \beta_{1} & \gamma_{1} \\ \alpha_{2} & \beta_{2} & \gamma_{2} \end{pmatrix}$.

It is a conjecture of Atiyah's that the determinant of this matrix will always be non $0$, in other words, that these vectors will always be linearly independent. Numerical evidence strongly suggests this is the case, but no general proof exists. Nevertheless.

From a configuration of $n$ points in 3D, we can obtain an $n$ x $n$ matrix whose columns correspond to the mutual "views" of each point on the others. Call it $V$. Now any complex matrix can be decomposed via the polar decomposition into the product of a unitary matrix and a hermitian matrix: $M = UH$, a rotation and a stretch/squish. We apply this to our $V$, and take just the unitary part. We then form $W = U \otimes I_{2}$, which is an $2n$ x $2n$ dimensional unitary matrix.

This matrix $W$ acts on the space of $n$ spinors, specifically the "exchange" part of it.

What this means is that we could scatter $n$ points in 3D, and form the constellations of their views, and associate them with a $2n$ x $2n$ exchange rotation matrix. Permutations of the positions lead to permutations of the columns of this matrix which acts on the spinors.

In order to visualize this, we could do the following:

We could start with $n$ spinor states, and get the transformation associated with their $n$ positions, $W$. We then have a choice: We could begin by applying $W^{\dagger}\mid \psi \rangle$, where $\psi$ is the $2n$ dim state of the $n$ spinors, and then allowing one to drag the spheres around, changing their positions, and thus their views, so that at each moment we have a new matrix $W$. So at each moment, we take $W\mid \psi \rangle$, and then visualize the resulting spinor states at each location. In this way, at the beginning of the simulation, before any spheres have been moved, we have just $WW^{\dagger}\mid \psi \rangle = \mid \psi \rangle$. We could then examine the effect of changes in position on the spinors. Alternatively, however, we could begin by applying $W\mid \psi \rangle$, and then when the positions are updated, applying $W^{\dagger}\mid \psi \rangle$. These are two ways of encoding the "initial condition." They lead to slightly different effects.

In the latter case, we find quite simply that if two particles exchange their views, they also exchange their spins. In this sense, we have a model of indistinguishable particle: we swap the location of two particles, and we can't tell the difference, because the spin here is now the same as the spin there. Philosophically, it's very interesting: the "identical" particles are distinguished by their different views on each other, as if the "views" were more fundamental than their supposed "position." One wonders if one can develop all of physics beginning from views in this vein.

But more concretely, here the starting configuration associates certain spinors to certain views, and then rearranging the positions in 3D smoothly exchanges the spinors depending on the changes in view, the constellations acting like "coordinates" for the spin states.

On the other hand, we don't get the desired sign flip if we start with $W\mid \psi \rangle$ and then apply $W^{\dagger}\mid \psi \rangle$. We do however get the right sign flip if we start with $W^{\dagger}\mid \psi \rangle$ and then apply $W\mid \psi \rangle$. But the "exchanges" only fully take place if we start with certain special initial conditions, for example, with spinors with mutually opposite views along the $Z$ axis: then swaps in the plane orthogonal to the $X$ axis or the $Y$ axis will generate exchanges, as well as sign flips. I note in the original paper, Berry and Robbins consider exchanges rotations around an axis mutually perpendicular to the $Z$ axes of the spinors and the line connecting the two points. One could finesse this in the sense that one can choose one's 3D frame arbitrarily, so that indeed, one could always arrange two opposite stars connected by a line so that they are at $Z+$ and $Z-$ respectively on the "celestial sphere", and imagine rotations in the plane formed by that line and the $Z$ axis of the two spinors. Then you'll get an exchange and a sign flip. Then again, however, what if you have more than two spheres? It's interesting to think about the noncommutativity of permutations in this light. There is much I still don't understand about this construction, and much than perhaps nobody understands!

In any case, check out classical_atiyah_space.py.

It's worth mentioning that there are generalizations of this construction for $n$ points in hyperbolic space, Minkowski spaces, even space with other kinds of symmetry, and much, much more.


Of course, this treatment is still basically semi-classical. We're not obviously dealing with the spatial wave functions of the particles. One can try extending this idea in many directions. It makes me think of "Celestial CFT's": e.g., papers like this.

It's worth mentioning here some useful observations which we neglected in our discussion of bosons and fermions.

First, a word on why we talk about "statistics." The easiest way of thinking about this, which can be found among other places, here, is to consider two pebbles and two boxes. Classically, we have two distinguishable pebbles $a$ and $b$, and if we call the boxes $L$ and $R$, we have the possible states:

$\begin{matrix} L(ab) & R(0) \\ L(a) & R(b) \\ L(b) & R(a) \\ L(0) & R(ab) \end{matrix}$.

Each possibility has a $\frac{1}{4}$ chance of occurring. These are so-called Maxwell-Boltzmann statistics.

In contrast, if one had permutation symmetric identical particles, where it was impossible to distinguish between $a$ and $b$, then we'd have:

$\begin{matrix} L(ab) & R(0) \\ L(1) & R(1) \\ L(0) & R(ab) \end{matrix}$.

In the middle case, there's a particle in each box, but it's impossible to say which is which. Each case has a $\frac{1}{3}$ chance of occuring. These are the Bose-Einstein statistics.

Finally, if we had two permutation antisymmetric identical particles, then we'd have just:

$\begin{matrix} L(1) & R(1) \end{matrix}$.

These are the Fermic-Dirac statistics.

It's worth noting however what happens when you second quantize position along with spin. If we have two electrons, say, it's perfectly possible for their spins to be in a permutation symmetric state, but then their position wavefunctions would have to be antisymmetric. Conversely, if their spins are in a permutation antisymmetric state, then their position wave functions must be symmetric, so that the whole state remains antisymmetric. If spin and position were both antisymmetric, then the whole state would be symmetric, which ain't the case for fermions!