Commit 911c2d9d authored by Gonzalo Tornaría's avatar Gonzalo Tornaría

changes for 353

parent a9430713
intrinsic OuterAutomorphismRepresentatives(G :: Grp) -> []
{ representatives for Out(G)/Inn(G) }
aut := AutomorphismGroup(G);
// m1 : autfp -> aut
autfp, m1 := FPGroup(aut);
// m2 : autfp -> outfp
outfp, m2 := OuterFPGroup(aut);
// m3 : outfp -> out
out, m3 := PermutationGroup(outfp);
return [g @@ m3 @@ m2 @ m1 : g in out];
end intrinsic;
intrinsic OuterAutomorphismGenerators(G :: Grp) -> []
{ generators for Out(G)/Inn(G) }
aut := AutomorphismGroup(G);
// m1 : autfp -> aut
autfp, m1 := FPGroup(aut);
// m2 : autfp -> outfp
outfp, m2 := OuterFPGroup(aut);
return [g @@ m2 @ m1 : g in Generators(outfp)];
end intrinsic;
intrinsic IsIsomorphicPerm(G :: GrpPerm, H :: GrpPerm) -> BoolElt, Map
{ Assuming G, H have the same degree, return an isomorphism which
preserves the cycle decomposition, if such isomorphism exists }
n := Degree(G);
if Degree(H) ne n then
return false;
end if;
b, x := IsConjugate(Sym(n), G, H);
if not b then
return false;
end if;
gens := OrderedGenerators(G);
isom := Isomorphism(G, H, gens, [x^-1*g*x : g in gens]);
return true, isom;
end intrinsic;
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
// Galois theory for C353
// faster but conditional
// SetClassGroupBounds("GRH");
load "ex.m";
//load "polys.m";
ZZ := IntegerRing();
ZZx<x> := PolynomialRing(ZZ);
load "all-353.m";
f18 := DefiningPolynomial(R1);
gal, r, s := GaloisGroup(f18);
b, rho := IsIsomorphic(gal, G5);
assert b;
// we know Frob5
Frob5cycle :=
Reverse(Sort([<x,Multiplicity(s, x)> : x in Set(s)]))
where s is ([ Degree(f[1])
: f in Factorization(ChangeRing(f18,GF(5))) ]);
Frob5 := [c[3] : c in ConjugacyClasses(gal)
| CycleStructure(c[3]) eq Frob5cycle ];
assert(#Frob5 eq 1);
Frob5 := Frob5[1];
// we expect Tr(Frob5) = 1
if Trace(rho(Frob5)) ne 1 then
// fix it by composing rho with the outer automorphism
rho := rho * a
where a is autg`FpGroup[2](outg.1 @@ m)
where outg, m is OuterFPGroup(autg)
where autg is AutomorphismGroup(G5);
print ".";
end if;
// We expect Tr(Frob5) = 1
// Make sure this is right
assert Trace(rho(Frob5)) eq 1;
f353_R1 := GaloisSubgroup(s, H5 @@ rho);
//R1 := NumberField(f353_R1);
P2 := Radical(2*Integers(R1));
S0 := Radical(353*Integers(R1));
S5 := P2^5 * S0;
//gal, r, s := GaloisGroup(f353_R1);
function quad_ext(S, inf)
ray, m := RayClassGroup(S, inf);
return
[ AbelianExtension(Inverse(mq)*m)
where _, mq is quo<ray | Q>
where Q is QQ`subgroup
: QQ in Subgroups(ray : Quot:=[2])];
end function;
//qexts := quad_ext(S5, [1..#RealPlaces(R1)]);
Attach("Modularity.m");
Attach("GrpExt.m");
Attach("Grp.m");
load "ex.m";
load "ex-277.m";
......@@ -7,10 +8,10 @@ load "ex-277.m";
m := ModNew(R1, rho);
PS := Multiset([]);
time for i := 1 to #qexts do
R2:=qexts[i];
phis := ModPhis(m, R2);
R2:=NumberField(qexts[i]);
proj, phis := ModPhis(m, R2);
dim := Integers() ! Log(2, #Domain(phis[1])/#G1);
ps := [ModPrimes(m, R2, phi) : phi in phis];
ps := [ModPrimes(m, R2, proj, phi) : phi in phis];
for p in ps do
Include(~PS, p);
end for;
......
Attach("Modularity.m");
Attach("GrpExt.m");
Attach("Grp.m");
//load "ex.m";
load "ex-353.m";
m := ModNew(R1, rho);
PS := Multiset([]);
time for i := 1 to #all do
R2:=NumberField(Polynomial(R1, [-all[i], 0, 1]));
proj, phis := ModPhis(m, R2);
dim := Integers() ! Log(2, #Domain(phis[1])/#G5);
ps := [ModPrimes(m, R2, proj, phi) : phi in phis];
for p in ps do
Include(~PS, p);
end for;
printf "%4o: dim =%2o, %o\n", i, dim, Sort(ps);
if i mod 10 eq 0 then
printf "\n%o\n\n", PS;
end if;
end for;
printf "\n\nFINAL: %o\n\n", PS;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment