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


Quelle  frattExt.gi   Sprache: unbekannt

 
#############################################################################
##
#W  frattExt.gi           Cubefree                             Heiko Dietrich
##                                                               
##


##
## These functions compute the  Frattini extensions. 
## Basically, already implemented methods of the GAP Package GrpConst are
## used.
##

############################################################################# 
## 
#F FrattiniExtensionCF( code, o ) 
## 
## Computes the Frattini extensions of the group given by 'code' of order 'o'
InstallGlobalFunction(FrattiniExtensionCF, function( code, o ) 
    local F, rest, primes, modus, H, i, modul, found, j, M, cc, c; 
 
    # get F and the trivial case 
    F      := PcGroupCodeRec( code ); 
    rest   := o / code.order; 
    if rest = 1 then return F; fi; 
 
    # construct irreducible modules for F 
    primes := Factors( rest ); 
    modus  := List( primes, x -> IrreducibleModules( F, GF(x), 1 )[2] ); 
    FindUniqueModules( modus ); 
 
    # set up 
    H := PcGroupCodeRec( code ); 
 
    # loop over primes 
    for i in [1..Length(primes)] do 
        modul := List( modus[i], x -> EnlargedModule( x, F, H ) ); 
        found := false; 
        j := 0; 
        while not found do 
            j := j+1; 
            M := modul[j]; 
            cc := TwoCohomology( H, M ); 
            if Dimension( Image( cc.cohom ) ) > 0 then 
                c := PreImagesRepresentative( cc.cohom, 
                                      Basis(Image(cc.cohom))[1]); 
                H := ExtensionSQ( cc.collector, H, M, c ); 
                found := true; 
            fi; 
        od; 
    od; 
    return H; 
end); 
 
############################################################################# 
## 
#F ConstructAllCFGroups( size ) 
## 
## Computes all cube-free groups of order n up to isomorphism
##
InstallGlobalFunction(ConstructAllCFGroups, function ( size ) 
    local cl, free, ext, t, primes, ffOrd, lv, nonAb, p, A, nSize, facNSize,
          groups, arg1, arg2, pos, autPos, autGrps, tmp; 
 
    Info(InfoCF,1,"Construct all groups of order ",size,".");   

    # check
    if not IsPosInt( size ) or not IsCubeFreeInt( size ) then
        Error("Argument has to be a positive cube-free integer."); 
    fi;

    # catch the case of size = 1 
    if size = 1 then 
        return [TrivialGroup()]; 
    fi; 
  
    # if size is square-free then the groups of order size
    # are Frattini-free and solvable
    if IsSquareFreeInt(size) then
        return(List(cf_FrattFreeSolvGroups(size,0,0,0)[1] ,
                     x->PcGroupCodeRec(x)));
    fi;

    # set up
    groups := [];
    cl     := Collected( Factors( size ) ); 
    # to store the subgroups and normalizers of GL(2,p)
    autPos := [];
    for t in cl do
        Add(autPos,t[1]);
        if t[2]=2 then
            Add(autPos,t[1]^2);
        fi;
    od;
    autGrps := ListWithIdenticalEntries( Length( autPos ), 0 );
    pos     := function(x) return Position( autPos, x); end;

    # determine the possible non-abelian factors PSL(2,p)
    nonAb:=[TrivialGroup()];
    if size mod 4 = 0 then
        for p in cl do
            arg1 := (p[1]>3) and (size mod (p[1]*(p[1]-1)*(p[1]+1) / 2)=0);
            arg2 := IsCubeFreeInt(p[1]+1) and IsCubeFreeInt(p[1]-1);
            if arg1 and arg2 then
                A := PSL(2,p[1]);
                if Size( A )=size then
                    Add(groups,A );
                else
                    Add(nonAb,A);
                fi;
            fi;
        od;
    fi;

    # for every non-abelian A compute a solvable complement
    for A in nonAb do
        nSize    := size/Size(A);
        facNSize := Collected(FactorsInt(nSize));    
 
        # determine the possible Frattini-factors
        primes := Product(List(facNSize,x->x[1]));
        ffOrd  := Filtered(DivisorsInt(nSize),x-> x mod primes =0);
        free   := [];
        for lv in ffOrd do
            tmp     := cf_FrattFreeSolvGroups(lv,autPos, autGrps, pos);
            autGrps := tmp[2];
            free    := Concatenation(free,tmp[1]);
        od;
        Info(InfoCF,1,"Construct ",Length(free)," Frattini extensions.");
        ext    := List(free,x -> FrattiniExtensionCF(x,nSize)); 
        groups := Concatenation(groups,List(ext,x->DirectProduct(A,x)));
    od;

    return groups; 
end ); 
 
