Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  almsup.gi   Sprache: unbekannt

 
#############################################################################
##
#W almsup.gi              GUARANA package                     Bjoern Assmann
##
## Methods for computing nilpotent almost supplements
##
#H  @(#)$Id$
##
#Y 2006

#############################################################################
#
# In: A abelian group, A < G, A given as Pcp group, A normal in G
#     U < G
#     G parent group
#
# Out: C_A(U)
#
GUARANA.Supple_CentralizerAbelianGroup := function( A, U, G )
    local C,g,pcp,rel,mat,fix,i,elms;
    # setup
    C := A;
    elms := GeneratorsOfGroup( U );

    # find iterated centralizers under the action of elms
    for g in  elms  do
        # get pcp and its relation matrix
        # This step applies only if we have finite relative orders.
        pcp := Pcp( C );
        if Length( pcp ) = 0 then return C; fi;
        rel := ExponentRelationMatrix( pcp );

        # compute action by g on pcp
        mat := LinearActionOnPcp( [g], pcp )[1];
        mat := mat - mat^0;
        Append( mat, rel );

        # compute fixed point space
        fix := PcpNullspaceIntMat( mat, Length( mat ) );
        for i in [1..Length(fix)] do
            fix[i] := MappedVector( fix[i]{[1..Length(pcp)]}, pcp );
        od;
 
        # get subgroup which centralizes all elements of elms, which 
        # were picked up so far.
        C := Subgroup( G, fix );
    od;
    return C;
end;

#############################################################################
#
# In: K < U < G, K normal in U
#
# Out: C_K(U) 
#       which is the intersection of Z(U) and K
#
GUARANA.Supple_CentralizerSubgroup := function( K, U )
    local A; 

    # centre of K is normal in U, since Z(K) is charac. in K and
    # K normal in U (thus conj. by u is an autom.)
    A := Centre( K );
    return GUARANA.Supple_CentralizerAbelianGroup( A, U, U );
end;

GUARANA.Supple_NaturalHomomorphismByPcpNC := function ( pcp )
    local  G, F, N, gens, imgs, hom;
    G := GroupOfPcp( pcp );
    N := SubgroupByIgs( G, DenominatorOfPcp( pcp ) );
    F := PcpGroupByPcp( pcp );
    UseFactorRelation( G, N, F );
    gens := ShallowCopy( GeneratorsOfPcp( pcp ) );
    imgs := ShallowCopy( Igs( F ) );
    Append( gens, DenominatorOfPcp( pcp ) );
    Append( imgs, List( DenominatorOfPcp( pcp ), function ( x )
            return One( F );
        end ) );
    hom := GroupHomomorphismByImagesNC( G, F, gens, imgs );
    SetKernelOfMultiplicativeGeneralMapping( hom, N );
    return hom;
end;


GUARANA.Supple_NaturalHomomorphismNC := function ( G, N )
    if Size( N ) = 1  then
        return IdentityMapping( G );
    fi;
    return GUARANA.Supple_NaturalHomomorphismByPcpNC( Pcp( G, N ) );
end;

#############################################################################
#
# In: K < U, K normal in U 
#
# Out: upper U-central series of K, which may terminate a proper subgroup
#      of K

GUARANA.Supple_UpperU_CentralSeries := function( K, U )
    local C, upp, N, nat, U_img, K_img, C_img;

    C := TrivialSubgroup( U );
    upp := [C];
    N := GUARANA.Supple_CentralizerSubgroup( K, U );
    while IndexNC( N, C ) > 1 do
        C := N;
        Add( upp, C );
        nat := GUARANA.Supple_NaturalHomomorphismNC( U, C );
        U_img := Image( nat  );
        K_img := Image( nat, K );
        C_img := GUARANA.Supple_CentralizerSubgroup( K_img, U_img );
        N := PreImage( nat, C_img );
    od;
    return Reversed( upp );
   
end;

#############################################################################
# the following code would be suitable for a more general approach.
# It has to be revised

# A is normal subgroup of the parent group G
# gens .... elements of parent group G
# pcp  .... pcp of A/L
# nat  .... hom from A to A/L
GUARANA.Supple_LinearActionOnFactorPcp := function ( gens, pcp, nat )
    local result, x, act, y,y1,y2,y3;

    result := [];
    for x in gens do    
        act := [];
        for y in AsList( pcp ) do 
            y1 := PreImagesRepresentative( nat, y );
            y2 := y1^x;
            y3 := Image( nat, y2 );
            Add( act, ExponentsByPcp( pcp, y3 ));
        od;   
        Add( result, act );
    od;
    return result;
end;

