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 6 kB image not shown  

Quelle  tails.gi   Sprache: unbekannt

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

############################################################################
## 
#F  LPRES_Tails_lji ( <coll> , <Def of k> , <l> , <k>) 
##
## computes t_{kl}^{++}
##
InstallGlobalFunction( LPRES_Tails_lji,
  function(coll,Defs,l,k)
  local ev1,ev2,  # exponent vectors of the consistency relation
 i,j,  # definition of k as commutator [a_j,a_i]
 rhs;  # rhs of a_j^{a_i}
  
  j:=Defs[1];
  i:=Defs[2];
  
  # (l j) i
  repeat 
    repeat
      ev1:=ExponentsByObj(coll,[AbsInt(l),SignInt(l)]);
    until CollectWordOrFail(coll,ev1,[AbsInt(j),SignInt(j)])<>fail;
  until CollectWordOrFail(coll,ev1,[AbsInt(i),SignInt(i)])<>fail;
  
  # l (j i) = (l i) j^i 
  rhs:=GetConjugate(coll,j,i);
  repeat
    repeat
      ev2:=ExponentsByObj(coll,[AbsInt(l),SignInt(l)]);
    until CollectWordOrFail(coll,ev2,[AbsInt(i),SignInt(i)])<>fail;
  until CollectWordOrFail(coll,ev2,rhs)<>fail;
  
  return(ObjByExponents(coll,ev1-ev2));
  end);

############################################################################
## 
#F  LPRES_Tails_lkk ( <coll> , <l> , <k>) 
##
## computes t_{kl}^{-+}
##
InstallGlobalFunction( LPRES_Tails_lkk,
  function(coll,l,k)
  local ev1;  # exponent vector

  repeat 
    repeat 
      ev1:=ExponentsByObj(coll,[AbsInt(l),SignInt(l)]);
    until CollectWordOrFail(coll,ev1,[AbsInt(k),SignInt(k)])<>fail;
  until CollectWordOrFail(coll,ev1,[AbsInt(k),-SignInt(k)])<>fail;
  
  if not ev1[AbsInt(l)]=1 then 
    Error("in LPRES_Tails_lkk\n");
  fi;
  
  ev1[AbsInt(l)]:=0;
  
  return(Concatenation(GetConjugate(coll,l,k),ObjByExponents(coll,-ev1)));
  end);

############################################################################
##  
#F  LPRES_Tails_llk ( <coll> , <l> , <k>)
##
## computes t_{kl}^{+-} AND t_{kl}^{--}
##
InstallGlobalFunction( LPRES_Tails_llk,
  function(coll,l,k)
  local ev1, # exponent vector
 rhs; # rhs of the relation a_l^{a_k}
  
  rhs:=GetConjugate(coll,AbsInt(l),k);
  repeat 
    repeat 
      ev1:=ExponentsByObj(coll,[AbsInt(l),-1]);
    until CollectWordOrFail(coll,ev1,[AbsInt(k),SignInt(k)])<>fail;
  until CollectWordOrFail(coll,ev1,rhs)<>fail;
  
  if not ev1[AbsInt(k)]=SignInt(k) then
    Error("in LPRES_Tails_llk\n");
  fi;
  
  ev1[AbsInt(k)]:=0;
  return(Concatenation(GetConjugate(coll,l,k),ObjByExponents(coll,-ev1)));
  end);

