← back to the board
[[81,31,3]] d ≤
n
81
k
31
d
3
kd²/n
3.444
w
6
X/Z
1
g
0.0538
r
4.0
layers
1
swaps
98

Share this result

Distance

X/Z asymmetry 1 · d_X ≤ 3, d_Z ≤ 3 · 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 3 · witness weight 3 (claimed upper_bound)
witness operator (support, 3 qubits)
[68, 71, 79]
d_Z 3 · witness weight 3 (claimed upper_bound)
witness operator (support, 3 qubits)
[36, 46, 48]
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 4–6 (mean 5.8) · H_Z 4–6 (mean 5.88)
qubit degrees H_X 1–4 (mean 1.79) · H_Z 1–3 (mean 1.815)
trapping sets H_X (1,1)×25 (2,1)×106 (3,0)×77 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,1): 25 (1,2): 50 (1,3): 4 (1,4): 2 (2,1): 106 (2,2): 180 (2,3): 35 (2,4): 15 (3,0): 77 (3,1): 376 (3,2): 611 (3,3): 392 (3,4): 256 (3,5): 36 (3,6): 9
trapping sets H_Z (1,1)×24 (2,1)×109 (3,0)×77 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,1): 24 (1,2): 48 (1,3): 9 (2,1): 109 (2,2): 168 (2,3): 64 (2,4): 3 (3,0): 77 (3,1): 370 (3,2): 601 (3,3): 504 (3,4): 218 (3,5): 52 (3,6): 4
witness diameter X 3.0 · Z 3.1623 (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
X checkZ checkqubit site (81)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 98 nearest-neighbor SWAPs per round in total, at most 6 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, n_side=9, G=25, max_weight=6, t=2 detection, anchor radius 2.0, shared_t3 encoding, CaDiCaL 1.9.5 via python-sat) over 2D-local CSS codes on a 9x9 grid; each check is anchored at a grid site and acts within radius 2.0 of it, so the interaction radius is at most 4.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 1 of the 2D-local SAT t=2+ campaign (issue #2024); instance s9_G25_w6_t2. 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 single (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

[[81,31,3]]: 2D-local weight-6 CSS code from a t=2 SAT search on a 9x9 grid

Direction & hypothesis

Cell: weight-6 x local-2d-single. The t=2 SAT method had produced the d=3 records on the 4x4 to 8x8 grids (codes/16-6-3.json, codes/25-9-3.json, codes/36-12-3.json, codes/49-17-3.json, codes/64-22-3.json, and the [[64,24,3]] submitted separately from this campaign), each at the smallest number of checks per side G that is still satisfiable, one above the column-count bound G >= 2n/(w+1). At n=81 and weight 6 that bound is G >= 23.1, so G=25, 24, and 23 were queued; for a full-rank model k = n - 2G, so they force k >= 31, 33, and 35.

What was searched

research/local_sat.py build_local_cnf(9, 25, 6, 2, 2.0, shared_t3=True): 9x9 grid, 25 checks per side anchored within radius 2.0 (interaction radius at most 4.0 by construction), row weight at most 6, CSS commutation, nonzero syndrome for every weight <= 2 Pauli error (512,192 variables, 1,929,945 clauses, 4 s to build). CaDiCaL 1.9.5 via python-sat, conflict cap 20,000,000 per solve, 6 h wall cap per solve. First solve SAT after 1,224.6 s and 2,865,685 conflicts; ten distinct models in 5,086 s (14.9M conflicts), all k = 31 with d_ub = 3. Model 0 is the code here.

Evidence trail

research/kit/submit.make_submission (20,000 RIS trials per side) embedded a weight-3 X-logical and a weight-3 Z-logical; every weight <= 2 error is detected by the CNF, and an exhaustive enumeration after staging of every X-type and every Z-type error of weight at most 2 (3,321 supports per side, plain GF(2) column sums) found none with zero syndrome, so d = 3 exactly (labeled upper_bound by the kit). verify/validate_candidate.py: verifier ok (weight class weight-6, locality class local-2d-single, interaction radius 4.0), no lighter logical in 5,740 RIS trials, no exact or WL-equivalent board duplicate, label "advances the weight-6 x local-2d-single board". Check weights: X-rows one of weight 4, three of weight 5, twenty-one of weight 6; Z-rows one of weight 4, one of weight 5, twenty-three of weight 6. kd^2/n = 3.44. It is the first single-layer 2D-local d=3 point at n=81 in the weight-6 cell; the board's codes/81-1-9.json is a d=9 point at a different corner of the frontier.

Dead ends

G=23 (k >= 35) at the same grid and weight ran to its 20,000,000-conflict cap in 4,890 s with neither a model nor an UNSAT proof. G=24 (k >= 33) likewise ran to the cap in 6,435 s with no answer. The pattern from the smaller grids (yield one rung above the column-count bound, wall at the bound) therefore holds at 9x9 as well.

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, 20 min to the first model, RSS about 0.6 GB.

Reproduction

from pysat.solvers import Cadical195
from local_sat import build_local_cnf
cnf = build_local_cnf(9, 25, 6, 2, 2.0, shared_t3=True)
s = Cadical195(bootstrap_with=cnf["clauses"]); s.conf_budget(20_000_000)
assert s.solve_limited()   # about 20 min, 2,865,685 conflicts
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"], layers = 1; then make_submission.

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

Parity checks

X-checks 25 (max weight 6) · Z-checks 25 (max weight 6)
H_X (25 checks, sparse supports)
[61, 69, 70, 78, 79, 80] [51, 53, 60, 62, 71, 79] [8, 16, 17, 24, 25, 35] [63, 64, 65, 73, 74, 75] [13, 14, 22, 24, 32, 40] [23, 31, 33, 39, 40, 41] [11, 12, 18, 28, 30, 38] [56, 64, 66, 72, 73, 75] [4, 5, 6, 13, 16, 23] [2, 3, 4, 14, 21, 22] [15, 25, 31, 34, 42, 43] [6, 7, 14, 15, 17, 33] [45, 54, 55, 64, 72, 73] [59, 61, 68, 70, 71, 77] [58, 74, 75, 76, 77] [19, 27, 36, 38, 45, 46] [44, 52, 60, 61, 80] [30, 46, 47, 48, 56, 58] [42, 49, 50, 53, 61, 69] [37, 47, 55, 57, 65, 73] [0, 2, 3, 10, 12, 20] [39, 49, 59, 67] [0, 1, 3, 9, 11, 19] [9, 18, 20, 27, 29, 37] [26, 34, 35, 44, 62]
H_Z (25 checks, sparse supports)
[6, 7, 8, 16] [52, 70, 71, 78, 79, 80] [0, 1, 9, 10, 19, 27] [64, 65, 66, 73, 75, 76] [39, 41, 47, 48, 57, 67] [10, 20, 29, 30, 38, 46] [42, 43, 44, 52, 53, 62] [13, 15, 23, 24, 25, 33] [60, 68, 76, 77, 79, 80] [28, 38, 45, 47, 48, 55] [49, 53, 59, 60, 61, 69] [34, 43, 44, 50, 61, 70] [15, 21, 22, 31, 32, 33] [11, 19, 27, 30, 37, 47] [7, 16, 23, 26, 33, 35] [55, 63, 65, 72, 74, 75] [0, 18, 19, 20, 28, 36] [36, 46, 54, 56, 63, 64] [32, 39, 40, 42, 43, 49] [4, 5, 6, 14, 16, 24] [1, 2, 3, 4, 5, 21] [56, 57, 58, 65, 66, 74] [51, 59, 67, 68, 78, 79] [8, 15, 17, 26, 34] [3, 5, 11, 12, 13, 22]
Code ID 81-31-3 · download JSON · raw on GitHub