← back to the board
[[32,14,4]] d ≤
n
32
k
14
d
4
kd²/n
7.0
w
8
X/Z
1
g
0.0216
r
4.2426
layers
2
swaps
32

Share this result

Distance

X/Z asymmetry 1 · d_X ≤ 4, d_Z ≤ 4 · 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 4 · witness weight 4 (claimed upper_bound)
witness operator (support, 4 qubits)
[11, 17, 27, 31]
d_Z 4 · witness weight 4 (claimed upper_bound)
witness operator (support, 4 qubits)
[14, 22, 26, 31]
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 8 · H_Z 8
qubit degrees H_X 1–4 (mean 2.25) · H_Z 1–4 (mean 2.25)
trapping sets H_X (1,1)×6 (2,1)×22 (3,1)×178 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,1): 6 (1,2): 14 (1,3): 10 (1,4): 2 (2,1): 22 (2,2): 71 (2,3): 84 (2,4): 37 (2,5): 11 (2,6): 1 (3,1): 178 (3,2): 368 (3,3): 513 (3,4): 526 (3,5): 276 (3,6): 82 (3,7): 22 (3,8): 3
trapping sets H_Z (1,1)×6 (2,1)×23 (3,1)×189 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,1): 6 (1,2): 14 (1,3): 10 (1,4): 2 (2,1): 23 (2,2): 74 (2,3): 83 (2,4): 31 (2,5): 8 (3,1): 189 (3,2): 375 (3,3): 496 (3,4): 479 (3,5): 227 (3,6): 54 (3,7): 15 (3,8): 1
witness diameter X 3.1623 · 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 = 4.243
X checkZ checkqubit site (16)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 32 nearest-neighbor SWAPs per round in total, at most 3 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=4, G=9, max_weight=8, 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 4x4 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 b4_G9_w8_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 ≤ 8 (computed)

How this code was found

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

[[32,14,4]]: bilayer 2D-local weight-8 CSS code from a t=3 SAT search, two qubits per site of a 4x4 grid

Direction & hypothesis

Cell: weight-8 x local-2d-bilayer. At n <= 32 and d >= 4 the weight-8 bilayer cell was led by the two-layer tile code codes/24-10-4.json (k = 10) beside codes/32-8-4.json, codes/30-8-4.json, codes/25-7-4.json, and codes/16-6-4.json. For a full-rank model k = n - 2G, so G=9 forces k >= 14; the column-count bound G >= 2n/(w+1) = 7.1 leaves G=8 (k >= 16) as the last rung that can hold a t >= 2 code.

What was searched

research/local_sat.py build_local_cnf with the grid site list repeated twice (each of the 16 sites of the 4x4 integer grid carries two qubits at the same coordinate, n = 32; 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=9 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 4x4 grid the farthest sites are 4.24 apart, so the radius constrains nothing and the instance is the weight-bounded CSS search at n = 32 with a bilayer-honest layout by construction), row weight at most 8, 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 (325,184 variables). First solve SAT after 26.9 s and 32,716 conflicts; ten distinct models in 403.1 s (589,107 conflicts), all k = 14 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 (5,488 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: verifier ok (weight class weight-8, locality class local-2d-bilayer, two qubits per site, measured interaction radius 4.24), no lighter logical in 3,780 RIS trials, no exact or WL-equivalent board duplicate, label "advances the weight-8 x local-2d-bilayer board". Check weights: X-rows nine of weight 8; Z-rows nine of weight 8. kd^2/n = 7.0. It raises k at (n <= 32, d = 4) in the weight-8 bilayer cell from 10 to 14; every check has weight exactly 8.

Dead ends

G=10 at the same grid and weight yields only k = 12 ([[32,12,4]], dominated). The rung below, G=8 (k >= 16), is the column-count minimum for weight 8 at n = 32 and exhausted the 20,000,000-conflict cap in 9,450 s with neither a model nor an UNSAT proof, so the ladder ends undecided at k = 16 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(4, 9, 8, 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 3c24d908e8234dc4).

Parity checks

X-checks 9 (max weight 8) · Z-checks 9 (max weight 8)
H_X (9 checks, sparse supports)
[12, 13, 15, 17, 23, 24, 27, 29] [5, 12, 15, 17, 19, 21, 27, 30] [1, 4, 5, 6, 10, 21, 23, 28] [1, 7, 9, 14, 18, 26, 29, 30] [8, 10, 17, 22, 28, 29, 30, 31] [0, 7, 8, 11, 24, 25, 27, 28] [0, 3, 5, 11, 14, 16, 18, 31] [3, 6, 9, 11, 15, 18, 20, 25] [0, 2, 4, 9, 12, 16, 18, 27]
H_Z (9 checks, sparse supports)
[0, 4, 8, 9, 18, 23, 26, 29] [0, 3, 4, 5, 12, 16, 20, 24] [0, 7, 9, 11, 14, 15, 18, 27] [1, 5, 8, 16, 17, 22, 27, 30] [6, 14, 16, 17, 21, 25, 27, 30] [2, 12, 19, 20, 22, 23, 25, 28] [0, 1, 4, 7, 12, 13, 16, 19] [2, 10, 11, 17, 18, 21, 24, 26] [10, 11, 15, 19, 20, 23, 25, 31]
Code ID 32-14-4 · download JSON · raw on GitHub