############################################################################
##
#M  UpdateNilpotentCollector( <coll>, <weights>, <defs> ) 
##
## completes the (weighted) nilpotent presentation <coll> using the tails
## routine
##
InstallMethod( UpdateNilpotentCollector,
  "for a weighted nilpotent presentation",
  true,
  [ IsFromTheLeftCollectorRep, IsList, IsList ], 0,
  function(coll,weights,Defs)
  local rhs,  # rhs of the relations
 orders,  # relative order of <coll>
 i,j,k,a,b, # loop variables
 c;  # nilpotency class

  # relative order of <coll>
  orders:=RelativeOrders(coll);

  # nilpotency class
  c:=Maximum(weights);
  
  if LPRES_TEST_ALL then 
    for i in [1..Length(orders)-1] do 
      for k in [i+1..Length(orders)] do 
        if not GetConjugate(coll,k,i){[1,2]}=[k,1] then 
          Error("no nilpotent presentation (input)");
        fi;
      od;
    od;
  fi;
  
  FromTheLeftCollector_SetCommute(coll);
  SetFilterObj(coll, IsUpToDatePolycyclicCollector);
# SetFilterObj(coll, UseLibraryCollector);
  FromTheLeftCollector_CompletePowers(coll);
  
  # conjugates
  b:=c;
  while b>1 do
    for i in [1..Length(weights)-1] do
      for j in [i+1..Length(weights)] do 
        if weights[i]+weights[j]=b then 
          if not weights[i]=1 then
            rhs:=LPRES_Tails_lji(coll,Defs[i],j,i);
            for a in [1,3..Length(rhs)-1] do
              if orders[rhs[a]]<>0 and rhs[a+1]<0 then 
                if not GetPower(coll,a)=[] then 
                  Error("rhs not trivial at tails.g");
                else
                  rhs[a+1]:=rhs[a+1] mod orders[rhs[a]];
                fi;
              fi;
            od;
            rhs:=Concatenation(GetConjugate(coll,j,i),rhs);
            if LPRES_TEST_ALL then 
              if not rhs{[1,2]}=[j,1] then 
                Error("no nilpotent presentation j i");
              fi;
            fi;
            SetConjugateNC(coll,j,i,rhs);
            SetFilterObj(coll,IsUpToDatePolycyclicCollector);
            FromTheLeftCollector_SetCommute(coll);
          fi;
          if orders[i]=0 then 
            repeat
              rhs:=ListWithIdenticalEntries(Length(weights),0);
            until CollectWordOrFail(coll,rhs,LPRES_Tails_lkk(coll,j,-i))<>fail;
            rhs:=ObjByExponents(coll,rhs);
            if LPRES_TEST_ALL then 
              if not rhs{[1,2]}=[j,1] then 
                Error("no nilpotent presentation j -i");
              fi;
            fi;
            SetConjugateNC(coll,j,-i,rhs);
            SetFilterObj(coll,IsUpToDatePolycyclicCollector);
          fi;
          if orders[j]=0 then  
            repeat
              rhs:=ListWithIdenticalEntries(Length(weights),0);
            until CollectWordOrFail(coll,rhs,LPRES_Tails_llk(coll,-j,i))<>fail;
            rhs:=ObjByExponents(coll,rhs);
            if LPRES_TEST_ALL then
              if not rhs{[1,2]}=[j,-1] then 
                Error("no nilpotent presentation -j i");
              fi;
            fi;
            SetConjugateNC(coll,-j,i,rhs);
            SetFilterObj(coll,IsUpToDatePolycyclicCollector);
          fi;
          if orders[i]+orders[j]=0 then
            repeat
              rhs:=ListWithIdenticalEntries(Length(weights),0);
            until CollectWordOrFail(coll,rhs,LPRES_Tails_llk(coll,-j,-i))<>fail;
            rhs:=ObjByExponents(coll,rhs);
            if LPRES_TEST_ALL then
              if not rhs{[1,2]}=[j,-1] then 
                Error("no nilpotent presentation -j -i");
              fi;
            fi;
            SetConjugateNC(coll,-j,-i,rhs);
            SetFilterObj(coll,IsUpToDatePolycyclicCollector);
          fi;
        elif weights[i]+weights[j]>b then 
          break;
        fi;
      od; 
    od; 
   
    b:=b-1;
  od;
  
  end);

[ Dauer der Verarbeitung: 0.43 Sekunden  (vorverarbeitet)  ]