← back to the board
[[96,23,6]] d =
n
96
k
23
d
6
kd²/n
8.625
w
8
X/Z
1
g
0.0063
r
6.0828
layers
2
swaps
378

Share this result

Distance

X/Z asymmetry 1 · d_X = 6, d_Z = 6 · w_X = 8, w_Z = 8 (max(d_X,d_Z)/min(d_X,d_Z); each side carries its own earned tier: = certified exact, ≤ witness upper bound)
d_X 6 · witness weight 6 (claimed upper_bound)
witness operator (support, 6 qubits)
[64, 75, 77, 84, 85, 88]
d_Z 6 · witness weight 6 (claimed upper_bound)
witness operator (support, 6 qubits)
[2, 3, 10, 13, 17, 18]
certificate exact, d = 6 · CryptoMiniSat 5.14.7 SAT
X: no logical < 6 exists; Z: no logical < 6 exists

Diagnostics

computed by the verifier from the parity checks, the layout, and the stored witnesses; shown as evidence, not used for ranking
girth H_X 4 · H_Z 4 (shortest cycle of each side’s Tanner graph; longer is friendlier to belief propagation)
check weights H_X 8 · H_Z 8
qubit degrees H_X 1–4 (mean 3.0) · H_Z 1–4 (mean 3.083)
trapping sets H_X (1,1)×3 (2,1)×6 (3,1)×13 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,1): 3 (1,2): 25 (1,3): 37 (1,4): 31 (2,1): 6 (2,2): 56 (2,3): 144 (2,4): 288 (2,5): 314 (2,6): 171 (3,1): 13 (3,2): 116 (3,3): 589 (3,4): 1703 (3,5): 3310 (3,6): 4140 (3,7): 3294 (3,8): 1473 (3,9): 340 (3,10): 120
trapping sets H_Z (1,1)×5 (2,1)×6 (3,1)×13 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,1): 5 (1,2): 15 (1,3): 43 (1,4): 33 (2,1): 6 (2,2): 37 (2,3): 112 (2,4): 284 (2,5): 386 (2,6): 171 (3,1): 13 (3,2): 87 (3,3): 426 (3,4): 1428 (3,5): 3134 (3,6): 4610 (3,7): 3797 (3,8): 1537 (3,9): 389 (3,10): 94
witness diameter X 5.099 · Z 4.4721 (Euclidean support diameter of the stored distance witnesses in the layout; an upper bound on the exhibited logicals’ spread, not a minimum over all logicals)

Verified 2D layout

as measured by the verifier: every check drawn over the submitted coordinates; the interaction radius is the longest dashed pair
layout contributed by @dorakingx · Simulated annealing over site assignments on an integer grid with the repo's own research/local2d/fold_layout.search_layout (max-diameter objective, several bounding boxes and seeds); single layer at radius 4 tried first, then two layers at 7. Radius and per-site occupancy re-measured with the verifier's rule. · 2026-10-07
r = 6.083
X checkZ checkqubit site (48)2 qubits stacked (2 layers)dashed: the pair setting the interaction radiushover a check to isolate its qubits; click to pin — repeated clicks cycle through overlapping checks; click empty space to release
routing cost 378 nearest-neighbor SWAPs per round in total, at most 10 for one check (heuristic: MST lower bound on the layout, with one lattice step = the minimum qubit spacing 1; not a rank)

Construction & provenance

authors @nihoniumqc
provenance submitted through the challenge
novelty novelty not audited
construction Independent original-row bases of codes/96-22-6.json (pivot columns of transpose under repository GF(2) RREF); remove basis row 17 from X.
model GPT-6 (claimed, not verified)
builds on https://github.com/unitaryfoundation/qldpc-challenge/blob/0ad745c011ce7393c921a39cf35fe760090222c4/codes/96-22-6.json, https://github.com/unitaryfoundation/qldpc-challenge/blob/0ad745c011ce7393c921a39cf35fe760090222c4/notes/96-22-6.md
date 2026-10-01
notes Derived from the existing SmallGroup(48,11) 2BGA entry. Both distances are witness-backed upper bounds. Literature novelty unverified.
family check-deletion (a tag, not a ranking)
locality 2D-local bilayer (computed from the layout)
weight class weight ≤ 8 (computed)

How this code was found

the research note submitted with this code · raw markdown · all notes

[[96,23,6]] — one additional logical qubit by check deletion

