← back to the board
[[240,20,18]] d ≤
n
240
k
20
d
18
kd²/n
27.0
w
8
X/Z
1

Share this result

Distance

X/Z asymmetry 1 · d_X ≤ 18, d_Z ≤ 18 · 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 18 · witness weight 18 (claimed upper_bound)
witness operator (support, 18 qubits)
[0, 3, 19, 22, 24, 27, 132, 135, 144, 147, 151, 154, 157, 160, 163, 166, 170, 173]
d_Z 18 · witness weight 18 (claimed upper_bound)
witness operator (support, 18 qubits)
[72, 75, 79, 82, 85, 88, 91, 94, 98, 101, 110, 113, 122, 125, 218, 221, 223, 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 8 · H_Z 8
qubit degrees H_X 4 · H_Z 4
trapping sets H_X (1,4)×240 (2,6)×3360 (3,6)×1800 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,4): 240 (2,6): 3360 (3,6): 1800 (3,8): 65160 (3,10): 6720
trapping sets H_Z (1,4)×240 (2,6)×3360 (3,6)×1800 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,4): 240 (2,6): 3360 (3,6): 1800 (3,8): 65160 (3,10): 6720

Construction & provenance

authors @FarLab
provenance submitted through the challenge
novelty novelty not audited
construction bivariate bicycle on Z_20 x Z_6: A = 1 + x2y + x3y5 + x18, B = 1 + x5y2 + x6y5 + x7y; H_X = [A | B], H_Z = [B^T | A^T]
model Claude Claude Fable 5.1 (claimed, not verified)
date 2026-10-17
family bivariate bicycle (a tag, not a ranking)
locality unrestricted (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

[[240,20,18]] — weight-8 bivariate bicycle code on Z_20 x Z_6

Direction & hypothesis

Cell weight-8 x unrestricted, CSS board, n between 221 and 250. Before this filing the weight-8 frontier at n = 240 was the staircase 240-28-16, 240-24-17, 240-18-20, 240-10-22 (with 224-22-16 below it and 248-24-18 just above): at n <= 240 no entry with k >= 20 reached d = 18. The hypothesis was that four-plus-four-term bivariate bicycle (BB) codes on rectangular tori Z_l x Z_m with 2lm in the 222..400 band could fill the gap between 240-24-17 and 240-18-20. [[240,20,18]] does: no board entry has n <= 240, k >= 20, d >= 18 and check weight <= 8. It is a narrow step (it does not hold at k - 2 or d - 2: 240-18-20 and 240-24-17 sit on either side), and it is not a d-only gain (no board entry has the same n, k and weight).

What was searched

Random-support BB codes H_X = [A | B], H_Z = [B^T | A^T] with A and B four monomials each, both containing 1 (no loss of generality), on every torus Z_l x Z_m with l >= m >= 3 and 222 <= 2lm <= 400, the torus drawn uniformly from that list and the other three monomials of each polynomial uniformly from the torus.

Random supports rarely give k >= 16, so the sweep ran a parallel generate-and-rank prefilter: 100,000 draws (seed 55), of which 449 had k >= 16 and a connected Tanner graph (research/kit/prescreen.block_structure). Those went through research/kit/search.screen with the gf2_fast backend at 400 trials; 7 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. Five of the seven collapsed at 20,000 trials to dominated points; the two survivors were this code and a [[320,16,24]] on Z_40 x Z_4, filed separately.

Evidence trail

Witness-backed upper bound d <= 18, not an exact distance. The screen saw 19 at 400 trials; the bound fell to 18 at 20,000 trials and has not moved since. Both sides have a weight-18 logical.

| stage | trials per candidate | lightest logical | |---|---|---| | screen (gf2_fast, seed from fingerprint) | 400 | 19 | | confirm | 20,000 | 18 | | confirm | 200,000 | 18 | | confirm | 2,000,000 | 18 | | numpy lightest_logical, both sides, seeds 55 / 56 | 1,500 | X 18, Z 18 | | deep ladder, 3 fresh seeds (49438, 57357, 65276), gf2_fast | 10,000,000 each | 18, 18, 18 |

The ladder's weight-18 logicals are visibly structured (one of them is three runs of six consecutive qubits), consistent with a product-like logical rather than a sampling artefact.

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-8 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

  • Random-support BB at check weight 8 above n = 340: every screen-depth
  • survivor with k >= 16 fell below the 336-24-24 / 378-18-27 staircase by 20,000 trials.

  • Cyclic generalized-bicycle codes with a designed divisor g | x^m - 1,
  • weight-4 a and b (check weight 8): weight-4 multiples of g exist only for deg g <= ~22 at odd m from 111 to 200, and 4,000 such draws gave nothing advancing even at 400 trials.

  • Random-support 2BGA on non-abelian groups at check weight 8, 16,000
  • serial plus 150,000 prefiltered draws (2,881 with k >= 18): every screen-depth survivor collapsed by 20,000 trials (dominated by 248-24-18, 252-26-18, 292-22-23, 336-24-24, 378-18-27).

  • Non-abelian lifted products with 1 x 2 bases and weight-(3,2) entries
  • (check weight 8): 5,000 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, 40 forked processes for the generate + rank prefilter. Kit modules: research/kit/bb.py (build_bb), 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 12 CPU-hours on the sweeps above.

Reproduction

Torus Z_20 x Z_6 (x of order 20, y of order 6), terms (i, j) = x^i y^j:

A = 1 + x^2 y + x^3 y^5 + x^18, B = 1 + x^5 y^2 + x^6 y^5 + x^7 y.

import sys; sys.path[:0] = ["research/kit", "verify"]
from bb import build_bb
from css import compute_k
HX, HZ = build_bb(20, 6, [(0, 0), (2, 1), (3, 5), (18, 0)],
                  [(0, 0), (5, 2), (6, 5), (7, 1)])   # n = 240
assert compute_k(HX, HZ) == 20

Check sets match codes/240-20-18.json row for row in this order. The numpy surrogate.lightest_logical at 1,500 trials with seeds 55 (X side, pass (HX, HZ)) and 56 (Z side, pass (HZ, HX)) returns a weight-18 logical on each side.

Parity checks

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