# Vector form of Pauli operators and the generator matrix#

It is getting quite tedious to write down multi-qubit Pauli operators like $X \otimes X \otimes I$. Here we are going to discuss a compact form for Pauli operators, that will make it very easy to do computations.

## Vector form of Pauli operators#

We are going to map operators in the Pauli group $\group{P}_n$ to binary vectors of length $2n$. This vector has form $v = (a|b)$ where

- $a$ is the "$X$ part", and is of length $n$,and
- $b$ is the "$Z$ part", and is also of length $n$.

Let $P = \otimes_i P_i$, where $P_i \in \{I_i, X_i, Y_i, Z_i\}$. Then, \begin{align} a_i &= 0, b_i = 0 \text{ if } P_i = I_i, \\ a_i &= 1, b_i = 0 \text{ if } P_i = X_i, \\ a_i &= 1, b_i = 1 \text{ if } P_i = Y_i, \\ a_i &= 0, b_i = 1 \text{ if } P_i = Z_i. \end{align} For example if $n=4$, then $X_0I_1Z_2Y_3$ is associated with the vector $v=(1 0 0 1|0 0 1 1)$.

#### Task 1 (On paper)#

Determine the vector form of the following operators

- $X_0Z_0X_1Z_1$
- $Y_0Y_1Y_2$
- $Z_0Z_1X_2$

### Multiplying operators#

One of the immediate benefits of the binary vector form is that multiplying two Pauli's corresponds to adding their vectors mod 2 (up to an overall phase).

For the simplest example, note that $X = (1|0)$ and $Z = (0|1)$ and their product is $XZ = (1|0) + (0|1) = (1|1) = Y$. Quite ingenius! Please note that we will ignore the overall phase here as $XZ = -\iu Y$, but as you delve more into error-correcting codes you will realize that such phases are not very important.

*Question:* Use the binary vector form to compute $XX$.

### Commutation relations#

One of the best advantages of writing Pauli operators as binary vectors is that commutation relations become very easy to compute.

First, we define the *symplectic inner product* between binary vectors of length $2n$

Let $P_1 = (a|b)$ and $P_2 = (c|d)$. Then, the

symplectic inner productbetween $P_1$ and $P_2$ is

\begin{equation} P_1 \cdot P_2 = a\cdot d + b\cdot c\mod 2. \end{equation}

Be very careful about how we multiplying the first part of $P_1$ with the second part of $P_2$ and vice versa.

#### Task 2 (On paper)#

Let $P_1 = (101|110)$ and $P_2 = (011|111)$. Determine $P_1\cdot P_2$.

#### Task 3#

Complete the function `symplectic_inner_product`

that computes the symplectic product of two input vectors.

- Parameters:

`P1`

: a`list`

, guaranteed to only contain 0 or 1, and length divisible by 2.`P2`

: a`list`

, guaranteed to only contain 0 or 1, and length divisible by 2. - Returns:

An`int`

that is symplectic inner product of`P1`

and`P2`

```
def symplectic_inner_product(P1, P2):
pass
```

Now we state the following theorem about the commutation relations of Pauli operators.

**Lemma:** Let $P_1 = (a|b)$ and $P_2 = (c|d)$ be two Pauli operators. Then,

- $P_1$ and $P_2$ commute if and only if $P_1 \cdot P_2 = 0$,
- $P_1$ and $P_2$ commute if and only if $P_1 \cdot P_2 = 1$.

*Question:* Use the commutation relations of $I_i,X_i,Y_i,Z_i$ to prove this theorem.

#### Task 4#

In Task 1 in stabilizer codes we computed everything by hand. Now use the `symplectic_inner_product`

function to recompute the table with code.

## Generator matrix#

To compactly represent the stabilizer group, and its associated code, we usually write the generators of the stabilizer code as rows of a matrix. This matrix is called sometimes called the generator matrix (because it contains the generators of the code) or the check-matrix (because it is actually analogous to the classical parity-check matrix rather than the classical generator matrix). Sorry for the confusing notation.

Example: For the repetition code for phase flips, the generators are \begin{align} X \otimes X \otimes I &= (110|000), \\ X \otimes I \otimes X &= (101|000). \end{align} Hence, the generator matrix is \begin{equation} G = \left(\begin{array}{ccc|ccc} 1 & 1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 0 & 0 & 0 \end{array}\right). \end{equation}

#### Task 5 (On paper)#

Write down the generator matrix for the repetition code for bit-flips.