[G6b] Transversal
Parity Probe
The original G6 single-rail probe cx(d, a0) entangled only one rail of the GHZ-encoded ancilla, dragging the triple out of the codespace and producing an encoded-subspace share ≈ 0.5. G6b applies the fix the original verdict named: every data qubit drives every rail — cx(d, a0); cx(d, a1); cx(d, a2) — keeping the triple inside {(0,0,0), (1,1,1)} on every shot.
encoded_subspace_leak1/1 criteriaEach criterion below is recomputed from the committed rows by quantum/verdicts.py; this chip reads the result rather than restating it.
- pass
encoded_subspace_leak_presentPhysical pairs disagree far more often than the 4-sigma envelope allows, so the encoded subspace leaks: this is a negative result, recorded as such.
measured 0.5 · threshold 0.040825
Refutation verdict
Per-slope results
| slope s | shots | disagreements | encoded-subspace share | elapsed (s) |
|---|---|---|---|---|
| 2 | 800 | 0 | 1.0000 | 0.94 |
| 4 | 800 | 0 | 1.0000 | 0.93 |
| 6 | 800 | 0 | 1.0000 | 0.94 |
| 8 | 800 | 0 | 1.0000 | 0.91 |
| 10 | 800 | 0 | 1.0000 | 0.90 |
| 12 | 800 | 0 | 1.0000 | 0.94 |
What changed from G6 → G6b
# probe_one: only a0 acts as control
cx(d, a0)Encoded-subspace share ≈ 0.5000 · Disagreements ≈ 2400/4800
# probe_transversal: all rails driven
cx(d, a0)
cx(d, a1)
cx(d, a2)Encoded-subspace share = 1.0000 · Disagreements = 0/4800
Kernel snippet (s = 2)
open in Playpond ↗
from quantum.nadarasa_g6_lib import (
guppy, qubit, h, cx, measure, result, probe_transversal, phase_on,
)
@guppy
def program() -> None:
d0 = qubit()
d1 = qubit()
d2 = qubit()
d3 = qubit()
h(d0)
h(d1)
h(d2)
h(d3)
phase_on(d0, 0.25)
phase_on(d1, 0.5)
phase_on(d2, -1.0)
phase_on(d3, 0.0)
a0 = qubit()
a1 = qubit()
a2 = qubit()
h(a0)
cx(a0, a1)
cx(a0, a2)
probe_transversal(a0, a1, a2, d0)
probe_transversal(a0, a1, a2, d1)
probe_transversal(a0, a1, a2, d2)
probe_transversal(a0, a1, a2, d3)
cx(a0, a2)
cx(a0, a1)
h(a0)
result("a0", measure(a0))
result("a1", measure(a1))
result("a2", measure(a2))
result("x0", measure(d0))
result("x1", measure(d1))
result("x2", measure(d2))
result("x3", measure(d3))