2
$\begingroup$

The $ [[5,1,3]] $ code is the smallest quantum error-correcting code (and it is the unique 5 qubit error-correcting code see Corollary 10 of Quantum codes of minimum distance two ), so sometimes it is nice to do out example with the $ [[5,1,3]] $ code to learn something.

For the sake of completeness I will provide the stabilizer generators for the $ [[5,1,3]] $ code: \begin{align} & XZZXI \\ & IXZZX \\ & XIXZZ \\ & ZXIXZ \\ \end{align}

Suppose I have two blocks of the $ [[5,1,3]] $ code, if you like you can think of this as a $ [[10,2,3]] $ code with stabilizer generators \begin{align} & XZZXIIIIII \\ & IXZZXIIIII \\ & XIXZZIIIII \\ & ZXIXZIIIII \\ & IIIIIXZZXI \\ & IIIIIIXZZX \\ & IIIIIXIXZZ \\ & IIIIIZXIXZ \\ \end{align}

Suppose I want to do a fault tolerant logical Bell measurement on my two logical qubits. How do I do that? My first idea would be to do a transversal $ CNOT $ then transversal $ H $ on the first block then do a fault tolerant measurement in the logical computational basis. But the $ [[5,1,3]] $ code doesn't have a transversal $ CNOT $ (or a transversal $ H $ for that matter) so I'm not sure what to do?

$\endgroup$

1 Answer 1

2
$\begingroup$

All stabilizer codes have fault tolerant transversal Bell basis measurement, because Bell basis measurement reveals $X_\text{left}X_\text{right} = \pm 1$ and $Z_\text{left}Z_\text{right} = \pm 1$ (by measuring them) which is very similar to how a qubit's worldline satisfies $X_\text{past}X_\text{future}=+1$ and $Z_\text{past}Z_\text{future}=+1$. Relating X and Z between two spacetime locations are core to why a code can store a qubit fault tolerantly, so the transversal Bell basis measurement is fault tolerant for the "same reason" that the code is fault tolerant. It's just that the simultaneous-X-and-Z-relationship is across space instead of across time.

For example, here is fault tolerant transversal Bell measurement of two 5,1,3 codes:

import stim circuit = stim.Circuit(""" QUBIT_COORDS(0, 0) 0 QUBIT_COORDS(0, 1) 1 QUBIT_COORDS(1, 0) 2 QUBIT_COORDS(1, 1) 3 QUBIT_COORDS(2, 0) 4 QUBIT_COORDS(2, 1) 5 QUBIT_COORDS(3, 0) 6 QUBIT_COORDS(3, 1) 7 QUBIT_COORDS(4, 0) 8 QUBIT_COORDS(4, 1) 9 # Logical bell basis values known before noise MPP X0*X2*X4*X6*X8*X1*X3*X5*X7*X9 MPP Z0*Z2*Z4*Z6*Z8*Z1*Z3*Z5*Z7*Z9 TICK # Stabilizers known before noise MPP X0*Z2*Z4*X6 X1*Z3*Z5*X7 MPP X2*Z4*Z6*X8 X3*Z5*Z7*X9 MPP X4*Z6*Z8*X0 X5*Z7*Z9*X1 MPP X6*Z8*Z0*X2 X7*Z9*Z1*X3 TICK # Noise applied. DEPOLARIZE1(0.001) 0 1 2 3 4 5 6 7 8 9 TICK # Noisy transversal XX measurement. MXX(0.001) 0 1 2 3 4 5 6 7 8 9 DEPOLARIZE2(0.001) 0 1 2 3 4 5 6 7 8 9 # Compare original logical XX to logical XX recovered from physical MXXs. OBSERVABLE_INCLUDE(0) rec[-1] rec[-2] rec[-3] rec[-4] rec[-5] rec[-15] TICK # Noisy transversal ZZ measurement. MZZ(0.001) 0 1 2 3 4 5 6 7 8 9 DEPOLARIZE2(0.001) 0 1 2 3 4 5 6 7 8 9 # Compare original logical ZZ to logical ZZ recovered from physical MZZs. OBSERVABLE_INCLUDE(1) rec[-1] rec[-2] rec[-3] rec[-4] rec[-5] rec[-19] # Compare the original stabilizers across the spacelike measurements. DETECTOR(0, 1, 0) rec[-3] rec[-4] rec[-7] rec[-10] rec[-17] rec[-18] DETECTOR(1, 1, 0) rec[-2] rec[-3] rec[-6] rec[-9] rec[-15] rec[-16] DETECTOR(2, 1, 0) rec[-1] rec[-2] rec[-8] rec[-10] rec[-13] rec[-14] DETECTOR(3, 1, 0) rec[-1] rec[-5] rec[-7] rec[-9] rec[-11] rec[-12] """) 
err = circuit.search_for_undetectable_logical_errors( dont_explore_edges_with_degree_above=10, dont_explore_edges_increasing_symptom_degree=False, dont_explore_detection_event_sets_with_size_above=10, canonicalize_circuit_errors=True, ) print("Code Distance is ", len(err)) # prints 3 
$\endgroup$
2
  • 2
    $\begingroup$ Could you maybe explain the beginning of you answer in more detail? When you say "all codes" do you mean "all stabilizer codes" or are you even allowing non-additive codes? What does it mean for a "code to reveal" and what does it mean for a code to be a "quantum memory"? $\endgroup$ Commented Jul 27, 2024 at 17:21
  • 2
    $\begingroup$ @EricKubischta Yeah i should have said all stabilizer codes. It's a very general property, it would also work on floquet codes and etc with some conditions on lining up the time dynamics, but for non-additive codes you might run into issues due to the need for Clifford corrections. $\endgroup$ Commented Jul 27, 2024 at 23:05

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.