Quelle notes5.14.m
Sprache: unbekannt
|
|
//Immediate descendants of order p^7 of algebra 5.14
//Modified to cut down complexity 20 August 2013
readi p,"Input the prime p";
//Get a primitive element
w:=0;
F:=FiniteField(p);
for i in [2..p-1] do
a:=F!i;
S:={a};
for j in [2..p-1] do
Include(~S,a^j);
end for;
if #S eq p-1 then
w:=i;
break;
end if;
end for;
print "p equals",p;
print "w equals",w;
//Get the squares, and the least non-square lns
SQ:={};
for x in [1..((p-1) div 2)] do
y:=x^2 mod p;
Include(~SQ,y);
end for;
for i in [2..p-1] do
if i notin SQ then lns:=i; break; end if;
end for;
//Get cube roots of 1
CU:={1};
for x in [2..p-1] do
if x^3 mod p eq 1 then Include(~CU,x); end if;
end for;
//If p=1 mod 3 compute a transversal for the cube roots of 1
transversal3:=[];
if p mod 3 eq 1 then
transversal3:=[];
sofar:={};
for i in [1..p-1] do
if i^3 mod p in sofar then continue; end if;
Append(~transversal3,i);
Include(~sofar,i^3 mod p);
end for;
end if;
//If p=1 mod 4 then compute a transversal for the fourth roots of 1
transversal4:=[];
if p mod 4 eq 1 then
sofar:={};
for i in [1..(p-1) div 2] do
if i^4 mod p in sofar then continue; end if;
Append(~transversal4,i);
Include(~sofar,i^4 mod p);
end for;
end if;
//If p=1 mod 5 then compute a transversal for the fifth roots of 1
transversal5:=[];
if p mod 5 eq 1 then
sofar:={};
for i in [1..p-1] do
if i^5 mod p in sofar then continue; end if;
Append(~transversal5,i);
Include(~sofar,i^5 mod p);
end for;
end if;
//If p=1 mod 3 then compute a transversal for the sixth roots of 1
transversal6:=[];
if p mod 3 eq 1 then
sofar:={};
for i in [1..p-1] do
if i^6 mod p in sofar then continue; end if;
Append(~transversal6,i);
Include(~sofar,i^6 mod p);
end for;
end if;
Z:=Integers();
V1:=VectorSpace(F,1);
V2:=VectorSpace(F,2);
V3:=VectorSpace(F,3);
H12:=Hom(V1,V2);
H22:=Hom(V2,V2);
H32:=Hom(V3,V2);
H33:=Hom(V3,V3);
gtotal:=0;
GR:=[];
//These store the parameters in each of the 24 cases
//Currently they are stored as integer sequences of length 6,
//but an alternative (which takes less space) is to store them
//as vectors or matrices over GF(p). Two have size p^5+.
params1:=[];
params2:=[];
params3:=[];
params4:=[];
params5:=[];
params6:=[];
params7:=[];
params8:=[];
params9:=[];
params10:=[];
params11:=[];
params12:=[];
params13:=[];
params14:=[];
params15:=[];
params16:=[];
params17:=[];
params18:=[];
params19:=[];
params20:=[];
params21:=[];
params22:=[];
params23:=[];
params24:=[];
tt:=Cputime();
/*
Descendants of 5.14.
Case 1: cb=caa=cab=cac=0
*/
Append(~params1,[0,0,0,0,0,0]);
Append(~params1,[1,0,0,0,0,0]);
Append(~params1,[0,1,0,0,0,0]);
Append(~params1,[0,w,0,0,0,0]);
Append(~params1,[0,0,1,0,0,0]);
Append(~params1,[0,0,w,0,0,0]);
Append(~params1,[0,1,1,0,0,0]);
Append(~params1,[0,1,w,0,0,0]);
Append(~params1,[0,w,1,0,0,0]);
Append(~params1,[0,w,w,0,0,0]);
for y in [0..p-1] do
Append(~params1,[1,y,1,0,0,0]);
Append(~params1,[1,y,w,0,0,0]);
end for;
Append(~params1,[1,1,0,1,0,0]);
Append(~params1,[1,w,0,1,0,0]);
for x in [0..p-1] do
Append(~params1,[x,0,0,1,0,0]);
end for;
Append(~params1,[0,0,0,0,1,0]);
Append(~params1,[0,1,0,0,1,0]);
Append(~params1,[0,w,0,0,1,0]);
Append(~params1,[0,0,0,1,1,0]);
Append(~params1,[0,1,0,1,1,0]);
Append(~params1,[0,w,0,1,1,0]);
Append(~params1,[1,0,0,0,0,1]);
Append(~params1,[0,0,0,0,0,1]);
Append(~params1,[0,0,1,0,0,1]);
Append(~params1,[0,0,w,0,0,1]);
print #params1,3*p+22;
gtotal:=gtotal+#params1;
/*
Descendants of 5.14.
Case 2: caa=cab=cac=0, cb=baa
*/
Append(~params2,[0,0,0,0,0,0]);
Append(~params2,[1,0,0,0,0,0]);
Append(~params2,[0,1,0,0,0,0]);
Append(~params2,[0,w,0,0,0,0]);
Append(~params2,[0,0,1,0,0,0]);
Append(~params2,[0,0,w,0,0,0]);
Append(~params2,[0,1,1,0,0,0]);
Append(~params2,[0,1,w,0,0,0]);
Append(~params2,[0,w,1,0,0,0]);
Append(~params2,[0,w,w,0,0,0]);
for y in [0..p-1] do
Append(~params2,[1,y,1,0,0,0]);
Append(~params2,[1,y,w,0,0,0]);
end for;
Append(~params2,[1,1,0,1,0,0]);
Append(~params2,[1,w,0,1,0,0]);
for x in [0..p-1] do
Append(~params2,[x,0,0,1,0,0]);
end for;
for x in [0..p-1] do
Append(~params2,[0,x,0,0,1,0]);
Append(~params2,[0,x,0,1,1,0]);
end for;
Append(~params2,[0,0,0,0,0,1]);
Append(~params2,[1,0,0,0,0,1]);
if p mod 3 eq 1 then
Append(~params2,[w,0,0,0,0,1]);
Append(~params2,[w^2,0,0,0,0,1]);
end if;
Append(~params2,[0,0,1,0,0,1]);
Append(~params2,[0,0,w,0,0,1]);
if p mod 4 eq 1 then
Append(~params2,[0,0,w^2,0,0,1]);
Append(~params2,[0,0,w^3,0,0,1]);
end if;
print #params2,5*p+13+Gcd(p-1,3)+Gcd(p-1,4);
gtotal:=gtotal+#params2;
/*
Descendants of 5.14.
Case 3: cb=bab=bac=cac=0
*/
Append(~params3,[0,0,0,0,0,0]);
Append(~params3,[1,0,0,0,0,0]);
Append(~params3,[0,0,0,0,1,0]);
Append(~params3,[0,1,0,0,1,0]);
Append(~params3,[0,0,0,0,1,1]);
Append(~params3,[1,0,0,0,1,1]);
Append(~params3,[0,0,0,0,1,w]);
Append(~params3,[1,0,0,0,1,w]);
Append(~params3,[0,0,1,0,0,1]);
Append(~params3,[0,0,w,0,0,w]);
for i in [1..p-1] do
Append(~params3,[0,0,0,i,1,1]);
Append(~params3,[0,0,0,i,1,w]);
end for;
Append(~params3,[0,0,0,1,1,0]);
Append(~params3,[0,0,0,w,1,0]);
if p mod 4 eq 1 then
Append(~params3,[0,0,0,w^2 mod p,1,0]);
Append(~params3,[0,0,0,w^3 mod p,1,0]);
end if;
print #params3,2*p+8+Gcd(p-1,4);
gtotal:=gtotal+#params3;
/*
Descendants of 5.14.
Case 4: bab=bac=cac=0, cb=baa
*/
Append(~params4,[0,0,0,0,0,0]);
Append(~params4,[1,0,0,0,0,0]);
Append(~params4,[0,1,0,0,0,0]);
if p mod 3 eq 1 then
Append(~params4,[0,w,0,0,0,0]);
Append(~params4,[0,w^2,0,0,0,0]);
end if;
Append(~params4,[0,0,0,0,1,0]);
Append(~params4,[0,1,0,0,1,0]);
if p mod 3 eq 1 then
Append(~params4,[0,w,0,0,1,0]);
Append(~params4,[0,w^2,0,0,1,0]);
end if;
Append(~params4,[0,0,0,0,0,1]);
Append(~params4,[1,0,0,0,0,1]);
Append(~params4,[0,0,0,0,0,w]);
Append(~params4,[1,0,0,0,0,w]);
for y in [0..p-1] do
Append(~params4,[0,0,1,0,0,y]);
Append(~params4,[0,0,w,0,0,y]);
end for;
Append(~params4,[0,0,1,0,1,1]);
Append(~params4,[0,0,w,0,1,w]);
for z in [1..(p-1) div 2] do
Append(~params4,[0,z,1,0,0,0]);
Append(~params4,[0,z,w,0,0,0]);
end for;
Append(~params4,[0,0,0,1,0,0]);
Append(~params4,[1,0,0,1,0,0]);
if p mod 5 eq 1 then
Append(~params4,[w,0,0,1,0,0]);
Append(~params4,[w^2,0,0,1,0,0]);
Append(~params4,[w^3,0,0,1,0,0]);
Append(~params4,[w^4,0,0,1,0,0]);
end if;
Append(~params4,[0,0,0,1,1,0]);
Append(~params4,[0,0,0,1,w,0]);
if p mod 4 eq 1 then
Append(~params4,[0,0,0,1,w^2,0]);
Append(~params4,[0,0,0,1,w^3,0]);
end if;
for x in [0..p-1] do
Append(~params4,[0,0,0,1,x,1]);
Append(~params4,[0,0,0,1,x,w]);
end for;
for z in [1..(p-1) div 2] do
Append(~params4,[z,0,0,1,0,1]);
Append(~params4,[z,0,0,1,0,w]);
end for;
print #params4,6*p+8+2*Gcd(p-1,3)+Gcd(p-1,4)+Gcd(p-1,5);
gtotal:=gtotal+#params4;
/*
Descendants of 5.14.
Case 5: cb=bac=cac=0, caa=bab
*/
Append(~params5,[0,0,0,0,0,0]);
Append(~params5,[1,0,0,0,0,0]);
Append(~params5,[0,1,0,0,0,0]);
Append(~params5,[0,w,0,0,0,0]);
Append(~params5,[0,0,1,0,0,0]);
Append(~params5,[0,0,w,0,0,0]);
Append(~params5,[0,1,1,0,0,0]);
Append(~params5,[0,1,w,0,0,0]);
Append(~params5,[0,w,1,0,0,0]);
Append(~params5,[0,w,w,0,0,0]);
for x in [0..p-1] do
Append(~params5,[x,0,0,1,0,0]);
end for;
Append(~params5,[0,0,0,0,1,0]);
Append(~params5,[0,1,0,0,1,0]);
Append(~params5,[0,w,0,0,1,0]);
if p mod 3 eq 1 then
Append(~params5,[0,w^2,0,0,1,0]);
Append(~params5,[0,w^3,0,0,1,0]);
Append(~params5,[0,w^4,0,0,1,0]);
Append(~params5,[0,w^5,0,0,1,0]);
end if;
if p mod 4 eq 1 then
for x in [0..(p-1) div 2] do
Append(~params5,[0,x,0,1,1,0]);
Append(~params5,[0,x,0,w,1,0]);
Append(~params5,[0,x,0,w^2,1,0]);
Append(~params5,[0,x,0,w^3,1,0]);
end for;
end if;
if p mod 4 eq 3 then
for x in [0..p-1] do
Append(~params5,[0,x,0,1,1,0]);
Append(~params5,[0,x,0,w,1,0]);
end for;
end if;
for x in [0..p-1] do
Append(~params5,[0,0,x,0,0,1]);
Append(~params5,[0,0,x,0,0,w]);
end for;
Append(~params5,[1,0,0,0,0,1]);
Append(~params5,[1,0,0,0,0,w]);
Append(~params5,[1,0,1,0,0,1]);
Append(~params5,[1,0,w,0,0,w]);
print #params5,5*p+13+2*Gcd(p-1,3)+Gcd(p-1,4);
gtotal:=gtotal+#params5;
/*
Descendants of 5.14.
Case 6: bac=cac=0, caa=bab, cb=baa
*/
Append(~params6,[0,0,0,0,0,0]);
Append(~params6,[1,0,0,0,0,0]);
if p mod 5 eq 1 then
Append(~params6,[w,0,0,0,0,0]);
Append(~params6,[w^2,0,0,0,0,0]);
Append(~params6,[w^3,0,0,0,0,0]);
Append(~params6,[w^4,0,0,0,0,0]);
end if;
Append(~params6,[0,1,0,0,0,0]);
Append(~params6,[0,w,0,0,0,0]);
if p mod 3 eq 1 then
Append(~params6,[0,w^2,0,0,0,0]);
Append(~params6,[0,w^3,0,0,0,0]);
Append(~params6,[0,w^4,0,0,0,0]);
Append(~params6,[0,w^5,0,0,0,0]);
end if;
if p mod 4 eq 3 then
for x in [0..p-1] do
Append(~params6,[0,x,1,0,0,0]);
Append(~params6,[0,x,w,0,0,0]);
end for;
end if;
if p mod 4 eq 1 then
for x in [0..(p-1) div 2] do
Append(~params6,[0,x,1,0,0,0]);
Append(~params6,[0,x,w,0,0,0]);
Append(~params6,[0,x,w^2,0,0,0]);
Append(~params6,[0,x,w^3,0,0,0]);
end for;
end if;
for x in [0..p-1] do
Append(~params6,[x,0,0,1,0,0]);
if p mod 5 eq 1 then
Append(~params6,[x,0,0,w,0,0]);
Append(~params6,[x,0,0,w^2,0,0]);
Append(~params6,[x,0,0,w^3,0,0]);
Append(~params6,[x,0,0,w^4,0,0]);
end if;
end for;
if p mod 3 eq 2 then
for x in [0..p-1] do
for y in [0..p-1] do
Append(~params6,[0,y,0,x,1,0]);
end for;
end for;
end if;
if p mod 3 eq 1 then
xrange:=transversal3;
Append(~xrange,0);
for x in xrange do
for y in [0..p-1] do
Append(~params6,[0,y,0,x,1,0]);
Append(~params6,[0,y,0,x,w,0]);
Append(~params6,[0,y,0,x,w^2,0]);
end for;
end for;
end if;
if p mod 4 eq 3 then
for y in [0..(p-1) div 2] do
Append(~params6,[y,0,0,0,0,1]);
Append(~params6,[y,0,0,0,0,w]);
end for;
for x in [1..p-1] do
Append(~params6,[0,0,x,0,0,1]);
Append(~params6,[0,0,x,0,0,w]);
end for;
for y in [1..(p-1) div 2] do
Append(~params6,[y,0,1,0,0,1]);
Append(~params6,[y,0,w,0,0,w]);
end for;
end if;
if p mod 4 eq 1 then
yrange:=transversal4;
Append(~yrange,0);
for y in yrange do
Append(~params6,[y,0,0,0,0,1]);
Append(~params6,[y,0,0,0,0,w]);
Append(~params6,[y,0,0,0,0,w^2]);
Append(~params6,[y,0,0,0,0,w^3]);
end for;
for x in [1..p-1] do
Append(~params6,[0,0,x,0,0,1]);
Append(~params6,[0,0,x,0,0,w]);
Append(~params6,[0,0,x,0,0,w^2]);
Append(~params6,[0,0,x,0,0,w^3]);
end for;
for y in transversal4 do
Append(~params6,[y,0,1,0,0,1]);
Append(~params6,[y,0,w,0,0,w]);
Append(~params6,[y,0,w^2,0,0,w^2]);
Append(~params6,[y,0,w^3,0,0,w^3]);
end for;
end if;
print #params6,
p^2+3*p-3+(p+2)*Gcd(p-1,3)+(p+1)*Gcd(p-1,4)+(p+1)*Gcd(p-1,5);
gtotal:=gtotal+#params6;
/*
Descendants of 5.14.
Case 7: cb=baa=bac=cac=0
*/
for u in [0,1,w] do
for t in [0,1] do
for x in [0,1] do
Append(~params7,[u,0,t,x,0,0]);
end for;
end for;
end for;
for u in [0,1,w] do
for x in [0,1] do
Append(~params7,[u,1,0,x,0,0]);
end for;
end for;
for x in [0,1,w] do
Append(~params7,[0,1,1,x,0,0]);
end for;
for u in [1,w] do
for x in [0..p-1] do
Append(~params7,[u,1,1,x,0,0]);
end for;
end for;
for u in [0,1,w] do
for x in [0,1] do
for z in [1,w] do
Append(~params7,[u,0,0,x,0,z]);
end for;
end for;
end for;
for u in [0..p-1] do
for x in [0,1] do
for z in [1,w] do
Append(~params7,[u,0,1,x,0,z]);
end for;
end for;
end for;
for v in [0,1,w] do
for z in [0,1,w] do
Append(~params7,[0,v,0,0,1,z]);
end for;
end for;
vrange:=[0,1,w];
if p mod 4 eq 1 then vrange:=[0,1,w,w^2,w^3]; end if;
for v in vrange do
Append(~params7,[0,v,0,1,1,0]);
end for;
for v in [0..p-1] do
for z in [1,w] do
Append(~params7,[0,v,0,1,1,z]);
end for;
end for;
for v in [0..p-1] do
for z in [0,1,w] do
Append(~params7,[0,v,1,0,1,z]);
end for;
end for;
for v in [0..p-1] do
for x in [1,w] do
for z in [0..p-1] do
Append(~params7,[0,v,1,x,1,z]);
end for;
end for;
end for;
print #params7,2*p^2+11*p+43+Gcd(p-1,4);
gtotal:=gtotal+#params7;
/*
Descendants of 5.14.
Case 8: cb=caa, baa=bac=cac=0
*/
urange:=[0,1,w];
if p mod 4 eq 1 then urange:=[0,1,w,w^2,w^3]; end if;
for u in urange do
Append(~params8,[u,0,0,0,0,0]);
Append(~params8,[u,0,0,1,0,0]);
Append(~params8,[u,1,0,0,0,0]);
end for;
if p mod 3 eq 1 then
urange:=transversal3;
Append(~urange,0);
else;
urange:=[0..p-1];
end if;
for u in urange do
Append(~params8,[u,0,1,0,0,0]);
Append(~params8,[u,0,1,1,0,0]);
Append(~params8,[u,1,1,0,0,0]);
if p mod 3 eq 1 then
Append(~params8,[u,0,w,0,0,0]);
Append(~params8,[u,0,w,1,0,0]);
Append(~params8,[u,1,w,0,0,0]);
Append(~params8,[u,0,w^2,0,0,0]);
Append(~params8,[u,0,w^2,1,0,0]);
Append(~params8,[u,1,w^2,0,0,0]);
end if;
end for;
for u in [0..p-1] do
for t in [0..p-1] do
Append(~params8,[u,1,t,1,0,0]);
end for;
end for;
for u in [0..p-1] do
for t in [0..(p-1) div 2] do
for x in [0,1] do
for z in [1,w] do
Append(~params8,[u,0,t,x,0,z]);
end for;
end for;
end for;
end for;
vrange:=[0,1,w];
if p mod 3 eq 1 then vrange:=[0,1,w,w^2,w^3,w^4,w^5]; end if;
for v in vrange do
Append(~params8,[0,v,0,0,1,0]);
end for;
if p mod 5 ne 1 then
for v in [0..p-1] do
Append(~params8,[0,v,0,1,1,0]);
end for;
end if;
if p mod 5 eq 1 then
vrange:=transversal5;
Append(~vrange,0);
for v in vrange do
for x in [1,w,w^2,w^3,w^4] do
Append(~params8,[0,v,0,x,1,0]);
end for;
end for;
end if;
if p mod 3 eq 2 then
for v in [0..p-1] do
for x in [0..p-1] do
Append(~params8,[0,v,1,x,1,0]);
end for;
end for;
end if;
if p mod 3 eq 1 then
xrange:=transversal3;
Append(~xrange,0);
for v in [0..p-1] do
for x in xrange do
Append(~params8,[0,v,1,x,1,0]);
Append(~params8,[0,v,w,x,1,0]);
Append(~params8,[0,v,w^2,x,1,0]);
end for;
end for;
end if;
for v in [0..p-1] do
for x in [0..(p-1) div 2] do
for z in [1,w] do
Append(~params8,[0,v,0,x,1,z]);
end for;
end for;
end for;
for v in [0..p-1] do
for t in [1..(p-1) div 2] do
for x in [0..p-1] do
for z in [1,w] do
Append(~params8,[0,v,t,x,1,z]);
end for;
end for;
end for;
end for;
print #params8,
p^3+4*p^2+6*p+(p+5)*Gcd(p-1,3)+3*Gcd(p-1,4)+Gcd(p-1,5);
gtotal:=gtotal+#params8;
/*
Descendants of 5.14.
Cases 9 & 10: cb=bac=caa=0, cac=kbab (k=1,w)
*/
Append(~params9,[0,0,0,0,0,0]);
Append(~params9,[1,0,0,0,0,0]);
Append(~params9,[0,1,0,0,0,0]);
Append(~params9,[0,w,0,0,0,0]);
for y in [0,1,w] do
Append(~params9,[0,y,0,0,1,0]);
if p mod 4 eq 1 then
Append(~params9,[0,y,0,0,w,0]);
end if;
end for;
yrange:=[0..p-1];
if p mod 4 eq 1 then yrange:=[0..(p-1) div 2]; end if;
for y in yrange do
Append(~params9,[1,y,0,0,1,0]);
if p mod 4 eq 1 then
Append(~params9,[1,y,0,0,w,0]);
end if;
end for;
for x in [0..(p-1) div 2] do
Append(~params9,[x,0,0,0,0,1]);
end for;
Append(~params9,[0,1,0,0,0,1]);
Append(~params9,[0,w,0,0,0,1]);
for y in [0,1,w] do
for z in [0..(p-1) div 2] do
Append(~params9,[0,y,1,0,z,0]);
Append(~params9,[0,y,w,0,z,0]);
end for;
end for;
for y in [0..p-1] do
for z in [0..(p-1) div 2] do
Append(~params9,[0,y,1,0,z,1]);
Append(~params9,[0,y,w,0,z,1]);
end for;
end for;
for y in [0..p-1] do
for t in [0..(p-1) div 2] do
Append(~params9,[1,y,1,0,0,t]);
Append(~params9,[1,y,w,0,0,t]);
end for;
end for;
for y in [0..p-1] do
for z in [1..(p-1) div 2] do
for t in [0..p-1] do
Append(~params9,[1,y,1,0,z,t]);
Append(~params9,[1,y,w,0,z,t]);
end for;
end for;
end for;
for x in [0..(p-1) div 2] do
for y in [0..p-1] do
Append(~params9,[y,0,0,1,0,x]);
end for;
end for;
for x in [0..(p-1) div 2] do
Append(~params9,[1,1,0,1,0,x]);
Append(~params9,[1,w,0,1,0,x]);
end for;
if p mod 4 eq 1 then
for x in [0..p-1] do
for y in [0..(p-1) div 2] do
Append(~params9,[x,y,0,1,1,0]);
Append(~params9,[x,y,0,1,w,0]);
end for;
end for;
end if;
if p mod 4 eq 3 then
for x in [0..p-1] do
for y in [0..p-1] do
Append(~params9,[x,y,0,1,1,0]);
end for;
end for;
end if;
print #params9,
p^3+5*p^2/2+7*p+19/2+(p+4)*Gcd(p-1,4)/2;
gtotal:=gtotal+#params9;
params10:=params9;
gtotal:=gtotal+#params9;
/*
Descendants of 5.14.
Cases 11 & 12: bac=caa=0, cb=baa, cac=kbab (k=1,w)
*/
Append(~params11,[0,0,0,0,0,0]);
Append(~params11,[1,0,0,0,0,0]);
if p mod 3 eq 1 then
Append(~params11,[w,0,0,0,0,0]);
Append(~params11,[w^2,0,0,0,0,0]);
end if;
Append(~params11,[0,1,0,0,0,0]);
Append(~params11,[0,w,0,0,0,0]);
if p mod 4 eq 1 then
Append(~params11,[0,w^2,0,0,0,0]);
Append(~params11,[0,w^3,0,0,0,0]);
end if;
if p mod 4 eq 1 then
xrange:=transversal4;
Append(~xrange,0);
for x in xrange do
for y in [0..p-1] do
Append(~params11,[x,y,0,0,1,0]);
Append(~params11,[x,y,0,0,w,0]);
end for;
end for;
end if;
if p mod 4 eq 3 then
for x in [0..(p-1) div 2] do
for y in [0..p-1] do
Append(~params11,[x,y,0,0,1,0]);
end for;
end for;
end if;
if p mod 3 eq 1 then
for x in [0..(p-1) div 2] do
Append(~params11,[x,0,0,0,0,1]);
Append(~params11,[x,0,0,0,0,w]);
Append(~params11,[x,0,0,0,0,w^2]);
end for;
for x in transversal3 do
Append(~params11,[0,x,0,0,0,1]);
Append(~params11,[0,x,0,0,0,w]);
Append(~params11,[0,x,0,0,0,w^2]);
end for;
end if;
if p mod 3 eq 2 then
for x in [0..(p-1) div 2] do
Append(~params11,[x,0,0,0,0,1]);
end for;
for x in [1..p-1] do
Append(~params11,[0,x,0,0,0,1]);
end for;
end if;
for y in [0..p-1] do
for z in [0..(p-1) div 2] do
for t in [0..(p-1) div 2] do
Append(~params11,[0,y,1,0,z,t]);
Append(~params11,[0,y,w,0,z,t]);
end for;
end for;
end for;
for y in [0..p-1] do
for x in [1..(p-1) div 2] do
for z in [0..(p-1) div 2] do
Append(~params11,[x,y,1,0,z,0]);
Append(~params11,[x,y,w,0,z,0]);
end for;
end for;
end for;
for y in [0..p-1] do
for x in [1..(p-1) div 2] do
for t in [1..(p-1) div 2] do
for z in [0..p-1] do
Append(~params11,[x,y,1,0,z,t]);
Append(~params11,[x,y,w,0,z,t]);
end for;
end for;
end for;
end for;
if p mod 3 eq 1 then
for x in [0..p-1] do
Append(~params11,[x,0,0,1,0,0]);
Append(~params11,[x,0,0,w,0,0]);
Append(~params11,[x,0,0,w^2,0,0]);
end for;
for y in transversal3 do
Append(~params11,[1,y,0,1,0,0]);
Append(~params11,[w,y,0,w,0,0]);
Append(~params11,[w^2,y,0,w^2,0,0]);
end for;
for x in transversal6 do
for y in [0..p-1] do
for z in [0..p-1] do
Append(~params11,[y,z,0,1,x,0]);
Append(~params11,[y,z,0,w,x,0]);
Append(~params11,[y,z,0,w^2,x,0]);
end for;
end for;
end for;
for x in [0..p-1] do
for z in [1..(p-1) div 2] do
Append(~params11,[x,0,0,1,0,z]);
Append(~params11,[x,0,0,w,0,z]);
Append(~params11,[x,0,0,w^2,0,z]);
end for;
end for;
for y in transversal3 do
for z in [1..(p-1) div 2] do
Append(~params11,[1,y,0,1,0,z]);
Append(~params11,[w,y,0,w,0,z]);
Append(~params11,[w^2,y,0,w^2,0,z]);
end for;
end for;
end if;
if p mod 3 eq 2 then
for x in [0..p-1] do
Append(~params11,[x,0,0,1,0,0]);
end for;
for y in [1..p-1] do
Append(~params11,[1,y,0,1,0,0]);
end for;
for x in [1..(p-1) div 2] do
for y in [0..p-1] do
for z in [0..p-1] do
Append(~params11,[y,z,0,1,x,0]);
end for;
end for;
end for;
for x in [0..p-1] do
for z in [1..(p-1) div 2] do
Append(~params11,[x,0,0,1,0,z]);
end for;
end for;
for y in [1..p-1] do
for z in [1..(p-1) div 2] do
Append(~params11,[1,y,0,1,0,z]);
end for;
end for;
end if;
print #params11,
(p^4+p^3+4*p^2+p-1+(p^2+2*p+3)*Gcd(p-1,3)+(p+2)*Gcd(p-1,4))/2;
gtotal:=gtotal+#params11;
params12:=params11;
gtotal:=gtotal+#params11;
/*
Descendants of 5.14.
Case 13, cb=bac=0, caa=baa, cac=-bab
*/
//pb=pc=0
Append(~params13,[0,0,0,0,0,0]);
Append(~params13,[1,0,0,0,0,0]);
Append(~params13,[0,1,0,0,0,0]);
//pb=0, pc=baa or wbaa
Append(~params13,[0,0,0,0,1,0]);
Append(~params13,[0,0,0,0,w,0]);
Append(~params13,[0,1,0,0,1,0]);
Append(~params13,[0,1,0,0,w,0]);
Append(~params13,[0,w,0,0,1,0]);
Append(~params13,[0,w,0,0,w,0]);
for y in [0..p-1] do
Append(~params13,[1,y,0,0,1,0]);
Append(~params13,[1,y,0,0,w,0]);
end for;
//pb=0, pc=bab
for x in [0..p-1] do
Append(~params13,[x,0,0,0,0,1]);
end for;
Append(~params13,[-1,1,0,0,0,1]);
Append(~params13,[-1,w,0,0,0,1]);
//pb=pc=bab
Append(~params13,[0,0,0,1,0,1]);
Append(~params13,[1,0,0,1,0,1]);
Append(~params13,[0,1,0,1,0,1]);
//pb=bab, pc=-bab
for x in [0..p-1] do
Append(~params13,[x,0,0,1,0,-1]);
end for;
Append(~params13,[2,1,0,1,0,-1]);
//pb=bab, pc=baa or wbaa
for x in [0..p-1] do
for y in [0..p-1] do
Append(~params13,[x,y,0,1,1,0]);
Append(~params13,[x,y,0,1,w,0]);
end for;
end for;
//pb=pc=baa
Append(~params13,[0,0,1,0,1,0]);
Append(~params13,[1,0,1,0,1,0]);
Append(~params13,[0,1,1,0,1,0]);
Append(~params13,[1,1,1,0,1,0]);
//pb=baa, pc=baa+bab
for x in [0..p-2] do //Note that -1 is excluded
Append(~params13,[x,0,1,0,1,1]);
y:=F!((x+1)/2); y:=Z!y;
Append(~params13,[x,y,1,0,1,1]);
end for;
Append(~params13,[-1,0,1,0,1,1]);
Append(~params13,[-1,1,1,0,1,1]);
//pb=baa, pc=-baa
Append(~params13,[0,0,1,0,-1,0]);
Append(~params13,[0,1,1,0,-1,0]);
Append(~params13,[0,w,1,0,-1,0]);
for y in [0..p-1] do
Append(~params13,[1,y,1,0,-1,0]);
end for;
//pb=baa, pc=-baa+bab
half:=(p+1) div 2;
Append(~params13,[1,-half,1,0,-1,1]);
Append(~params13,[1,half,1,0,-1,1]);
Append(~params13,[1,w-half,1,0,-1,1]);
if p mod 4 eq 1 then
Append(~params13,[1,w^2-half,1,0,-1,1]);
Append(~params13,[1,w^3-half,1,0,-1,1]);
end if;
for y in [0..p-1] do
Append(~params13,[0,y,1,0,-1,1]);
Append(~params13,[1-w,y,1,0,-1,1]);
end for;
//pb=pc=wbaaa
Append(~params13,[0,0,w,0,w,0]);
Append(~params13,[1,0,w,0,w,0]);
Append(~params13,[0,1,w,0,w,0]);
Append(~params13,[1,1,w,0,w,0]);
//pb=wbaa, pc=wbaa+bab
for x in [0..p-2] do //Note that -1 is excluded
Append(~params13,[x,0,w,0,w,1]);
y:=F!((x+1)/(2*w)); y:=Z!y;
Append(~params13,[x,y,w,0,w,1]);
end for;
Append(~params13,[-1,0,w,0,w,1]);
Append(~params13,[-1,1,w,0,w,1]);
print #params13,2*p^2+11*p+27+Gcd(p-1,4);
gtotal:=gtotal+#params13;
/*
Descendants of 5.14.
Case 14, bac=0, cb=caa=baa, cac=-bab
*/
//1. v ne +/- y
for y in [1,w] do
for u in [0..p-1] do
for x in [0..(p-1) div 2] do
zrange:=[0..p-1];
if x eq 0 then zrange:=[0..(p-1) div 2]; end if;
for z in zrange do
Append(~params14,[0,u,0,x,y,z]);
end for;
end for;
end for;
end for;
//1.5 t=0, v=1, y=-1, u ne 0
for u in [1,w] do
for x in [0..(p-1) div 2] do
zrange:=[0..p-1];
if x eq 0 then zrange:=[0..(p-1) div 2]; end if;
for z in zrange do
Append(~params14,[0,u,1,x,-1,z]);
end for;
end for;
end for;
//1.5 t=0, v=1, y=-1, u=0
for x in [0..p-1] do
for z in [0..p-1] do
new:=true;
for a in [1..p-1] do
x1:=F!((x+z+x*a^2-z*a^2)/(2*a^3)); x1:=Z!x1;
z1:=F!((x+z-x*a^2+z*a^2)/(2*a^3)); z1:=Z!z1;
if [x1,z1] lt [x,z] then new:=false; break; end if;
end for;
if new then Append(~params14,[0,0,1,x,-1,z]); end if;
end for;
end for;
//2. t ne 0, v=y, x ne z+1, v ne 0
for v in [1,w] do
for x in [0..p-1] do
for z in [0..p-1] do
if x eq (z+1) mod p then continue; end if;
x1:=(-x) mod p; z1:=(-z) mod p;
if [z1,x1] lt [x,z] then continue; end if;
Append(~params14,[1,0,v,x,v,z]);
end for;
end for;
end for;
//2. t ne 0, v=y=0, x ne z+1
for x in [0..p-1] do
for z in [0..p-1] do
if x eq (z+1) mod p then continue; end if;
new:=true;
for a in [1..p-1] do
x1:=F!((x+z+x*a^3-z*a^3)/(2*a^3)); x1:=Z!x1;
z1:=F!((x+z-x*a^3+z*a^3)/(2*a^3)); z1:=Z!z1;
if [x1,z1] lt [x,z] then new:=false; break; end if;
end for;
if new then Append(~params14,[1,0,0,x,0,z]); end if;
end for;
end for;
//3. t ne 0, v=y, x eq z+1, v ne 0
for v in [1,w] do
for u in [0..(p-1) div 2] do
Append(~params14,[1,u,v,0,v,-1]);
end for;
end for;
//3. t ne 0, v=y, x eq z+1, v eq 0, u ne 0
for z in [0..p-1] do
Append(~params14,[1,1,0,z+1,0,z]);
end for;
//3. t ne 0, v=y, x eq z+1, v eq 0, u eq 0
for z in [0..p-1] do
new:=true;
for a in [1..p-1] do
z1:=F!((-a^3+2*z+1)/(2*a^3)); z1:=Z!z1;
if z1 lt z then new:=false; break; end if;
end for;
if new then Append(~params14,[1,0,0,z+1,0,z]); end if;
end for;
//4. t=0, v=y, x ne +/- z, v ne 0
for v in [1,w] do
for z in [1..(p-1) div 2] do
Append(~params14,[0,0,v,0,v,z]);
end for;
end for;
//4. t=0, v=y=0, x ne +/- z
Append(~params14,[0,0,0,0,0,1]);
if p mod 3 eq 1 then
Append(~params14,[0,0,0,0,0,w]);
Append(~params14,[0,0,0,0,0,w^2]);
end if;
//4.5 t=0, v=y, x=-z ne 0
Append(~params14,[0,0,0,1,0,-1]);
Append(~params14,[0,0,w,1,w,-1]);
Append(~params14,[0,0,w^2,1,w^2,-1]);
//5. t=0, v=y ne 0, x=z
for v in [1,w] do
for u in [0,1] do
Append(~params14,[0,u,v,0,v,0]);
end for;
end for;
//6. t=0, v=y=0, x=z
xrange:=[0,1];
if p mod 3 eq 1 then xrange:=[0,1,w,w^2]; end if;
for u in [0,1] do
for x in xrange do
Append(~params14,[0,u,0,x,0,x]);
end for;
end for;
print #params14,p^3+2*p^2+6*p+10+(p+4)*Gcd(p-1,3);
gtotal:=gtotal+#params14;
/*
Descendants of 5.14.
Case 15, cb=baa=bac=caa=0
*/
//x=y=z=v=0
Append(~params15,[0,0,0,0,0,0]);
Append(~params15,[0,0,0,0,1,0]);
Append(~params15,[0,0,0,1,1,0]);
if p mod 3 eq 1 then
Append(~params15,[0,0,0,1,w,0]);
end if;
//x=z=v=0, y=1,w
Append(~params15,[0,1,0,0,0,0]);
Append(~params15,[0,w,0,0,0,0]);
Append(~params15,[0,1,0,0,1,0]);
Append(~params15,[0,w,0,0,1,0]);
Append(~params15,[0,1,0,1,0,0]);
Append(~params15,[0,w,0,1,0,0]);
Append(~params15,[0,1,0,1,1,0]);
Append(~params15,[0,w,0,1,1,0]);
if p mod 3 eq 1 then
Append(~params15,[0,1,0,1,w,0]);
Append(~params15,[0,w,0,1,w,0]);
Append(~params15,[0,1,0,1,w^2,0]);
Append(~params15,[0,w,0,1,w^2,0]);
end if;
//z=v=0, x=y=1,w
Append(~params15,[1,1,0,0,0,0]);
Append(~params15,[w,w,0,0,0,0]);
Append(~params15,[1,1,0,0,1,0]);
Append(~params15,[w,w,0,0,1,0]);
for u in [1..(p-1) div 2] do
u1:=F!u^-1; u1:=Z!u1;
if u1 lt u or (p-u1) lt u then continue; end if;
Append(~params15,[1,1,0,1,u,0]);
Append(~params15,[w,w,0,1,u,0]);
end for;
//z=v=0, x=1, y=w
Append(~params15,[1,w,0,0,0,0]);
Append(~params15,[1,w,0,0,1,0]);
Append(~params15,[1,w,0,1,0,0]);
for u in [1..(p-1) div 2] do
Append(~params15,[1,w,0,1,u,0]);
end for;
//z=0, v=1, t=0
Append(~params15,[0,0,0,0,0,1]);
Append(~params15,[0,0,0,0,1,1]);
Append(~params15,[0,0,0,0,w,1]);
Append(~params15,[0,1,0,0,0,1]);
Append(~params15,[0,1,0,0,1,1]);
Append(~params15,[0,1,0,0,w,1]);
Append(~params15,[0,w,0,0,0,1]);
Append(~params15,[0,w,0,0,1,1]);
Append(~params15,[0,w,0,0,w,1]);
Append(~params15,[1,0,0,0,0,1]);
Append(~params15,[1,0,0,0,1,1]);
Append(~params15,[1,0,0,0,w,1]);
Append(~params15,[w,0,0,0,0,1]);
Append(~params15,[w,0,0,0,1,1]);
Append(~params15,[w,0,0,0,w,1]);
for x in [1,w] do
for y in [1,w] do
for u in [0..p-1] do
Append(~params15,[x,y,0,0,u,1]);
end for;
end for;
end for;
//z=0, v=1, t=1
for x in [1,w] do
for y in [0..p-1] do
for u in [0..p-1] do
Append(~params15,[x,y,0,1,u,1]);
end for;
end for;
end for;
for y in [0,1,w] do
for u in [0..p-1] do
Append(~params15,[0,y,0,1,u,1]);
end for;
end for;
//z=v=1
for t in [0..p-2] do
for u in [t+1..p-1] do
Append(~params15,[0,0,1,t,u,1]);
Append(~params15,[0,1,1,t,u,1]);
Append(~params15,[0,w,1,t,u,1]);
for y in [0..p-1] do
Append(~params15,[1,y,1,t,u,1]);
Append(~params15,[w,y,1,t,u,1]);
end for;
end for;
end for;
//Get set of non-zero squares with k^2 ~ k^-2
range:={};
for k in [1..(p-1) div 2] do
k2:=k^2 mod p;
km2:=F!(k2^-1); km2:=Z!km2;
if k2 le km2 then Include(~range,k2); end if;
end for;
for t in [0..p-1] do
Append(~params15,[0,0,1,t,t,1]);
Append(~params15,[0,1,1,t,t,1]);
Append(~params15,[0,w,1,t,t,1]);
for k2 in range do
Append(~params15,[1,k2,1,t,t,1]);
Append(~params15,[w,w*k2,1,t,t,1]);
end for;
for k in [1..(p-1) div 2] do
Append(~params15,[1,w*k^2,1,t,t,1]);
end for;
end for;
print #params15,
p^3+(7*p^2+17*p+59+5*Gcd(p-1,3)+(p+1)*Gcd(p-1,4))/2;
gtotal:=gtotal+#params15;
/*
Descendants of 5.14.
Case 16, cb=bac=caa=0, baa=cac
*/
//u=v=z=0
for y in [0,1,w] do
Append(~params16,[0,y,0,0,0,0]);
Append(~params16,[0,y,0,1,0,0]);
Append(~params16,[0,y,0,w,0,0]);
for t in [0..p-1] do
Append(~params16,[1,y,0,t,0,0]);
Append(~params16,[w,y,0,t,0,0]);
end for;
end for;
//u=v=0, z=1,w
Append(~params16,[0,0,1,0,0,0]);
Append(~params16,[0,0,w,0,0,0]);
Append(~params16,[0,1,1,0,0,0]);
Append(~params16,[0,1,w,0,0,0]);
Append(~params16,[0,w,1,0,0,0]);
Append(~params16,[0,w,w,0,0,0]);
if p mod 4 eq 1 then
Append(~params16,[0,w^2,1,0,0,0]);
Append(~params16,[0,w^2,w,0,0,0]);
Append(~params16,[0,w^3,1,0,0,0]);
Append(~params16,[0,w^3,w,0,0,0]);
end if;
for y in [0..p-1] do
Append(~params16,[0,y,1,1,0,0]);
Append(~params16,[0,y,w,1,0,0]);
Append(~params16,[0,y,1,w,0,0]);
Append(~params16,[0,y,w,w,0,0]);
end for;
for y in [0..p-1] do
for t in [0..p-1] do
Append(~params16,[1,y,1,t,0,0]);
Append(~params16,[1,y,w,t,0,0]);
Append(~params16,[w,y,1,t,0,0]);
Append(~params16,[w,y,w,t,0,0]);
end for;
end for;
//u=0, v=1
Append(~params16,[0,0,0,0,0,1]);
Append(~params16,[0,0,1,0,0,1]);
Append(~params16,[0,0,w,0,0,1]);
if p mod 3 eq 1 then
Append(~params16,[0,0,w^2,0,0,1]);
Append(~params16,[0,0,w^3,0,0,1]);
Append(~params16,[0,0,w^4,0,0,1]);
Append(~params16,[0,0,w^5,0,0,1]);
end if;
for z in [0..p-1] do
Append(~params16,[0,0,z,1,0,1]);
Append(~params16,[0,0,z,w,0,1]);
end for;
for z in [0..p-1] do
for t in [0..p-1] do
Append(~params16,[0,1,z,t,0,1]);
Append(~params16,[0,w,z,t,0,1]);
end for;
end for;
for y in [0..p-1] do
for z in [0..p-1] do
for t in [0..p-1] do
Append(~params16,[1,y,z,t,0,1]);
Append(~params16,[w,y,z,t,0,1]);
end for;
end for;
end for;
//u=1
Append(~params16,[0,0,0,0,1,0]);
Append(~params16,[0,1,0,0,1,0]);
Append(~params16,[0,w,0,0,1,0]);
if p mod 3 eq 1 then
Append(~params16,[0,w^2,0,0,1,0]);
Append(~params16,[0,w^3,0,0,1,0]);
Append(~params16,[0,w^4,0,0,1,0]);
Append(~params16,[0,w^5,0,0,1,0]);
end if;
if p mod 4 eq 1 then
for v in [1,w,w^2,w^3] do
for y in [0..(p-1) div 2] do
Append(~params16,[0,y,0,0,1,v]);
end for;
end for;
end if;
if p mod 4 eq 3 then
for v in [1,w] do
for y in [0..p-1] do
Append(~params16,[0,y,0,0,1,v]);
end for;
end for;
end if;
for v in [0..p-1] do
for y in [0..p-1] do
Append(~params16,[0,y,0,1,1,v]);
Append(~params16,[0,y,0,w,1,v]);
end for;
end for;
for t in [0..p-1] do
for v in [0..p-1] do
for y in [0..p-1] do
Append(~params16,[0,y,1,t,1,v]);
Append(~params16,[0,y,w,t,1,v]);
end for;
end for;
end for;
for z in [0..p-1] do
for t in [0..p-1] do
for v in [0..p-1] do
for y in [0..p-1] do
Append(~params16,[1,y,z,t,1,v]);
Append(~params16,[w,y,z,t,1,v]);
end for;
end for;
end for;
end for;
print #params16,
2*p^4+4*p^3+8*p^2+14*p+11+4*Gcd(p-1,3)+3*Gcd(p-1,4);
gtotal:=gtotal+#params16;
/*
Descendants of 5.14.
Case 17, cb=bac=0, cac=baa, caa=bab
*/
mats:=[];
//get pc,pb
for y5 in [0,1,lns] do
for y6 in [0..p-1] do
for y3 in [0..p-1] do
for y4 in [0..p-1] do
A:=H22![y3,y4,y5,y6];
if A eq 0 then
Append(~mats,A);
continue;
end if;
new:=1;
index:=p^3*y5+p^2*y6+p*y3+y4;
for a in [1..p-1] do
for x in CU do
c:=a*x;
B:=H22![a^-1*c^2,0,0,c];
C:=H22![a*c^2,0,0,a^2*c];
D:=B*A*C^-1;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=0; end if;
B:=H22![0,a^-1*c^2,c,0];
C:=H22![0,a*c^2,a^2*c,0];
D:=B*A*C^-1;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~mats,A);
//print y3,y4,y5,y6;
end if;
end for;
end for;
end for;
end for;
for AS in mats do
//Get stabilizer of AS
stab1:=[];
stab2:=[];
for a in [1..p-1] do
for x in CU do
c:=a*x;
B:=H22![a^-1*c^2,0,0,c];
C:=H22![a*c^2,0,0,a^2*c];
D:=B*AS*C^-1;
if D eq AS then
Append(~stab1,H33![a,0,0,0,a^-1*c^2,0,0,0,c]);
Append(~stab2,C);
end if;
B:=H22![0,a^-1*c^2,c,0];
C:=H22![0,a*c^2,a^2*c,0];
D:=B*AS*C^-1;
if D eq AS then
Append(~stab1,H33![a,0,0,0,0,a^-1*c^2,0,c,0]);
Append(~stab2,C);
end if;
end for;
end for;
y3:=Z!(AS[1][1]); y4:=Z!(AS[1][2]); y5:=Z!(AS[2][1]); y6:=Z!(AS[2][2]);
for y1 in [0..p-1] do
for y2 in [0..p-1] do
A:=H32![y1,y2,y3,y4,y5,y6];
if A eq 0 then
Append(~params17,[0,0,0,0,0,0]);
continue;
end if;
new:=1;
index:=p*y1+y2;
for ii in [1..#stab1] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=Z!(D[1][1]);
z2:=Z!(D[1][2]);
ind1:=p*z1+z2;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~params17,[y1,y2,y3,y4,y5,y6]);
end if;
end for;
end for;
end for;
print #params17,
(p^4+2*p^3+3*p^2+4*p+2)*(p-1)/Gcd(p-1,3)+3*p+4+(p^2+p+1)*Gcd(p-1,4)/2;
gtotal:=gtotal+#params17;
/*
Descendants of 5.14.
Case 18, cb=bac=0, cac=baa, caa=wbab (p=1mod3 only)
*/
if p mod 3 eq 1 then
mats:=[];
//get pc,pb
for y5 in [0,1,lns] do
for y6 in [0..p-1] do
for y3 in [0..p-1] do
for y4 in [0..p-1] do
A:=H22![y3,y4,y5,y6];
if A eq 0 then
Append(~mats,A);
continue;
end if;
new:=1;
index:=p^3*y5+p^2*y6+p*y3+y4;
for a in [1..p-1] do
for x in CU do
c:=a*x;
B:=H22![a^-1*c^2,0,0,c];
C:=H22![a*c^2,0,0,a^2*c];
D:=B*A*C^-1;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~mats,A);
//print y3,y4,y5,y6;
end if;
end for;
end for;
end for;
end for;
for AS in mats do
//Get stabilizer of AS
stab1:=[];
stab2:=[];
for a in [1..p-1] do
for x in CU do
c:=a*x;
B:=H22![a^-1*c^2,0,0,c];
C:=H22![a*c^2,0,0,a^2*c];
D:=B*AS*C^-1;
if D eq AS then
Append(~stab1,H33![a,0,0,0,a^-1*c^2,0,0,0,c]);
Append(~stab2,C);
end if;
end for;
end for;
y3:=Z!(AS[1][1]); y4:=Z!(AS[1][2]); y5:=Z!(AS[2][1]); y6:=Z!(AS[2][2]);
for y1 in [0..p-1] do
for y2 in [0..p-1] do
A:=H32![y1,y2,y3,y4,y5,y6];
if A eq 0 then
Append(~params18,[0,0,0,0,0,0]);
continue;
end if;
new:=1;
index:=p*y1+y2;
for ii in [1..#stab1] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=Z!(D[1][1]);
z2:=Z!(D[1][2]);
ind1:=p*z1+z2;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~params18,[y1,y2,y3,y4,y5,y6]);
end if;
end for;
end for;
end for;
print #params18,
(2*p^5+2*p^4+2*p^3+2*p^2+14*p+17)/3;
gtotal:=gtotal+#params18;
end if;
/*
Descendants of 5.14.
Case 19, cb=baa=caa=cac=0
*/
Append(~params19,[0,0,0,0,0,0]);
Append(~params19,[1,0,0,0,0,0]);
Append(~params19,[w,0,0,0,0,0]);
Append(~params19,[0,1,0,0,0,0]);
for x in [0,1,w] do
for y in [0,1] do
Append(~params19,[x,y,1,0,0,0]);
end for;
end for;
Append(~params19,[0,0,0,1,0,0]);
Append(~params19,[1,0,0,1,0,0]);
Append(~params19,[w,0,0,1,0,0]);
Append(~params19,[0,1,0,1,0,0]);
for t in [0..p-1] do
Append(~params19,[0,0,1,t,1,0]);
Append(~params19,[0,1,1,t,1,0]);
Append(~params19,[0,w,1,t,1,0]);
for y in [0..p-1] do
Append(~params19,[1,y,1,t,1,0]);
Append(~params19,[w,y,1,t,1,0]);
end for;
end for;
for x in [0,1,w] do
for t in [0,1,w] do
Append(~params19,[x,0,0,t,1,0]);
end for;
end for;
for x in [1,w] do
for t in [0..p-1] do
Append(~params19,[x,1,0,t,1,0]);
end for;
end for;
Append(~params19,[0,1,0,0,1,0]);
Append(~params19,[0,1,0,1,1,0]);
Append(~params19,[0,1,0,w,1,0]);
if p mod 4 eq 1 then
Append(~params19,[0,1,0,w^2,1,0]);
Append(~params19,[0,1,0,w^3,1,0]);
end if;
half:=(p+1) div 2;
for x in [0..p-1] do
if x eq half then continue; end if;
for z in [0,1,w] do
for t in [0,1] do
Append(~params19,[z,t,x,0,0,1]);
end for;
end for;
end for;
Append(~params19,[1,0,half,0,0,1]);
Append(~params19,[w,0,half,0,0,1]);
Append(~params19,[1,0,half,1,0,1]);
Append(~params19,[w,0,half,1,0,1]);
Append(~params19,[0,0,half,0,0,1]);
Append(~params19,[0,0,half,1,0,1]);
Append(~params19,[0,1,half,0,0,1]);
Append(~params19,[0,1,half,1,0,1]);
Append(~params19,[0,w,half,1,0,1]);
print #params19,2*p^2+11*p+27+Gcd(p-1,4);
gtotal:=gtotal+#params19;
/*
Descendants of 5.14.
Case 20, cb=baa=cac, caa=bab
*/
//z=v=y=0
for u in [0,1,w] do
Append(~params20,[0,0,0,0,u,0]);
Append(~params20,[0,0,0,1,u,0]);
Append(~params20,[0,0,0,w,u,0]);
for t in [0..p-1] do
Append(~params20,[1,0,0,t,u,0]);
Append(~params20,[w,0,0,t,u,0]);
end for;
end for;
//z=v=0, y=1, x=t=0
Append(~params20,[0,1,0,0,0,0]);
Append(~params20,[0,1,0,0,1,0]);
Append(~params20,[0,1,0,0,w,0]);
if p mod 3 eq 1 then
Append(~params20,[0,1,0,0,w^2,0]);
Append(~params20,[0,1,0,0,w^3,0]);
Append(~params20,[0,1,0,0,w^4,0]);
Append(~params20,[0,1,0,0,w^5,0]);
end if;
//z=v=0, y=1, x=0, t=1,w
for u in [0..p-1] do
Append(~params20,[0,1,0,1,u,0]);
Append(~params20,[0,1,0,w,u,0]);
end for;
//z=v=0, y=1, x=1,w
for t in [0..p-1] do
for u in [0..p-1] do
Append(~params20,[1,1,0,t,u,0]);
Append(~params20,[w,1,0,t,u,0]);
end for;
end for;
//z=0, v=1, x=t=u=0
Append(~params20,[0,0,0,0,0,1]);
Append(~params20,[0,1,0,0,0,1]);
Append(~params20,[0,w,0,0,0,1]);
if p mod 4 eq 1 then
Append(~params20,[0,w^2,0,0,0,1]);
Append(~params20,[0,w^3,0,0,0,1]);
end if;
//z=0, v=1, x=t=0, u=1,w
for y in [0..p-1] do
Append(~params20,[0,y,0,0,1,1]);
Append(~params20,[0,y,0,0,w,1]);
end for;
//z=0, v=1, x=0, t=1,w
for y in [0..p-1] do
for u in [0..p-1] do
Append(~params20,[0,y,0,1,u,1]);
Append(~params20,[0,y,0,w,u,1]);
end for;
end for;
//z=0, v=1, x=1,w
for y in [0..p-1] do
for t in [0..p-1] do
for u in [0..p-1] do
Append(~params20,[1,y,0,t,u,1]);
Append(~params20,[w,y,0,t,u,1]);
end for;
end for;
end for;
//z=1
for v in [0..p-1] do
Append(~params20,[0,0,1,0,0,v]);
Append(~params20,[0,1,1,0,0,v]);
Append(~params20,[0,w,1,0,0,v]);
if p mod 4 eq 1 then
Append(~params20,[0,w^2,1,0,0,v]);
Append(~params20,[0,w^3,1,0,0,v]);
end if;
for y in [0..p-1] do
Append(~params20,[0,y,1,0,1,v]);
Append(~params20,[0,y,1,0,w,v]);
end for;
for y in [0..p-1] do
for u in [0..p-1] do
Append(~params20,[0,y,1,1,u,v]);
Append(~params20,[0,y,1,w,u,v]);
end for;
end for;
for y in [0..p-1] do
for t in [0..p-1] do
for u in [0..p-1] do
Append(~params20,[1,y,1,t,u,v]);
Append(~params20,[w,y,1,t,u,v]);
end for;
end for;
end for;
end for;
print #params20,
2*p^4+4*p^3+6*p^2+11*p+11+2*Gcd(p-1,3)+(p+1)*Gcd(p-1,4);
gtotal:=gtotal+#params20;
/*
Descendants of 5.14.
Case 21, cb=caa=cac=0, bab=baa
*/
Append(~params21,[0,0,0,0,0,0]);
Append(~params21,[1,0,0,0,0,0]);
Append(~params21,[w,0,0,0,0,0]);
Append(~params21,[0,1,0,0,0,0]);
for x in [0..p-1] do
Append(~params21,[x,0,1,0,0,0]);
Append(~params21,[x,0,w,0,0,0]);
Append(~params21,[x,1,1,0,0,0]);
Append(~params21,[x,1,w,0,0,0]);
end for;
Append(~params21,[1,0,0,1,0,0]);
Append(~params21,[w,0,0,1,0,0]);
for x in [0..p-1] do
Append(~params21,[0,x,0,1,0,0]);
end for;
//pc=baa
for y in [0..p-1] do
for z in [0..p-1] do
for t in [0..p-1] do
Append(~params21,[1,y,z,t,1,0]);
Append(~params21,[w,y,z,t,1,0]);
end for;
end for;
end for;
for y in [0..p-1] do
for t in [0..p-1] do
Append(~params21,[0,y,1,t,1,0]);
Append(~params21,[0,y,w,t,1,0]);
end for;
end for;
for t in [0..p-1] do
Append(~params21,[0,1,0,t,1,0]);
Append(~params21,[0,w,0,t,1,0]);
if p mod 4 eq 1 then
Append(~params21,[0,w^2,0,t,1,0]);
Append(~params21,[0,w^3,0,t,1,0]);
end if;
end for;
Append(~params21,[0,0,0,0,1,0]);
Append(~params21,[0,0,0,1,1,0]);
Append(~params21,[0,0,0,w,1,0]);
if p mod 4 eq 1 then
Append(~params21,[0,0,0,w^2,1,0]);
Append(~params21,[0,0,0,w^3,1,0]);
end if;
for x in [0..p-1] do
if x eq 1 then continue; end if;
for z in [0..p-1] do
for t in [0,1] do
Append(~params21,[x,0,z,t,0,1]);
end for;
end for;
end for;
for x in [0..p-1] do
if x eq w then continue; end if;
for z in [0..p-1] do
for t in [0,1] do
Append(~params21,[x,0,z,t,0,w]);
end for;
end for;
end for;
half:=(p+1) div 2;
wover2:=F!(w/2); wover2:=Z!wover2;
for z in [0..p-1] do
if z eq half then continue; end if;
Append(~params21,[1,0,z,0,0,1]);
Append(~params21,[1,1,z,0,0,1]);
end for;
for z in [0..p-1] do
if z eq wover2 then continue; end if;
Append(~params21,[w,0,z,0,0,w]);
Append(~params21,[w,1,z,0,0,w]);
end for;
Append(~params21,[1,0,half,0,0,1]);
Append(~params21,[w,0,wover2,0,0,w]);
Append(~params21,[1,0,half,1,0,1]);
Append(~params21,[w,0,wover2,1,0,w]);
for t in [0..p-1] do
Append(~params21,[1,1,half,t,0,1]);
Append(~params21,[w,1,wover2,t,0,w]);
end for;
print #params21,
2*p^3+6*p^2+7*p+7+(p+1)*Gcd(p-1,4);
gtotal:=gtotal+#params21;
/*
Descendants of 5.14.
Case 22, cb=baa=caa=0, cac=wbab
*/
mats:=[];
//get pb,pc
bcrange:=[[0,1]];
for i in [0..p-1] do
Append(~bcrange,[1,i]);
end for;
for y3 in [0,1] do
for y4 in [0..p-1] do
for y5 in [0..p-1] do
for y6 in [0..p-1] do
A:=H22![y3,y4,y5,y6];
if A eq 0 then
Append(~mats,A);
continue;
end if;
new:=1;
index:=p^3*y3+p^2*y4+p*y5+y6;
for bc in bcrange do
b:=bc[1]; c:=bc[2];
for m in [-1,1] do
B:=H22![w*b,m*c,w*c,w*m*b];
C:=H22![w*(w*b^2+c^2),m*2*w*b*c,2*w^2*b*c,m*w*(w*b^2+c^2)];
D:=B*A*C^-1;
if D[1][1] ne 0 then D:=D[1][1]^-1*D; end if;
if D[1][1] eq 0 and D[1][2] ne 0 then D:=D[1][2]^-1*D; end if;
if D[1][1] eq 0 and D[1][2] eq 0 and D[2][1] ne 0 then D:=D[2][1]^-1*D; end if;
if D[1][1] eq 0 and D[1][2] eq 0 and D[2][1] eq 0 and D[2][2] ne 0 then D:=D[2][2]^-1*D; end if;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z3+p^2*z4+p*z5+z6;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~mats,A);
//print y3,y4,y5,y6;
end if;
end for;
end for;
end for;
end for;
for AS in mats do
//Get stabilizer of AS
stab1:=[];
stab2:=[];
for b in [0..p-1] do
for c in [0..p-1] do
for m in [-1,1] do
if b+c eq 0 then continue; end if;
B:=H22![w*b,m*c,w*c,w*m*b];
C:=H22![w*(w*b^2+c^2),m*2*w*b*c,2*w^2*b*c,m*w*(w*b^2+c^2)];
D:=B*AS*C^-1;
if D[1][1] ne 0 then D:=D[1][1]^-1*D; end if;
if D[1][1] eq 0 and D[1][2] ne 0 then D:=D[1][2]^-1*D; end if;
if D[1][1] eq 0 and D[1][2] eq 0 and D[2][1] ne 0 then D:=D[2][1]^-1*D; end if;
if D[1][1] eq 0 and D[1][2] eq 0 and D[2][1] eq 0 and D[2][2] ne 0 then D:=D[2][2]^-1*D; end if;
if D eq AS then
Append(~stab1,H33![1,0,0,0,w*b,m*c,0,w*c,w*m*b]);
Append(~stab2,C);
end if;
end for;
end for;
end for;
y3:=Z!(AS[1][1]); y4:=Z!(AS[1][2]); y5:=Z!(AS[2][1]); y6:=Z!(AS[2][2]);
for y1 in [0..p-1] do
for y2 in [0..p-1] do
A:=H32![y1,y2,y3,y4,y5,y6];
if A eq 0 then
Append(~params22,[0,0,0,0,0,0]);
continue;
end if;
new:=1;
index:=p*y1+y2;
for ii in [1..#stab1] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=Z!(D[1][1]);
z2:=Z!(D[1][2]);
ind1:=p*z1+z2;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~params22,[y1,y2,y3,y4,y5,y6]);
end if;
end for;
end for;
end for;
print #params22,
(2*p^3+3*p^2+3*p+13-Gcd(p-1,3)+(p+1)*Gcd(p-1,4))/2;
gtotal:=gtotal+#params22;
/*
Descendants of 5.14.
Case 23, cb=baa=0, caa=bac, cac=wbab
*/
sol:=0;
if p mod 3 eq 2 then
//look for solution of 12wx^2=-1
for x in [1..p-1] do
if F!(12*w*x^2+1) eq 0 then sol:=x; break; end if;
end for;
end if;
mats:=[];
//get pc,pb
for y5 in [0,1,lns] do
for y6 in [0..p-1] do
for y3 in [0..p-1] do
for y4 in [0..p-1] do
A:=H22![y3,y4,y5,y6];
if A eq 0 then
Append(~mats,A);
continue;
end if;
new:=1;
index:=p^3*y5+p^2*y6+p*y3+y4;
for a in [1..p-1] do
for m in [-1,1] do
B:=H22![a,0,0,m*a];
C:=H22![a^3,0,0,m*a^3];
D:=B*A*C^-1;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=0; end if;
if p mod 3 eq 2 and new eq 1 then
for b in [sol,-sol] do
B:=H22![-2*w*a*b,a,m*w*a,-2*m*w*a*b];
C:=H22![8/3*w^2*a^3*b,4/3*w*a^3,4/3*m*w^2*a^3,8/3*m*w^2*a^3*b];
D:=B*A*C^-1;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
end if;
if new eq 0 then break; end if;
end for;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~mats,A);
//print y3,y4,y5,y6;
end if;
end for;
end for;
end for;
end for;
for AS in mats do
//Get stabilizer of AS
stab1:=[];
stab2:=[];
for a in [1..p-1] do
for m in [-1,1] do
B:=H22![a,0,0,m*a];
C:=H22![a^3,0,0,m*a^3];
D:=B*AS*C^-1;
if D eq AS then
Append(~stab1,H33![a,0,0,0,a,0,0,0,m*a]);
Append(~stab2,C);
end if;
if p mod 3 eq 2 then
for b in [sol,-sol] do
B:=H22![-2*w*a*b,a,m*w*a,-2*m*w*a*b];
C:=H22![8/3*w^2*a^3*b,4/3*w*a^3,4/3*m*w^2*a^3,8/3*m*w^2*a^3*b];
D:=B*AS*C^-1;
if D eq AS then
Append(~stab1,H33![4*w*a*b,-3*w*a*b,a/2,0,-2*w*a*b,a,0,m*w*a,-2*m*w*a*b]);
Append(~stab2,C);
end if;
end for;
end if;
end for;
end for;
y3:=Z!(AS[1][1]); y4:=Z!(AS[1][2]); y5:=Z!(AS[2][1]); y6:=Z!(AS[2][2]);
for y1 in [0..p-1] do
for y2 in [0..p-1] do
A:=H32![y1,y2,y3,y4,y5,y6];
if A eq 0 then
Append(~params23,[0,0,0,0,0,0]);
continue;
end if;
new:=1;
index:=p*y1+y2;
for ii in [1..#stab1] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=Z!(D[1][1]);
z2:=Z!(D[1][2]);
ind1:=p*z1+z2;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~params23,[y1,y2,y3,y4,y5,y6]);
end if;
end for;
end for;
end for;
if p mod 3 eq 1 then
expect:=p^5+p^4+p^3+p^2+p+2+(p^2+p+1)*Gcd(p-1,4)/2;
else;
expect:=p^5/3+p^4/3+p^3/3+p^2/3+p+2+(p^2+p+1)*Gcd(p-1,4)/2;
end if;
print #params23,expect;
gtotal:=gtotal+#params23;
/*
Descendants of 5.14.
Case 24, cb=baa=0, caa=xbab+bac, cac=wbab
where x is not a value of y(y^2+3w)/(3y^2+w)
p=2 mod 3 only
*/
if p mod 3 eq 2 then
val:={};
for x in [0..p-1] do
if F!(3*x^2+w) ne 0 then
a:=F!(x*(x^2+3*w))*(F!(3*x^2+w))^-1;
Include(~val,Z!a);
end if;
end for;
for a in [1..p-1] do
if a notin val then s:=a; break; end if;
end for;
//This is the value of s we need for the presentation
//look for solution of wb^2=-3
for y in [1..p-1] do
if F!(w*y^2+3) eq 0 then b:=y; break; end if;
end for;
B1:=H22![2,2*b,2*w*b,2];
C1:=H22![32,-32*b,-32*w*b,32];
B2:=H22![2,-2*b,-2*w*b,2];
C2:=H22![32,32*b,32*w*b,32];
BB1:=H33![-4,s*b+3,3*s*w^-1+b,0,2,2*b,0,2*w*b,2];
BB2:=H33![-4,-s*b+3,3*s*w^-1-b,0,2,-2*b,0,-2*w*b,2];
mats:=[];
//get pc,pb
for y5 in [0,1,lns] do
for y6 in [0..p-1] do
for y3 in [0..p-1] do
for y4 in [0..p-1] do
A:=H22![y3,y4,y5,y6];
if A eq 0 then
Append(~mats,A);
continue;
end if;
new:=true;
index:=p^3*y5+p^2*y6+p*y3+y4;
A1:=B1*A*C1^-1;
A2:=B2*A*C2^-1;
for a in [1..(p-1) div 2] do
D:=(F!a)^-2*A;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=false; break; end if;
D:=(F!a)^-2*A1;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=false; break; end if;
D:=(F!a)^-2*A2;
z3:=Z!(D[1][1]);
z4:=Z!(D[1][2]);
z5:=Z!(D[2][1]);
z6:=Z!(D[2][2]);
ind1:=p^3*z5+p^2*z6+p*z3+z4;
if ind1 lt index then new:=false; break; end if;
end for;
if new then
Append(~mats,A);
//print y3,y4,y5,y6;
end if;
end for;
end for;
end for;
end for;
for AS in mats do
//Get stabilizer of AS
stab1:=[];
stab2:=[];
AS1:=B1*AS*C1^-1;
AS2:=B2*AS*C2^-1;
for a in [1..(p-1) div 2] do
D:=(F!a)^-2*AS;
if D eq AS then
Append(~stab1,H33![1,0,0,0,1,0,0,0,1]);
Append(~stab2,H22![a^2,0,0,a^2]);
end if;
D:=(F!a)^-2*AS1;
if D eq AS then
Append(~stab1,BB1);
Append(~stab2,a^2*C1);
end if;
D:=(F!a)^-2*AS2;
if D eq AS then
Append(~stab1,H33!BB2);
Append(~stab2,a^2*C2);
end if;
end for;
y3:=Z!(AS[1][1]); y4:=Z!(AS[1][2]); y5:=Z!(AS[2][1]); y6:=Z!(AS[2][2]);
for y1 in [0..p-1] do
for y2 in [0..p-1] do
A:=H32![y1,y2,y3,y4,y5,y6];
if A eq 0 then
Append(~params24,[0,0,0,0,0,0]);
continue;
end if;
new:=1;
index:=p*y1+y2;
for ii in [1..#stab1] do
B:=stab1[ii];
C:=stab2[ii];
D:=B*A*C^-1;
z1:=Z!(D[1][1]);
z2:=Z!(D[1][2]);
ind1:=p*z1+z2;
if ind1 lt index then new:=0; end if;
if new eq 0 then break; end if;
end for;
if new eq 1 then
Append(~params24,[y1,y2,y3,y4,y5,y6]);
end if;
end for;
end for;
end for;
print #params24,2*(p^5+p^4+p^3+p^2)/3+2*p+3;
gtotal:=gtotal+#params24;
end if;
print "Algebra 5.14 has",gtotal,"descendants of order p^7 and class 3";
print "2p^5+7p^4+19p^3+49p^2+128p+256+(p^2+7p+29)gcd(p-1,3)+
(p^2+7p+24)gcd(p-1,4)+(p+3)gcd(p-1,5) =",
2*p^5+7*p^4+19*p^3+49*p^2+128*p+256+(p^2+7*p+29)*Gcd(p-1,3)+
(p^2+7*p+24)*Gcd(p-1,4)+(p+3)*Gcd(p-1,5);
print Cputime(tt);
[ Dauer der Verarbeitung: 0.42 Sekunden
(vorverarbeitet)
]
|
2026-04-02
|