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

Quelle  sylow.gi   Sprache: unbekannt

 
#############################################################################
##
#W  sylow.gi                     NilMat                          Alla Detinko
#W                                                               Bettina Eick
#W                                                              Dane Flannery
##

##
## This file contains a method to compute a list of Sylow subgroups of a
## given nilpotent matrix group over GF(q).
##


#############################################################################
##
#F SylowSubgroupsOfNilpotentFFMatGroup(G) . . . . . determine Sylow subgroups
##
## This function takes a nilpotent matrix group G over GF(q) and returns
## its Sylow system.
##
## Note that this function does not check if the given group G is nilpotent
## and it may return wrong results if it is not.
##
## Note that the generic method to compute the Sylow system of nilpotent
## groups is not so bad. Hence the function below is only a small improvement
## that uses the results of the nilpotency test in a sensible form.
##
InstallGlobalFunction( SylowSubgroupsOfNilpotentFFMatGroup, function(G)
    local F, p, n, l, J, S, U, P, B, C, W, bC, oC, bB, oB, sB, o, syl, q, t;

    # check a trivial case
    if ForAll(GeneratorsOfGroup(G), x -> x = One(G)) then return []; fi;

    # catch arguments
    F := FieldOfMatrixGroup(G);
    p := Characteristic(F);
    n := DimensionOfMatrixGroup(G);
    l := ClassLimit(n, F);

    # compute Jordan and Pi-primary splitting
    J := JordanSplitting(G);
    S := J[1];
    U := J[2];
    P := PiPrimarySplitting(S);
    B := P[1];
    C := P[2];

    # now G = U x C x B
    # U is a p-subgroup, C is abelian and
    # Sylow subgroups of B are available unless B is abelian

    # get generators and relevant primes for C
    bC := GeneratorsOfGroup(C);
    oC := Set(PrimeFactors(List(GeneratorsOfGroup(C), Order)));

    # get generators and relevant primes for B
    if HasSylowSystem(B) then
        sB := SylowSystem(B);
        oB := List(sB, PrimePGroup);
    else
        oB := Set(PrimeFactors(List(GeneratorsOfGroup(B), Order)));
        bB := GeneratorsOfGroup(B);
    fi;

    # do a check
    if p in oB or p in oC then
        Error("something wrong with Sylow subgroups");
    fi;

    # get relevant primes for G
    if ForAny( GeneratorsOfGroup(U), x -> x <> x^0 ) then
        o := Union( [p], oC, oB );
    else
        o := Union( oC, oB );
    fi;

    # determine Sylow subgroups corresponding to o
    syl := [];
    for q in o do

        # the p-Sylow subgroup is U (unless it is trivial)
        if q = p then
            SetIsPGroup(U, true);
            SetPrimePGroup(U, q);
            Add( syl, U );
        else

            # otherwise join p-Sylow subgroups of C and B
            t := [];
            if q in oB then
                if HasSylowSystem(B) then
                    W := sB[Position(oB,q)];
                else
                    W := SylowSubgroupOfNilpotentMatGroupFF( B, bB, q );
                fi;
                Append( t, GeneratorsOfGroup(W) );
            fi;
            if q in oC then
                W := SylowSubgroupOfNilpotentMatGroupFF( C, bC, q );
                Append( t, GeneratorsOfGroup(W) );
            fi;

            # create group and store info
            W := GroupByGenerators(t);
            SetIsPGroup(W, true);
            SetPrimePGroup(W, q);
            Add( syl, W );
        fi;
    od;

    return syl;
end );

##
## need high value, otherwise GAP chooses the method for solvable groups
## using a special pc sequence to compute the Sylow system.
##
InstallMethod( SylowSystem, [IsFFEMatrixGroup and IsNilpotentGroup], NICE_FLAGS,
    SylowSubgroupsOfNilpotentFFMatGroup );

[ Dauer der Verarbeitung: 0.23 Sekunden  (vorverarbeitet)  ]