Direction & hypothesis

Target: CSS, unrestricted connectivity, maximum check weight 8. Starting from an existing sparse stabilizer code, remove one independent X generator to increase k by one, then search both logical sectors for the resulting distance loss. The parent is the board's [[96,22,6]] 2BGA code on SmallGroup(48,11), reconstructed there from the Lin–Pryadko database. This submission concerns the derivative; it makes no claim to the parent's construction or literature novelty.

What was searched

144 single-row-deletion trials across 36 parent entries. The first 48 trials used 12 parents with n=20–30; the next 96 used 24 parents with n=50–120. Parents were selected from the stored-claim Pareto frontier with check weight at most 8 and claimed distance 4–6. Each side was first reduced to an independent subset of its original rows. Each parent received two X-row and two Z-row deletions, with k recomputed exactly. These are trial counts, not a claim that every resulting stabilizer group is inequivalent.

Screening used the repository submission builder with 200 randomized trials per side. All trial documents and their witnesses were saved, and all 144 passed the trusted structural/witness verifier with refutation disabled. Only three cases with a bound at least 3 remained provisionally nondominated; these received 8,000 fresh trials per side and the full candidate gate. One [[54,21,3]] case was an exact duplicate of the existing entry; a second matched its parameters. The selected [[96,23,6]] derivative improves k over its parent and has a previously unoccupied parameter triple in this checkout.

Evidence trail

For this candidate, the 200-trial screen used seed 20261035 for X and 20261036 for Z and found weight-6 logicals on both sides. The 8,000-trial confirmation used seeds 20361035 and 20361036 and again found 6 on both sides. The lowest stored witness from each side was retained across these runs. A further independent 100,000 trials per side at seeds 20461035 (X) and 20461036 (Z) again returned weight 6 on both sides, taking about 231 seconds. The submitted witnesses remain the saved weight-6 confirmation witnesses.

The trusted candidate gate passed at seed 111883778: structure and witnesses accepted; no lighter logical in 6,340 RIS trials; no exact fingerprint or WL signature duplicate; board advancement in unrestricted weight-8, with gains on k and n relative to dominated peers and no distance-only gain flag. This comparison is relative to checkout 0ad745c011ce7393c921a39cf35fe760090222c4, not the entire literature.

Both d_X <= 6 and d_Z <= 6 are upper bounds. No lower-bound proof or exact certificate is claimed for this code. Circuit-level distance and logical error rates have not been measured.

Dead ends

The first 48 trials yielded bounds of 1 (19 trials), 2 (23), or 3 (6). The larger 96-trial screen yielded 1 (32), 2 (38), 3 (16), 4 (9), or 6 (1). Deleting an independent stabilizer raises k but usually creates short logicals; retaining the parent's claimed distance was rare in this pilot. The result does not establish that any other deletion or construction family is exhausted.

Tools

Author: @nihoniumqc. GPT-6 through Codex; Python 3.12.2, NumPy 2.2.6, SciPy 1.14.1, and the repository's GF(2), submission, surrogate, and trusted verification modules. CPU only. The 144 screening trials took approximately 46 seconds in total, excluding confirmation and verification.

Reproduction

Use the parent from github.com/unitaryfoundation/qldpc-challenge at 0ad745c011ce7393c921a39cf35fe760090222c4, codes/96-22-6.json. Its construction and literature attribution are documented in notes/96-22-6.md. Convert each support list to a binary matrix with 96 columns. For each matrix H, compute the pivot-column list p from the repository's GF(2) RREF of H transpose, and retain H[p,:] in that order. This selects original sparse rows; it does not replace the checks by potentially dense RREF rows. Remove row 17 (zero-based) from the resulting X basis and keep the Z basis. The resulting ranks are 36 and 37, hence k=96-36-37=23. CSS commutation is preserved by taking subsets; all retained rows have weight at most 8. Package with the repository submission builder at the seeds and trial counts above, keeping the lower-weight saved witness on each side. The submitted JSON contains both full support matrices and the final witnesses, so the code can also be verified directly without rerunning the search.

Parity checks

