← back to the board
[[128,8,9]] d ≤
n
128
k
8
d
9
kd²/n
5.062
w
6
X/Z
1

Share this result

Distance

X/Z asymmetry 1 · d_X ≤ 9, d_Z ≤ 9 · w_X = 6, w_Z = 6 (max(d_X,d_Z)/min(d_X,d_Z); each side carries its own earned tier: = certified exact, ≤ witness upper bound)
d_X 9 · witness weight 9 (claimed upper_bound)
witness found by @vprusso · research/kit/surrogate.lightest_logical · found at 4×104 trials · survived 4×104 trials · 2026-10-17
witness operator (support, 9 qubits)
[0, 14, 54, 82, 90, 93, 106, 110, 125]
d_Z 9 · witness weight 9 (claimed upper_bound)
witness found by @vprusso · research/kit/surrogate.lightest_logical · found at 4×104 trials · survived 4×104 trials · 2026-10-17
witness operator (support, 9 qubits)
[30, 38, 48, 57, 58, 60, 84, 116, 119]
certificate none yet · distance stands as a self-certified upper bound (d ≤)

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 6 · H_Z 6 (shortest cycle of each side’s Tanner graph; longer is friendlier to belief propagation)
check weights H_X 6 · H_Z 6
qubit degrees H_X 2–4 (mean 3.0) · H_Z 2–4 (mean 3.0)
trapping sets H_X (1,2)×64 (2,2)×64 (3,2)×64 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,2): 64 (1,4): 64 (2,2): 64 (2,4): 512 (2,6): 384 (3,2): 64 (3,4): 2048 (3,6): 6144 (3,8): 3456 (3,10): 256
trapping sets H_Z (1,2)×64 (2,2)×64 (3,2)×64 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,2): 64 (1,4): 64 (2,2): 64 (2,4): 512 (2,6): 384 (3,2): 64 (3,4): 2048 (3,6): 6144 (3,8): 3456 (3,10): 256

Construction & provenance

authors Lin, Hsiang-Ku and Pryadko, Leonid P.
provenance literature baseline
construction Two-block group-algebra (2BGA) code over SmallGroup(64,47) = C16 : C4, archive row "64 47 8 9 [ 3 ] [ 2, 15, 26 ]" of the nonabelian enumeration (Lin and Pryadko, arXiv:2306.16400; github.com/QEC-pages/2BGA-codes @ 403d194c3f98). a = {g_i : i in [3]} and b = {g_i : i in [2, 15, 26]} with elements indexed as GAP's Elements(SmallGroup(64,47)) numbers them, 1-based (the identity is implicit in the archive's lists); H_X = [L(a) | R(b)], H_Z = [R(b)^T | L(a)^T] over the left and right regular representations. Rebuilt here as research/kit/group_algebra.build_2bga_small_group(64, 47, [0, 2], [0, 1, 14, 25]) on the committed Cayley table research/kit/groups/smallgroup_64_47.json (GAP 4.16.1, smallgrp 1.7.0), 0-based indices with the identity at 0.
model Claude Claude Fable 5.1 (Claude Code) (claimed, not verified)
reference arXiv:2306.16400, https://github.com/QEC-pages/2BGA-codes
date 2023
notes Literature baseline (arXiv:2306.16400, Lin and Pryadko, 28 Jun 2023), seeded for issue #3658 as the 2BGA archive row that dominates 128-8-6 at equal n, k, and check weight. Reconstructed here from the archive row with the group table exported by research/kit/groups/cayley_table.g; n, k, and the check weight match the row, and the reconstruction convention was checked by rebuilding five archive rows already on the board and finding each permutation-equivalent to its entry. The archive's d = 9 is a QDistRnd upper bound; this entry claims d <= 9 from its own witnesses (40,000 RIS trials per side on the NumPy backend, seed 20261017, X 9, Z 9), and 2 x 2,000,000 gf2_fast trials found nothing lighter than 9.
family 2bga-nonabelian (a tag, not a ranking)
locality unrestricted (computed from the layout)
weight class weight ≤ 6 (computed)

How this code was found

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

[[128,8,9]] two-block group algebra code over SmallGroup(64,47), a 2BGA archive baseline

Primary reference: arXiv:2306.16400 (Lin and Pryadko, Quantum two-block group algebra codes), companion enumeration archive github.com/QEC-pages/2BGA-codes @ 403d194c3f98, nonabelian row 64 47 8 9 [ 3 ] [ 2, 15, 26 ].

This is a reproduction, not a search. The code is the archive's; the entry is seeded as a literature baseline attributed to the paper's authors. What is new here is the check that the archive row rebuilds to the published n, k, and check weight, and a witness-backed distance measurement of our own.

Direction & hypothesis

