Syndrome measurements for stabilizer codes#
We will revisit syndrome measurements now, and demonstrate a general algorithm to construct them for stabilizer codes.
Our working example will be the Steane code.
import stac
cd = stac.CommonCodes.generate_code("[[7,1,3]]")
stac.print_matrix(cd.generator_matrix, augmented=True)
As you might recall, we said that for stabilizer codes, one has to measure each generator in turn. This is done via the following algorithm.
for i in range(num_generators):
self.syndrome_circuit.append(["h", n+i])
for i in range(num_generators):
for j in range(num_physical_qubits):
if gens_x[i, j] and gens_z[i, j]:
syndrome_circuit.append(["cx", n+i, j])
syndrome_circuit.append(["cz", n+i, j])
elif gens_x[i, j]:
syndrome_circuit.append(["cx", n+i, j])
elif gens_z[i, j]:
syndrome_circuit.append(["cz", n+i, j])
for i in range(self.num_generators):
syndrome_circuit.append(["h", n+i])
for i in range(num_generators):
syndrome_circuit.append(['MR', self.num_physical_qubits+i])
cd.construct_syndrome_circuit();
cd.syndrome_circuit.draw()
To use this in practice, we will
- Encode the zero state
- Introduce an error
- Measure the stabilizers
# Step 1
circ = cd.construct_encoding_circuit()
circ.append('TICK', 0, cd.num_physical_qubits+cd.num_generators)
# Step 2
circ.append('X', 1)
# Step 3
circ += cd.syndrome_circuit
circ.draw()
# we use stim to simulate this circuit
import stim
stim_circ = stim.Circuit(circ.stim())
sample = stim_circ.compile_sampler().sample(1)[0]
print(1*sample)
[0 0 0 1 1 0]
As we can see, an $X$ error on the 2nd qubit leads to a the 3rd and 5th generators failing (counting from 0). The syndrome vector is the $n+2=9$th column (counting from 1) of the generator matrix, because as discussed previously it is the $Z$-type stabilizer generators that detect bit-flip errors. In this way, each of the $n$ $X$-type errors and $n$ $Z$-type errors correspond to one of the columns of the generator matrix.
Task 1#
Determine the syndromes for each possible one qubit $X$ error and each possible one qubit $Z$ error.
#
Task 2#
Determine the syndromes when there is a two qubit $X$ error (errors such as $X_0 X_3$). Compare the syndromes with the one-qubit error syndromes. What does this tell you about correcting two-qubit errors with the Steane code?
#