Research source · python
verify-move-defect.py
site/public/evidence/dehn-filled-quantum-trace/move-defect-attack/verify-move-defect.py
120 lines. Source is displayed for inspection; it is not executed by this page.
File fingerprint
SHA-256: b122dfcd8fb1e7fce5d811b77c118e1bdf08cb36e868beb9e735948de931ec21
"""Exact rational controls for the local move defect; no external packages.
The generic proof is in the accompanying note. Rational evaluations are
regression controls, not a substitute for that proof or global topology.
Run: python3 verify-move-defect.py
"""
from fractions import Fraction as F
from itertools import product
import json
C = [(-1,-1,0,0,0,1), (0,0,0,1,-1,-1),
(0,1,0,0,-1,-1), (-1,-1,0,1,0,0)]
h = (1,0,1,0,1,0)
def omega(u,v):
return sum(u[2*t+1]*v[2*t]-u[2*t]*v[2*t+1] for t in range(3))
def add(a,b): return tuple(x+y for x,y in zip(a,b))
def basis(t): return tuple(int(i==t) for i in range(3))
def poch(q,n):
out=F(1)
for j in range(1,n+1): out*=1-q**j
return out
def ell(q,s,a,b):
d=tuple(-x-y for x,y in zip(s,b))
if min(d)<0: return F(0)
den=F(1)
for n in d: den*=poch(q,n)
return q**sum(x*y for x,y in zip(s,a))/den
def nf(q,a,b):
n=-1-sum(b)
if n<0: return {}
out={}
for d1 in range(n+1):
for d2 in range(n-d1+1):
d=(d1,d2,n-d1-d2); beta=add(b,d)
out[beta]=ell(q,tuple(-x for x in beta),a,b)
return out
def scaled(v,c): return {k:x*c for k,x in v.items() if x*c}
def lin(*vs):
out={}
for v in vs:
for k,x in v.items(): out[k]=out.get(k,F(0))+x
return {k:x for k,x in out.items() if x}
def action(j,b):
a=C[j][::2]; d=C[j][1::2]
return add(b,d),1-sum(x*y for x,y in zip(a,add(b,d)))
def rootell(A,s,u):
# Ordered z_1^r_1 w_1^t_1 ...; primitive edge P=z_1 z_2 z_3.
eps=u[0]%2
if any(u[2*t]%2!=eps or u[2*t+1]%2 for t in range(3)): return F(0)
a=tuple((u[2*t]-eps)//2 for t in range(3))
b=tuple(u[2*t+1]//2 for t in range(3))
return (-A**2)**eps*ell(A**4,s,a,b)
# Sparse Laurent polynomials in q and the ordered noncommuting generators.
def term(a=(0,0,0),b=(0,0,0),k=0,c=1): return {(tuple(a),tuple(b),k):c}
def mul(p,r):
out={}
for (a,b,k),x in p.items():
for (c,d,l),y in r.items():
key=(add(a,c),add(b,d),k+l+sum(i*j for i,j in zip(b,c)))
out[key]=out.get(key,0)+x*y
return {k:v for k,v in out.items() if v}
def main():
counts={}
def check(name,condition):
assert condition,name
counts[name]=counts.get(name,0)+1
expected=((0,-1,0,0),(1,0,0,0),(0,0,0,-1),(0,0,1,0))
check('symplectic_columns',tuple(tuple(omega(x,y) for y in C) for x in C)==expected)
check('new_edge_centralizes_image',all(omega(h,c)==0 for c in C))
zero=(0,0,0)
fs=[lin(term(tuple(-x for x in basis(t))),term(b=basis(t)),term(c=-1)) for t in range(3)]
# Formula (4), with literal left tetrahedron and right edge multiples.
lhs=lin(term((1,0,0),(1,0,-1),c=-1),term((0,0,-1),(0,1,-1),k=1,c=-1),term(c=-1))
edge=lin(term((1,1,1)),term(k=1,c=-1))
rhs=lin(mul(term((1,0,0),(0,0,-1),c=-1),fs[0]),
mul(term((0,0,-1),(0,0,-1),k=1,c=-1),fs[1]),
mul(term(b=(0,0,-1),c=-1),fs[2]),
scaled(mul(edge,term((0,-1,-1),(0,0,-1))),-1))
check('generic_correct_sided_move_certificate',lhs==rhs)
# Explicit integral inverse on ker(sum of local w exponents).
for ax,bx,ay,by,av in product(range(-1,2),repeat=5):
v=(ax,bx,ay,by,av,-bx-by)
coeff=(ay-by-bx-av,ax-bx-av,ay+bx-ax,by-ax+bx+av,ay)
rebuilt=tuple(sum(k*c[i] for k,c in zip(coeff,C+[h])) for i in range(6))
check('unsaturated_lattice_inverse',rebuilt==v)
for q in map(F,[2,F(2,3),F(3,2)]):
for a in product(range(-1,2),repeat=3):
for b in product(range(-1,2),repeat=3):
v=nf(q,a,b)
check('squared_edge_side',nf(q,add(a,(1,1,1)),b)==scaled(v,q))
for t in range(3):
am=list(a);am[t]-=1
check('tetrahedron_side',not lin(scaled(nf(q,am,b),q**(-b[t])),nf(q,a,add(b,basis(t))),scaled(v,-1)))
for b1,b2 in product(range(-2,3),repeat=2):
b=(b1,b2,-1-b1-b2)
check('resonant_basis',nf(q,(0,0,0),b)=={b:F(1)})
for i,j in product(range(4),repeat=2):
bj,ej=action(j,b); bij,ei=action(i,bj)
bi,ei0=action(i,b); bji,ej0=action(j,bi)
check('symbolic_q_commutation',bij==bji and ei+ej-ei0-ej0==expected[i][j])
for A in [F(2),F(3,2)]:
for s1,s2 in product(range(-1,2),repeat=2):
s=(s1,s2,1-s1-s2)
for u in product(range(-1,2),repeat=6):
val=rootell(A,s,u)
check('primitive_edge_side',rootell(A,s,add(u,h))==-A**2*val)
for t in range(3):
um=list(u);um[2*t]-=2
up=list(u);up[2*t+1]+=2
check('root_tetrahedron_side',A**(-2*u[2*t+1])*rootell(A,s,um)+rootell(A,s,up)-val==0)
result={'status':'passed','checks':counts,
'exact_local_result':'cokernel basis beta in Z^3 with sum(beta)=-1',
'explicit_witness':'ell_(1,0,0)(W_1^-1)=1; vanishes on move image',
'limitations':['Local algebra only; no outer-edge descent asserted.',
'No generic native index identification with ell_s.',
'Finite rational checks are not a formal-language proof.']}
print(json.dumps(result,indent=2))
if __name__=='__main__': main()