← back to the board
[[240,24,8]] d ≤
n
240
k
24
d
8
kd²/n
6.4
w
6
X/Z
1

Share this result

Distance

X/Z asymmetry 1 · d_X ≤ 8, d_Z ≤ 8 · 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 8 · witness weight 8 (claimed upper_bound)
witness operator (support, 8 qubits)
[0, 32, 56, 64, 80, 96, 104, 112]
d_Z 8 · witness weight 8 (claimed upper_bound)
witness operator (support, 8 qubits)
[122, 130, 154, 186, 194, 202, 210, 226]
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 3 · H_Z 3
trapping sets H_X (1,3)×240 (2,4)×1800 (3,3)×120 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,3): 240 (2,4): 1800 (3,3): 120 (3,5): 17640 (3,7): 2400
trapping sets H_Z (1,3)×240 (2,4)×1800 (3,3)×120 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,3): 240 (2,4): 1800 (3,3): 120 (3,5): 17640 (3,7): 2400

Construction & provenance

authors @FarLab
provenance submitted through the challenge
novelty novelty not audited
construction two-block group algebra code on ZSZ(15,8,11) (kit group_algebra Cayley-table indices): a = [0, 41, 86], b = [0, 56, 72]; H_X = [L(a) | R(b)], H_Z = [R(b)^T | L(a)^T]
model Claude Claude Fable 5.1 (claimed, not verified)
date 2026-10-17
family generalized bicycle (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

[[240,24,8]] — two-block group-algebra code over C15 ⋊ C8 (ZSZ(15,8,11))

Direction & hypothesis

Cell weight-6 x unrestricted, CSS board, n between 221 and 300. The weight-6 frontier there ran 224-18-12, 224-12-16, 234-26-7, 240-16-14, 254-14-16, 270-30-7, 288-16-16: at n <= 240 the largest k with d >= 8 was 18 (224-18-12), and k >= 24 only existed at d <= 7 (234-26-7). The hypothesis was that two-block group-algebra (2BGA) codes on non-abelian groups of order 111 to 150 could put a k = 24, d = 8 point into that corner at check weight 6. [[240,24,8]] does: no board entry has n <= 240, k >= 24, d >= 8 and check weight <= 6, and the k - 2 margin holds as well ([[240,22,8]] is not dominated either).

What was searched

Random-support 2BGA codes H_X = [L(a) | R(b)], H_Z = [R(b)^T | L(a)^T] with a, b three group elements each, both containing the identity (no loss of generality: multiplying a or b by a group element permutes qubits and checks). The group menu was every non-abelian group of order 111 to 150 the kit builds from Cayley-table constructors: dihedral D_n, metacyclic C_n ⋊_r C_k (up to two actions r per (n, k)), C_m x D_k, C_m x A4, C_m x S4, C_m x A5, D_a x D_b, C_m x (C_n ⋊ C_k) for eight small metacyclic factors, S5, and the split metacyclic presentations ZSZ(l1, l2, q) of research/kit/nonabelian_lp.py.

Random supports almost never give usable k (a generic weight-3 element is invertible on the higher-dimensional irreducible blocks of F_2[G]), so the sweep ran a parallel generate-and-rank prefilter: 400,000 draws at 222 <= n <= 300 (seed 61), of which 519 had k >= 16 and were connected. Those 519 went through research/kit/search.screen with the gf2_fast backend at 400 trials; 8 advanced the board frontier at screen depth and were confirmed at 20,000 / 200,000 / 2,000,000 fast trials (research/kit/surrogate.distance_rand_witness, pair depth 8), dropping a candidate as soon as its running bound stopped advancing. Besides this code the survivors were a [[270,24,8]] on ZSZ(45,3,16) (dominated by this one) and six draws of a [[252,20,10]] on presentations of C_21 x S_3 (filed separately).

Evidence trail

Witness-backed upper bound d <= 8, not an exact distance. The bound was 8 at 400 trials and never moved; both sides have a weight-8 logical.

| stage | trials per candidate | lightest logical | |---|---|---| | screen (gf2_fast, seed from fingerprint) | 400 | 8 | | confirm | 20,000 | 8 | | confirm | 200,000 | 8 | | confirm | 2,000,000 | 8 | | numpy lightest_logical, both sides, seeds 61 / 62 | 1,500 | X 8, Z 8 | | deep ladder, 3 fresh seeds (48247, 56166, 64085), gf2_fast | 10,000,000 each | 8, 8, 8 (X side) |

verify/validate_candidate.py (through research/kit/coordination.py's gate wrapper) returned passed: true, board_advancing: true, `d_only_gain: false`, label "advances the weight-6 x unrestricted board". Literature novelty is unverified; board-relative novelty comes from verify/validate_candidate.py (fingerprint and Weisfeiler-Leman dedup against every board entry found nothing).

Dead ends

  • Cyclic generalized-bicycle codes with a designed divisor g | x^m - 1 at
  • check weight 6 (weight-3 a and b): at odd m from 111 to 200 and deg g >= 8 there are essentially no weight-3 multiples of g; the few that exist are lifts from a subring Z_{m/s} and give direct sums.

  • Random-support 2BGA at check weight 8, 16,000 serial draws plus 150,000
  • prefiltered draws (2,881 with k >= 18) across 222 <= n <= 400: every screen-depth survivor collapsed by 20,000 trials (dominated by 248-24-18, 252-20-21, 252-26-18, 292-22-23, 336-24-24, 378-18-27 and similar).

  • Random-support bivariate bicycle codes at check weight 6 and 8: 13,000
  • serial draws found nothing; 200,000 prefiltered weight-6 draws (185 with k >= 12) gave only points dominated by the 2BGA finds above.

  • Non-abelian lifted products with 1 x 2 bases: weight-(3,2) entries
  • (check weight 8), 5,000 draws, nothing advancing; weight-(2,2) entries (check weight 6) give k = |G| + 6 at d = 6, already dominated by the board's 258-88-6.

  • 2BGA coset codes with weight-3 supports on S5, A6, S5 x C2, S6, A5 x C_m,
  • S4 x C_m: 3,000 serial draws, nothing advancing.

Tools

Model: Claude Fable 5.1 (Claude Code agent, contributor-driven workflow). Compute: one Brev n2d-highcpu-64 box; gf2_fast at 30 threads for the confirmation rungs and the ladder, 30 forked processes for the generate + rank prefilter. Kit modules: research/kit/nonabelian_lp.py (zsz), research/kit/group_algebra.py (metacyclic, build_2bga), research/kit/search.py (screen), research/kit/surrogate.py (distance_rand_witness, lightest_logical), research/kit/prescreen.py (direct-sum and board dedup), research/kit/submit.py, research/kit/coordination.py. About 0.3 CPU-hours on this code; about 10 CPU-hours on the sweeps above.

Reproduction

The group is research/kit/nonabelian_lp.py's zsz(15, 8, 11), i.e. research/kit/group_algebra.py's metacyclic(15, 8, 11): C_15 ⋊ C_8 with y x y^-1 = x^11, element x^i y^j at index 8 i + j, identity at 0 (11 has order 2 mod 15, so y^2 is central and the group has order 120). With x = (1, 0), y = (0, 1):

a = 1 + x^5 y + x^10 y^6 (indices 0, 41, 86), b = 1 + x^7 + x^9 (indices 0, 56, 72).

import sys; sys.path[:0] = ["research/kit", "verify"]
from nonabelian_lp import zsz
from group_algebra import build_2bga
from css import compute_k
mul = zsz(15, 8, 11)
HX, HZ = build_2bga(mul, [0, 41, 86], [0, 56, 72])   # n = 240, k = 24
assert compute_k(HX, HZ) == 24

Check sets match codes/240-24-8.json row for row in this order. Witness search: `surrogate.distance_rand_witness(HX, HZ, trials=2_000_000, seed=61000003 + 2_000_000, backend="fast", pair_depth=8)` returns a weight-8 logical; the numpy lightest_logical at 1,500 trials with seeds 61 (X) and 62 (Z) gives the two witnesses in the JSON.

Parity checks

X-checks 120 (max weight 6) · Z-checks 120 (max weight 6)
H_X (120 checks, sparse supports)
[0, 42, 47, 120, 168, 184] [1, 40, 43, 121, 169, 225] [2, 41, 44, 122, 170, 186] [3, 42, 45, 123, 171, 227] [4, 43, 46, 124, 172, 188] [5, 44, 47, 125, 173, 229] [6, 40, 45, 126, 174, 190] [7, 41, 46, 127, 175, 231] [8, 15, 50, 128, 176, 192] [8, 9, 51, 129, 177, 233] [9, 10, 52, 130, 178, 194] [10, 11, 53, 131, 179, 235] [11, 12, 54, 132, 180, 196] [12, 13, 55, 133, 181, 237] [13, 14, 48, 134, 182, 198] [14, 15, 49, 135, 183, 239] [16, 58, 103, 136, 184, 200] [17, 59, 96, 121, 137, 185] [18, 60, 97, 138, 186, 202] [19, 61, 98, 123, 139, 187] [20, 62, 99, 140, 188, 204] [21, 63, 100, 125, 141, 189] [22, 56, 101, 142, 190, 206] [23, 57, 102, 127, 143, 191] [24, 66, 71, 144, 192, 208] [25, 64, 67, 129, 145, 193] [26, 65, 68, 146, 194, 210] [27, 66, 69, 131, 147, 195] [28, 67, 70, 148, 196, 212] [29, 68, 71, 133, 149, 197] [30, 64, 69, 150, 198, 214] [31, 65, 70, 135, 151, 199] [32, 39, 74, 152, 200, 216] [32, 33, 75, 137, 153, 201] [33, 34, 76, 154, 202, 218] [34, 35, 77, 139, 155, 203] [35, 36, 78, 156, 204, 220] [36, 37, 79, 141, 157, 205] [37, 38, 72, 158, 206, 222] [38, 39, 73, 143, 159, 207] [7, 40, 82, 160, 208, 224] [0, 41, 83, 145, 161, 209] [1, 42, 84, 162, 210, 226] [2, 43, 85, 147, 163, 211] [3, 44, 86, 164, 212, 228] [4, 45, 87, 149, 165, 213] [5, 46, 80, 166, 214, 230] [6, 47, 81, 151, 167, 215] [48, 90, 95, 168, 216, 232] [49, 88, 91, 153, 169, 217] [50, 89, 92, 170, 218, 234] [51, 90, 93, 155, 171, 219] [52, 91, 94, 172, 220, 236] [53, 92, 95, 157, 173, 221] [54, 88, 93, 174, 222, 238] [55, 89, 94, 159, 175, 223] [56, 63, 98, 120, 176, 224] [56, 57, 99, 161, 177, 225] [57, 58, 100, 122, 178, 226] [58, 59, 101, 163, 179, 227] [59, 60, 102, 124, 180, 228] [60, 61, 103, 165, 181, 229] [61, 62, 96, 126, 182, 230] [62, 63, 97, 167, 183, 231] [31, 64, 106, 128, 184, 232] [24, 65, 107, 169, 185, 233] [25, 66, 108, 130, 186, 234] [26, 67, 109, 171, 187, 235] [27, 68, 110, 132, 188, 236] [28, 69, 111, 173, 189, 237] [29, 70, 104, 134, 190, 238] [30, 71, 105, 175, 191, 239] [72, 114, 119, 120, 136, 192] [73, 112, 115, 121, 177, 193] [74, 113, 116, 122, 138, 194] [75, 114, 117, 123, 179, 195] [76, 115, 118, 124, 140, 196] [77, 116, 119, 125, 181, 197] [78, 112, 117, 126, 142, 198] [79, 113, 118, 127, 183, 199] [2, 80, 87, 128, 144, 200] [3, 80, 81, 129, 185, 201] [4, 81, 82, 130, 146, 202] [5, 82, 83, 131, 187, 203] [6, 83, 84, 132, 148, 204] [7, 84, 85, 133, 189, 205] [0, 85, 86, 134, 150, 206] [1, 86, 87, 135, 191, 207] [10, 55, 88, 136, 152, 208] [11, 48, 89, 137, 193, 209] [12, 49, 90, 138, 154, 210] [13, 50, 91, 139, 195, 211] [14, 51, 92, 140, 156, 212] [15, 52, 93, 141, 197, 213] [8, 53, 94, 142, 158, 214] [9, 54, 95, 143, 199, 215] [18, 23, 96, 144, 160, 216] [16, 19, 97, 145, 201, 217] [17, 20, 98, 146, 162, 218] [18, 21, 99, 147, 203, 219] [19, 22, 100, 148, 164, 220] [20, 23, 101, 149, 205, 221] [16, 21, 102, 150, 166, 222] [17, 22, 103, 151, 207, 223] [26, 104, 111, 152, 168, 224] [27, 104, 105, 153, 209, 225] [28, 105, 106, 154, 170, 226] [29, 106, 107, 155, 211, 227] [30, 107, 108, 156, 172, 228] [31, 108, 109, 157, 213, 229] [24, 109, 110, 158, 174, 230] [25, 110, 111, 159, 215, 231] [34, 79, 112, 160, 176, 232] [35, 72, 113, 161, 217, 233] [36, 73, 114, 162, 178, 234] [37, 74, 115, 163, 219, 235] [38, 75, 116, 164, 180, 236] [39, 76, 117, 165, 221, 237] [32, 77, 118, 166, 182, 238] [33, 78, 119, 167, 223, 239]
H_Z (120 checks, sparse supports)
[0, 56, 72, 120, 161, 206] [1, 17, 73, 121, 162, 207] [2, 58, 74, 122, 163, 200] [3, 19, 75, 123, 164, 201] [4, 60, 76, 124, 165, 202] [5, 21, 77, 125, 166, 203] [6, 62, 78, 126, 167, 204] [7, 23, 79, 127, 160, 205] [8, 64, 80, 128, 129, 214] [9, 25, 81, 129, 130, 215] [10, 66, 82, 130, 131, 208] [11, 27, 83, 131, 132, 209] [12, 68, 84, 132, 133, 210] [13, 29, 85, 133, 134, 211] [14, 70, 86, 134, 135, 212] [15, 31, 87, 128, 135, 213] [16, 72, 88, 136, 217, 222] [17, 33, 89, 137, 218, 223] [18, 74, 90, 138, 216, 219] [19, 35, 91, 139, 217, 220] [20, 76, 92, 140, 218, 221] [21, 37, 93, 141, 219, 222] [22, 78, 94, 142, 220, 223] [23, 39, 95, 143, 216, 221] [24, 80, 96, 144, 185, 230] [25, 41, 97, 145, 186, 231] [26, 82, 98, 146, 187, 224] [27, 43, 99, 147, 188, 225] [28, 84, 100, 148, 189, 226] [29, 45, 101, 149, 190, 227] [30, 86, 102, 150, 191, 228] [31, 47, 103, 151, 184, 229] [32, 88, 104, 152, 153, 238] [33, 49, 105, 153, 154, 239] [34, 90, 106, 154, 155, 232] [35, 51, 107, 155, 156, 233] [36, 92, 108, 156, 157, 234] [37, 53, 109, 157, 158, 235] [38, 94, 110, 158, 159, 236] [39, 55, 111, 152, 159, 237] [40, 96, 112, 121, 126, 160] [41, 57, 113, 122, 127, 161] [42, 98, 114, 120, 123, 162] [43, 59, 115, 121, 124, 163] [44, 100, 116, 122, 125, 164] [45, 61, 117, 123, 126, 165] [46, 102, 118, 124, 127, 166] [47, 63, 119, 120, 125, 167] [0, 48, 104, 134, 168, 209] [1, 49, 65, 135, 169, 210] [2, 50, 106, 128, 170, 211] [3, 51, 67, 129, 171, 212] [4, 52, 108, 130, 172, 213] [5, 53, 69, 131, 173, 214] [6, 54, 110, 132, 174, 215] [7, 55, 71, 133, 175, 208] [8, 56, 112, 142, 176, 177] [9, 57, 73, 143, 177, 178] [10, 58, 114, 136, 178, 179] [11, 59, 75, 137, 179, 180] [12, 60, 116, 138, 180, 181] [13, 61, 77, 139, 181, 182] [14, 62, 118, 140, 182, 183] [15, 63, 79, 141, 176, 183] [0, 16, 64, 145, 150, 184] [17, 65, 81, 146, 151, 185] [2, 18, 66, 144, 147, 186] [19, 67, 83, 145, 148, 187] [4, 20, 68, 146, 149, 188] [21, 69, 85, 147, 150, 189] [6, 22, 70, 148, 151, 190] [23, 71, 87, 144, 149, 191] [8, 24, 72, 158, 192, 233] [25, 73, 89, 159, 193, 234] [10, 26, 74, 152, 194, 235] [27, 75, 91, 153, 195, 236] [12, 28, 76, 154, 196, 237] [29, 77, 93, 155, 197, 238] [14, 30, 78, 156, 198, 239] [31, 79, 95, 157, 199, 232] [16, 32, 80, 166, 200, 201] [33, 81, 97, 167, 201, 202] [18, 34, 82, 160, 202, 203] [35, 83, 99, 161, 203, 204] [20, 36, 84, 162, 204, 205] [37, 85, 101, 163, 205, 206] [22, 38, 86, 164, 206, 207] [39, 87, 103, 165, 200, 207] [24, 40, 88, 169, 174, 208] [41, 89, 105, 170, 175, 209] [26, 42, 90, 168, 171, 210] [43, 91, 107, 169, 172, 211] [28, 44, 92, 170, 173, 212] [45, 93, 109, 171, 174, 213] [30, 46, 94, 172, 175, 214] [47, 95, 111, 168, 173, 215] [32, 48, 96, 137, 182, 216] [49, 97, 113, 138, 183, 217] [34, 50, 98, 139, 176, 218] [51, 99, 115, 140, 177, 219] [36, 52, 100, 141, 178, 220] [53, 101, 117, 142, 179, 221] [38, 54, 102, 143, 180, 222] [55, 103, 119, 136, 181, 223] [40, 56, 104, 190, 224, 225] [1, 57, 105, 191, 225, 226] [42, 58, 106, 184, 226, 227] [3, 59, 107, 185, 227, 228] [44, 60, 108, 186, 228, 229] [5, 61, 109, 187, 229, 230] [46, 62, 110, 188, 230, 231] [7, 63, 111, 189, 224, 231] [48, 64, 112, 193, 198, 232] [9, 65, 113, 194, 199, 233] [50, 66, 114, 192, 195, 234] [11, 67, 115, 193, 196, 235] [52, 68, 116, 194, 197, 236] [13, 69, 117, 195, 198, 237] [54, 70, 118, 196, 199, 238] [15, 71, 119, 192, 197, 239]
Code ID 240-24-8 · download JSON · raw on GitHub