Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/hap/lib/SimplicialGroups/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 19.6.2025 mit Größe 10 kB image not shown  

Quelle  nerveOfCatOneGroup.gi   Sprache: unbekannt

 
###############################################################################
#0
#F NerveOfCatOneGroup
## Input: A cat-1-group or a morphism of cat-1-group or a sequence of 
##   morphisms of cat-1-groups
## Output: The image of the input under the functor
##    Nerve: (cat-1-groups)->(simplicial groups)
##
InstallGlobalFunction(NerveOfCatOneGroup,
function(X,n)
local 
 NerveOfCatOneGroup_Morpre, 
 C,NerveOfCatOneGroup_Obj, 
 NerveOfCatOneGroup_Mor,
 NerveOfCatOneGroup_Seq;
   
 ######################################################################
 #1 
 #F NerveOfCatOneGroup_Obj
 ## Input: Cat-1-group C and an integer number 
 ## Output: The nerve of C
 ##
 NerveOfCatOneGroup_Obj:=function(C,number)
 local 
  LGs,LBs, LDs, 
  s,t,e,
  N,M,AutM,phi,
  g,pg,m,ConjTmp,Tmp,TmpBs,TmpDs,
  Gens,GensToLists,ImgGens,
  LTmpB,LTmpD,
  i,j,k,n,len,
  EmbOnes,EmbTwos,Pros,
  ListToOne,BoundariesOfToList,DegeneraciesOfToList,
  GroupsList,BoundariesList,DegeneraciesList;

  if not IsHapCatOneGroup(C) then
   Print("This function must be applied to a cat-1-group.\n");
   return fail;
  fi;  
  s:=C!.sourceMap;
  t:=C!.targetMap;
  N:=Image(s);
  M:=Kernel(s);
  AutM:=AutomorphismGroup(M);
  e:=One(M);
  LGs:=[];
  LBs:=[];
  LDs:=[];
  EmbOnes:=[];
  EmbTwos:=[];
  Pros:=[];
  Gens:=[];
  GensToLists:=[];
  
  ########## Compute the list of group G_i for i=1..n ##############
  LGs[1]:=s!.Source;
  Gens[1]:=GeneratorsOfGroup(LGs[1]);
  GensToLists[1]:=List(Gens[1],g->[g]);
  for n in [2..number] do
   ConjTmp:=[];
   len:=Length(Gens[n-1]); 
   for i in [1..len] do
    m:=GensToLists[n-1][i][1];
    for j in [2..n-1] do
     m:=m*GensToLists[n-1][i][j];
    od;
    Add(ConjTmp,ConjugatorAutomorphismNC(M,Image(t,m)));
   od;
   phi:=GroupHomomorphismByImagesNC(LGs[n-1],AutM,Gens[n-1],ConjTmp);  
   LGs[n]:=SemidirectProduct(LGs[n-1],phi,M);
   EmbOnes[n]:=Embedding(LGs[n],1);
   EmbTwos[n]:=Embedding(LGs[n],2);
   Pros[n]:=Projection(LGs[n]); 
   Gens[n]:=GeneratorsOfGroup(LGs[n]);
   len:=Length(Gens[n]);
   GensToLists[n]:=List([1..len],x->[]);
   for i in [1..len] do
    g:=Gens[n][i];
    Tmp:=[];
    for j in [1..n-1] do
     pg:=Image(Pros[n-j+1],g);
     m:=PreImagesRepresentative(EmbTwos[n-j+1],
      (Image(EmbOnes[n-j+1],pg))^(-1)*g); 
     Tmp[n-j+1]:=m;
     g:=pg;
    od;
    Tmp[1]:=g;
    GensToLists[n][i]:=Tmp;
   od; 
  od;
  #############################################################
  #2
  #F BoundariesOfToList
  ## Input: List m:=[g_1,m_2,...,m_n]
  ## Output: List of the image of d_i(m) with i:=0..n 
  ##
  BoundariesOfToList:=function(Lm,n)
  local i,j,TmpB,LB;
  
   if n=2 then 
    LB:=[[Image(t,Lm[1])*Lm[2]],[Lm[1]*Lm[2]],[Lm[1]]]; 
   fi;

   if n>2 then
    LB:=[];
    
    ########## Compute d_0 #########################
    TmpB:=[Image(t,Lm[1])*Lm[2]];
    for i in [2..n-1] do
     TmpB[i]:=Lm[i+1];
    od;
    Add(LB,TmpB);
    
    ########## Compute d_1-->d_{n-1} ###############
    for i in [2..n] do
     TmpB:=[];
     for j in [1..i-2] do
      TmpB[j]:=Lm[j];
     od;
     TmpB[i-1]:= Lm[i-1]*Lm[i];
     for j in [i..n-1] do
      TmpB[j]:=Lm[j+1];
     od;
     Add(LB,TmpB);
    od;
    
    ######### Compute d_n ##########################
    TmpB:=[];
    for i in [1..n-1] do
     TmpB[i]:=Lm[i];
    od;
    Add(LB,TmpB);
   fi;
   return LB;
  end;
  ##
  ########## end of BoundariesOfToList ########################
  
  #############################################################
  #2
  #F DegeneraciesOfToList  
  ## Input: List m:=[g_1,m_2,...,m_n]
  ## Output: List of the image of s_i(m) with i:=0..n 
  ##
  DegeneraciesOfToList:=function(Lm,n)
  local i,j,TmpD,LD,g;
  
   g:=Lm[1]; 
   if n=1 then 
    LD:=[[Image(s,g),Image(s,g^(-1))*g],[g,e]]; 
   fi;
   if n>1 then
    LD:=[];
    
    ########## Compute s_0 #########################
    TmpD:=[Image(s,g),Image(s,g^(-1))*g];
    for i in [3..n+1] do
     TmpD[i]:=Lm[i-1];
    od;
    Add(LD,TmpD);
    
    ########## Compute s_1 -> s_n ##################
    for i in [2..n+1] do
     TmpD:=[];
     for j in [1..i-1] do
      TmpD[j]:=Lm[j];
     od;
     TmpD[i]:=e;
     for j in [i+1..n+1] do
      TmpD[j]:=Lm[j-1];
     od;
     Add(LD,TmpD);
    od;
   fi;
   return LD;
  end;
  ##
  ########## end of DegeneraciesOfToList ######################
  
  #############################################################
  #2   
  #F ListToOne
     ## Input: List [g_1,m_2,m_3,...,m_n]
        ## Output: The semi-product g_1 x| m_2 x| m_3 x| ... x| m_n
  ##
  ListToOne:=function(Lm,n) 
  local i,m;
  
   if n=1 then
    m:=Lm[1];
   fi;
   if n>1 then
    m:=Lm[1];
    for i in [2..n] do    
     m:=Image(EmbOnes[i],m)*Image(EmbTwos[i],Lm[i]);
    od; 
   fi;
   return m;
  end;
  ##
     ########## end of ListToOne #################################
  
  ############### Compute boundary maps #######################
  LBs:=[[t,s]];
  for n in [2..number] do
   len:=Length(Gens[n]);
   Tmp:=[];
   TmpBs:=[];
   for i in [1..len] do
    Tmp[i]:=BoundariesOfToList(GensToLists[n][i],n);
    TmpBs[i]:=List(Tmp[i],Lm->ListToOne(Lm,n-1));
   od;
   ImgGens:=[];
   for k in [1..n+1] do
    ImgGens[k]:=List([1..len],i->TmpBs[i][k]);
   od;
   LTmpB:=[];
   for k in [1..n+1] do
    LTmpB[k]:=GroupHomomorphismByImagesNC(LGs[n],LGs[n-1],
      Gens[n],ImgGens[k]);
   od;
   LBs[n]:=LTmpB;
  od;
  
  ############### Compute degeneracy maps #####################
  for n in [1..number-1] do
   len:=Length(Gens[n]);
   Tmp:=[];
   TmpDs:=[];
   for i in [1..len] do
    Tmp[i]:=DegeneraciesOfToList(GensToLists[n][i],n);
    TmpDs[i]:=List(Tmp[i],Lm->ListToOne(Lm,n+1));
   od;
   ImgGens:=[];
   for k in [1..n+1] do
    ImgGens[k]:=List([1..len],i->TmpDs[i][k]);
   od;
   LTmpD:=[];
   for k in [1..n+1] do
    LTmpD[k]:=GroupHomomorphismByImagesNC(LGs[n],LGs[n+1],
      Gens[n],ImgGens[k]);
   od;
   LDs[n]:=LTmpD; 
  od;

  #############################################################
  #2
  GroupsList:=function(n)
   if n=0 then
    return N;
   fi;
   return LGs[n];
  end;
  ##
  #############################################################
  
  #############################################################
  #2
  BoundariesList:=function(n,k)
   return LBs[n][k+1];
  end;
  ##
  #############################################################
  
  #############################################################
  #2
  DegeneraciesList:=function(n,k)
   if n=0 and k = 0 then
    return GroupHomomorphismByFunction(N,LGs[1],
      function(x) return x; end);
   fi;
   return LDs[n][k+1];
  end;
  ##
  #############################################################
  
  return Objectify(HapSimplicialGroup,
      rec(
     groupsList:=GroupsList,
     boundariesList:=BoundariesList,
     degeneraciesList:=DegeneraciesList,
     properties:=[["length",number]]
      ));
 end;
 ##
 ############### end of NerveOfCatOneGroup_Obj ########################
 
 ######################################################################
 #1
 #F NerveOfCatOneGroup_Morpre
 ## Input: Nerve of G, nerve of H, map f:G-->H
 ## Output: simplicial map between nerve of G and nerve of H
 ##
 NerveOfCatOneGroup_Morpre:=function(NG,NH,f,number)
 local 
  GLs,GEmbOnes,GEmbTwos,GPros,HLs,HEmbOnes,HEmbTwos,HPros,
  Gens,GensToLists,
  i,j,n,m,g,pg,len,
  Tmp,ImgGens,Maps,
  HListToOne,Mapping;
  
  GLs:=[];
  GEmbOnes:=[];
  GEmbTwos:=[];
  GPros:=[];
  HLs:=[];
  HEmbOnes:=[];
  HEmbTwos:=[];
  HPros:=[];
  Gens:=[];
  GensToLists:=[];
  for n in [2..number] do
   GLs[n]:=NG!.groupsList(n);
   GEmbOnes[n]:=Embedding(GLs[n],1);
   GEmbTwos[n]:=Embedding(GLs[n],2);
   GPros[n]:=Projection(GLs[n]);
   HLs[n]:=NH!.groupsList(n);
   HEmbOnes[n]:=Embedding(HLs[n],1);
   HEmbTwos[n]:=Embedding(HLs[n],2);
   HPros[n]:=Projection(HLs[n]); 
   Gens[n]:=GeneratorsOfGroup(GLs[n]);
   len:=Length(Gens[n]);
   GensToLists[n]:=List([1..len],x->[]);
   for i in [1..len] do
    g:=Gens[n][i];
    Tmp:=[];
    for j in [1..n-1] do
     pg:=Image(GPros[n-j+1],g);
     m:=PreImagesRepresentative(GEmbTwos[n-j+1],(Image(
       GEmbOnes[n-j+1],pg))^(-1)*g); 
     Tmp[n-j+1]:=m;
     g:=pg;
    od;
    Tmp[1]:=g;
    GensToLists[n][i]:=Tmp;
   od;
  od;
  
  #############################################################
  #2   
  #F HListToOne
     ## Input: List [h_1,m_2,m_3,...,m_n]
        ## Output: The semi-product h_1 x| m_2 x| m_3 x| ... x| m_n
  ##
  HListToOne:=function(Lm,n) 
  local i,m;
  
   m:=Lm[1];
   for i in [2..n] do    
    m:=Image(HEmbOnes[i],m)*Image(HEmbTwos[i],Lm[i]);
   od; 
   return m;
  end;
  ##
  ########## end of HListToOne ################################
  
  Maps:=[];
  for n in [2..number] do
   len:=Length(Gens[n]);
   ImgGens:=[];
   for i in [1..len] do
    ImgGens[i]:=HListToOne(List(GensToLists[n][i],m->Image(f,m)),n);
   od; 
   Maps[n]:=GroupHomomorphismByImages(GLs[n],HLs[n],Gens[n],ImgGens);
  od;

  #############################################################
  #2
  Mapping:=function(n)
   if n=0 then
    return GroupHomomorphismByFunction(NG!.groupsList(0),
      NH!.groupsList(0),function(x) return Image(f,x); end);
   fi;
   if n=1 then
    return f;
   fi;
   return Maps[n];
  end;
  ##
  #############################################################
  
  return Objectify(HapSimplicialGroupMorphism,
     rec(
    source:=NG,
    target:=NH,
    mapping:=Mapping,
    properties:=[["length",number]]
     ));
 end;
 ##
 ############### end of NerveOfCatOneGroup_Morpre #####################
 
 ######################################################################
    #1
    #F NerveOfCatOneGroup_Mor
    ## Input: Morphism of cat-1-groups 
    ## Output: Simplicial map of their nerves 
 ##
 NerveOfCatOneGroup_Mor:=function(Cf,n)
 local NG,NH,f;
  
  NG:=NerveOfCatOneGroup_Obj(Cf!.source,n);  
  NH:=NerveOfCatOneGroup_Obj(Cf!.target,n);  
  f:=Cf!.mapping;
  return NerveOfCatOneGroup_Morpre(NG,NH,f,n);
 end; 
 ##
 ############### end of NerveOfCatOneGroup_Mor ########################
 
 ######################################################################
 #1
 #F NerveOfCatOneGroup_Seq
 ## Input: Sequence of morphisms of cat1groups
 ## Output: Sequence of simplicial maps
 NerveOfCatOneGroup_Seq:=function(Lf,n)   
 local len,i,NC,Res;

  len:=Length(Lf);
  NC:=[];
  for i in [1..len] do
   NC[i]:=NerveOfCatOneGroup_Obj(Lf[i]!.source,n);
  od;
  NC[len+1]:=NerveOfCatOneGroup_Obj(Lf[len]!.target,n);
  Res:=[];
  for i in [1..len] do
   Res[i]:=NerveOfCatOneGroup_Morpre(NC[i],NC[i+1],Lf[i]!.mapping,n);
  od;
  return Res;
 end;
 ##
 ############### end of NerveOfCatOneGroup_Seq ########################

 if IsHapCatOneGroup(X) then
  return NerveOfCatOneGroup_Obj(X,n);
 fi;

 if IsHapCatOneGroupMorphism(X) then
  return NerveOfCatOneGroup_Mor(X,n);
 fi;
 if IsList(X) then
  if IsEmpty(X) then
   return [];
  fi;
  return NerveOfCatOneGroup_Seq(X,n);
 fi;
 end);
##
#################### end of NerveOfCatOneGroup ##############################







[ Dauer der Verarbeitung: 0.4 Sekunden  (vorverarbeitet)  ]