############################################################################# 
## 
#F ConstructAllCFSolvableGroups( size ) 
## 
## Computes all cube-free solvable groups of order n up to isomorphism
##
InstallGlobalFunction(ConstructAllCFSolvableGroups, function ( size ) 
    local cl, free, ext, t, primes, ffOrd, lv, p, groups, pos, autGrps,
          autPos, tmp; 

    # check
    if not IsPosInt( size ) or not IsCubeFreeInt( size ) then
        Error("Argument has to be a positive cube-free integer."); 
    fi;

    Info(InfoCF,1,"Construct all solvable groups of order ",size,".");

    # catch the case of size = 1 
    if size = 1 then 
        return [TrivialGroup()]; 
    fi; 
  
    # if size is square-free, then the groups of order size
    # are Frattini-free and solvable
    if IsSquareFreeInt(size) then
        return(List(cf_FrattFreeSolvGroups(size,0,0,0)[1] ,
                     x->PcGroupCodeRec(x)));
    fi;

    # set up
    groups := [];
    cl     := Collected( Factors( size ) );  
    # to store the subgroups and normalizers of GL(2,p)
    autPos := [];
    for t in cl do
        Add(autPos,t[1]);
        if t[2]=2 then
            Add(autPos,t[1]^2);
        fi;
    od;
    autGrps := ListWithIdenticalEntries( Length( autPos ), 0 );
    pos     := function(x) return Position( autPos, x); end;
 
    # determine the possible Frattini-factors
    primes := Product(List(cl,x->x[1]));
    ffOrd  := Filtered(DivisorsInt(size),x-> x mod primes =0);
    free   := [];
    for lv in ffOrd do
        tmp     := cf_FrattFreeSolvGroups(lv,autPos, autGrps, pos);
        autGrps := tmp[2];
        free    := Concatenation(free,tmp[1]);
    od;
    Info(InfoCF,1,"Construct ",Length(free)," Frattini extensions.");
    ext    := List(free,x -> FrattiniExtensionCF(x,size)); 
    groups := Concatenation(groups,ext);
    
    return groups; 
end );  




##############################################################################
##
#F  CubefreeTestOrder( n )
##
## Computes information about the groups of order n and compares it with the 
## SmallGroups library
##
InstallGlobalFunction(CubefreeTestOrder, function( n )
local nr, nrs, ff, solv, nil, sim, all, groups, alltmp;

    if not IsCubeFreeInt(n) and n<50001 and IsPosInt(n) then
        Error("wrong input: need a cubefree integer between 1..50000");
    fi;

    all := AllSmallGroups(n);

    Info(InfoCF,1,"Count groups");
    nr := NumberCFGroups(n,false);
    if not nr = NumberSmallGroups(n) then Error("wrong number of groups"); fi;

    Info(InfoCF,1,"Count solvable groups");
    nrs := NumberCFSolvableGroups(n,false);
    if not nrs = Length(Filtered(all,IsSolvableGroup)) then
         Error("wrong number of solvable groups");
    fi;

    Info(InfoCF,1,"Construct simple groups");
    groups := List(ConstructAllCFSimpleGroups(n),IdSmallGroup);
    alltmp := List(Filtered(all,IsSimpleGroup),IdSmallGroup);
    if not Difference(groups,alltmp)=Difference(alltmp,groups) then
        Error("wrong result (simple groups)");
    fi;

    Info(InfoCF,1,"Construct nilpotent groups");
    groups := List(ConstructAllCFNilpotentGroups(n),IdSmallGroup);
    alltmp := List(Filtered(all,IsNilpotentGroup),IdSmallGroup);
    if not Difference(groups,alltmp)=Difference(alltmp,groups) then
        Error("wrong result (nilpotent groups)");
    fi;
    
    Info(InfoCF,1,"Construct all groups");
    groups := List(ConstructAllCFGroups(n),IdSmallGroup);
    alltmp := List(all,IdSmallGroup);
    if not Difference(groups,alltmp)=Difference(alltmp,groups) then
        Error("wrong result (nilpotent groups)");
    fi;

    Info(InfoCF,1,"Construct Fratt.free groups");
    groups := List(ConstructAllCFFrattiniFreeGroups(n),IdSmallGroup);
    alltmp := List(Filtered(all,x->FrattinifactorSize(x)=n),IdSmallGroup);
    if not Difference(groups,alltmp)=Difference(alltmp,groups) then
        Error("wrong result (nilpotent groups)");
    fi;

    Info(InfoCF,1,"Everything ok");
    return true;

end);

[ Dauer der Verarbeitung: 0.35 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