Issue #1204's literature cross-check found that the board's codes/128-8-6.json ([[128,8,6]], weight 6, a Liang-Eberhardt-Chen baseline) is strictly dominated at the same n and k by an unseeded 2BGA archive row of equal check weight, and that a surrogate distance search left the archive's distance standing. Issue #3658 asks for those rows to be seeded through the gate as baselines, so the frontier shows the published code rather than the entry it dominates. This is one of them.

What was searched

No parameter search was run. The archive row was rebuilt from its published data alone:

1. The group table of SmallGroup(64,47) = C16 : C4 was exported with GAP 4.16.1 and the SmallGroups library 1.7.0 through the repository's own research/kit/groups/cayley_table.g, elements in GAP's Elements(G) order with the identity first, into research/kit/groups/smallgroup_64_47.json. 2. a and b are the archive's element index lists (the identity is implicit in the archive's lists), converted to 0-based indices [0, 2] and [0, 1, 14, 25], and the code is research/kit/group_algebra.build_2bga_small_group(64, 47, [0, 2], [0, 1, 14, 25]): H_X = [L(a) | R(b)], H_Z = [R(b)^T | L(a)^T]. 3. n = 128, k = 8, and check weight 6 match the row (the filename of the archive file records total row weight 6 with a of weight 2), and H_X H_Z^T = 0.

The reconstruction convention (1-based GAP element indices, identity implicit unless listed, left action for a and right action for b) was checked before trusting it: the archive rows that research/provenance/derived.json matches to five board entries (96-4-10, 60-4-8, 72-8-8, 192-12-14, 180-4-15) were rebuilt the same way, and each came out permutation-equivalent to its board entry under nauty's canonical form with the permutation verified on the row spaces.

Evidence trail

The archive's distance 9 is a QDistRnd probabilistic upper bound. This entry carries its own witnesses from the kit's RIS search, 40,000 trials per side on the NumPy backend at seed 20261017:

| side | witness weight | depth | status | |---|---|---|---| | X | 9 | 40,000 RIS trials, seed 20261017 | upper bound | | Z | 9 | 40,000 RIS trials, seed 20261017 | upper bound |

Each witness was checked against the verifier's criteria before writing (in the kernel of the opposite checks, outside the row space of its own, weight equal to the claimed value). A deeper search with the gf2_fast accelerator, two seeds at 2,000,000 trials each, found nothing lighter than 9. The gate's own refutation pass found nothing lighter either. So the archive says d <= 9 probabilistically and this entry says d <= 9 witnessed; the confidence field records the upper bound, and nothing here is exact until verify/certify.py closes it.

Dead ends

None in the reproduction itself. Two facts about the archive worth knowing for anyone rebuilding rows from it: about 2,000 of its 72,637 rows list the identity explicitly as index 1 and the rest leave it implicit, and the filename weights (wt, wtL) are the way to tell, since the archive's README describes only the implicit form; and several rows are duplicated verbatim across files.

Tools

GAP 4.16.1 with the SmallGroups library 1.7.0 (through the passagemath-gap distribution) for the group table; research/kit/group_algebra.py for the construction; research/kit/surrogate.py for the witness search (NumPy backend for the recorded witnesses, gf2_fast for the deeper check); research/kit/submit.py for packaging; research/provenance/iso_common.py (pynauty) for the convention check; and the trusted gate verify/validate_candidate.py. Model: Claude Fable 5.1 (Claude Code), as provenance.model records; it ran the reproduction from the archive data under the submitter's direction.

Reproduction

./qldpc reproduce 128-8-9 --construction replays repro/128-8-9.json, which runs research/kit/rebuild.py --constructor group_algebra.build_2bga_small_group with {"order": 64, "gap_id": 47, "a": [0, 2], "b": [0, 1, 14, 25]} and compares the verifier's fingerprint with the committed entry.

Parity checks