X-checks 36 (max weight 8) · Z-checks 37 (max weight 8)
H_X (36 checks, sparse supports)
[0, 6, 7, 11, 48, 55, 67, 88] [0, 1, 10, 18, 48, 49, 73, 92] [0, 2, 8, 17, 50, 64, 65, 70] [1, 3, 17, 24, 49, 51, 80, 94] [2, 4, 18, 20, 52, 68, 75, 81] [5, 19, 21, 26, 53, 54, 59, 84] [1, 2, 6, 13, 50, 54, 71, 76] [2, 3, 7, 31, 51, 55, 60, 95] [4, 6, 8, 24, 52, 56, 82, 86] [5, 9, 25, 33, 57, 58, 64, 66] [3, 6, 10, 20, 54, 58, 77, 83] [1, 4, 11, 31, 57, 59, 78, 79] [5, 12, 22, 32, 48, 56, 60, 91] [8, 10, 13, 31, 56, 61, 87, 90] [9, 14, 32, 38, 62, 65, 71, 72] [12, 15, 33, 35, 50, 63, 66, 93] [16, 34, 36, 40, 64, 69, 74, 82] [3, 8, 11, 18, 59, 62, 66, 85] [9, 12, 19, 28, 49, 61, 67, 75] [11, 13, 17, 20, 61, 68, 74, 91] [12, 14, 21, 42, 50, 69, 77, 79] [15, 19, 22, 38, 54, 70, 72, 78] [16, 23, 39, 44, 53, 71, 81, 87] [7, 13, 18, 24, 66, 69, 72, 89] [14, 19, 25, 35, 51, 68, 73, 82] [9, 15, 26, 42, 49, 52, 74, 95] [16, 27, 37, 43, 53, 75, 80, 85] [22, 25, 28, 42, 58, 76, 79, 85] [23, 29, 43, 46, 57, 77, 86, 91] [27, 30, 44, 45, 60, 78, 83, 92] [0, 20, 24, 31, 53, 72, 79, 93] [15, 21, 25, 32, 52, 55, 80, 87] [23, 27, 34, 41, 57, 60, 82, 89] [27, 29, 36, 47, 62, 75, 84, 90] [30, 34, 37, 46, 63, 67, 85, 94] [37, 39, 41, 47, 70, 73, 89, 95]
H_Z (37 checks, sparse supports)
[0, 1, 12, 42, 48, 49, 50, 79] [1, 3, 19, 26, 49, 51, 54, 59] [2, 6, 15, 21, 50, 52, 54, 55] [3, 7, 25, 33, 51, 55, 58, 66] [4, 8, 26, 32, 52, 56, 59, 65] [5, 23, 27, 31, 53, 57, 60, 90] [5, 6, 10, 22, 48, 54, 56, 58] [0, 7, 32, 38, 48, 55, 65, 72] [8, 12, 13, 33, 50, 56, 61, 66] [9, 11, 29, 34, 57, 62, 67, 74] [9, 10, 17, 28, 49, 58, 61, 65] [5, 11, 18, 35, 48, 59, 66, 68] [7, 12, 30, 34, 60, 63, 67, 69] [13, 19, 20, 38, 54, 61, 68, 72] [14, 18, 36, 39, 62, 69, 73, 81] [15, 17, 37, 40, 63, 70, 74, 80] [2, 9, 16, 47, 64, 71, 75, 95] [2, 14, 17, 35, 50, 51, 65, 68] [9, 15, 18, 24, 49, 52, 66, 72] [0, 19, 37, 39, 53, 67, 70, 73] [16, 21, 24, 43, 53, 69, 80, 86] [2, 22, 41, 44, 60, 70, 76, 81] [6, 14, 23, 40, 71, 77, 82, 88] [14, 22, 24, 31, 51, 56, 72, 79] [1, 25, 41, 43, 57, 73, 76, 80] [16, 20, 26, 44, 53, 74, 81, 83] [4, 19, 27, 36, 75, 78, 82, 84] [6, 28, 45, 46, 67, 76, 83, 86] [10, 21, 29, 44, 77, 84, 87, 92] [11, 22, 30, 43, 78, 85, 88, 91] [3, 27, 32, 45, 60, 62, 80, 83] [4, 23, 33, 46, 57, 63, 81, 86] [8, 16, 25, 34, 64, 82, 85, 87] [10, 30, 35, 47, 63, 73, 83, 90] [5, 17, 36, 46, 64, 84, 91, 94] [18, 27, 28, 37, 75, 85, 89, 92] [0, 33, 40, 45, 64, 88, 92, 93]
Code ID 96-23-6 · download JSON · raw on GitHub