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

Quelle  nerveOfCatOneGroup.gi   Sprache: Shell

 

###############################################################################
#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 ##############################







Messung
CHZG
92999996

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.