[GAP Forum] Finding only one GQuotient
Alexander Hulpke
hulpke at math.colostate.edu
Mon Mar 31 18:12:31 BST 2008
Dear Nathan,
> The manual indicates [1] that GQuotients should return only the
> first quotient it finds if the "findall" option is set to false.
> However, when I try
>
> gap> GQuotients(FreeGroup(2), AlternatingGroup(5) : findall := false);
>
> I get all 19 epimorphisms. What am I doing wrong?
You're doing nothing wrong, the ``findall'' option so far was
implemented only in the code that searches from finite groups (the
code searching from finitely presented groups is a bit different).
This will be fixed in the next release, I append code for the method
which you can read into GAP to get the ``findall''' option already now.
Apologies for the problem,
Alexander
-- Colorado State University, Department of Mathematics,
Weber Building, 1874 Campus Delivery, Fort Collins, CO 80523-1874, USA
email: hulpke at math.colostate.edu, Phone: ++1-970-4914288
http://www.math.colostate.edu/~hulpke
### snip ###
#############################################################################
##
#F GQuotients(<F>,<G>) . . . . . epimorphisms from F onto G up to
conjugacy
##
InstallMethod(GQuotients,"whole fp group to finite group",true,
[IsSubgroupFpGroup and IsWholeFamily,IsGroup and IsFinite],1,
function (F,G)
local Fgens, # generators of F
rels, # power relations
cl, # classes of G
imgo,imgos,sel,
e, # excluded orders (for which the presentation collapses
u, # trial generating set's group
pimgs, # possible images
val, # its value
i, # loop
h; # epis
Fgens:=GeneratorsOfGroup(F);
if Length(Fgens)=0 then
if Size(G)>1 then
return [];
else
return [GroupHomomorphismByImagesNC(F,G,[],[])];
fi;
fi;
if Size(G)=1 then
return [GroupHomomorphismByImagesNC(F,G,Fgens,
List(Fgens,i->One(G)))];
elif Length(Fgens)=1 then
Info(InfoMorph,1,"Cyclic group: only one quotient possible");
# a cyclic group has at most one quotient
# force size (in abelian invariants)
e:=AbelianInvariants(F);
if not IsCyclic(G) or (IsFinite(F) and not IsInt(Size(F)/
Size(G))) then
return [];
else
# get the cyclic gens
h:=First(AsList(G),i->Order(i)=Size(G));
# just map them
return [GroupHomomorphismByImagesNC(F,G,Fgens,[h])];
fi;
fi;
cl:=ConjugacyClasses(G);
# search relators in only one generator
rels:=ListWithIdenticalEntries(Length(Fgens),false);
for i in RelatorsOfFpGroup(F) do
if NrSyllables(i)=1 then
# found relator in only one generator
val:=Position(List(FreeGeneratorsOfFpGroup(F),j-
>GeneratorSyllable(j,1)),
GeneratorSyllable(i,1));
u:=AbsInt(ExponentSyllable(i,1));
if rels[val]=false then
rels[val]:=u;
else
rels[val]:=Gcd(rels[val],u);
fi;
fi;
od;
# exclude orders
e:=Set(List(cl,i->Order(Representative(i))));
e:=List(Fgens,i->ShallowCopy(e));
for i in [1..Length(Fgens)] do
if rels[i]<>false then
e[i]:=Filtered(e[i],j->rels[i]<>j and IsInt(rels[i]/j));
fi;
od;
e:=ExcludedOrders(F,e);
# find potential images
pimgs:=[];
for i in [1..Length(Fgens)] do
if rels[i]<>false then
Info(InfoMorph,2,"generator order must divide ",rels[i]);
u:=Filtered(cl,j->IsInt(rels[i]/Order(Representative(j))));
else
Info(InfoMorph,2,"no restriction on generator order");
u:=ShallowCopy(cl);
fi;
u:=Filtered(u,j->not Order(Representative(j)) in e[i]);
Add(pimgs,u);
od;
val:=Product(pimgs,i->Sum(i,Size));
Info(InfoMorph,2,List(pimgs,Length)," possibilities, Value: ",val);
if ValueOption("findall")=false then
h:=MorClassLoop(G,pimgs, rec(gens:=Fgens,to:=G,from:=F,
free:=FreeGeneratorsOfFpGroup(F),
rels:=List(RelatorsOfFpGroup(F),i->[i,1])),5);
if not IsList(h) then h:=[h];fi;
else
h:=MorClassLoop(G,pimgs, rec(gens:=Fgens,to:=G,from:=F,
free:=FreeGeneratorsOfFpGroup(F),
rels:=List(RelatorsOfFpGroup(F),i->[i,1])),13);
fi;
Info(InfoMorph,2,"Found ",Length(h)," maps, test kernels");
imgos:=[];
cl:=[];
u:=[];
for i in h do
imgo:=List(Fgens,j->Image(i,j));
imgo:=Concatenation(imgo,MorFroWords(imgo));
imgo:=List(imgo,Order);
sel:=Filtered([1..Length(imgos)],i->imgos[i]=imgo);
if not KernelOfMultiplicativeGeneralMapping(i) in u{sel} then
Add(u,KernelOfMultiplicativeGeneralMapping(i));
Add(imgos,imgo);
Add(cl,i);
fi;
od;
Info(InfoMorph,1,Length(h)," found -> ",Length(cl)," homs");
return cl;
end);
## snip ###
More information about the Forum
mailing list