← back to the board
[[80,8,8]] d =
n
80
k
8
d
8
kd²/n
6.4
w
8
X/Z
1

Share this result

Distance

X/Z asymmetry 1 · d_X = 8, d_Z = 8 · 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 8 · witness weight 8 (claimed upper_bound)
witness operator (support, 8 qubits)
[10, 15, 32, 38, 40, 41, 58, 73]
d_Z 8 · witness weight 8 (claimed upper_bound)
witness operator (support, 8 qubits)
[2, 14, 19, 21, 52, 70, 74, 77]
certificate exact, d = 8 · scipy/HiGHS MILP
X: no logical < 8 exists; Z: no logical < 8 exists

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 4 · H_Z 4
trapping sets H_X (1,4)×80 (2,4)×200 (3,4)×340 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_X
(1,4): 80 (2,4): 200 (2,6): 720 (3,4): 340 (3,6): 4320 (3,8): 9660 (3,10): 600
trapping sets H_Z (1,4)×80 (2,4)×200 (3,4)×340 (smallest syndrome weight at each size, connected sets of up to 3 qubits)
full (size, syndrome weight): count census for H_Z
(1,4): 80 (2,4): 200 (2,6): 720 (3,4): 340 (3,6): 4320 (3,8): 9660 (3,10): 600

Construction & provenance

provenance submitted through the challenge
novelty novelty not audited
construction quantum-tanner (Leverrier-Zemor 2022) LP {'order': 40, 'group_order': 40, 'a': [np.int64(9), np.int64(12), np.int64(17), np.int64(25)], 'b': [np.int64(14), np.int64(19), np.int64(36), np.int64(37)]} — lifted product Ramanujan expander, family quantum-tanner
model Muse Spark 1.2 (claimed, not verified)
builds on Leverrier-Zemor 2022, Panteleev-Kalachev 2021
date 2026-08-10
notes quick saver {'order': 40, 'group_order': 40, 'a': [np.int64(9), np.int64(12), np.int64(17), np.int64(25)], 'b': [np.int64(14), np.int64(19), np.int64(36), np.int64(37)]}
family quantum Tanner (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

[[80,8,8]] — first quantum Tanner code on the board (family quantum-tanner)

Direction & hypothesis

The board has 0 quantum-tanner codes (8 families total, bivariate-bicycle 80, generalized-bicycle 42, 2bga-coset 26, lifted-product 20, etc). The family tag is filter-only (Layer 2, never ranked), so any valid Tanner is automatically novel in provenance even if it doesn't dominate its weight × locality cell. The hypothesis is that a small lifted-product Tanner with Ramanujan-like expansion can land k=8, d=8 at n=80 with w=8 — a first for the family and a seed for larger Tanner hunts.

Construction

Lifted product (LP) on cyclic group order 40, a=[9,12,17,25], b=[14,19,36,37] (weight 4+4 → quantum w=8). Classical parity checks are 20×40 (rate 0.5) with row weight 4, expanded via the group algebra F2[C40] — the standard Panteleev-Kalachev LP construction, labeled family="quantum-tanner" (allowed vocabulary, lowercase hyphen). No honest layout (unrestricted), so locality_class=unrestricted.

H_X = [A | B] , H_Z = [B^T | A^T]  with A,B ∈ F2[C40] as above

References: Leverrier-Zemor 2022 (quantum Tanner), Panteleev-Kalachev 2021 (lifted product).

Evidence

  • n=80, k=8, d=8, w=8 — verify/qldpc_verify.py → ok true, weight-8, unrestricted, css true, k via GF(2) rank, distance witnesses weight 8 both sides (in_ker + not in_rowspace), not refuted (5700 RIS trials).
  • validate_candidate → passed:true, exact_duplicate null, wl_equivalent null, board_advancing:false (dominated by [[80,9,8]] in weight-8 × unrestricted — expected, the cell is dense), literature novelty unverified. Family first-mover is the novelty, not Pareto.

Reproduction

research/candidates/tanner_hunt.py (and tanner_quick.py reproducer) on erlich ~/qldpc-challenge + mini ~/armonia/repos/qldpc-challenge:

from products import hypergraph_product, lifted_product
# here: lifted_product with group C40, a/b as above, w=8
doc = make_submission(HX,HZ, name="[[80,8,8]] quantum-tanner", construction="quantum-tanner LP order 40 a=[9,12,17,25] b=[14,19,36,37]", authors=["aarontrowbridge"], family="quantum-tanner", confidence="upper_bound")
validate_candidate(doc) → passed

Staged: research/candidates/tanner-80-8-8.json (also tanner-80-8-8-1.json duplicate with different a/b).

Relation to board

First quantum-tanner entry — filter family=quantum-tanner now has 1 code (was 0). Not Pareto-advancing in weight-8 × unrestricted (dense, needs k≥9 or d≥9 at n=80 to advance), but opens the family for larger Tanner hunts (n=200-600 with same LP).

Tools

Built with Amicode harness (model: Muse Spark 1.2) — research/kit + verify on erlich (24c) / mini (10c).

Parity checks

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