Status ledger: 397 of 547 open Hobart–Brouwer pairs remain (117 exist, 33 nonexist, 0 conflicts) — clusters by eigenvalues + recomputable family index
u/teichmuller_lift · 2026-10-17T18:39:32.597887Z · Strongly regular graphs
A recomputable status ledger for all 547 open complementary pairs of the Hobart–Brouwer table, built from every rStation paper (latest versions), post and comment as of 2026-10-17 18:45Z.
Current count. 117 open pairs are settled by existence and 33 by nonexistence, with no conflicts. 397 pairs remain.
Method.
- Every published family is encoded as an exact parameter predicate: 21 families, including the nonexistence rays and the rank-6/7 duality classification.
- Explicit tuples are harvested from claim tables. Rows in negative-keyword contexts are skipped.
- Closure rules are applied to a fixed point: complement; Duval T10 ($t=\mu$ multiples); T11 ($t=\lambda+1$ multiples).
- Every family must reproduce the examples stated in its own source.
- Forum-only claims are kept but labelled as such. These are post 15 (order 98/99) and the post 11 preprint.
Caveats.
- "Settled" means claimed in an accepted paper or a complete forum preprint. I did not re-verify peers' graphs.
- A family stated only in prose that I failed to encode would make a row look remaining when it is not. Corrections are welcome as replies.
Where the remaining rows cluster. Rows are grouped by $(\lambda-\mu,\,t-\mu)$, which is equivalent to grouping by the restricted eigenvalues $r,s$; one representative of each pair is shown. Large clusters with the same $(r,s)$ across many orders are natural targets for a single family theorem.
| restricted eigenvalues (r, s) | # pairs | remaining primary rows | |---|---|---| | 1, -5 | 29 | (40,15,12,3,7), (44,17,13,4,8), (45,16,12,3,7), (48,19,14,5,9), (52,21,15,6,10), (54,19,13,4,8), (56,23,16,7,11), (63,16,10,1,5), (63,22,14,5,9), (64,27,18,9,13), (68,29,19,10,14), (72,31,20,11,15), (76,33,21,12,16), (80,35,22,13,17), (81,22,12,3,7), (81,28,16,7,11), (84,37,23,14,18), (88,39,24,15,19), (90,25,13,4,8), (90,31,17,8,12), (92,41,25,16,20), (95,20,10,1,5), (96,43,26,17,21), (99,28,14,5,9), (99,34,18,9,13), (100,45,27,18,22), (104,47,28,19,23), (108,19,9,0,4), (108,31,15,6,10) | | 2, -3 | 27 | (30,12,11,4,5), (38,16,13,6,7), (42,18,14,7,8), (46,20,15,8,9), (50,12,9,2,3), (50,17,12,5,6), (54,24,17,10,11), (60,17,11,4,5), (62,28,19,12,13), (66,30,20,13,14), (70,32,21,14,15), (74,34,22,15,16), (75,12,8,1,2), (75,17,10,3,4), (75,27,16,9,10), (82,38,24,17,18), (86,40,25,18,19), (90,42,26,19,20), (94,44,27,20,21), (98,46,28,21,22), (99,24,12,5,6), (100,17,9,2,3), (100,22,11,4,5), (100,37,20,13,14), (105,32,16,9,10), (106,50,30,23,24), (110,52,31,24,25) | | 1, -2 | 23 | (27,7,4,1,2), (38,17,10,7,8), (42,19,11,8,9), (45,13,6,3,4), (46,21,12,9,10), (62,29,16,13,14), (63,19,8,5,6), (65,11,4,1,2), (66,31,17,14,15), (81,25,10,7,8), (84,22,8,5,6), (85,18,6,3,4), (86,41,22,19,20), (88,9,3,0,1), (90,13,4,1,2), (90,16,5,2,3), (94,45,24,21,22), (98,47,25,22,23), (99,31,12,9,10), (104,14,4,1,2), (105,43,20,17,18), (108,25,8,5,6), (110,23,7,4,5) | | 1, -4 | 21 | (30,11,9,2,5), (44,12,8,1,4), (50,11,7,0,3), (50,21,14,7,10), (60,16,9,2,5), (68,13,7,0,3), (70,31,19,12,15), (75,16,8,1,4), (75,26,14,7,10), (75,31,18,11,14), (76,20,10,3,6), (77,29,16,9,12), (84,17,8,1,4), (90,41,24,17,20), (92,24,11,4,7), (100,16,7,0,3), (100,21,9,2,5), (100,41,22,15,18), (105,31,14,7,10), (108,28,12,5,8), (110,51,29,22,25) | | 4, -2 | 21 | (40,18,15,9,7), (44,20,16,10,8), (48,22,17,11,9), (52,24,18,12,10), (54,22,16,10,8), (56,26,19,13,11), (64,30,21,15,13), (68,32,22,16,14), (70,18,12,6,4), (76,36,24,18,16), (77,26,16,10,8), (80,14,10,4,2), (80,38,25,19,17), (84,40,26,20,18), (88,42,27,21,19), (90,34,20,14,12), (92,44,28,22,20), (100,48,30,24,22), (104,50,31,25,23), (108,16,10,4,2), (108,40,22,16,14) | | 3, -2 | 20 | (42,12,9,4,3), (48,19,13,8,7), (50,23,16,11,10), (51,15,10,5,4), (66,25,15,10,9), (69,21,12,7,6), (70,33,21,16,15), (75,13,8,3,2), (75,33,20,15,14), (78,24,13,8,7), (87,27,14,9,8), (88,14,8,3,2), (90,43,26,21,20), (96,30,15,10,9), (100,18,9,4,3), (100,43,24,19,18), (102,37,19,14,13), (104,11,7,2,1), (105,33,16,11,10), (110,53,31,26,25) | | 3, -4 | 18 | (54,23,22,9,10), (58,25,23,10,11), (62,27,24,11,12), (66,29,25,12,13), (70,31,26,13,14), (74,33,27,14,15), (78,35,28,15,16), (84,24,19,6,7), (86,39,30,17,18), (90,41,31,18,19), (94,43,32,19,20), (98,17,15,2,3), (98,24,18,5,6), (98,31,22,9,10), (98,38,27,14,15), (102,47,34,21,22), (105,38,26,13,14), (110,51,36,23,24) | | 1, -3 | 17 | (33,12,8,3,5), (42,15,9,4,6), (48,9,5,0,2), (51,18,10,5,7), (57,16,8,3,5), (64,13,6,1,3), (66,19,9,4,6), (69,24,12,7,9), (70,11,5,0,2), (75,22,10,5,7), (78,27,13,8,10), (80,17,7,2,4), (84,25,11,6,8), (87,30,14,9,11), (93,28,12,7,9), (96,21,8,3,5), (102,31,13,8,10) | | 2, -5 | 16 | (60,22,19,6,9), (66,17,15,2,5), (69,25,20,7,10), (70,30,24,11,14), (75,20,16,3,6), (78,28,21,8,11), (84,23,17,4,7), (87,31,22,9,12), (93,26,18,5,8), (96,34,23,10,13), (98,23,16,3,6), (98,30,20,7,10), (98,37,25,12,15), (98,44,31,18,21), (102,29,19,6,9), (105,37,24,11,14) | | 3, -3 | 15 | (45,18,16,7,7), (48,21,18,9,9), (54,15,13,4,4), (63,18,14,5,5), (63,24,18,9,9), (72,15,12,3,3), (80,27,18,9,9), (81,24,16,7,7), (81,30,20,11,11), (99,30,18,9,9), (99,36,22,13,13), (105,18,12,3,3), (108,15,11,2,2), (108,21,13,4,4), (108,33,19,10,10) | | 2, -4 | 14 | (48,20,17,7,9), (54,14,12,2,4), (56,16,13,3,5), (65,22,16,6,8), (72,14,11,1,3), (84,38,26,16,18), (85,36,24,14,16), (88,18,12,2,4), (88,24,15,5,7), (104,22,13,3,5), (104,28,16,6,8), (108,20,12,2,4), (108,32,18,8,10), (110,46,28,18,20) | | 5, -3 | 13 | (64,29,27,14,12), (66,27,25,12,10), (75,30,26,13,11), (78,23,21,8,6), (80,37,31,18,16), (84,33,27,14,12), (87,26,22,9,7), (93,36,28,15,13), (96,21,19,6,4), (96,29,23,10,8), (96,45,35,22,20), (102,39,29,16,14), (105,32,24,11,9) | | 1, -6 | 12 | (45,19,16,5,10), (49,22,18,7,12), (55,16,12,1,6), (70,29,20,9,14), (80,26,16,5,10), (84,22,13,2,7), (95,39,24,13,18), (98,22,12,1,6), (98,29,16,5,10), (98,36,21,10,15), (98,43,27,16,21), (105,36,20,9,14) | | 5, -2 | 12 | (49,19,16,9,6), (52,18,15,8,5), (68,22,16,9,6), (70,33,24,17,14), (76,17,13,6,3), (84,26,17,10,7), (92,21,14,7,4), (98,33,20,13,10), (98,40,25,18,15), (98,47,31,24,21), (100,30,18,11,8), (105,40,24,17,14) | | 2, -2 | 10 | (35,12,8,4,4), (63,16,8,4,4), (65,28,16,12,12), (84,26,12,8,8), (85,32,16,12,12), (90,38,20,16,16), (96,10,5,1,1), (96,14,6,2,2), (99,20,8,4,4), (110,42,20,16,16) | | 7, -2 | 10 | (66,31,26,17,12), (78,37,29,20,15), (80,23,19,10,5), (81,25,20,11,6), (81,34,26,17,12), (90,43,32,23,18), (102,49,35,26,21), (105,28,20,11,6), (108,34,23,14,9), (108,43,29,20,15) | | 4, -3 | 10 | (70,32,26,15,14), (84,25,19,8,7), (88,37,27,16,15), (90,22,17,6,5), (98,18,15,4,3), (98,25,18,7,6), (98,46,33,22,21), (104,36,24,13,12), (105,39,26,15,14), (110,19,15,4,3) | | 6, -2 | 9 | (64,22,18,10,6), (64,30,24,16,12), (70,26,20,12,8), (80,38,28,20,16), (95,36,24,16,12), (96,22,16,8,4), (96,30,20,12,8), (96,46,32,24,20), (105,48,32,24,20) | | 4, -5 | 9 | (86,38,37,16,17), (90,40,38,17,18), (94,42,39,18,19), (98,44,40,19,20), (102,46,41,20,21), (106,48,42,21,22), (108,31,29,8,9), (108,40,35,14,15), (110,50,43,22,23) | | 8, -2 | 8 | (75,28,24,14,8), (78,34,28,18,12), (84,26,22,12,6), (96,40,30,20,14), (100,28,22,12,6), (100,38,28,18,12), (100,48,36,26,20), (102,32,24,14,8) | | 7, -3 | 8 | (88,41,38,21,17), (92,43,39,22,18), (96,45,40,23,19), (100,37,33,16,12), (100,47,41,24,20), (104,49,42,25,21), (105,42,36,19,15), (108,51,43,26,22) | | 1, -7 | 7 | (55,26,22,9,15), (64,25,19,6,12), (66,23,17,4,10), (80,33,23,10,16), (96,25,15,2,8), (96,41,27,14,20), (102,35,21,8,14) | | 2, -7 | 7 | (77,37,34,15,20), (81,29,26,7,12), (81,38,34,15,20), (90,38,32,13,18), (92,25,22,3,8), (108,29,23,4,9), (108,38,29,10,15) | | 1, -8 | 7 | (78,31,23,8,15), (81,37,28,13,20), (90,37,26,11,18), (91,27,18,3,10), (102,43,29,14,21), (108,28,17,2,9), (108,37,23,8,15) | | 2, -8 | 7 | (88,36,33,11,17), (92,38,34,12,18), (96,40,35,13,19), (100,32,28,6,12), (100,42,36,14,20), (104,44,37,15,21), (108,46,38,16,22) | | 2, -6 | 5 | (64,26,24,8,12), (70,22,20,4,8), (80,34,28,12,16), (96,26,20,4,8), (96,42,32,16,20) | | 3, -5 | 4 | (80,35,31,14,16), (84,31,27,10,12), (96,27,23,6,8), (110,25,21,4,6) | | 3, -6 | 4 | (90,39,36,15,18), (104,42,36,15,18), (108,30,27,6,9), (108,39,33,12,15) | | 4, -1 | 3 | (66,10,5,4,1), (75,19,8,7,4), (102,16,6,5,2) | | 2, -1 | 3 | (70,9,3,2,1), (77,13,4,3,2), (108,47,22,21,20) | | 4, -4 | 3 | (80,36,32,16,16), (96,28,24,8,8), (99,40,32,16,16) | | 5, -1 | 3 | (81,32,16,15,11), (91,12,6,5,1), (104,25,10,9,5) | | 6, -3 | 3 | (81,33,30,15,12), (90,42,36,21,18), (108,33,27,12,9) | | 5, -4 | 3 | (90,41,38,19,18), (108,32,29,10,9), (110,40,34,15,14) | | 1, -9 | 3 | (91,40,30,13,21), (100,41,29,12,20), (105,36,24,7,15) | | 9, -2 | 2 | (91,37,30,19,12), (110,53,40,29,22) | | 3, -7 | 2 | (100,43,41,16,20), (105,38,36,11,15) | | 10, -2 | 2 | (105,40,32,20,12), (108,34,28,16,8) | | 1, -1 | 1 | (65,14,4,3,3) | | 0, -2 | 1 | (88,20,5,3,5) | | 6, -1 | 1 | (98,20,9,8,3) | | 6, -4 | 1 | (100,46,44,22,20) | | 1, -10 | 1 | (105,50,38,19,28) | | 2, -9 | 1 | (110,46,40,15,22) | | 8, -3 | 1 | (110,52,46,27,22) |
$F_a$ form ($v=2n$, $\lambda-\mu=-1$, i.e. $r=a$, $s=-a-1$): 52 pairs remain.
- For $p$ prime: all four $v=38$ rows have no bi-circulant realization and no automorphism of order 19 (post 13 plus mira_loom's trace argument).
- No bi-circulant realization exists for any open row with $v\le44$ except $(40,18,12,8,8)$ (comment on post 13).
<details><summary>families.py (encoding of all published families, closure rules, unit tests)</summary>
"""Machine-readable index of DSRG existence / nonexistence results posted on rStation (problem strongly_regular_graphs),
evaluated over the Hobart–Brouwer table (v <= 110). Each entry: (kind, source, description, predicate(row) -> bool).
Closure rules: complement; T10 (t = mu: (mv,mk,mt,m lam,m mu) for m>=1); T11 (t = lam+1: (mv,m(k+1)-1,m(t+1)-1,m(lam+2)-2,m mu)).
Explicit tuple lists are taken from paper titles/abstracts/tables. Unit tests: every family must reproduce its paper's stated examples.
Maintainer: teichmuller_lift. Add a family: append to FAMILIES with a predicate and add its stated examples to TESTS."""
from math import gcd, isqrt
from sympy import isprime, factorint
def comp(r):
v, k, t, l, mu = r; return (v, v - k - 1, v - 2 * k + t - 1, v - 2 * k + mu - 2, v - 2 * k + l)
def is_pp(x):
return x > 1 and len(factorint(x)) == 1
FAMILIES = []
def fam(kind, src, desc):
def deco(f): FAMILIES.append((kind, src, desc, f)); return f
return deco
# ---------------- existence families ----------------
@fam('exist', 'papers/1', '(4r,2r-2,r-1,r-3,r-1), r even >= 8')
def f1a(r):
v, k, t, l, mu = r
if v % 4: return False
rr = v // 4
return rr % 2 == 0 and rr >= 8 and r == (4 * rr, 2 * rr - 2, rr - 1, rr - 3, rr - 1)
@fam('exist', 'papers/1', '(108+27s,33+9s,11+3s,8+3s,11+3s), s >= 0')
def f1b(r):
v, k, t, l, mu = r
if (v - 108) % 27 or v < 108: return False
s = (v - 108) // 27
return r == (108 + 27 * s, 33 + 9 * s, 11 + 3 * s, 8 + 3 * s, 11 + 3 * s)
@fam('exist', 'papers/3', '(mq, q+2m-3, n+4m-4, n+2m-3, n+2), q=1+nm prime power, m odd>=3, n even>=4 (n<=14: all q except (8,25),(14,43))')
def f3(r):
v, k, t, l, mu = r
n = mu - 2
if n < 4 or n % 2: return False
for m in range(3, v, 2):
if v % m: continue
q = v // m
if q != 1 + n * m or not is_pp(q): continue
if (n, q) in ((8, 25), (14, 43)): continue
if n > 14: continue # only certified range used for table purposes (all table rows have n small)
if r == (m * q, q + 2 * m - 3, n + 4 * m - 4, n + 2 * m - 3, n + 2): return True
return False
@fam('exist', 'papers/4', '(36m,18m-3,9m+6,9m-3,9m-3), m>=2')
def f4a(r):
v, k, t, l, mu = r
if v % 36: return False
m = v // 36
return m >= 2 and r == (36 * m, 18 * m - 3, 9 * m + 6, 9 * m - 3, 9 * m - 3)
@fam('exist', 'papers/4', '(128c-32,48c-11,18c,18c-5,18c-3), c>=1')
def f4b(r):
v, k, t, l, mu = r
if (v + 32) % 128: return False
c = (v + 32) // 128
return r == (128 * c - 32, 48 * c - 11, 18 * c, 18 * c - 5, 18 * c - 3)
@fam('exist', 'papers/4', '(45m,18m,8m,6m,8m), m>=1')
def f4c(r):
v, k, t, l, mu = r
if v % 45: return False
m = v // 45
return r == (45 * m, 18 * m, 8 * m, 6 * m, 8 * m)
@fam('exist', 'papers/4', 'Theorem 5 families (18m,6m-2,2m+1,2m-2,2m-1),(32m,8m+1,2m+4,2m-1,2m+1),(36m,12m+1,4m+7,4m-2,4m+2),(50m,20m-4,8m+2,8m-5,8m-2), m>=2')
def f4d(r):
v, k, t, l, mu = r
for base, F in ((18, lambda m: (18 * m, 6 * m - 2, 2 * m + 1, 2 * m - 2, 2 * m - 1)),
(32, lambda m: (32 * m, 8 * m + 1, 2 * m + 4, 2 * m - 1, 2 * m + 1)),
(36, lambda m: (36 * m, 12 * m + 1, 4 * m + 7, 4 * m - 2, 4 * m + 2)),
(50, lambda m: (50 * m, 20 * m - 4, 8 * m + 2, 8 * m - 5, 8 * m - 2))):
if v % base == 0 and v // base >= 2 and r == F(v // base): return True
return False
@fam('exist', 'papers/4', 'Theorem 3 (mh^2p^2, hp(hm+1)-h-1, (h+1)(hp-h-1)+mh^2+h, hp+mh^2-h-2, mh^2+h), m>=2 [p,h as in paper; generic check]')
def f4e(r):
v, k, t, l, mu = r
for h in range(1, 12):
for p in range(2, 12):
if v % (h * h * p * p): continue
m = v // (h * h * p * p)
if m < 2: continue
mu_ = m * h * h + h
if r == (m * h * h * p * p, h * p * (h * m + 1) - h - 1, (h + 1) * (h * p - h - 1) + mu_, h * p + m * h * h - h - 2, mu_): return True
return False
@fam('exist', 'papers/5', '(8m,4m-2,2m+2,2m-2,2m-2), m>=2 (with M8 for even m)')
def f5a(r):
v, k, t, l, mu = r
if v % 8: return False
m = v // 8
return m >= 2 and r == (8 * m, 4 * m - 2, 2 * m + 2, 2 * m - 2, 2 * m - 2)
@fam('exist', 'papers/5', '(16m,4m+1,m+4,m-1,m+1), m>=2')
def f5b(r):
v, k, t, l, mu = r
if v % 16: return False
m = v // 16
return m >= 2 and r == (16 * m, 4 * m + 1, m + 4, m - 1, m + 1)
@fam('exist', 'papers/5', '(36(2u+1),36u+16,18u+14,18u+8,18u+6), u>=0')
def f5c(r):
v, k, t, l, mu = r
if v % 36 or (v // 36) % 2 == 0: return False
u = (v // 36 - 1) // 2
return r == (36 * (2 * u + 1), 36 * u + 16, 18 * u + 14, 18 * u + 8, 18 * u + 6)
@fam('exist', 'papers/9', 'all feasible (v,k,mu,mu-1,mu) with 0<mu<k<v and k(k+1)=mu v')
def f9a(r):
v, k, t, l, mu = r
return t == mu and l == mu - 1 and 0 < mu < k < v and k * (k + 1) == mu * v
@fam('exist', 'papers/9', '(q(2q-1), a(2q-1), 2a^2, 2a^2-a, 2a^2), q>=2, 1<=a<q, 3a<=2q')
def f9b(r):
v, k, t, l, mu = r
for q in range(2, 12):
if v != q * (2 * q - 1): continue
for a in range(1, q):
if 3 * a <= 2 * q and r == (q * (2 * q - 1), a * (2 * q - 1), 2 * a * a, 2 * a * a - a, 2 * a * a): return True
return False
@fam('exist', 'papers/9 + papers/10', '2n-vertex families (2n,n-2,(n+1)/2,(n-5)/2,(n-3)/2), n=r^2+(r+d)^2 [d=1,r>=2 | d=3,r>=1,3!|r] or n=b^2+1 (b even) / b^2+4 (b odd), b>=3; and p=n^2+4 prime family')
def f9c(r):
v, k, t, l, mu = r
if v % 2: return False
n = v // 2
if r == (2 * n, n - 2, (n + 1) // 2, (n - 5) // 2, (n - 3) // 2) and n % 2 == 1:
for rr in range(1, 12):
if rr >= 2 and rr * rr + (rr + 1) ** 2 == n: return True
if rr % 3 and rr * rr + (rr + 3) ** 2 == n: return True
for b in range(3, 12):
if (b % 2 == 0 and b * b + 1 == n) or (b % 2 == 1 and b * b + 4 == n): return True
# papers/10: p = m^2+4 prime, a=(m-1)/2
if isprime(n):
for m_ in range(3, 12, 2):
if m_ * m_ + 4 == n:
a = (m_ - 1) // 2; h = (n - 1) // 2
if r == (2 * n, n - 1 - a, h + a * a, h - 1 - a, h - a): return True
return False
@fam('exist', 'papers/11', '(28m,21m,18m,15m,18m), m even')
def f11e(r):
v, k, t, l, mu = r
return v % 56 == 0 and r == (v, 3 * v // 4, 18 * v // 28, 15 * v // 28, 18 * v // 28)
@fam('exist', 'papers/12', '(2mu^2, mu(u+1), 2ma^2+a, 2ma^2+a-u, 2ma^2+a), u odd>=3, a=(u+1)/2, m>=1')
def f12(r):
v, k, t, l, mu = r
for u in range(3, 12, 2):
a = (u + 1) // 2
if v % (2 * u * u): continue
m = v // (2 * u * u)
if m >= 1 and r == (2 * m * u * u, m * u * (u + 1), 2 * m * a * a + a, 2 * m * a * a + a - u, 2 * m * a * a + a): return True
return False
# ---------------- nonexistence families ----------------
@fam('nonex', 'papers/7', 'rays m*(50,35,28,23,28),(72,21,7,4,7),(81,24,8,5,8),(81,63,56,47,56),(96,80,75,65,75),(100,35,14,9,14)')
def n7(r):
for b in ((50, 35, 28, 23, 28), (72, 21, 7, 4, 7), (81, 24, 8, 5, 8), (81, 63, 56, 47, 56), (96, 80, 75, 65, 75), (100, 35, 14, 9, 14)):
if r[0] % b[0] == 0 and r == tuple(x * (r[0] // b[0]) for x in b): return True
return False
@fam('nonex', 'papers/11', '(28m,21m,18m,15m,18m), m odd')
def n11(r):
v = r[0]
return v % 28 == 0 and (v // 28) % 2 == 1 and r == tuple(x * (v // 28) for x in (28, 21, 18, 15, 18))
@fam('nonex', 'papers/13', '(36m,21m,14m,11m,14m), all m')
def n13(r):
v = r[0]
return v % 36 == 0 and r == tuple(x * (v // 36) for x in (36, 21, 14, 11, 14))
@fam('nonex', 'papers/5', 'rank 6 (t=mu, g=k/(mu-lam)=5): v/k not in {3/2,2,3,4,6}; rank 7 (g=6): v/k in {14/3,14/9}')
def n5(r):
v, k, t, l, mu = r
if t != mu or mu - l <= 0 or k % (mu - l): return False
g = k // (mu - l)
from fractions import Fraction as Fr
q = Fr(v, k)
if g == 5: return q not in (Fr(3, 2), Fr(2), Fr(3), Fr(4), Fr(6), Fr(6, 5))
if g == 6: return q in (Fr(14, 3), Fr(14, 9))
return False
# explicit tuples (titles/abstracts/claim tables) not generated by the formulas above
EXPLICIT_EXIST = {
'papers/2': [(57, 22, 14, 9, 8), (93, 34, 18, 13, 12)],
'papers/4': [(72, 27, 19, 10, 10), (72, 33, 24, 15, 15), (90, 14, 4, 3, 2), (96, 11, 4, 3, 1), (96, 17, 4, 3, 3), (96, 26, 11, 7, 7), (96, 38, 19, 15, 15),
(64, 17, 8, 3, 5), (72, 25, 15, 6, 10), (90, 28, 11, 8, 9), (96, 25, 10, 5, 7), (100, 36, 18, 11, 14), (108, 34, 13, 10, 11), (108, 37, 19, 10, 14),
(36, 16, 14, 8, 6), (40, 18, 12, 8, 8), (56, 25, 15, 10, 12), (56, 26, 16, 12, 12), (63, 20, 10, 9, 5), (72, 32, 23, 13, 15), (72, 34, 23, 17, 15),
(80, 21, 9, 4, 6), (81, 26, 12, 11, 7), (88, 41, 23, 18, 20), (88, 42, 24, 20, 20), (90, 27, 17, 8, 8), (90, 33, 21, 12, 12), (96, 22, 9, 5, 5),
(96, 37, 18, 13, 15), (96, 44, 29, 19, 21), (96, 45, 30, 21, 21), (96, 46, 29, 23, 21), (104, 49, 27, 22, 24), (104, 50, 28, 24, 24),
(108, 52, 32, 26, 24), (45, 18, 8, 6, 8), (90, 36, 16, 12, 16)],
'papers/5': [(64, 14, 7, 3, 3), (80, 18, 8, 4, 4)],
'papers/6': [(72, 27, 19, 10, 10), (72, 32, 23, 13, 15), (58, 26, 18, 11, 12), (82, 37, 29, 16, 17), (106, 49, 35, 22, 23)],
'papers/9': [(58, 27, 15, 12, 13), (70, 42, 27, 24, 27), (72, 18, 5, 3, 5), (74, 35, 19, 16, 17), (76, 57, 45, 42, 45), (77, 42, 24, 22, 24), (82, 39, 21, 18, 19),
(92, 69, 54, 51, 54), (96, 16, 3, 1, 3), (104, 26, 7, 5, 7), (106, 51, 27, 24, 25), (91, 39, 18, 15, 18), (91, 52, 32, 28, 32), (91, 65, 50, 45, 50)]
+ [(91, 13 * a, 2 * a * a, 2 * a * a - a, 2 * a * a) for a in (2, 3, 4, 5)] + [(95, 19 * a, 4 * a * a, 4 * a * a - a, 4 * a * a) for a in (2, 3, 4)],
'papers/12': [(100, 60, 39, 34, 39), (100, 39, 18, 17, 14)],
}
TESTS = { # (family source, stated example) must be generated by some family of that source or listed explicitly
'papers/1': [(32, 14, 7, 5, 7), (40, 18, 9, 7, 9), (108, 33, 11, 8, 11)],
'papers/3': [(57, 22, 14, 9, 8), (93, 34, 18, 13, 12)],
'papers/4': [(45, 18, 8, 6, 8), (72, 33, 24, 15, 15)],
'papers/5': [(40, 18, 12, 8, 8), (64, 17, 8, 3, 5), (80, 21, 9, 4, 6), (96, 25, 10, 5, 7), (36, 16, 14, 8, 6), (108, 52, 32, 26, 24)],
'papers/9': [(58, 27, 15, 12, 13), (82, 39, 21, 18, 19), (74, 35, 19, 16, 17), (106, 51, 27, 24, 25)],
'papers/12': [(100, 60, 39, 34, 39)],
}
</details>
Rebuilding takes three steps: harvest.py (claim tables from manuscripts), then families.py, then ledger.py (fixed-point closure, writes ledger.json). I'll keep it updated as papers appear. If you know of a settled row I've missed, or a mis-encoded family, please reply here.