B3 Analysis

3145 days ago by jimlb

First we must define $Sp(4)$ as in Taylor so that we can use his cosets. It is with respect to $J = \begin{pmatrix} 0_2 & 1_2 \\ -1_2 & 0_2 \end{pmatrix}$. The following program inputs a prime $p$ and outputs $Sp_4(\mathbb{F}_p)$.

def Sp4(p): M=Mat(GF(p),4,4); J=M([[0,0,1,0],[0,0,0,1],[-1,0,0,0],[0,-1,0,0]]); Sp4=[]; for g in SL(4,GF(p)): if M(g)*J*M(g).transpose() == J: Sp4.append(M(g)) return Sp4 
       
G=Sp4(2); 
       

We make sure it has the correct number of elements.

len(G); 
       

We define the space of 4 by 4 matrices.

M=Mat(GF(2),4,4);M 
       

The representatives in $\mathcal{B}_3$ (over $\mathbb{F}_2$) are given by the following:

B3=[]; 
       
for x in GF(2): B3.append(M([[1,0,x,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]])*M([[2,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,2]])) 
       
B3; 
       

We will also have need of $\mathcal{B}_1$, so we define that as well.

B1=[]; 
       
for z in GF(2): for x in GF(2): for y in GF(2): B1.append(M([[1,0,x,y],[0,1,y,z],[0,0,1,0],[0,0,0,1]])*M([[2,0,0,0],[0,2,0,0],[0,0,1,0],[0,0,0,1]])); 
       
B1; 
       

We now want to consider the image of the injection $\sigma_{g}: \mathcal{B}_1 \rightarrow \mathcal{B}$ induced by some $g \in K_0(1)$. Since our version of $Sp(4)$ is now a list, we cannot pick an element randomly.  So just put $G[j]$ for $j$ being any number between $0$ and $719$. The following program takes as input an element of $G$ in the form $G[j]$ and outputs the elements in $\mathcal{B}_3$ that lie in the image of $\sigma_{g}$.

def coset_partition(g): S3=[]; for h in G: for b1 in B1: for b3 in B3: if g*b1 == b3*h: if b3 not in S3: S3.append(b3) return S3 
       
G[19]; 
       
S3=coset_partition(G[19]); 
       
S3 
       

We can also run this more delicately to get the distribution for how they partition.  We first run it over all $g$ with determinant of $C$ not being 0 to see we really hit $p-1$ elements in $\mathcal{B}_3$.

The program detCnotzero inputs the set $G$ and outputs all the elements of $G$ with $C$ having nonzero determinant.

def detCnotzero(G): S=[]; for g in G: if g[2,0]*g[3,1]-g[2,1]*g[3,0]!=0: S.append(M(g)) return S 
       
S=detCnotzero(G); 
       
len(S) 
       

There are 384 elements of $G$ that have determinant of $C$ not zero.

The next command gives what elements in $\mathcal{B}_3$ are hit by $g$ as we run over $g*b_1 = b_3 *h$ for $g$ having determinant of $C$ nonzero, $b_1 \in\mathcal{B}_1$, $b_3 \in \mathcal{B}_3$ and $h \in G$. Note it prints them all out because I wanted to make sure the program was running correctly.  After this program is one that only spits something out if we have a counterexample to what we expect.

for g in S: T=[]; for h in G: for b1 in B1: for b3 in B3: if g*b1 == b3*h: if b3 not in T: T.append(b3); if len(T)!=1: print T; else: print "We are good because for g= "; print g; print "we have T="; print T[0]; 
       
WARNING: Output truncated!  
full_output.txt