GUARANA.Supple_UHyperCentre := function( U, A )
    local pcpU, gensU,L,nat,AL,g,pcp,rel,mat,fix,i,C,m,l,Matt,Mat;

    pcpU  := Pcp( U );
    gensU := AsList( pcpU );
    L     := TrivialSubgroup( A );

    while true do
        nat := NaturalHomomorphism( A, L );
        AL := Image( nat );

        # compute C_A/L( U ), i.e. the elements of A/L which are fixed under
        # the conjugation action of U

          # get pcp and its relation matrix, only necessary if A has factors
          # with finite orders
          pcp := Pcp( AL );
          rel := ExponentRelationMatrix( pcp );
          if Length( pcp ) = 0 then return A; fi;

          # compute action by gensU on pcp
          Mat := [];
          for g in gensU do
              mat := GUARANA.Supple_LinearActionOnFactorPcp( [g], pcp, nat )[1];
              mat := mat - mat^0;
              Append( mat, rel );
              Add( Mat, mat );
          od;

          # write everything in one big matrix (g_1 g_2 ... )
          m := Length( mat );
          Matt := [];
          for i in [1..m] do
              l := List( Mat, x-> x[i] );
              Add( Matt, Concatenation( l ) );
          od;
          
          # compute fixed point space of U in AL
          fix := PcpNullspaceIntMat( Matt, Length( Matt ) );
          for i in [1..Length(fix)] do
              fix[i] := MappedVector( fix[i]{[1..Length(pcp)]}, pcp );
          od;
          C := Subgroup( AL, fix );
          
        # test if L is already big enough
        if Size( C ) = 1 then
            return L;
        fi; 
        L := PreImage( nat, C );
    od;          
end;

#############################################################################
##
#F GUARANA.Supple_RefinedLowerCentralSeries( <G> )
##
## IN
## G ... nilpotent polycyclic group
##
## OUT
## efa series of G which refines the lower central series by
## finite - by - (torsion-free) factors.
##
GUARANA.Supple_RefinedLowerCentralSeries := function( G )
    local ser, ref, i, A, B, pcp, gens, rels, n, free, fini, U, s, t, f;

    ser := LowerCentralSeries( G );
    ref := [G];
    for i in [1..Length( ser ) - 1] do
        # refine abelian factor A/B
        A := ser[i];
        B := ser[i+1];
        pcp := Pcp( A, B, "snf" );
        gens := GeneratorsOfPcp( pcp );
        rels := RelativeOrdersOfPcp( pcp );
        n    := Length( gens );

        # take the free part for the top factor
        free := Filtered( [1..n], x -> rels[x] = 0 );
        fini := Filtered( [1..n], x -> rels[x] > 0 );
        if Length( free ) > 0 then
            f := AddToIgs( Igs(B), gens{fini} );
            U := SubgroupByIgs( G, f );
            Add( ref, U );
        else
            U := A;
        fi;

        # the torsion subgroup
        if Length( fini ) > 0 then
            s := Factors( Lcm( rels{fini} ) );
            f := gens{fini};
            for t in s do
                f := List( f, x -> x ^ t );
                f := AddToIgs( Igs(B), f );
                U := SubgroupByIgs( G, f );
                Add( ref, U );
            od;
        fi;
    od;
    return ref;
end;

#############################################################################
##
#F GUARANA.Supple_NilpAlmSup( G, N, H )
##
## IN
## G ... polycyclic group
## N ... normal nilpotent subgroup of G
## H ... subgroup with, H/N abelian and [G:H]< \infty
##
## OUT
## nilpotent almost supplement for N in G
## 
## TODO: Ueberlege ob ich immer mit den Homomorphismen rechnen muss.
## z.B. beim U-hyper centre
##
GUARANA.Supple_NilpAlmSup := function( G, N, H )
    local sers,U,l,i,nat,A,sers2,L,nat_L,N_i_img,U_img,CR,s,K_img;

    # determine H-invariant linear abelian series of N with central factors 
    sers := GUARANA.Supple_RefinedLowerCentralSeries( N );

    U := H;
    l := Length( sers ) - 1;

    for i in [1..l] do
        # hom U -> U/N_i+1
        nat := GUARANA.Supple_NaturalHomomorphismNC( U, sers[i+1] );
        
        # compute ascending U central series of A = N_i/N_i+1
        A := Image( nat, sers[i] );
        U_img := Image( nat );
        sers2 := GUARANA.Supple_UpperU_CentralSeries( A, U_img );
          
        # proceed only if series does not reach A, since
        # if A = U-hpercentre, U/N_i+1 is nilpotent
        if sers2[1] <> A  then
            # get  U-hypercentre L/N_i+1 in N_i/N_i+1
            L := PreImage( nat, sers2[1]);

            # hom U -> U/L
            nat_L := GUARANA.Supple_NaturalHomomorphismNC( U, L );
            # N_i/L and U/L
            N_i_img := Image( nat_L, sers[i] );
            U_img := Image( nat_L ); 
            if Order( A ) < infinity then
                # compute complement K/L to N_i/L in U/L
                CR := CRRecordBySubgroup( U_img, N_i_img );
                s :=  OneCocyclesEX( CR ).transl;
                K_img := ComplementCR( CR, s );
            else 
                # compute almost complement K/L to N_i/L in U/L
                K_img := GUARANA.Supple_AlmostComplement( U_img , N_i_img );
            fi;
            U := PreImage( nat_L, K_img );
        fi;
    od;
    return U;
end;

GUARANA.Supple_ComputeHAndN := function( G )
    local N, nat, G_img, G_img_fit, H_img;
    N := FittingSubgroup( G );
    nat := GUARANA.Supple_NaturalHomomorphismNC( G, N );
    G_img := Image( nat );
    G_img_fit := FittingSubgroup( G_img );
    H_img := Centre( G_img_fit );
    return rec( G := G, H := PreImage( nat, H_img ), N := N );
end;

[ Dauer der Verarbeitung: 0.24 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge