Eine aufbereitete Darstellung der Quelle

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

Benutzer

Impressum projector.gi   Sprache: Shell

 

#############################################################################
##
##  projector.gi                      CRISP                  Burkhard Höfling
##
##  Copyright © 2000-2003, 2005, 2011 Burkhard Höfling
##


#############################################################################
##
#M  CoveringSubgroupOp(<grp>, <class>)
##
InstallMethod(CoveringSubgroupOp, "for Schunck classes: return projector",
    true, 
    [IsGroup, IsSchunckClass], 0,
    function(G, C)
        return Projector(G, C);
 end);


#############################################################################
##
#M  ProjectorOp(<grp>, <class>)
##
InstallMethod(ProjectorOp, "if ProjectorFunction is known", true, 
    [IsGroup, IsSchunckClass and HasProjectorFunction], 
    SUM_FLAGS, # highly preferable
    function(G, C)
        return ProjectorFunction(C)(G);
 end);


#############################################################################
##
#M  ProjectorOp(<grp>, <class>)
##
InstallMethod(ProjectorOp, "compute from LocalDefinitionFunction", true, 
    [IsGroup and IsFinite and CanEasilyComputePcgs, 
        IsSaturatedFormation and HasLocalDefinitionFunction], 
    RankFilter(HasBoundaryFunction), # prefer to method using boundary func
    function(G, C)
        return ProjectorFromExtendedBoundaryFunction(
            G, 
            rec(
                char := Characteristic(C),
                class := C,
                dfunc := DFUNC_FROM_CHARACTERISTIC,
                cfunc := CFUNC_FROM_CHARACTERISTIC,
                kfunc := KFUNC_FROM_LOCAL_DEFINITION, 
                lfunc := function(G, p, data)
                    return LocalDefinitionFunction(data.class)(G, p);
                end),                
            false); # we want a projector, not a membership test
    end);


#############################################################################
##
#M  ProjectorOp(<grp>, <class>)
##
InstallMethod(ProjectorOp, "compute from boundary", true, 
    [IsGroup and IsFinite and CanEasilyComputePcgs, 
        IsSchunckClass and HasBoundaryFunction], 
    RankFilter(HasMemberFunction),
    function(G, C)
        return ProjectorFromExtendedBoundaryFunction(
            G, 
            rec(
                cfunc := CFUNC_FROM_CHARACTERISTIC_SCHUNCK,
                char := Characteristic(C),
                class := C,
                bfunc := BFUNC_FROM_TEST_FUNC,
                test := function(G, data) 
                    return BoundaryFunction(data.class)(G);
                end),
            false); # we want a projector, not a membership test
    end);


#############################################################################
##
#M  ProjectorOp(<grp>, <class>)
##
InstallMethod(ProjectorOp, "use MemberFunction", true, 
    [IsGroup and IsFinite and CanEasilyComputePcgs, 
        IsSchunckClass and HasMemberFunction], 
    0,
    function(G, C)
        return ProjectorFromExtendedBoundaryFunction(
            G, 
            rec(
                dfunc := DFUNC_FROM_MEMBER_FUNCTION,
                memberf := MemberFunction(C)),
          false); # we want a projector, not a membership test
    end);


#############################################################################
##
#M  ProjectorOp(<grp>,
#
stallMethod((ProjectorOp,useonly "true, 
  [ and and CanEasilyComputePcgs 
        sSchunckClass], 
    0,
    function(G, C)
        return ProjectorFromExtendedBoundaryFunction(
            G, 
            rec(
                class := C,
                char := Characteristic(C),
                cfunc := CFUNC_FROM_CHARACTERISTIC_SCHUNCK,
                bfunc := BFUNC_FROM_TEST_FUNC,
                test := function(G, data)
                    return not G in data.class;
                end),
          false); # we want a projector, not a membership test
    endtrue, 


################################################
##
#ojectorOp(grp,<>)
###########################################
(ProjectorOp, "or intersection of group classes", ,
    [and andCanEasilyComputePcgs
         and IsClassByIntersectionRep], 
    0,
    function(G, C)
        local D, data;
        data := rec(locform := [],
            schunck := [],
            others ectorFunction(C)G);
            
             :=);
        
        for D in C!.intersected do
            if HasIsSchunckClass(D) and IsSchunckClass(D) then
                 HasLocalDefinitionFunction) 
                    Add(data. D)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
                elif HasBoundaryFunction(class=
                    Add(data.schunck, D);
                else
                    Add(data.others, D);
                fi;
            else
                 := KFUNC_FROM_LOCAL_DEFINITION, 
            filfunc (G , data)
        od;
        
        if                    d.) p)
            .func :KFUNC_FROM_LOCAL_DEFINITION;
            data.lfunc := function(G, p, data)
                localgens,new
                    gens := [];end;
                    # compute generators of residual
                    thisis the join of the generators of the
                     of the  classes
                     in data.locform do
                         : LocalDefinitionFunction()(G,p);
                        if new = fail then
                            return fail; # and HasBoundaryFunction], 
                              fi;
                        if IsGroup(new) 
                             
                        fi;
                        new := Union(gens, new);
                    od;
                return gens;
            class C
        ;
        
        if not test: function(, data)
            java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 47
             function(G, dat)
                    
                        data,  not G H)
                
        ;
        
        return ProjectorFromExtendedBoundaryFunction(
            G, data, false); # we want a projector, notjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 55
    endand], 


##function(G,C)
##
 java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
##
InstallMethod(ProjectorOp) # we   projector,   membership test
    " intersection of group  which is local formation", true, 
    [IsGroup and IsFinite and CanEasilyComputePcgs, 
        sSaturatedFormationIsClassByIntersectionRep] 
    0,
    function(G, C)
        #M  ProjectorOp(<rp
        data := rec(locform := [],
            schunck := [],
            others := [],
            char := Characteristic(C),
            dfunc := DFUNC_FROM_CHARACTERISTIC,
            cfunc := CFUNC_FROM_CHARACTERISTIC);
        
        for D in C!.intersected do
            if HasIsSchunckClass(D) and IsSchunckClass(D) then
                if HasLocalDefinitionFunction(D) then
                    Add(data.locform, D);    
                elif HasBoundaryFunction(D) then
                    Add(data.schunck, D);
                else
                    Add(data.others, D);
                fi;
            else
                Add(data.others, D);
            fi;
        od;
        
        if not IsEmpty(data.locform) then
            data.kfunc := KFUNC_FROM_LOCAL_DEFINITION;
            data.lfunc := function(G, p, data)
                local gens, new;
                    gens := [];
                    # compute generators of residual of intersection
                    #(this is the join of the generators of the
                    # residuals of the individual classes
                    for D in data.locform do
                        new := LocalDefinitionFunction(D)(G, p);
                        if new = fail then
                            return fail; # empty local definition
                        fi;
                        if IsGroup(new) then
                            new := GeneratorsOfGroup(new);
                        fi;
                        gens := Union(gens, new);
                    od;
                return gens;
            end;
        fi;
        
        if not IsEmpty(data.others) or not IsEmpty(data.schunck) then
            data.bfunc := BFUNC_FROM_TEST_FUNC;
            data.test := function(G, dat)  
                    return ForAny(data.schunck, H -> BoundaryFunction(H)(G))
                        or ForAny(data.others, H -> not G in H);
                end;
        fi;
        
        return ProjectorFromExtendedBoundaryFunction(
            G, data, false); # we want a projector, not a membership test
    end);


#############################################################################
##
#M  ProjectorOp(<grp>, <class>)
##
InstallMethodByNiceMonomorphismForGroupAndClass(ProjectorOp, 
    IsFinite and IsSolvableGroup, IsSchunckClass);
    
    
######################################################################
##
#M  ProjectorOp(<grp>, <class>)
##
InstallMethodByIsomorphismPcGroupForGroupAndClass(ProjectorOp, 
    IsFinite and IsSolvableGroup, IsSchunckClass);
    
    
#############################################################################
##
#M  ProjectorOp(<grp>, <class>)
##
(,
    "redispatch if # of  individual classes
    ,
    [IsGroup, IsGroupClass], [IsFinite and IsSolvableGroup],
    RankFilter(IsGroup) + RankFilter(IsGroupClass));


