Script: h12_ambient_dual_slice_verify.py

Hilbert 12: ambient dual slice

h12_ambient_dual_slice_verify.py

Download original file

This is the original source text. Reading it does not run or verify the program.

Skip source text

1 #!/usr/bin/env python3
2 """Exact Hilbert 12 cubic ambient-duality and character-packet checks.
3 
4 Finite polynomial and matrix algebra only. Does NOT check elliptic gamma
5 algebraicity or prove the Hilbert 12 analytic comparison. Requires sympy.
6 """
7 import sympy as s
8 
9 M=s.Matrix([[0,1,0],[-4,2,15],[-1,0,4]])
10 H=s.Matrix([[4,-4,15],[-4,1,0],[15,0,0]])
11 I=s.eye(3); N=M-2*I
12 u=s.Matrix([1,2,4]); v=s.Matrix([0,1,2]); w=s.Matrix([0,0,1])
13 B=s.Matrix.hstack(u,v,w)
14 assert M.det()==1
15 assert N**3==-7*I
16 assert s.discriminant(M.charpoly().as_expr())==-1323
17 assert M.T*H==H*M and H.det()==-225
18 assert B.det()==1
19 assert (B.T*H*B).applyfunc(lambda x:x%7)==s.Matrix([[0,0,1],[0,1,0],[1,0,0]])
20 for a,b in [(N*u,s.zeros(3,1)),(N*v,u),(N*w,v)]:
21     assert all(int(x)%7==0 for x in a-b)
22 assert all(int((u.T*H*x)[0])%7==0 for x in (u,v))
23 assert int((u.T*H*w)[0])%7==1
24 
25 vectors=(s.Matrix([a,b,c]) for a in range(7) for b in range(7) for c in range(7))
26 kerN=[];kerN2=[]
27 for a in vectors:
28     if all(int(x)%7==0 for x in N*a): kerN.append(a)
29     if all(int(x)%7==0 for x in (N**2)*a): kerN2.append(a)
30 assert len(kerN)==7 and len(kerN2)==49
31 assert all(int((u.T*H*a)[0])%7==0 for a in kerN2)
32 assert M.T*H*M.inv()==H
33 
34 # 1/J=(-1-3omega)/7; 1/Jbar=(2+3omega)/7.
35 # The oriented Weil exponent e_{7,H}(x/J,y/Jbar) is 3*x^T*H*y mod 7.
36 def phase(x,y):
37     return int(3*(x.T*H*y)[0])%7
38 assert phase(u,w)==3 and phase(u,u)==0
39 for a in range(7):
40     for b in range(7):
41         assert phase(u,w+a*u+b*v)==3
42 for r in range(1,7): assert phase(u,r*w)==3*r%7
43 
44 beta=s.symbols('beta')
45 tau=(beta**2+2*beta)/15
46 sigma=-(beta+2)/15
47 delta=(tau+2*sigma+4)/7
48 assert s.simplify(delta-(beta**2+56)/105)==0
49 for expr in [beta*delta+8*sigma+1, (2-beta)*delta-2*delta-8*sigma-1]:
50     assert s.rem(s.together(expr).as_numer_denom()[0],beta**3-7,beta)==0
51 
52 omega=s.symbols('omega')
53 def red(expr): return s.rem(s.expand(expr),omega**2+omega+1,omega).expand()
54 J=2+3*omega;Jbar=-1-3*omega
55 assert red(J+Jbar)==1 and red(J*Jbar)==7
56 chi={1:s.Integer(1),2:omega,3:omega**2,4:omega**2,5:omega,6:s.Integer(1)}
57 def mul(a,b):
58     out=[s.Integer(0)]*7
59     for i in range(7):
60         for j in range(7):out[(i+j)%7]+=a[i]*b[j]
61     return [red(t) for t in out]
62 g1=[s.Integer(0)]*7
63 for k in range(1,7):g1[k]=red(chi[k])
64 for r in range(1,7):
65     g=[s.Integer(0)]*7
66     for k in range(1,7):g[(r*k)%7]+=chi[k]
67     g=[red(t) for t in g]
68     assert mul(mul(g,g),g)==[red(6*J)]+[red(-J)]*6
69     assert all(red(g[k]-red(chi[r]**2)*g1[k])==0 for k in range(7))
70 
71 # Integral Eisenstein coordinates of the cubic character:
72 # chi(k)=a(k)+omega*b(k).
73 a={1:1,2:0,3:-1,4:-1,5:0,6:1}
74 b={1:0,2:1,3:-1,4:-1,5:1,6:0}
75 assert all(red(a[k]+omega*b[k]-chi[k])==0 for k in range(1,7))
76 # Upon index relabeling f'_k=f_{2k}, (A,B)->(B/A,1/A).
77 T=s.Matrix([[-1,1],[-1,0]])
78 assert T**3==s.eye(2) and T.det()==1
79 assert [a[(4*k)%7] for k in range(1,7)]==[b[k]-a[k] for k in range(1,7)]
80 assert [b[(4*k)%7] for k in range(1,7)]==[-a[k] for k in range(1,7)]
81 
82 print('PASS matrix/codifferent algebra and nilpotent filtration')
83 print('PASS no-go for pairing opposite fixed vectors and nontrivial dual phase')
84 print('PASS six Gauss-cube identities, independent of nonzero character slice')
85 print('PASS principal-seven shift and exact epsilon carry identity')
86 print('PASS two integral character coordinates and order-three torus action')
87 print('LIMIT: No elliptic-gamma scalar equality or formal Lean check was proved')

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: 05fd719e122f13e44cb1c5df63f16ef92e1456d170c87e7680b6d35c305cfe77

Original source on GitHub

Back to Hilbert 12: ambient dual slice