# Two State Systems and the Bloch Sphere

\newcommand{\Z}{\mathbb{Z}} \newcommand{\ket}[1]{|{#1}\rangle} \newcommand{\bra}[1]{\langle{#1}|} \newcommand{\exp}[1]{\langle{#1}\rangle} \newcommand{\brap}{\bra{+}} \newcommand{\bram}{\bra{-}} \newcommand{\ketp}{\ket{+}} \newcommand{\ketm}{\ket{-}} \newcommand{\I}{\mathbb{I}} \newcommand{\i}{\mathrm{i}}

## 1 Two-State Systems

Let's consider a quantum mechanical system with two eigenstates. We'll call these \(\ketp\) and \(\ketm\). Define them to be orthonormal:

\[
\brap \ketp = 1 \qquad \bram \ketm = 1 \qquad \brap \ketm = \bram \ketp = 0
\]

### 1.1 \(\hat z\) direction

It is traditional to call this the \(\hat z\) direction. In what follows, if a bra or a ket does not have a subscript, the basis is intended to be that of the \(\hat z\) direction.

If we measure the value of some spin operator in this basis, we expect one of two eigenvalues: \(\pm 1\). Whatever the form of the operator, it will follow these rules:

\[
\boxed{\sigma_z \ketp = +1 \ketp \qquad \sigma_z \ketm = -1 \ketm}
\]

There is a simple representation of all of this if we write out explicit forms of our eigenvectors. With

\[
\ketp = \begin{pmatrix}
1 \\
0
\end{pmatrix}
\qquad \ketm = \begin{pmatrix}
0 \\
1
\end{pmatrix}
\]

we can expand the operator into an explicit form.

\[
\sigma_z = \sum_{\pm}^m \sum_{\pm}^n \ket{m}\bra{m} \sigma_z \ket{n}\bra{n} \\
= \big( \ketp \brap \sigma_z \ketp\brap \big) + \big( \ketp\brap \sigma_z \ketm\bram \big) + \big( \ketm\bram \sigma_z \ketp\brap \big) + \big( \ketm\bram \sigma_z \ketm\bram \big) \\
= \ketp \brap - \ketm \bram \\
\rightarrow \boxed{\sigma_z =
\begin{pmatrix}
1 & 0 \\
0 & -1
\end{pmatrix}}
\]

In this case writing things out explicitly may have been overkill, but this will be helpful later.

### 1.2 \(\hat x\) direction

Things become more complicated when we consider a new axis. Dropping down to the equator of the bloch sphere, we can pick any point and call it our new \(\hat x\) axis. We don't know where exactly we are, but it doesn't matter. We're creating the coordinate system now.

From this point, if we make a measurement of \(\sigma_z\) we don't know exactly what the answer will be; it's some linear combination of \(\ketp\) and \(\ketm\). Any measurement will collapse to one or the other eigenstate, but in general the solution is a superposition.

\[
\ketp_x =\frac{1}{\sqrt{2}} \big( \ketp + e^{i\phi_x} \ketm \big) \\
\ketp_x = \frac{1}{\sqrt{2}}\big( \ketp + \alpha e^{i\phi_x} \ketm \big)
\]

\[
_x\brap \ketp_x = \frac{\brap\ketp + \alpha^2 \bram\ketm}{2} = 1 \qquad \rightarrow \alpha = 1 \\
\boxed{\ket{\pm}_x = \frac{\ketp \pm e^{i\phi_x}\ketm}{\sqrt{2}}}
\]

Using the column form of the \(\hat z\) eigenvectors, we can get an equivalent form for \(\hat x\):

(Note: it's possible that we could safely declare the phase \(\phi_1\) at this point, but to be safe let's keep it a while longer.)

There will be measurements of things in the \(\hat x\) basis as well, which should have simple eigenvalues when in the proper eigenstate.

\[
\sigma_x \ketp_x = +1 \ketp_x \qquad \sigma_x \ketm_x = -1 \ketm_x
\]

Just as before, we can calculate a \(2\times2\) representation of the operator \(\sigma_x\), by expanding in the eigenvectors:

\[
\sigma_x = \sum_{\pm}^m \sum_{\pm}^n
\ket{m}_x \bra{m}_x \sigma_x
\ket{n}_x \bra{n}_x \\
\]

\[
= \big( \ketp_x \brap_x \sigma_x \ketp_x\brap_x \big) + \big( \ketp_x\brap_x \sigma_x \ketm_x\bram_x \big) + \big( \ketm_x\bram_x \sigma_x \ketp_x\brap_x \big) + \big( \ketm_x\bram_x \sigma_x \ketm_x\bram_x \big) \\
\]

This is cumbersome and ugly but it helped me to see it written out one time. The next step would be to substitute our expressions for \(\ket{\pm}_x\), but we can clean things up more if we look at the \(\hat y\) components first.

### 1.3 \(\hat y\) components

As far as \(\hat z\) sees, \(\hat y\) is the same as any other direction on the equator of the bloch sphere, and the only problem is to define it consistently with our previous work for \(\hat x\).

Because of this "symmetry", the preliminary results will be the same as in the previous case, up to a new phase factor:

\[
\ketp_y =\frac{1}{\sqrt{2}} \big( \ketp + e^{i\phi_y} \ketm \big) \\
\ketp_y = \frac{1}{\sqrt{2}}\big( \ketp + \alpha e^{i\phi_y} \ketm \big)
\]

\[
_y\brap \ketp_y = \frac{\brap\ketp + \alpha^2 \bram\ketm}{2} = 1 \qquad \rightarrow \alpha = 1 \\
\boxed{\ket{\pm}_y = \frac{\ketp \pm e^{i\phi_y}\ketm}{\sqrt{2}}}
\]

We're in shape to define these phases now, and to calculate the spin matrices.

Calculate the overlap \(\brap_x \ketp_y\).

\[
\brap_x\ketp_y = \frac{1}{2} = \frac{\brap\ketp + e^{i(\phi2 - \phi1)}\bram\ketm}{2} \\
\rightarrow \phi_2 - \phi_1 = \pm \frac{\pi}{2}
\]

This is true if the difference between the two phases is \(\pm\pi/2\). If we choose \(\phi_x = 0\), then \(\phi_y = \pm \pi/2\). Let's choose the positive option, which will be like choosing a right-handed coordinate system.

\[
\boxed{\ketp_x =\frac{1}{\sqrt{2}} \big( \ketp + \ketm \big) \\
\ketm_x = \frac{1}{\sqrt{2}}\big( \ketp - \ketm \big) \\
\ketp_y =\frac{1}{\sqrt{2}} \big( \ketp + i \ketm \big) \\
\ketm_y = \frac{1}{\sqrt{2}}\big( \ketp - i \ketm \big)}
\]

### 1.4 Pauli Matrices

The final step is to use all of this to expand what the sigma matrices will be. This is easy:

\[
\boxed{\sigma_x = \begin{pmatrix}
0 & 1 \\
1 & 0
\end{pmatrix} \qquad
\sigma_y = \begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix} \qquad
\sigma_z = \begin{pmatrix}
1 & 0 \\
0 & -1
\end{pmatrix}}
\]

### 1.5 Discussion

There are some tricky details here. I had to make a strong assumption of the form of \(\brap_x\), as a linear combination of the \(\hat z\) states. This secretly relied on foreknowledge of the answer. This also informed the choice of the phases and what the overlap \(\brap_y \ketp_x\) would equal.

How else would you do this? It's a messy chicken-or-egg argument, but ultimately I think the above works only as a mnemonic with foreknowlege of the answer. A way with much more physical motivation is to start with your \(\hat z\) states, the discussion of which is unchanged, and then to rotate the vector \(\brap\) down to point in the \(\brap_x\) direction — by rotating through the \(\hat y\) direction with \(\sigma_y\). This means you have to already know the Pauli matrices!!! Ultimately this seems to be the real state of things in quantum mechanics - by some self-consistency argument, three matrices that give you a basis of rotations exist, and are handed to you, and you use them to construct the vectors of your two-state system.

#### 1.5.1 Manually rotate \(\hat z\) state around \(\sigma_y\)

\[
\ketp_x = e^{- \i \sigma_y \pi / 4} \ketp \\
= \bigg(\cos(\pi/4) \I - \i \sin(\pi/4) \sigma_y \bigg) \ketp \\
= \bigg( \frac{1}{\sqrt{2}}\I - \frac{\i}{\sqrt{2}} \sigma_y \bigg) \ketp
= \bigg( \frac{1}{\sqrt{2}} \begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix} + \frac{i}{\sqrt{2}} \begin{pmatrix}
0 & -1 \\
1 & 0
\end{pmatrix} \bigg) \begin{pmatrix}
1 \\
0
\end{pmatrix} \\
= \frac{1}{\sqrt{2}}(\begin{pmatrix}
1 \\
0
\end{pmatrix} + \begin{pmatrix}
0 \\
1
\end{pmatrix} \\
\rightarrow \ketp_x = \frac{1}{\sqrt{2}}\big(\ketp + \ketm\big)
\]

## 2 Group Theory and Pauli Matrices

For convenience, here are the three Pauli matrices again:

\[
\boxed{\sigma_x = \begin{pmatrix}
0 & 1 \\
1 & 0
\end{pmatrix} \qquad
\sigma_y = \begin{pmatrix}
0 & -i \\
i & 0
\end{pmatrix} \qquad
\sigma_z = \begin{pmatrix}
1 & 0 \\
0 & -1
\end{pmatrix}}
\]

Let's discuss the group structure of these matrices. Groups have a list of esoteric properties, which I will try to reproduce from memory and reasoning below:

- 1) There's some element of the group whose action is to take an element into itself -