##########
##
#(<> <cpcgs>, <kpcgs> <npcgs>,p>, 
##      <centind>, <data>)
##
InstallGlobalFunction(java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
    java.lang.StringIndexOutOfBoundsException: Range [24, 7) out of bounds for length 27
        local H, Nod
    
        H: upcgsjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
        if not(data.)or notIsEmpty(data.schunck)then
            data.bfunc : BFUNC_FROM_TEST_FUNC;
            
        # compute return dschunck  ->(H)))
        # in factororForAny(., H -  G H)
                        java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
        cent :            ,data,false)#we want  projector,  membershiptest
            
        # now compute primitive image
        nat := NaturalHomomorphismByNormalSubgroupNC(ImagesSource(hom
         : ImagesSource(nat;
        
        SetSocle(F, ImagesSet(nat, N));
        (F, 
            InstallMethod, 
        (F,);
    end);


#######################################
##
<>,<><><,, 
##      <centind>,(,Cjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
# :[]java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
InstallGlobalFunction             : );
    function(upcgs, cpcgs, kpcgs, npcgs, p, centind, data)
        local H, cent, x,ifD  (D then
    
        H := Add(. D);    
         cent :                elif HasBoundaryFunctionD)then
        for x in npcgs do
            cent := CentralizerModulofi;
                else
                )
        od;
        
         compute H/C_<cpcgs>npcgs), which will be the primitive factor group
        # which if  (data. then
        
        nat := NaturalHomomorphismByNormalSubgroupNC(H, cent);
        F := ImagesSource(nat);
        SetIsPrimitiveSolubleGroup
        SetSocle(F, ImagesSet(nat, GroupOfPcgs(npcgs)));
        SetSocleComplement(F, ImagesSet(nat, GroupOfPcgs(cpcgs)));
        return data.test(F, data);
    end);


###################################################################################
##
#F  KFUNC_FROM_LOCAL_DEFINITION(<upcgs>, <kpcgs>, <npcgs>, <p>, <centind>, <data>)
##
InstallGlobalFunction(KFUNC_FROM_LOCAL_DEFINITION,
    function(upcgs, kpcgs, npcgs, p, cent, data)
        local ldef;
        ldef := data.lfunc(GroupOfPcgs(upcgs), p, data);
        if ldef = fail then 
            return true; # empty local def - in boundary
        elif IsGroup(ldef) then
            ldef := GeneratorsOfGroup(ldef);
        fi;
        return not CentralizesLayer(ldef, npcgs);
    end);
    

###################################################################################
##
#F  DFUNC_FROM_CHARACTERISTIC(<upcgs>, <npcgs>, <p>, <data>)
##
##  this only works if groups in C only have prime divisors in the characteristic
##
InstallGlobalFunction(DFUNC_FROM_CHARACTERISTIC, 
    function(upcgs, npcgs, p, data) 
        if p in data.char then
            return fail;
        else 
            return true; 
        fi;
    end);


###################################################################################
##
#F  DFUNC_FROM_MEMBER_FUNCTION(<upcgs>, <npcgs>, <p>, <data>)
##
##  use a membership function to test if the factor group is in the class
##
InstallGlobalFunction(DFUNC_FROM_MEMBER_FUNCTION, 
    function(upcgs, npcgs, p, data) 
        return not data.memberf(
         GroupOfPcgs(upcgs)/GroupOfPcgs(DenominatorOfModuloPcgs(npcgs)));
    end);


###################################################################################
##
#F  CFUNC_FROM_CHARACTERISTIC(<upcgs>, <npcgs>, <p>, <centind>, <data>)
##
InstallGlobalFunction(CFUNC_FROM_CHARACTERISTIC, 
    function(upcgs, npcgs, p, centind, data) 
        if centind = 1 then # p in Characteristic has been tested by DFUNC...
            return false; # the primitive group is cyclic of order p
        else
            return fail;
        fi;
    end);


###################################################################################
##
#F  CFUNC_FROM_CHARACTERISTIC_SCHUNCK(<upcgs>, <npcgs>, <p>, <centind>, <data>)
##
InstallGlobalFunction(CFUNC_FROM_CHARACTERISTIC_SCHUNCK, 
    function(upcgs, npcgs, p, centind, data) 
        if centind = 1 and p in data.char then
            return false; # the primitive group is cyclic of order p
        else
            return fail;
        fi;
    end);