X-checks 64 (max weight 6) · Z-checks 64 (max weight 6)
H_X (64 checks, sparse supports)
[0, 12, 64, 73, 110, 118] [1, 7, 64, 65, 79, 123] [0, 2, 66, 85, 94, 106] [3, 37, 67, 79, 112, 127] [4, 32, 65, 68, 89, 126] [5, 33, 69, 76, 109, 115] [6, 34, 70, 87, 94, 97] [7, 27, 70, 71, 76, 95] [8, 22, 72, 81, 89, 118] [9, 23, 68, 73, 100, 127] [10, 24, 74, 78, 85, 86] [11, 25, 66, 70, 75, 107] [3, 12, 76, 87, 104, 125] [4, 13, 75, 77, 86, 105] [5, 14, 64, 78, 93, 127] [6, 15, 69, 73, 79, 122] [16, 55, 80, 91, 100, 123] [2, 17, 81, 90, 101, 122] [14, 18, 66, 82, 121, 125] [19, 52, 83, 88, 95, 96] [20, 53, 71, 75, 84, 116] [21, 54, 85, 93, 98, 124] [1, 22, 66, 86, 104, 114] [23, 48, 84, 87, 96, 115] [24, 28, 65, 69, 88, 118] [25, 50, 64, 74, 89, 98] [26, 42, 90, 102, 110, 126] [27, 43, 67, 91, 98, 111] [28, 44, 71, 92, 97, 104] [29, 45, 93, 99, 105, 106] [30, 46, 77, 84, 94, 121] [31, 47, 69, 95, 101, 108] [16, 32, 71, 96, 114, 120] [17, 33, 67, 97, 113, 124] [18, 34, 81, 98, 110, 112] [19, 35, 68, 74, 99, 123] [20, 36, 65, 83, 100, 108] [21, 37, 70, 101, 115, 121] [13, 38, 72, 102, 108, 119] [35, 39, 77, 103, 107, 114] [15, 40, 78, 104, 106, 113] [41, 62, 74, 105, 111, 117] [9, 42, 77, 106, 120, 125] [10, 43, 72, 82, 101, 107] [11, 44, 79, 81, 91, 108] [45, 49, 73, 83, 109, 126] [46, 61, 68, 93, 110, 117] [8, 47, 75, 85, 97, 111] [48, 57, 80, 112, 117, 124] [49, 58, 87, 113, 116, 120] [50, 59, 76, 82, 88, 114] [51, 60, 83, 115, 119, 122] [38, 52, 80, 92, 111, 116] [39, 53, 89, 91, 102, 117] [40, 54, 82, 90, 109, 118] [41, 55, 84, 95, 107, 119] [36, 56, 86, 92, 99, 120] [29, 57, 90, 103, 119, 121] [30, 58, 100, 102, 112, 122] [31, 59, 67, 78, 92, 123] [26, 60, 94, 105, 116, 124] [61, 63, 96, 103, 109, 125] [56, 62, 72, 88, 103, 126] [51, 63, 80, 99, 113, 127]
H_Z (64 checks, sparse supports)
[0, 1, 14, 25, 64, 66] [1, 4, 24, 36, 65, 86] [2, 11, 18, 22, 66, 81] [3, 27, 33, 59, 67, 76] [4, 9, 35, 46, 68, 77] [5, 15, 24, 31, 69, 78] [6, 7, 11, 37, 70, 79] [7, 20, 28, 32, 65, 71] [8, 38, 43, 62, 72, 111] [0, 9, 15, 45, 73, 106] [10, 25, 35, 41, 74, 107] [11, 13, 20, 47, 75, 108] [5, 7, 12, 50, 64, 76] [13, 30, 39, 42, 77, 102] [10, 14, 40, 59, 78, 82] [1, 3, 15, 44, 79, 104] [16, 48, 52, 63, 80, 96] [8, 17, 34, 44, 81, 97] [18, 43, 50, 54, 82, 98] [19, 36, 45, 51, 83, 99] [20, 23, 30, 55, 84, 100] [2, 10, 21, 47, 85, 101] [10, 13, 22, 56, 72, 86] [6, 12, 23, 49, 73, 87] [19, 24, 50, 62, 74, 88] [4, 8, 25, 53, 75, 89] [17, 26, 54, 57, 90, 124] [16, 27, 44, 53, 71, 91] [28, 52, 56, 59, 88, 92] [14, 21, 29, 46, 93, 121] [2, 6, 30, 60, 94, 122] [7, 19, 31, 55, 95, 123] [19, 23, 32, 61, 68, 96] [6, 28, 33, 47, 69, 97] [21, 25, 27, 34, 70, 98] [29, 35, 56, 63, 99, 103] [9, 16, 36, 58, 100, 120] [17, 31, 37, 43, 67, 101] [26, 38, 53, 58, 102, 116] [39, 57, 61, 62, 103, 117] [12, 22, 28, 40, 104, 118] [13, 29, 41, 60, 105, 119] [2, 29, 40, 42, 90, 106] [11, 39, 43, 55, 91, 107] [31, 36, 38, 44, 92, 108] [5, 45, 54, 61, 93, 109] [0, 26, 34, 46, 94, 110] [27, 41, 47, 52, 95, 111] [3, 34, 48, 58, 87, 112] [33, 40, 49, 63, 109, 113] [22, 32, 39, 50, 89, 114] [5, 23, 37, 51, 115, 127] [20, 49, 52, 60, 83, 116] [41, 46, 48, 53, 84, 117] [0, 8, 24, 54, 85, 118] [38, 51, 55, 57, 80, 119] [32, 42, 49, 56, 120, 126] [18, 30, 37, 57, 112, 121] [15, 17, 51, 58, 113, 122] [1, 16, 35, 59, 114, 123] [21, 33, 48, 60, 115, 124] [12, 18, 42, 61, 110, 125] [4, 26, 45, 62, 105, 126] [3, 9, 14, 63, 125, 127]
Code ID 128-8-9 · download JSON · raw on GitHub