Syndrome explorer
A stabilizer code never looks at the state it protects — measuring it would destroy the superposition. It measures only whether each of its generators was disturbed. Apply an error below and follow what happens: which generators fire, what the decoder concludes from that alone, and whether the correction restored the logical state or silently changed it.
Code
Shor code, error ZZZZZZZZZ
Undetected — silent logical error
This error commutes with every generator, so the syndrome is blank and the decoder does nothing -- yet the operator is not a stabilizer, so it has altered the logical state. Silent logical failure, which is what it means for Shor to have distance 3: some weight-9 error is invisible to it.
What each generator measured
Each row is a stabilizer generator, each column a qubit. A cell is marked when the error and the generator disagree on that qubit in a way that costs a sign. The syndrome bit is the parity of the marked cells in that row — so two marks cancel and read 0.
| Generator | q0 | q1 | q2 | q3 | q4 | q5 | q6 | q7 | q8 | Marks | Bit |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Error | Z | Z | Z | Z | Z | Z | Z | Z | Z | weight 9 | — |
| ZZIIIIIII | Z | Z | · | · | · | · | · | · | · | 0 | 0 |
| IZZIIIIII | · | Z | Z | · | · | · | · | · | · | 0 | 0 |
| IIIZZIIII | · | · | · | Z | Z | · | · | · | · | 0 | 0 |
| IIIIZZIII | · | · | · | · | Z | Z | · | · | · | 0 | 0 |
| IIIIIIZZI | · | · | · | · | · | · | Z | Z | · | 0 | 0 |
| IIIIIIIZZ | · | · | · | · | · | · | · | Z | Z | 0 | 0 |
| XXXXXXIII | [X] | [X] | [X] | [X] | [X] | [X] | · | · | · | 6 | 0 |
| IIIXXXXXX | · | · | · | [X] | [X] | [X] | [X] | [X] | [X] | 6 | 0 |
Syndrome 00000000 — every generator commuted with this error, so the measurement returned nothing at all.
Decode and correct
| Error applied | ZZZZZZZZZ | weight 9; never observed by the decoder |
|---|---|---|
| Syndrome measured | 00000000 | the only thing the decoder sees |
| Correction inferred | IIIIIIIII | a different operator with the same syndrome |
| Residual | ZZZZZZZZZ | a logical operator, so the encoded state has changed |
Success is the residual being a stabilizer, not the decoder naming the error. Those differ: on a degenerate code the decoder routinely names a different operator and restores the state perfectly, and scoring by equality would count that as a failure.
Every error of weight 1 and 2
| Weight | Errors | Corrected | Miscorrected | Undetected | Trivial |
|---|---|---|---|---|---|
| 1 | 27 | 27 | 0 | 0 | 0 |
| 2 | 324 | 36 | 279 | 0 | 9 |
“Trivial” counts operators that are themselves stabilizers — they act as the identity, so there is nothing to detect. This code is degenerate: 22 distinct syndromes cover more errors than that, so some single-qubit errors are indistinguishable — and are corrected anyway.
The decoder’s lookup table
| Syndrome | Correction applied | Weight |
|---|---|---|
| 00000000← measured | IIIIIIIII | 0 |
| 00000001 | IIIIIIZII | 1 |
| 00000010 | ZIIIIIIII | 1 |
| 00000011 | IIIZIIIII | 1 |
| 00000100 | IIIIIIIIX | 1 |
| 00000101 | IIIIIIIIY | 1 |
| 00001000 | IIIIIIXII | 1 |
| 00001001 | IIIIIIYII | 1 |
| 00001100 | IIIIIIIXI | 1 |
| 00001101 | IIIIIIIYI | 1 |
| 00010000 | IIIIIXIII | 1 |
| 00010011 | IIIIIYIII | 1 |
| 00100000 | IIIXIIIII | 1 |
| 00100011 | IIIYIIIII | 1 |
| 00110000 | IIIIXIIII | 1 |
| 00110011 | IIIIYIIII | 1 |
| 01000000 | IIXIIIIII | 1 |
| 01000010 | IIYIIIIII | 1 |
| 10000000 | XIIIIIIII | 1 |
| 10000010 | YIIIIIIII | 1 |
| 11000000 | IXIIIIIII | 1 |
| 11000010 | IYIIIIIII | 1 |
Decoder benchmarks measured under identical conditions live in the QEC Lab. This page computes exactly and exhaustively on codes small enough for that to be honest; it is a way to see what a syndrome is, not a decoder benchmark.