Paramodular_calculations

1758 days ago by jimlb

Lemma 5.1

I'm going to start by proving Lemma 5.1 with just a direct calculation.  I did this once before kind of brute force, so now I want to use some of the new commands and methods I'll try to use to show our paramodular version.  I want to try to work them out in a case I know they work first. 

Q2=matrix([[1,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0],[0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,1,0],[0,0,0,0,0,1,0,1],[1,0,-1,0,0,0,0,0],[0,1,0,-1,0,0,0,0]]);Q2 
       
Q2.inverse() 
       
N=4;s=[]; for (i,j) in cartesian_product([range(N),range(N)]): s.append('d%d%d' %(i,j)) 
       

Here we create a matrix $D$ automatically rather than typing all the variables out.  Not sure how I didn't bother to figure this out earlier.  We start with $D$ because it is the easier matrix to find in the calculations because of the $(h,1)$.

a = var(s); D = matrix(SR,N,N,a); D 
       

As our matrices will be in $\textrm{Sp}_4(F)$, we can take the parabolic element to be of the form $\begin{pmatrix} ^{t}D^{-1} & X \\ 0 & D \end{pmatrix}$. 

A=(D.det()*D.transpose().inverse()).simplify_full();A 
       
N=4;s=[]; for (i,j) in cartesian_product([range(N),range(N)]): s.append('x%d%d' %(i,j)) 
       
a = var(s); X = matrix(SR,N,N,a); X 
       
O4=matrix(4);O4;O2=matrix(2);O2;I2=matrix.identity(2);I2 
       


We can now create our general element in $P_8(F)$. 

P=block_matrix(2,2,[A,X,O4,D]);P; 
       
N=4;s=[]; for (i,j) in cartesian_product([range(N),range(N)]): s.append('h%d%d' %(i,j)) 
       
var(s) 
       
H1=matrix([[h00,h01], [h10,h11]]);H2=matrix([[h02,h03],[h12,h13]]);H3=matrix([[h20,h21],[h30,h31]]);H4=matrix([[h22,h23],[h32,h33]]);H1;H2;H3;H4 
       



HI=block_matrix(4,4,[H1,O2,-H2,O2,O2,I2,O2,O2,-H3,O2,H4,O2,O2,O2,O2,I2]);HI 
       

We now have constructed all the matrices we need.  We want to show that if $Q_2^{-1} p Q_2 (h,1)$ is in $\Gamma_4(\varpi)$, then $h \in \Gamma_2(\varpi)$. We look at $Q_2^{-1} p Q_2 (h,1)$ and assume this is congruent to $1_{8}$ modulo $\varpi$.  We could just subtract it from $1_8$ and then say this is $0_8$ modulo $\varpi$, but I'm not sure how easily that will generalize to our case so I don't do it here.  One warning is the matrix entries have SAGE labels that start at 0, so the upper left entry is the $(0,0)$ entry and not the $(1,1)$ entry so one has to be careful when picking out the entries.

Z=Q2.inverse()*P*Q2*HI;Z 
       

Working modulo $\varpi$ now, we have anything off the diagonal of $Z$ must be 0 modulo $\varpi$. For instance, we see below that the $(1,4)$ entry of $Z$ is $-x_{03}$, so $x_{03} = 0$. 

(Z[0,2],Z[0,3],Z[1,2],Z[1,3],Z[6,2],Z[6,3],Z[7,2],Z[7,3]); 
       
Z=Z.substitute(x12==0).substitute(x13==0).substitute(x22==0).substitute(x23==0).substitute(x32==0).substitute(x33==0).substitute(x02==0).substitute(x03==0);Z 
       

Modulo $\varpi$, the diagonal entries need to be 1 and the off-diagonal need to be 0.

(Z[2,2],Z[3,3]);(Z[2,3],Z[3,2],Z[4,2],Z[4,3],Z[5,2], Z[5,3]); 
       

Z=Z.substitute(d22==1).substitute(d33==1).substitute(d23==0).substitute(d32==0).substitute(d02==0).substitute(d03==0).substitute(d12==0).substitute(d13==0);Z 
       
Z=Z.substitute(x21==0).substitute(x30==0).substitute(d01==0).substitute(d10==0);Z 
       

One now must solve the equations in each row to simplify things further.  For instance, we set $z_{7,8} = 0$ and solve for $x_{2,1}$ and substitute this back into $Z$. 