We are good because for g= 
[0 0 1 0]
[0 0 0 1]
[1 0 0 0]
[0 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 1 0]
[0 1 0 1]
[1 0 0 0]
[0 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[0 0 1 0]
[0 1 0 1]
[1 0 0 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[1 0 1 0]
[0 1 0 1]
[1 0 0 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 1 0]
[0 0 0 1]
[1 0 1 0]
[0 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 0 1]
[1 0 0 0]
[0 1 0 0]
[1 0 1 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]

...

We are good because for g= 
[1 0 0 1]
[1 0 0 0]
[1 1 0 1]
[0 1 1 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 0 0 0]
[0 1 0 1]
[0 1 1 1]
[1 0 0 1]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 1 1]
[1 0 0 1]
[1 0 0 0]
[1 1 0 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 1 1 0]
[0 1 1 1]
[0 1 0 1]
[1 0 1 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 1 1]
[0 0 0 1]
[1 0 1 1]
[1 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 1 0 0]
[0 1 0 0]
[0 1 1 0]
[1 0 1 1]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
WARNING: Output truncated!  
full_output.txt



We are good because for g= 
[0 0 1 0]
[0 0 0 1]
[1 0 0 0]
[0 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 1 0]
[0 1 0 1]
[1 0 0 0]
[0 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[0 0 1 0]
[0 1 0 1]
[1 0 0 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[1 0 1 0]
[0 1 0 1]
[1 0 0 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 1 0]
[0 0 0 1]
[1 0 1 0]
[0 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 0 1]
[1 0 0 0]
[0 1 0 0]
[1 0 1 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]

...

We are good because for g= 
[1 0 0 1]
[1 0 0 0]
[1 1 0 1]
[0 1 1 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 0 0 0]
[0 1 0 1]
[0 1 1 1]
[1 0 0 1]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 1 1]
[1 0 0 1]
[1 0 0 0]
[1 1 0 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 1 1 0]
[0 1 1 1]
[0 1 0 1]
[1 0 1 0]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 0 1 1]
[0 0 0 1]
[1 0 1 1]
[1 1 0 0]
we have T=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 1 0 0]
[0 1 0 0]
[0 1 1 0]
[1 0 1 1]
we have T=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
for g in S: T=[]; for h in G: for b1 in B1: for b3 in B3: if g*b1 == b3*h: if b3 not in T: T.append(b3); if len(T)!=1: print T; 
       

The next step is to deal with the case when $g$ satisfies that $C$ has determinant 0, but $F = \begin{pmatrix} a_{11} & a_{12} \\ c_{21} & c_{22} \end{pmatrix}$ has nonzero determinant.

def detCzerodetFnot(G): S=[]; for g in G: if g[2,0]*g[3,1]-g[2,1]*g[3,0]==0: if g[0,0]*g[3,1]-g[0,1]*g[3,0] !=0: S.append(M(g)) return S 
       
S=detCzerodetFnot(G) 
       
len(S); 
       

There are 192 elements of $G$ that satisfy $det(C) = 0$ but $det(F) \neq 0$.  We now check that we get $s_3 = p$ in this case.

for g in S: T=[]; for h in G: for b1 in B1: for b3 in B3: if g*b1 == b3*h: if b3 not in T: T.append(b3); if len(T)!=2: print "We have trouble because T="; print T; else: print "We are good because for g= "; print g; print "we have T[0]="; print T[0]; print "we have T[1]="; print T[1]; 
       
WARNING: Output truncated!  
full_output.txt



