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: [EMAIL PROTECTED], 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 ###


_______________________________________________
Forum mailing list
[email protected]
http://mail.gap-system.org/mailman/listinfo/forum

Reply via email to