Z=Z.substitute(x31==(Z[5,7]==0).solve(x31)[0].right()).substitute(x11==(Z[1,7]==0).solve(x11)[0].right()).substitute(x01==(Z[0,7]==0).solve(x01)[0].right());Z 
       
Z=Z.substitute(d21==0).substitute(d11==(Z[5,7]==0).solve(d11)[0].right()).substitute(d31==0);Z 
       
Z=(Z.substitute(d11==(Z[7,7]==1).solve(d11)[0].right())).simplify_full();Z 
       
Z=(Z.substitute(d31==(Z[1,7]==0).solve(d31)[0].right()).substitute(x20==0).substitute(x10==0).substitute(d30==0)).simplify_full();Z 
       
Z=(Z.substitute(d00==1).substitute(x00==(Z[0,6]==0).solve(x00)[0].right())).simplify_full();Z 
       
Z=Z.substitute(d20==0);Z 
       

Observe we have shown that if $Q_2^{-1} p Q_2 (h,1) \in \Gamma_4(\varpi)$, then modulo $\varpi$ we have $Q_2^{-1} p Q_2 (h,1) = (h,1)$. Thus, reading the this last matrix modulo $\varpi$ gives that $h \in \Gamma_2(\varpi)$ as claimed in Lemma 5.1.

 
       

Paramodular Level

Below I will try to follow the same process for the section for the paramodular level.   We want to show that if $h \in \textrm{Sp}_4(F)$ satisfies $Q_2 (h,1) = PQ_2 (h_1,k_1)$ with $P \in \textrm{Sp}_(F)$ and $h_1, k_1 \in \Gamma_2[\varpi]$, then necessarily $h \in \Gamma_2[\varpi]$.  In other words, we want to use that $(h_1, k_1) = Q_2^{-1} P^{-1} Q_2 (h,1)$ to show $h \in \Gamma_2[\varpi]$.  Since $P^{-1}$ is also in the parabolic subgroup, we just rewrite it as $P$. 

       

It seems one needs to build the paramodular matrices somewhat by hand to take into account the location of the $p$ and $p^{-1}$ terms.  We can build the $P$ matrices as before though. 

N=4;s=[]; for (i,j) in cartesian_product([range(N),range(N)]): s.append('k%d%d' %(i,j)) 
       
var(s); 
       
H1=matrix([[h00,p*h01], [h10,h11]]);H2=matrix([[h02,h03],[h12,h13/p]]);H3=matrix([[h20,p*h21],[p*h30,p*h31]]);H4=matrix([[h22,h23],[p*h32,h33]]);H1;H2;H3;H4 
       



K1=matrix([[k00,p*k01], [k10,k11]]);K2=matrix([[k02,k03],[k12,k13/p]]);K3=matrix([[k20,p*k21],[p*k30,p*k31]]);K4=matrix([[k22,k23],[p*k32,k33]]); 
       
HK=block_matrix(4,4,[H1,O2,-H2,O2,O2,K1,O2,K2,-H3,O2,H4,O2,O2,K3,O2,K4]);HK 
       
N=4;s=[]; for (i,j) in cartesian_product([range(N),range(N)]): s.append('H%d%d' %(i,j)); 
       