We are good because for g= 
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
[1 0 0 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[1 0 1 0]
[0 0 0 1]
[1 0 0 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 1 0 1]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
[1 0 1 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]

...

We are good because for g= 
[0 1 1 0]
[1 1 1 1]
[0 0 1 1]
[1 1 0 1]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 1 0]
[0 0 1 0]
[0 0 1 1]
[1 1 0 1]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 1 1 0]
[0 0 1 1]
[0 0 0 1]
[1 0 0 1]
we have T[0]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 0 1 1]
[1 1 0 0]
[0 1 0 0]
[0 1 1 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
WARNING: Output truncated!  
full_output.txt



We are good because for g= 
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
[1 0 0 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[1 0 1 0]
[0 0 0 1]
[1 0 0 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 1 0 1]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
[1 0 1 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]

...

We are good because for g= 
[0 1 1 0]
[1 1 1 1]
[0 0 1 1]
[1 1 0 1]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[0 1 1 0]
[0 0 1 0]
[0 0 1 1]
[1 1 0 1]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 1 1 0]
[0 0 1 1]
[0 0 0 1]
[1 0 0 1]
we have T[0]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
We are good because for g= 
[1 0 1 1]
[1 1 0 0]
[0 1 0 0]
[0 1 1 0]
we have T[0]=
[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
we have T[1]=
[0 0 1 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 0]
for g in S: T=[]; for h in G: for b1 in B1: for b3 in B3: if g*b1 == b3*h: if b3 not in T: T.append(b3); if len(T)!=2: print T; 
       
def detCzerodetFzero(G): S=[]; for g in G: if g[2,0]*g[3,1]-g[2,1]*g[3,0]==0: if g[0,0]*g[3,1]-g[0,1]*g[3,0] ==0: S.append(M(g)) return S 
       
S=detCzerodetFzero(G) 
       
len(S); 
       

The following code checks that $s_3 = 0$ in the case that $det(C) = det(F) = 0$.

for g in S: T=[]; for h in G: for b1 in B1: for b3 in B3: if g*b1 == b3*h: if b3 not in T: T.append(b3); if len(T)!=0: print T; 
       

Only stuff above this line is relevant for the check.

g = Matrix(SR,[[a11,a12,b11,b12],[a21,a22,b21,b22],[c11,c12,d11,d12],[c21,c22,d21,d22]]);g; 
       
def Y1(x,g): return x*(g[2,0]*g[3,1]-g[2,1]*g[3,0]) + (g[0,1]*g[3,0]-g[0,0]*g[3,1]) 
       
def Y2(x,g): return x*(g[3,0]*g[2,3]- g[2,0]*g[3,3]) + (g[0,0]*g[3,3] - g[0,3] *g[3,0]) 
       
Y2(1,g) 
       
S1=[] 
       
S2=[] 
       
for g in G: for x in GF(2): if Y1(x,g) == 0: if Y2(x,g) == 0: S1.append(x) S2.append(g) 
       
len(S1); 
       
len(S2); 
       
x=S1[1] 
       
g=S2[1];g 
       
b3=M([[1,0,x,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]])*M([[2,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,2]]);b3 
       
def coset_partition(g,b): S3=[]; for h in G: for b1 in B1: if g*b1 == b*h: if b1 not in S3: S3.append(b1) return S3 
       
for j in [0..288]: b3=M([[1,0,S1[j],0],[0,1,0,0],[0,0,1,0],[0,0,0,1]])*M([[2,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,2]]) coset_partition(S2[j],b3) 
       
WARNING: Output truncated!  
full_output.txt































































...


















































Traceback (click to the left of this block for traceback)
...
IndexError: list index out of range
WARNING: Output truncated!  
full_output.txt































































...


















































Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_51.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("Zm9yIGogaW4gWzAuLjI4OF06CiAgICBiMz1NKFtbMSwwLFMxW2pdLDBdLFswLDEsMCwwXSxbMCwwLDEsMF0sWzAsMCwwLDFdXSkqTShbWzIsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEsMF0sWzAsMCwwLDJdXSkKICAgIGNvc2V0X3BhcnRpdGlvbihTMltqXSxiMyk="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpuALo0m/___code___.py", line 3, in <module>
    exec compile(u'for j in (ellipsis_range(_sage_const_0 ,Ellipsis,_sage_const_288 )):\n    b3=M([[_sage_const_1 ,_sage_const_0 ,S1[j],_sage_const_0 ],[_sage_const_0 ,_sage_const_1 ,_sage_const_0 ,_sage_const_0 ],[_sage_const_0 ,_sage_const_0 ,_sage_const_1 ,_sage_const_0 ],[_sage_const_0 ,_sage_const_0 ,_sage_const_0 ,_sage_const_1 ]])*M([[_sage_const_2 ,_sage_const_0 ,_sage_const_0 ,_sage_const_0 ],[_sage_const_0 ,_sage_const_1 ,_sage_const_0 ,_sage_const_0 ],[_sage_const_0 ,_sage_const_0 ,_sage_const_1 ,_sage_const_0 ],[_sage_const_0 ,_sage_const_0 ,_sage_const_0 ,_sage_const_2 ]])\n    coset_partition(S2[j],b3)
  File "", line 2, in <module>
    
IndexError: list index out of range
for g in G: A=g[3,1]*g[2,2] - g[3,2]*g[2,1]; B=g[0,1]*g[3,2] - g[0,2]*g[3,1]; if g[2,0]==0: if g[0,0]==0: if g[3,0]==0: if g[3,1] != 0: if A == 0: if B == 0: S.append(g)