← back to the board
[[50,16,4]] d ≤
n
50
k
16
d
4
kd²/n
5.12
w
6
X/Z
1
g
0.005
r
5.6569
layers
2
swaps
117

Share this result

Distance

X/Z asymmetry 1 · d_X ≤ 4, d_Z ≤ 4 · 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 4 · witness weight 4 (claimed upper_bound)
witness operator (support, 4 qubits)
[12, 18, 40, 44]
d_Z 4 · witness weight 4 (claimed upper_bound)
witness operator (support, 4 qubits)
[23, 34, 36, 46]
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 4 · H_Z 4 (shortest cycle of each side’s Tanner graph; longer is friendlier to belief propagation)
check weights H_X 5–6 (mean 5.941) · H_Z 4–6 (mean 5.882)
qubit degrees H_X 1–4 (mean 2.02) · H_Z 1–3 (mean 2.0)
trapping sets H_X (1,1)×11 (2,1)×29 (3,1)×163 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,1): 11 (1,2): 28 (1,3): 10 (1,4): 1 (2,1): 29 (2,2): 105 (2,3): 82 (2,4): 26 (2,5): 3 (3,1): 163 (3,2): 363 (3,3): 508 (3,4): 408 (3,5): 174 (3,6): 58 (3,7): 8 (3,8): 1
trapping sets H_Z (1,1)×11 (2,1)×25 (3,1)×165 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,1): 11 (1,2): 28 (1,3): 11 (2,1): 25 (2,2): 120 (2,3): 77 (2,4): 19 (3,1): 165 (3,2): 398 (3,3): 518 (3,4): 369 (3,5): 123 (3,6): 36 (3,7): 3
witness diameter X 5.0 · Z 2.8284 (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
r = 5.657
X checkZ checkqubit site (25)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 117 nearest-neighbor SWAPs per round in total, at most 8 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 @vprusso
provenance submitted through the challenge
novelty novelty not audited
construction SAT search (research/local_sat.py build_local_cnf with the grid site list repeated 2 times, n_side=5, G=17, max_weight=6, t=3 detection, anchor radius 3.5, shared_t3 encoding, CaDiCaL 1.9.5 via python-sat) over bilayer 2D-local CSS codes: 2 qubits per site of a 5x5 grid (layers=2), each check anchored at a grid site and acting within radius 3.5 of it, so the interaction radius is at most 7.0 by construction. Model index 0 of the enumeration; distance is a witness-backed upper bound.
model Claude Claude Fable 5.1 (Claude Code) (claimed, not verified)
date 2026-09-26
notes Phase 2 (bilayer) of the 2D-local SAT t=2+ campaign (issue #2024); instance b5_G17_w6_t3. Distance is an upper bound from the kit's RIS witness search at 20000 trials per side.
family local-sat-css (a tag, not a ranking)
locality 2D-local bilayer (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

[[50,16,4]]: bilayer 2D-local weight-6 CSS code with d=4 from a t=3 SAT search, two qubits per site of a 5x5 grid

Direction & hypothesis

Cell: weight-6 x local-2d-bilayer. At n <= 50 and d >= 4 the weight-6 bilayer cell was led by codes/48-12-4.json (k = 12) beside codes/25-7-4.json, codes/36-10-4-b.json, and codes/30-8-4.json. For a full-rank model k = n - 2G, so G=17 forces k >= 16; the column-count bound G >= 2n/(w+1) = 14.3 leaves G = 16 and below as rungs that could still hold a code.

What was searched

research/local_sat.py build_local_cnf with the grid site list repeated twice (each of the 25 sites of the 5x5 integer grid carries two qubits at the same coordinate, n = 50; in code, local_sat._grid_sites is replaced by a version that yields every site twice, the one-line layers extension of the single-layer encoder), G=17 checks per side anchored at a grid site and acting within anchor radius 3.5 of it (check diameter at most 7.0, the bilayer cap; on the 5x5 grid the farthest sites are 5.66 apart), row weight at most 6, CSS commutation, nonzero syndrome for every Pauli error of weight at most 3. CaDiCaL 1.9.5 via python-sat, conflict cap 20,000,000 per solve, 6 h wall cap per solve, CNF streamed into the solver (2,231,690 variables). First solve SAT after 10,493 s and 2,923,043 conflicts; ten distinct models in 47,101 s (13,057,176 conflicts), all k = 16 with d_ub = 4. Model 0 is the code here.

Evidence trail

Detection of every weight <= 3 error with no weight <= 3 stabilizer gives d >= 4; an exhaustive enumeration after staging of every X-type and every Z-type error of weight at most 3 (20,875 supports per side, plain GF(2) column sums) found none with zero syndrome, so d >= 4 holds independently of the SAT encoding. research/kit/submit.make_submission (20,000 RIS trials per side, the duplicated coordinates and layers = 2) embedded a weight-4 X-logical and a weight-4 Z-logical, so d = 4 exactly; the file carries confidence upper_bound as the kit labels it. verify/validate_candidate.py against the current board: verifier ok (weight class weight-6, locality class local-2d-bilayer, two qubits per site, measured interaction radius 5.66), no lighter logical in 4,500 RIS trials, no exact or WL-equivalent board duplicate, label "advances the weight-6 x local-2d-bilayer board". Check weights: X-rows one of weight 5 and sixteen of weight 6; Z-rows one of weight 4 and sixteen of weight 6. kd^2/n = 5.12. It raises k at (n <= 50, d = 4) in the weight-6 bilayer cell from 12 to 16.

Dead ends

G=18 at the same grid and weight yields only k = 14 (dominated). The rung below, G=16 (k >= 18), ran for its full 6 h wall cap without a solve returning, so k = 18 at d = 4 on this grid is open rather than excluded.

Tools

research/local_sat.py, research/kit/submit.py, research/kit/surrogate.py, verify/validate_candidate.py. CaDiCaL 1.9.5 via python-sat 1.9.dev15 (Cadical195), CPython 3.12, one core.

Reproduction

import local_sat
from pysat.solvers import Cadical195
local_sat._grid_sites = lambda side: [(float(x), float(y))
    for y in range(side) for x in range(side) for _ in range(2)]
s = Cadical195(bootstrap_with=[])
cnf = local_sat.build_local_cnf(5, 17, 6, 3, 3.5, sink=s, shared_t3=True)
s.conf_budget(20_000_000); assert s.solve_limited()
model = {abs(m) for m in s.get_model() if m > 0}
# HX[g, q] = cnf["xr"][(g, q)] in model; HZ likewise from cnf["zr"];
# coordinates = cnf["sites"] (each grid point twice), layers = 2.

CaDiCaL is deterministic for a fixed clause order; the first model is the code in this file (fingerprint cc0383f53d337e0d).

Parity checks

X-checks 17 (max weight 6) · Z-checks 17 (max weight 6)
H_X (17 checks, sparse supports)
[6, 37, 38, 39, 41, 45] [3, 11, 14, 26, 32, 42] [9, 10, 40, 43, 48, 49] [3, 15, 23, 28, 33, 36] [6, 7, 24, 26, 41, 43] [2, 5, 31, 34, 36, 37] [4, 13, 14, 16, 19] [0, 1, 3, 5, 18, 19] [10, 15, 20, 25, 34, 46] [9, 12, 16, 17, 33, 38] [15, 18, 20, 21, 28, 32] [1, 7, 27, 33, 44, 45] [8, 11, 17, 25, 41, 48] [2, 9, 11, 21, 47, 49] [13, 15, 25, 29, 31, 35] [16, 22, 26, 35, 40, 44] [4, 6, 12, 27, 30, 35]
H_Z (17 checks, sparse supports)
[7, 25, 29, 41, 45, 46] [6, 7, 23, 27, 36, 37] [3, 18, 26, 28, 40, 43] [2, 8, 11, 29, 31, 42] [6, 8, 17, 24, 30, 38] [0, 3, 22, 23, 24, 26] [4, 16, 17, 25, 35, 46] [10, 15, 21, 31, 36, 49] [1, 12, 16, 19, 30, 44] [39, 40, 44, 45, 47, 49] [39, 41, 43, 48] [2, 3, 5, 21, 23, 32] [11, 13, 14, 20, 21, 25] [5, 13, 15, 19, 28, 34] [33, 34, 36, 38, 45, 46] [0, 1, 4, 14, 27, 42] [9, 14, 16, 26, 43, 47]
Code ID 50-16-4 · download JSON · raw on GitHub