var(s 
       
HI1=matrix([[H00,p*H01], [H10,H11]]);HI2=matrix([[H02,H03],[H12,H13/p]]);HI3=matrix([[H20,p*H21],[p*H30,p*H31]]);HI4=matrix([[H22,H23],[p*H32,H33]]); 
       
HI=block_matrix(4,4,[HI1,O2,-HI2,O2,O2,I2,O2,O2,-HI3,O2,HI4,O2,O2,O2,O2,I2]);HI 
       

We set $Z = (h_1,k_1) = Q_2^{-1}P Q_2 (h,1)$ and use that this is in $\Gamma_2[\varpi] \times \Gamma_2[\varpi]$ to try and deduce $h \in \Gamma_2[\varpi]$. 

Z=Q2.inverse()*P*Q2*HI;Z 
       

We start by working on the third and fourth columns.

(HK[0,2],Z[0,2]);(HK[0,3], Z[0,3]);(HK[1,2],Z[1,2]);(HK[1,3],Z[1,3]); 
       



Z=Z.substitute(x02==0).substitute(x03==0).substitute(x12==0).substitute(x13==0);Z; 
       
(HK[4,2],Z[4,2]);(HK[4,3], Z[4,3]);(HK[5,2],Z[5,2]);(HK[5,3],Z[5,3]); 
       



Z=Z.substitute(x22==d02).substitute(x23==d03).substitute(x32==d12).substitute(x33==d13);Z; 
       
Z=Z.substitute(d22==k00).substitute(d23==p*k01).substitute(d32==k10).substitute(d33==k11).substitute(d02==-k20).substitute(d03==-p*k21).substitute(d12==-p*k30).substitute(d02==-p*k31).substitute(d13==-p*k31);Z; 
       

Now the 8th column.

Z=(Z.substitute(x31==(Z[5,7]==0).solve(x31)[0].right()).substitute(x11==(Z[1,7]==0).solve(x11)[0].right()).substitute(x01==(Z[0,7]==0).solve(x01)[0].right()).substitute(x21==(Z[4,7]==0).solve(x21)[0].right())).simplify_full();Z 
       
Z=Z.substitute(d21==-k03).substitute(d31==-k13/p).substitute(d01==k23).substitute(d11==k33);Z; 
       

Next is the 7th column.

Z=(Z.substitute(x00==(Z[0,6]==0).solve(x00)[0].right()).substitute(x10==(Z[1,6]==0).solve(x10)[0].right()).substitute(x20==(Z[4,6]==0).solve(x20)[0].right()).substitute(x30==(Z[5,6]==0).solve(x30)[0].right())).simplify_full();Z 
       
Z=(Z.substitute(d20==-k02).substitute(d30==-k12).substitute(d00==k23).substitute(d10==p*k32)).simplify_full();Z; 
       

Pushing ahead with column 5.. Yikes!

Z[0,5].simplify_full(); 
       
Z=(Z.substitute(k03==(Z[2,5]==0).solve(k03)[0].right())).simplify_full();Z 
       
WARNING: Output truncated!  
full_output.txt



WARNING: Output truncated!  
full_output.txt

This is still a bit of a disaster.  We may need to use that $K$ is a symplectic matrix to simplify all of these $k$ terms out. 

K=block_matrix(2,2,[K1,K2,K3,K4]);K; J2=block_matrix(2,2,[O2, I2, -I2, O2]);J2 
       

U=K.transpose()*J2*K 
       
W=(W.substitute(k00==(U[1,0]==0).solve(k00)[0].right())).simplify_full();W 
       
WARNING: Output truncated!  
full_output.txt



WARNING: Output truncated!  
full_output.txt

Section is well-defined

The following matrix is $(h_3,k_3)$ for $h_3, k_3 \in \Gamma_4[p]$. 

H=matrix([[h11,p*h12, 0,0,-h13,-h14,0,0],[h21,h22,0,0,-h23, -h24/p,0,0],[0,0,k11,p*k12,0,0,k13,k14],[0,0,k21,k22,0,0,k23,k24/p],[-h31,-p*h32,0,0,h33,h34,0,0],[-p*h41,-p*h42, 0,0,p*h43,h44,0,0],[0,0,k31, p*k32,0,0,k33,k34],[0,0,p*k41,p*k42,0,0,p*k43,k44]]);latex(H) 
       

The following matrix is $p_1^{-1} p_2$ for the well-defined calculation, so it must be that this lies in the Siegel parabolic subgroup.

Q2*H*(Q2.inverse());latex(Q2*H*Q2.inverse()) 
       

This seems to indicate that we must have $h_3 = k_3$ in order to have an equality of the form $p_1 Q_2 (h_1, k_1) = p_2 Q_2 (h_2, k_2)$ with $p_{i}$ in the Siegel parabolic and $h_{i}, k_{i} \in \Gamma_2[p]$ and we have set $(h_3, k_3)  = (h_1, k_1)(h_2^{-1},k_2^{-1})$.  We use this to adjust the embedded matrices:

K=matrix([[h11,p*h12, 0,0,-h13,-h14,0,0],[h21,h22,0,0,-h23, -h24/p,0,0],[0,0,h11,p*h12,0,0,h13,h14],[0,0,h21,h22,0,0,h23,h24/p],[-h31,-p*h32,0,0,h33,h34,0,0],[-p*h41,-p*h42, 0,0,p*h43,h44,0,0],[0,0,h31, p*h32,0,0,h33,h34],[0,0,p*h41,p*h42,0,0,p*h43,h44]]);latex(K) 
       

Taking this into account we have the following form for $p_1^{-1} p_2$:

latex(Q2*K*(Q2.inverse())) 
       

This gives our matrix $A$ as:

A = matrix([[h11, p*h12, h13, h14], [h21,h22, h23, h24/p],[h31,p*h32,h33,h34],[p*h41, p*h42,p*h43, h44]]);A 
       

Note this $A$ is equal to the matrix $h_3$.  That means that $A \in \textrm{Sp}_{2n}(F)$, and so it must have determinant $\pm 1$.  That should be enough to give the same result as in the paper about it being well-defined. Can ignore the stuff below. 

Since all of the $h_{ij}$ are integral, we see the determinant of $A$ is still integral but I am not sure how to see it is a unit.. hmmm..

We now want to show if $Q_2 (h,1)$ is in $P_4(F) Q_2 (\Gamma_4[\varpi] \times \Gamma_4[\varpi])$, then $h \in \Gamma_4[\varpi]$. 

A = Q2.inverse()*P*Q2*H;A 
       
H[2,1]; 
       
d31=(A[2,1]==0).solve(d31)[0].right();d31; 
       
Z[7,3] 
       
W=matrix([[Z[6,6],Z[6,7]],[Z[7,6],Z[4,7]]]);W 
       
(W[0,1]==0).solve(x21)[0] 
       
W.substitute(x21==(W[0,1]==0).solve(x21)[0].right()); 
       
d32=(A[2,0]==0).solve(d32)[0].right();d32; 
       
A; 
       
Traceback (click to the left of this block for traceback)
...
IndexError: list index out of range
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_172.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("QS5zdWJzdGl0dXRlKGQzMj0oQVsyLDBdPT0wKS5zb2x2ZShkMzIpWzBdLnJpZ2h0KCkpOw=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpREmFrz/___code___.py", line 3, in <module>
    exec compile(u'A.substitute(d32=(A[_sage_const_2 ,_sage_const_0 ]==_sage_const_0 ).solve(d32)[_sage_const_0 ].right());
  File "", line 1, in <module>
    
  File "/usr/local/sage-6.10/local/lib/python2.7/site-packages/sage/structure/sequence.py", line 531, in __getitem__
    return list.__getitem__(self,n)
IndexError: list index out of range
a33=eq.solve(a33)[0].right();a33 
       
d32.s 
       
Traceback (click to the left of this block for traceback)
...
SyntaxError: keyword can't be an expression
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_138.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("ZXEuc3Vic3RpdHV0ZShBWzcsN109MCk7"),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpsFx9GE/___code___.py", line 3
    eq.substitute(A[_sage_const_7 ,_sage_const_7 ]=_sage_const_0 );
SyntaxError: keyword can't be an expression
Delta=a*b-c*d; 
       
var('a,b,c,d'); 
       
B=matrix([[a,b],[c,d]]);B 
       
(B.det()).substitute(d=0); 
       
a=0;a 
       
       
B=B.substitute(a=B[0,1]);B 
       
 
       
B=matrix([[s11,s12],[s21,s22]]); 
       
D=matrix([[t11,t12],[t21,t22]]);D 
       
F=D.det()*D.inverse().transpose().simplify_full();F 
       
s=[] 
       
N=4 
       
for (i,j) in cartesian_product([range(N),range(N)]): s.append('y%d%d' %(i,j)) 
       
s; 
       
a = var(s); 
       
y00=0; 
       
s.substitute(y00==0);s; 
       
Traceback (click to the left of this block for traceback)
...
AttributeError: 'list' object has no attribute 'substitute'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_387.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("cy5zdWJzdGl0dXRlKHkwMD09MCk7czs="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmp5oFAMx/___code___.py", line 3, in <module>
    exec compile(u's.substitute(y00==_sage_const_0 );s;
  File "", line 1, in <module>
    
AttributeError: 'list' object has no attribute 'substitute'
A = matrix(SR,N,N,a); A 
       
A.substitute(y01==0).substitute(y02==0);A 
       

F=(det(A)*A.inverse().transpose()).simplify_full();F 
       
F[0,0] 
       
F[0,1]*det(A).simplify_full() 
       
       
block_matrix(2,2,[B,B,B,B]); 
       
F.substitute(D.det()==1).simplify_full(); 
       
s11=F[0,0]; 
       
s11; 
       
s12=F[0,1];s21=F[1,0]; s22=F[1,1]; 
       
for i in [0..1]: for j in [0..1]: B[i,j]=F[i,j].simplify_full() 
       
B; 
       
t11=(t12*t21+1)/t22;t11 
       
B=matrix([[s11,s12],[s21,s22]]) 
       
B[0,0] 
       
B[0,0].simplify_full()