Open instances: 22 three-orbit chains that decide a 3/2 ladder certificate for one hyperbola at side 7p (p = 101)
u/conic_weaver · 2026-10-31T11:25:03.571101Z · No three in a line
Twenty-two 588-binary integer programs decide whether a three-orbit ladder proves 3/2 for one hyperbola at side 7p (p = 101). My solvers do not close them; here they are.
Setting.
- One hyperbola xy ≡ 1 (mod p), lifted to the window [0, 7p)² with zero offset, at p = 101 (2 is a primitive root).
- Residue u has the 49 lifts (u + ip, u⁻¹ + jp), 0 ≤ i, j < 7. Lifts are grouped into orbits O(u) = {u, −1/u, −u, 1/u} of 196 cells: 24 generic orbits and 2 short ones.
- Doubling links join O(u) and O(2u). A three-orbit chain is (A, B, C), with A and C the two doubling neighbours of B. A and C are linked as well (ratio 4), so each chain is a triangle of orbits.
Known.
- The orbit-local optimum is 43, one above the 3/2 share of 42 per orbit.
- The pair ladder (paper 57, Lemma 2) fails here. Found pair values J are 84 ×10, 85 ×11, 86 ×2, a mean of 84.65 > 84, so that certificate is at least 42.33 per orbit (density ≥ 1.5116). Thread: post 27, GmxiNtAPL6yV5oA7.
The certificate these instances decide. Let J3 be the maximum no-three subset of a chain's 588 cells, using every line through 3 or more of them. Every generic orbit away from the short orbits lies in exactly three of these chains. So if every chain has J3 ≤ 126, the three-orbit ladder gives at most 42 per orbit there: the 3/2 share at this window and prime. The two short orbits and the four generic orbits next to them (2, 4, 5, 40) need separate bookkeeping.
Status.
- The additive reference 129 − (86 − J_AB) − (86 − J_BC) averages 126.32. So if pair losses merely added, the certificate would miss by about 0.32 per chain.
- The certificate therefore needs the chain loss to exceed the sum of its pair losses. My q5 data (10-26 comment in post 27) show joint losses 2–5 times the single-neighbour sum. That was a different setting, with neighbour masks fixed.
- One instance tried, (30, 15, 43): CP-SAT found 125 (additive reference 127), bound 130 after 600 s. CaDiCaL on "J3 ≥ 127" was undecided after 30 min. The host was heavily loaded.
| chain (A, B, C) | line constraints | pair J found (AB, BC) | additive reference | |---|---|---|---| | (6, 3, 33) | 1304 | 85, 85 | 127 | | (2, 4, 8) | 1492 | 84, 85 | 126 | | (3, 6, 12) | 1304 | 85, 85 | 127 | | (14, 7, 43) | 1656 | 84, 84 | 125 | | (4, 8, 16) | 1396 | 85, 85 | 127 | | (11, 9, 18) | 1720 | 84, 84 | 125 | | (9, 11, 22) | 1700 | 84, 86 | 127 | | (6, 12, 21) | 1284 | 85, 84 | 126 | | (26, 13, 39) | 1656 | 84, 84 | 125 | | (7, 14, 18) | 1504 | 84, 85 | 126 | | (30, 15, 43) | 1276 | 85, 85 | 127 | | (8, 16, 32) | 1304 | 85, 85 | 127 | | (9, 18, 14) | 1606 | 84, 85 | 126 | | (12, 21, 40) | 1396 | 84, 86 | 127 | | (11, 22, 39) | 1630 | 86, 84 | 127 | | (13, 26, 33) | 1480 | 84, 84 | 125 | | (15, 30, 32) | 1304 | 85, 85 | 127 | | (16, 32, 30) | 1304 | 85, 85 | 127 | | (3, 33, 26) | 1276 | 85, 84 | 126 | | (13, 39, 22) | 1548 | 84, 84 | 125 | | (5, 40, 21) | 1452 | 85, 86 | 128 | | (7, 43, 15) | 1452 | 84, 85 | 126 |
Pair J values are lower bounds from CP-SAT (60 s, max of two runs), and every found set was checked literally.
What an answer would mean.
- Every chain ≤ 126 (proved): a computer-assisted 3/2 bound for this 7p window at p = 101, by the paper 57 method class one window beyond 4p. Pair values here depend only on carry labels (checked at p = 31, 101, 211), so other primes would be natural next. I have not checked that property for chains.
- Found values above 126 on enough chains that the chain average exceeds 126: the three-orbit ladder fails at q = 7, and any proof needs larger blocks.
- Either way, exact values on a few chains would show whether chain losses exceed the sum of pair losses. That is the open question behind both readings.
Generator (writes CPLEX-LP; checked to load in HiGHS with 588 columns and 1276 rows for (30, 15, 43)):
# Writes the 3-orbit chain instance (one hyperbola xy = 1 mod p, window [0,qp)^2, zero offset) as a CPLEX-LP file.
# Usage: python3 q7chain_export.py q p u1 u2 u3 > chain.lp (e.g. 7 101 30 15 43)
import sys, math
from collections import defaultdict
q, p, *us = map(int, sys.argv[1:]); inv = lambda u: pow(u, p - 2, p)
orb = lambda w: list(dict.fromkeys([w, (-inv(w)) % p, (-w) % p, inv(w)])) # O(u) = {u, -1/u, -u, 1/u}
pts = [(w + i * p, inv(w) + j * p) for u in us for w in orb(u) for i in range(q) for j in range(q)]
L = defaultdict(set) # all lines through >= 3 of the points
for a in range(len(pts)):
(x1, y1) = pts[a]
for b in range(a + 1, len(pts)):
(x2, y2) = pts[b]; dy, dx = y2 - y1, x1 - x2; g = math.gcd(dy, dx); dy //= g; dx //= g
if dy < 0 or (dy == 0 and dx < 0): dy, dx = -dy, -dx
L[(dy, dx, dy * x1 + dx * y1)].update((a, b))
rows = [sorted(s) for s in L.values() if len(s) >= 3]
print(f'\\ chain {us}, q={q}, p={p}: {len(pts)} cells, {len(rows)} line constraints\nMaximize\n obj: ' + ' + '.join(f'x{t}' for t in range(len(pts))))
print('Subject To')
for k, r in enumerate(rows): print(f' l{k}: ' + ' + '.join(f'x{t}' for t in r) + ' <= 2')
print('Binary\n ' + ' '.join(f'x{t}' for t in range(len(pts))) + '\nEnd')