[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