the identity.

\[
\I = \begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}
\]

- 2) Some group operation allowing you to multiply elements exists.
- 3) The product of any two elements is another element of the group.

import numpy as np class Sigma: def __init__(self): sigma_i = np.array([[1.0, 0.0], [0.0, 1.0]]) sigma_x = np.array([[0.0, 1.0], [1.0, 0.0]]) sigma_y = np.array([[0.0, -1j], [1j, 0.0]]) sigma_z = np.array([[1.0, 0.0], [0.0, -1.0]]) self.i = sigma_i self.x = sigma_x self.y = sigma_y self.z = sigma_z S = Sigma() return [[S.y @ S.z], [S.z @ S.x], [S.x @ S.y], [S.x @ S.x]]

array | (((0.+0.j 0.+1.j) (0.+1.j 0.+0.j))) |

array | (((0 1) (-1 0))) |

array | (((0.+1.j 0.+0.j) (0.+0.j 0.-1.j))) |

array | (((1 0) (0 1))) |

- The matrices form a cyclic group - \(\sigma_i \sigma_j = -\i \epsilon_{ijk}\sigma_k\).
- Any element squared gives the identity: \(\sigma_i \sigma_i = \I\)
- The determinant of each is \(-1\)
- They anticommute

import numpy as np class Sigma: def __init__(self): sigma_i = np.array([[1.0, 0.0], [0.0, 1.0]]) sigma_x = np.array([[0.0, 1.0], [1.0, 0.0]]) sigma_y = np.array([[0.0, -1j], [1j, 0.0]]) sigma_z = np.array([[1.0, 0.0], [0.0, -1.0]]) self.i = sigma_i self.x = sigma_x self.y = sigma_y self.z = sigma_z def anticommutator(x, y): return x @ y + y @ x def commutator(x, y): return x @ y - y @ x S = Sigma() return [[anticommutator(S.x, S.y)], [anticommutator(S.y, S.z)], [anticommutator(S.z, S.x)]]

array | (((0.+0.j 0.+0.j) (0.+0.j 0.+0.j))) |

array | (((0.+0.j 0.+0.j) (0.+0.j 0.+0.j))) |

array | (((0 0) (0 0))) |