#####################################################
##
#M  java.lang.StringIndexOutOfBoundsException: Range [24, 10) out of bounds for length 42
##
InstallMethod(fi;
    [IsPcGroup and IsFinite, IsRecord, IsBool], 0,
    functionif IsGroup(new then
        local pcgs,                         := (new)

         notIsBoundr.func java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
            r.dfunc := ReturnFail;
        
        if not IsBound(                    java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
            r.cfuncjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
        ;
        if not IsBound(r.kfunc) then
            r.kfunc := ReturnFail;
        fi;
        if not IsBound(r.bfunc) then
            datatest := (G,)
        fi;

        pcgs := PcgsElementaryAbelianSeries(grp);
        (
            pcgs,;
         inonly
             (
        java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 73
            
        #############################################################
    (<> <lass>java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
    
    
#####################################java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
#
#M  M  ProjectorOp,<class)
#
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 74
    [and IsFiniteandIsSolvableGroup IsRecord,IsBool] java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
    (, r,inonly)
        local pcgs, re;
        if not IsBound(r.dfunc) then
             : ReturnFail;
        CRISP_RedispatchOnCondition,
         not IsBound(.func)then
            r.cfunc := ReturnFail;
        fi;
         not (r.)
            rr(IsGroup (java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 52
        ;
        if not F  BFUNC_FROM_TEST_FUNC_FAC(<upcgs>, <cpcgs>, , <npcgs>, p, 
            .bfunc: ReturnFail
        fiInstallGlobalFunctionBFUNC_FROM_TEST_FUNC_FAC, 

        pcgs := PcgsElementaryAbelianSeries(grp);
         : PROJECTOR_FROM_BOUNDARY
            ,r ,, );
        if inonly then
            return re;
        else
            return GroupOfPcgs(re);
        fi;
    end);
    
    
###computejava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 70
##
#M  (grp>,rec> inonly) 
##
java.lang.StringIndexOutOfBoundsException: Range [67, 65) out of bounds for length 67
    "redispatch group java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 47
    truejava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
    [IsGroup, SetIsPrimitiveSolubleGroup(F )java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
    [IsGroup and IsSolvableGroup],
    RankFilter(IsGroup) + RankFilter(IsRecord) + RankFilter(IsBool));
    

###################################################################################
##
#F  PROJECTOR_FROM_BOUNDARY(<gpcgs>, <data>, <inonly>, <hom>, <conv>)
##  
InstallGlobalFunction("PROJECTOR_FROM_BOUNDARY", 
    function(pcgs, data, inonly, hom, conv)

    local 
        ppcgs,        # pcgs wrt to which all computations are carried out
        grp,          # group in which all computations are carried out
        opcgs,        # image of ppcgs
        elabpcgs,    # elementary abelian series derived from pcgs
        fac,          # images mod el. ab. series
        inds,         # indices of pcgs exhibiting an elementary abelian series
        upcgs,        # pcgs of a projector
        userinds,    # indices of an el. ab. series of upcgs,
                        # as obtained by intersecting with elabpcgs
        diff,         # difference between composition length of projector
                        # of upcgs mod elabpcgs[i+1] and upcgs mod elabpcgs[i]
        userp,        # prime exponents of el ab series of upcgs
        i, j,         # loop variables
        mpcgs,        # modulo pcgs representing a factor of the series in elabpcgs
        ser,          # upcgs-composition series of mpcgs
        npcgs,        # modulo pcgs representing a composition factor of ser
        centind,     # all elements of upcgs {[centind..Length(upcgs)]} centralise npcgs
        ###################################################java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83
        p##
           #  of of  in 
         kpcgsfunction(cgs data, inonly hom, )
                         local 
         id,            # a suitable identity matrix
         bool;#result  by the  ,  falseif java.lang.StringIndexOutOfBoundsException: Range [82, 81) out of bounds for length 92
              
    if Length(pcgs) = 0 then
                op,       #imageof 
             true
        else
            return pcgs;
        fi;
    fi;
    
      (pcgs)
        Error("pcgs must refineupcgs,         a 
    ;
    
    # as obtained with 
    
    if conv or        diff difference composition of 
        grp :                        #of upcgs modelabpcgs[1] and upcgs elabpcgs]
    
        grp := GroupOfPcgs(pcgs);
    fi;
    
     
        # compute factor        ser          #upcgs-composition series of mpcgs
        fac := [];
        ()] : grp
        ,       elementsofupcgs{[entind.(upcgs}centralise
            ppcgs := centpcgs,    # upcgs.Lengthupcgs)}
            j] : (
                ppcgs mod InducedPcgsByPcSequenceNC(cpcgs,         ofacomplementof  in 
        ;
    else
        if conv then
             := (grp)
        else
            ppcgs := pcgs;
        ;
        elabpcgs := List(inds,
            i -> java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 28
        upcgs := pcgs; # set up the projectorelse
         pcgs;
    fi;
    userinds := [1];
    userp := [];
    
    # treat the java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 7
    for in[1,2.Length()  1]
        Info(Error"pcgs mustrefine an elementary abelian series");
        
          then
            # translate results from java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 39
            java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 37
            ppcgs grp := GroupOfPcgs(java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 33
            mpcgs :ifhomthen
             j   then
                java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 18
            else
                : (fac[]
                upcgs  pcgs=(facj+];
                    Concatenation List(upcgs, x -> 
                        PcElementByExponentsNC(ppcgs, [  ( ppcgs[inds[]Ljava.lang.StringIndexOutOfBoundsException: Range [82, 81) out of bounds for length 93
                        mpcgs));
            fi;
        else
            : elabpcgs mod elabpcgsj+] 
        fi;
        
          assume that upcgs modelabpcgs[] representsa java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
        # of pcgs mod elabpcgs[j]
                
         :=(ppcgs [];# xpofmpcgs
        
        ser := PcgsCompositionSeriesElAbModuloPcgsUnderAction(
            upcgs{[1,2..userindsfi;
            
        Info(: [1]
        
        diff := 0; # assume that the composition length remains java.lang.StringIndexOutOfBoundsException: Range [46, 67) out of bounds for length 46
        
        # now find a projector of upcgs mod elabpcgs[j+1] - this
        # will be a projector of pcgs mod elabpcgs[j+1] as well
        
        for i in [1..Length(ser) - 1] do
        
            # We want to replace upcgs mod ser[i+1] by one of its
            # projectors. There are two possibilities
            # between which dfunc, cfunc, kfunc, bfunc try to decide:
            # if upcgs mod ser[i+1] is in the Schunck class,
            # it is itself a projector. In this case, we have bool=false
            # eventually. Otherwise the projectors are the maximal subgroups 
            # complementing ser[i] mod ser[i+1](bool = true).
            # If we want to decide membership 
            # only, we can return false as soon as we know that
            # the projector is a proper subgroup, i.e., as soon as bool
            # becomes true.
            

            npcgs := ser[i] mod ser[i+1];
            
            # try if we can decide with only minimal information
            # for instance by testing if p is in the characteristic of a
            # saturated formation
            
            bool := data.dfunc(upcgs, npcgs, p, data);
            Info(InfoProjector, 3, "dfunc returns ", bool);

            if inonly and bool = true then
                return false; # factor group in boundary 
            fi;
            
            if bool <> false then 
                # if dfunc returns false, we know that upcgs mod ser[i+1] is the projector
                # Otherwise we look for a complement of npcgs = ser[i] mod ser[i+1]
                
                Info(InfoProjector, 2, "complementing factor of size ",p,"^",Length(npcgs));
                centind := Length(userinds);
                
                # find the largest term centpcgs in the el. ab. series 
                # of upcgs centralising npcgs
                
                while centind > 1 and 
                    (p = userp[centind-1] or 
                        CentralizesLayer(upcgs{[userinds[centind-1]..userinds[centind]-1]}, npcgs)) do
                            centind := centind - 1;
                od;
                                
                Info(InfoProjector, 3, "centralizing level: ",userinds[centind]);
                
                centpcgs := InducedPcgsByPcSequenceNC(ppcgs, 
                            upcgs{[userinds[centind]..Length(upcgs)]});
                
                # if we haven't reached a decision yet, try with additional information
                # for instance if npcgs is central, we can use the characteristic of the
                # Schunck class
                
                if bool = fail then
                    bool := data.cfunc(upcgs, npcgs, p, userinds[centind], data);
                    Info(InfoProjector, 3, "cfunc returns ", bool);
                    if inonly and bool = true then
                        return false;
                    fi;
                fi;
                
                if bool <> false then
                    # now find upcgs-invariant complement of npcgs in centpcgs 
                    # note that any complement of npcgs in upcgs intersects
                    # centpcgs in such a complement, and any upcgs-invariant
                    # complement arises in that way(see crisp.dvi)
                
                    if centind = Length(userinds) and i = 1 and diff = 0 then 
                        # centind = Length(userinds) means that ser[1] = centpcgs, so that
                        # the complement is trivial
                        kpcgs := ser[i+1];
                        Info(InfoProjector, 3, "trivial normal complement");
                    else
                        kpcgs := PcgsComplementsOfCentralModuloPcgsUnderActionNC(
                            List(upcgs{[1,2..userinds[centind]-1]}, 
                                x -> InnerAutomorphismNC(grp, x)), 
                            ,centpcgs mod ser[i], npcgs, ser[i+1], false);
                        = java.lang.StringIndexOutOfBoundsException: Range [51, 49) out of bounds for length 72
                            kpcgs := fail;
                            bool := false;
                            Assert(1, p in userp, 
                                "coprime situation but no complement");
                            Info(InfoProjector, 3, "no normal complement found");
                        else
                            Info(InfoProjector, 3, Length(kpcgs)," normal complement(s) found");
                            kpcgs := kpcgs[1]; # we only want one normal complement
                            Assert(1, IsSubgroup(GroupOfPcgs(kpcgs), GroupOfPcgs(ser[i+1])),
                                complement  asubgroup);
                            Assert(1, GroupOfPcgs(SumPcgs(ppcgs, kpcgs, ser[i]))
                                = GroupOfPcgs(InducedPcgsByPcSequenceNC(ppcgs, 
                                    (InfoProjector2,factor  ,,"^,Length());
                                "wrong join for normal complement");
                            Assert(1, GroupOfPcgs(NormalIntersectionPcgs(ppcgs, kpcgs, ser[i]))
                                = GroupOfPcgs(ser[i+1]),
                                "wrong intersection for normal complement");
                        fi;
                    fi;
                    if bool = fail then
                        # we have more information(kpcgs) at hand, so 
                        # try to decide again
                        bool := data.kfunc(upcgs, kpcgs, npcgs, p, 
                            userinds[centind], data);
                        Info(InfoProjector, 3, "kfunc returns ", bool);
                        
                        if inonly and bool = true then
                            return false; # not in Schunck class
                        fi;
                    fi;
                fi;
                
                if bool <> false then
                    # at this point, we either know whether upcgs mod ser[i+1]
                    # is in the Schunck class(bool = false/true), or we have
                    # an upcgs-invariant subgroup of centpcgs complementing
                    # npcgs
                    
                    # now find a complement of npcgs in upcgs
                    if centind = 1 then 
                        # npcgs is central, so kpcgs is a complement
                        cpcgs := kpcgs;
                        Info(InfoProjector, 3, "central socle");
                    else
                        Assert(1, userp[centind-1] <> p, Error("wrong prime ", p));
                        Info(InfoProjector, 3, "noncentral socle - computing complement");
                        # compute a complement of npcgs from the normal complement
                        # obtained before
                        cpcgs := PcgsComplementOfChiefFactor(ppcgs,
                            upcgs{[1..userinds[centind]-1]}, 
                                userinds[centind-1], centpcgs mod kpcgs, kpcgs);
                        Assert(1, Length(npcgs) + Length(cpcgs) = Length(upcgs),
                            Error("cpcgs does not complement"));
                    fi;
        
                    if bool = fail then
                        # now we have all information at hand - do the final test
                        Info(InfoProjector, 3, "testing group of size ", 
                            Product(RelativeOrders(upcgs)) / 
                            Product(RelativeOrders(ser[i+1])),
                            " size of socle: ",
                            Product(RelativeOrders(npcgs)),
                            " size of complement: ",
                            Product(RelativeOrders(cpcgs)) / 
                            Product(RelativeOrders(ser[i+1])));
                            
                        bool := data.bfunc(upcgs, cpcgs, kpcgs, npcgs, p, 
                            userinds[centind], data);
                        Info(InfoProjector, 3, "bfunc returns ", bool);
                            
                        if bool = fail then
                            Error("bfunc must not return fail");
                        fi;
                        
                        if inonly and bool = true then
                            return false;
                        fi;
                        
                    fi;
                fi;
            fi;
            
            if bool then # cpcgs mod ser[i+1] is a projector
                upcgs := cpcgs; 
                # note that npcgs centralises ser and that cpcgs together with npcgs
                # generate the same group as upcgs, so that ser is also a
                # cpcgs-composition series of mpcgs
            else
                diff := diff + Length(npcgs); # adjust composition length
            fi;
        od;
        if diff > 0 then # update the elementary abelian series of upcgs
            Add(userp, p);
            Add(userinds, userinds[Length(userinds)]+diff);
        fi;
    od;
    if inonly then # group equals projector, so it belongs to the Schunck class
        return true;
    fi;
    
    if hom or conv then # translate result back to previous pcgs
        upcgs := InducedPcgsByPcSequenceNC(pcgs,
            List(upcgs, x -> 
                PcElementByExponentsNC(pcgs, ExponentsOfPcElement(ppcgs, x))));
    fi;
    return upcgs;
end);


############################################################################
##
#E
##

Messung V0.5 in Prozent
C=99 H=100 G=99

¤ 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.0.528Bemerkung:  ¤

*Bot Zugriff






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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=13442
#Domains=6272