B2 calculation

3154 days ago by jimlb

First we will just do $GL_2$ as we know it works in this case so it is just verifying the calculation does what we want it to.

G=GL(2,GF(3));G 
       
M=Mat(GF(3),2,2);M 
       
B1=[]; 
       

The set $B_1$ contains the matrices from $U_p$.

for z in [0..2]: B1.append(M([[0,z],[0,1]])); 
       
B1; 
       

The set $B_2$ is the remaining matrix in this case.

B2=[Matrix(GF(3),[[1,0],[0,0]])];B2 
       

Here we just take a random element of $GL_2(\mathbb{F}_3)$.  It is important to note whether it is in $K_0(3)$ to match up the results with our expectations.

g=G.random_element();g 
       

The sets $S_1\subset B_1$ and $S_2\subset B_2$ are the sets that are "hit" by $g$.

S1=[];S2=[] 
       
S1; 
       
S2; 
       
for h in G: for a in B1: for b in B1: if M(g)*a==b*M(h): if b not in S1: S1.append(b) for c in B2: if M(g)*a == c*M(h): if c not in S2: S2.append(c) 
       
S2; 
       

Note we get what is expected here.  To get the other element of $B_1$, we would just consider where $B_2$ maps.  This shows our expectation is valid for this case in $GL_2$.

S1; 
       

We now want to do the same procedure with $Sp(4)$. In order to agree with Taylor's conventions (which are necessary to use his cosets), we must define $Sp(4)$ in SAGE and not use the built-in definition. The following function builds Taylor's Sp_4(\mathbb{F}_p)$ upon inputting $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 GL(4,GF(p)): if M(g)*J*M(g).transpose() == J: Sp4.append(M(g)) return Sp4 
       

We check this for $Sp_4(\mathbb{F}_2)$ by constructing the group and then checking how many elements it has.

G=Sp4(2); 
       
len(G) 
       
Sp(4,GF(2)).order() 
       

Next we define the space of 4 by 4 matrices.

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

We now define the coset representatives $\mathcal{B}_{i}$ for $i = 1, \dots, 4$ as in Lemma 5.3. 

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; 
       
B2=[]; 
       
for z in GF(2): for x in GF(2): B2.append(M([[1,0,0,0],[x,1,0,-z],[0,0,1,-x],[0,0,0,1]])*M([[1,0,0,0],[0,2,0,0],[0,0,2,0],[0,0,0,1]])); 
       
B2; 
       
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; 
       
B4= [M([[1,0,0,0],[0,1,0,0],[0,0,2,0],[0,0,0,2]])];B4 
       

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$.

g=G[17];g 
       

The following function determines the image of $\sigma_{g}$.  In particular, one types in coset_partition(G[j]) for $j$ an integer you pick between $0$ and $719$ and the program will output the image of $\sigma_g$.  The output is a list of lists, so the first collection of elements is the image intersected with $\mathcal{B}_1$, etc.

def coset_partition(g): S1=[]; S2=[]; S3=[]; S4=[]; for h in G: for b1 in B1: for b2 in B1: if g*b1 == b2*h: if b2 not in S1: S1.append(b2) for c in B2: if g*b1 == c*h: if c not in S2: S2.append(c) for d in B3: if g*b1 == d*h: if d not in S3: S3.append(d) for e in B4: if g*b1== e*h: if e not in S4: S4.append(e) S=[S1,S2,S3,S4]; return S 
       
coset_partition(G[17])