Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/lpres/gap/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 12.6.2024 mit Größe 5 kB image not shown  

Quelle  endos.gi   Sprache: unbekannt

 
############################################################################
##
#W  endos.gi   LPRES    René Hartung
##

############################################################################
##
#F  LPRES_EndomorphismsOfCover
##
## translates the endomorphisms of the LpGroup to endomorphisms of the 
## covering group and determines the images of the relators in the 
## multiplier.
##
InstallGlobalFunction( LPRES_EndomorphismsOfCover,
  function( G, ftl, Imgs, Defs, weights )
  local H, # covering group as Pcp group
 orders, # relative orders of the covering group
 b, # first new (pseudo) generator/tail
 Epim, # epimorphism from LpGroup into the covering group 
        fam,  # family of an LpGroup element
        map, # loop variable to determine 'endos'
 imgs, # loop variable to build the endomorphisms
 endos, # set of endomorphisms of the covering group
 obj,  # loop variable do determine the 'imgs'
 i,j,k, # loop variables
 w, # word in the Pcp group
 A, # set of endos as matrices, set of (it.) rels as vectors
        rel,  # loop variable to determine the images of the (it.) rels
 image; # exponent vector of each (iterated) relation

 
  # family of an LpGroup element (for the mappings)
  fam:=FamilyObj(GeneratorsOfGroup( G )[1]);

  # covering group (possibly inconsistent)
  H:=PcpGroupByCollectorNC(ftl);
  orders:=RelativeOrders(ftl);

  # first position of a new (pseudo) generator
  b:=Position(weights,Maximum(weights));

  # build the epimorphism into the covering group
  imgs:=[];
  for i in [1..Length(Imgs)] do
    if IsInt(Imgs[i]) then 
      imgs[i]:=PcpElementByGenExpList(ftl,[Imgs[i],1]);
    else
      imgs[i]:=PcpElementByGenExpList(ftl,Imgs[i]);
    fi;
  od;
  Epim:=GroupHomomorphismByImagesNC( G , H , GeneratorsOfGroup( G ), imgs );
   
  # build the endomorphisms of the covering group 
  endos:=[];
  for map in EndomorphismsOfLpGroup( G ) do
    imgs:=[];
    for j in [1..Length(Defs)] do 
      if IsInt(Defs[j]) then
 if Defs[j]>0 and weights[j]=1 then 
   # generator of G/G'

   # map is an endomorphism of the free group (no LpGroup-element)
   imgs[j]:=ElementOfLpGroup(fam,
                        FreeGeneratorsOfLpGroup( G )[Defs[j]]^map)^Epim;

          if LPRES_TEST_ALL then 
            if j>=b and not PositionNonZero(Exponents(imgs[j]))>=b then 
              Info(InfoLPRES,3,"wrong image of type 1\n");
              return(fail);
            fi;
          fi;
        elif Defs[j]>0 and weights[j]>1 then 
          # pseudo generator defined by an image
          w:=One(H);
          for k in [1,3..Length(Imgs[Defs[j]])-3] do
            if not IsBound(imgs[Imgs[Defs[j]][k]]) then 
              Error("in computing the endomorphism\n");
            fi; 
            w:=w*(imgs[Imgs[Defs[j]][k]]^Imgs[Defs[j]][k+1]);
          od;
          # map is an endomorphism of the free group (no LpGroup-element)
          imgs[j]:=w^-1* ElementOfLpGroup(fam,
                         FreeGeneratorsOfLpGroup( G )[Defs[j]]^map)^Epim;
          if LPRES_TEST_ALL then 
            if j>=b and not PositionNonZero(Exponents(imgs[j]))>=b then 
              Info(InfoLPRES,3,"wrong image of type 2\n");
              return(fail);
            fi;
          fi;
        elif Defs[j]<0 then 
          # pseudo generator from power relation
          w:=One(H);
          obj:=GetPower(ftl,-Defs[j]);
          obj:=obj{[1..Length(obj)-2]};
          for k in [1,3..Length(obj)-1] do
            w:=w*imgs[obj[k]]^obj[k+1];
          od;

          imgs[j]:=w^-1*imgs[-Defs[j]]^orders[-Defs[j]];

          if LPRES_TEST_ALL then
            if j>=b and not PositionNonZero(Exponents(imgs[j]))>=b then 
              Info(InfoLPRES,3,"wrong image of type 3\n");
              return(fail);
            fi;
          fi;
        else
          Error("Strange Entry in Defs\n");
        fi;
      elif IsList(Defs[j]) then 
        # (pseudo) generator from COMM ( Defs[i][1], Defs[i][2] )
        w:=One(H);
        obj:=GetConjugate(ftl,Defs[j][1],Defs[j][2]);
        obj:=obj{[3..Length(obj)-2]};
        for k in [1,3..Length(obj)-1] do
          w:=w*imgs[obj[k]]^obj[k+1];
        od;
         
        imgs[j]:=w^-1*Comm(imgs[Defs[j][1]],imgs[Defs[j][2]]);
        if LPRES_TEST_ALL then 
          if j>=b and not PositionNonZero(Exponents(imgs[j]))>=b then 
            Info(InfoLPRES,3,"wrong image of type 4\n");
            return(fail);
          fi;
        fi;
      else
        Error("Strange Entry in Defs\n");
      fi;
    od;
    Add(endos,imgs);
  od;

  # return a record containing the endomorphisms
  # and the relators under Epim
  A:=rec();
  
  # endomorphisms on T by matrices
  A.Endomorphisms:=[];
  for i in [1..Length(endos)] do
    A.Endomorphisms[i]:=[];
    for k in [b..Length(endos[i])] do
      if not IsZero(Exponents(endos[i][k]){[1..b-1]}) then 
        Info(InfoLPRES,3,"L-presentation is not invariant\n");
        return(fail);
      fi;
      Add(A.Endomorphisms[i],Exponents(endos[i][k]){[b..Length(weights)]});
    od;
  od;

  # the fixed relators
  A.Relations:=[];
  for rel in FixedRelatorsOfLpGroup( G ) do
    image:=ElementOfLpGroup(fam,rel)^Epim;
    if not IsZero(Exponents(image){[1..b-1]}) then 
      Error("in LPRES_EndomorphismsOfCover: wrong image in cover\n");
    fi;
    Add(A.Relations,Exponents(image){[b..Length(weights)]});
  od;

  # the iterated relators
  A.IteratedRelations:=[];
  for rel in IteratedRelatorsOfLpGroup( G ) do
    image:=ElementOfLpGroup(fam,rel)^Epim;
    if not IsZero(Exponents(image){[1..b-1]}) then 
      Error("in LPRES_EndomorphismsOfCover: wrong image in cover\n");
    fi;
    Add(A.IteratedRelations,Exponents(image){[b..Length(weights)]});
  od;

  return(A);
  end);

[ Dauer der Verarbeitung: 0.34 Sekunden  (vorverarbeitet)  ]