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


Quelle  fitting.gi   Sprache: unbekannt

 
#############################################################################
##
##  fitting.gi                       CRISP                   Burkhard Höfling
##
##  Copyright © 2000 Burkhard Höfling
##


#############################################################################
##
#M  FittingClass(<rec>)
##
InstallMethod(FittingClass, true, [IsRecord], 0,
    function(record)
        local F, r;
        r := ShallowCopy(record);
    
        F := NewClass("FittingClass", 
            IsGroupClass and IsClassByPropertyRep, 
            rec(definingAttributes :=
                [    ["in", MemberFunction],
                     ["rad", RadicalFunction],
                     ["inj", InjectorFunction]]));
        SetIsFittingClass(F, true);
        if IsBound(r.char) then
            SetCharacteristic(F, r.char);
            Unbind(r.char);
        fi;
        InstallDefiningAttributes(F, r);
        return F;
    end);


#############################################################################
##
#M  ViewObj(<fit>)
##
InstallMethod(ViewObj, "for Fitting class", true, 
    [IsFittingClass and IsClassByPropertyRep], 0,
    function(C) 
        Print("FittingClass(");
        ViewDefiningAttributes(C);
        Print(")");
    end);


#############################################################################
##
#M  PrintObj(<fit>)
##
InstallMethod(PrintObj, "for Fitting class", true, 
    [IsFittingClass and IsClassByPropertyRep], 0,
    function(C) 
        Print("FittingClass( rec(");
        PrintDefiningAttributes(C);
        Print("))");
    end);


#############################################################################
##
#M  IsMemberOp(<grp>, <fit>)
##
InstallMethod(IsMemberOp, "if radical is known", true, 
    [IsGroup, IsFittingClass and HasRadicalFunction], 1,  
            # radical function is usually faster than injector
    function(G, C)
        if HasMemberFunction(C) then
            TryNextMethod();
        else
            return IsSubgroup(RadicalFunction(C)(G), G);
        fi;
    end);
 
 
#############################################################################
##
#M  IsMemberOp(<grp>, <fit>)
##
InstallMethod(IsMemberOp, "if injector is known", true, 
        [IsGroup, IsFittingClass and HasInjectorFunction], 0,
    function(G, C)
        if HasMemberFunction(C) then
            TryNextMethod();
        else
            return IsSubgroup(InjectorFunction(C)(G), G);
        fi;
 end);


#############################################################################
##
#R  IsFittingProductRep(<cl>)
##
##  classes which are defined as Fitting product
##
DeclareRepresentation("IsFittingProductRep", 
    IsClass and IsGroupClass and IsFittingClass and 
        IsComponentObjectRep and IsAttributeStoringRep, 
    ["classId", "bot", "top"]);


#############################################################################
##
#M  FittingProduct(<bot>, <top>)
##
InstallMethod(FittingProduct, "of two Fittng classes", true, 
    [IsFittingClass, IsFittingClass], 0, 
    function(B, T)
        return NewClass("Fitting product fam", IsFittingProductRep,
            rec(bot := B, top := T));
    end);


#############################################################################
##
#M  ViewObj
##
InstallMethod(ViewObj, "for Fitting product", true, [IsFittingProductRep], 0,
    function(C) 
        Print("FittingProduct(");
        ViewObj(C!.bot);
        Print(", ");
        ViewObj(C!.top);
        Print(")");
    end);


#############################################################################
##
#M  PrintObj
##
InstallMethod(PrintObj, "for Fitting product", true, [IsFittingProductRep], 0,
    function(C) 
        Print("FittingProduct(");
        PrintObj(C!.bot);
        Print(", ");
        PrintObj(C!.top);
        Print(")");
    end);


#############################################################################
##
#M  IsMemberOp(<prod>)
##
InstallMethod(IsMemberOp, "for Fitting product", true, 
    [IsGroup, IsFittingProductRep], 0, 
    function(G, C)
        return G/ Radical(G, C!.bot) in C!.top;
    end);


#############################################################################
##
#M  Characteristic(<bot>, <top>)
##
InstallMethod(Characteristic, "for Fitting product", true, 
    [IsFittingProductRep], 0,
    function(C) 
        return Union(Characteristic(C!.top), Characteristic(C!.bot));
    end);
    

#############################################################################
##
#M  FittingProduct(<bot>, <top>)
##
InstallMethod(FittingProduct, 
    "for Fitting formation - use FormationProduct", true, 
    [IsFittingFormation, IsFittingFormation], 0,
    FormationProduct);
    

#############################################################################
##
#R  IsFittingSetRep
##
DeclareRepresentation("IsFittingSetRep", 
    IsClassByPropertyRep and IsMultiplicativeElementCollColl, 
    ["classId", "group"]);


#############################################################################
##
#M  FittingSet(<grp>, <rec>)
##
InstallMethod(FittingSet, true, [IsGroup, IsRecord], 0,
    function(G, r)
        
        local F;
        
        F := NewClass(CollectionsFamily(FamilyObj(G)), IsFittingSetRep, 
            rec(group := G,
                definingAttributes := 
                [    ["in", MemberFunction],
                     ["rad", RadicalFunction],
                     ["inj", InjectorFunction]]));
        InstallDefiningAttributes(F, r); 
        return F;
    end);


        
#############################################################################
##
#M  IsFittingSet(<grp>, <class>)
##
InstallMethod(IsFittingSet, " for IsFittingSetRep", 
    function(G, C) return IsIdenticalObj(CollectionsFamily(G), C); end, 
    [IsGroup, IsFittingSetRep], 3,
    function(G, C)
        return IsSubgroup(C!.group, G);
    end);

    
#############################################################################
##
#M  IsFittingSet(<grp>, <class>)
##
InstallMethod(IsFittingSet, " for Fitting class", 
    true,
    [IsGroup, IsFittingClass], 0,
    function(G, C)
        return true;
    end);


#############################################################################
##
#M  ViewObj(<fit>)
##
InstallMethod(ViewObj, "for Fitting set", true, 
    [IsFittingSetRep and IsClassByPropertyRep], 0,
    function(C) 
        Print("FittingSet(", C!.group, ", rec(");
        ViewDefiningAttributes(C);
        Print("))");
    end);


#############################################################################
##
#M  PrintObj(<fit>)
##
InstallMethod(PrintObj, "for Fitting set", true, 
    [IsFittingSetRep and IsClassByPropertyRep], 0,
    function(C) 
        Print("FittingSet(", C!.group, ", rec(");
        PrintDefiningAttributes(C);
        Print("))");
    end);


#############################################################################
##
#M  IsMemberOp(<grp>, <fitset>)
##
InstallMethod(IsMemberOp, "if radical is known", 
    function(G, C) return IsIdenticalObj(CollectionsFamily(G), C); end, 
        [IsGroup, IsFittingSetRep and HasRadicalFunction], 1,  # radical function is usually faster than injector
    function(G, C)
        if HasMemberFunction(C) then
            TryNextMethod();
        else
            return IsSubgroup(RadicalFunction(C)(G), G);
        fi;
    end);
    
#############################################################################
##
#M  IsMemberOp(<grp>, <fitset>)
##
InstallMethod(IsMemberOp, "for FittingSetRep with inj function", 
    function(G, C) return IsIdenticalObj(CollectionsFamily(G), C); end, 
    [IsGroup, IsFittingSetRep and HasInjectorFunction], 0,
    function(G, C)
        if HasMemberFunction(C) then
            TryNextMethod();
        else
            return IsSubgroup(InjectorFunction(C)(G), G);
        fi;
    end);
    
    
#############################################################################
##
#M  Intersection2(<fitset>, <fit>)
##
InstallMethod(Intersection2, "for Fitting set and Fitting class", true,
    [IsFittingSetRep, IsFittingClass], 0,
    function(F1, F2)
        local F;
        F := FittingSet(F1!.group, 
            rec(\in := x -> x in F1 and x in F2, 
                 rad := G -> Radical(Radical(G, F2), F1)));
        return F;
    end);
        

#############################################################################
##
#M  Intersection2(<fit>, <fitset>)
##
InstallMethod(Intersection2, "for Fitting class and Fitting set", 
    IsIdenticalObj,
    [IsFittingClass, IsFittingSetRep], 0,
    function(F1, F2)
        return Intersection2(F2, F1);
    end);
        

#############################################################################
##
#M  Intersection2(<fitset1>, <fitset2>)
##
InstallMethod(Intersection2, "for Fitting sets", IsIdenticalObj,
    [IsFittingSetRep, IsFittingSetRep], 0,
    function(F1, F2)
        local F;
        F := FittingSet(Intersection(F1!.group, F2!.group), 
            rec(\in := x -> x in F1 and x in F2, 
                 rad := G -> Radical(Radical(G, F2), F1)));
        return F;
    end);
        
        
#############################################################################
##
#M    PreImageFittingSet(<alpha>, <fitset>) 
##
##    return Fitting set of preimage
##
InstallMethod(PreImageFittingSet, "for Fitting set", 
    function(famalpha, famF)
        return IsIdenticalObj(FamilyRange(famalpha),
                        ElementsFamily(ElementsFamily(famF)));
    end,
    [IsGroupHomomorphism, IsFittingSetRep], 0, 
    function(alpha, F)

        if not IsFittingSet(ImagesSource(alpha), F) then
            Error("F must be a Fitting set of the image of alpha");
        else 
            return FittingSet(Source(alpha), rec(
                inj := G ->PreImagesSet(alpha, 
                    Injector(ImagesSet(alpha, G), F))));
        fi;
    end);


#############################################################################
##
#M    PreImageFittingSet(<alpha>, <fitset>) 
##
##    return Fitting set of preimage of an isomorphism
##
InstallMethod(PreImageFittingSet, "for Fitting set - injective case", 
    function(famalpha, famF)
        return IsIdenticalObj(FamilyRange(famalpha), 
                        ElementsFamily(ElementsFamily(famF)));
    end,
    [IsGroupHomomorphism and IsInjective, IsFittingSetRep], 0, 
    function(alpha, F)

        if not IsFittingSet(ImagesSource(alpha), F) then
            Error("F must be a Fitting set of the image of alpha");
        else
            return FittingSet(Source(alpha), rec(
                \in := G ->ImagesSet(alpha, G) in F, 
                rad := G ->PreImagesSet(alpha, 
                    Radical(ImagesSet(alpha, G), F)),
                inj := G ->PreImagesSet(alpha, 
                    Injector(ImagesSet(alpha, G), F))));
        fi;
    end);


#############################################################################
##
#M    ImageFittingSet(<alpha>, <fitset>) 
##
##    return Fitting set of image
##
InstallMethod(ImageFittingSet, "for Fitting set",
    function(famalpha, famF)
        return IsIdenticalObj(FamilySource(famalpha), 
            ElementsFamily(ElementsFamily(famF)));
    end,
    [IsGroupHomomorphism, IsFittingSetRep], 0, 
    function(alpha, F)

        if not IsFittingSet(Source(alpha), F) then
            Error("F must be a Fitting set of the preimage of alpha");
        else 
            return FittingSet(ImagesSource(alpha), rec(
                inj := G ->ImagesSet(alpha, 
                    Injector(PreImagesSet(alpha, G), F))));
        fi;
    end);



#############################################################################
##
#M    ImageFittingSet(<alpha>, <fitset>) 
##
##    return Fitting set of image when alpha is injective
##
InstallMethod(ImageFittingSet, "for Fitting set - injective case",
    function(famalpha, famF)
        return IsIdenticalObj(FamilySource(famalpha), 
                        ElementsFamily(ElementsFamily(famF)));
    end,
    [IsGroupHomomorphism and IsInjective, IsFittingSetRep], 0, 
    function(alpha, F)

        if not IsFittingSet(Source(alpha), F) then
            Error("F must be a Fitting set of the preimage of alpha");
        else 
            return FittingSet(ImagesSet(alpha), rec(
                \in := G ->PreImagesSet(alpha, G) in F, 
                rad := G ->ImagesSet(alpha, 
                Radical(PreImagesSet(alpha, G), F)),
                inj := G ->ImagesSet(alpha, 
                    Injector(PreImagesSet(alpha, G), F))));
        fi;
    end);


#############################################################################
##
#M    PreImageFittingSet(<alpha>, <fit>) 
##
##    return Fitting set of preimage
##
InstallMethod(PreImageFittingSet, "for Fitting class", true,
     [IsGroupHomomorphism, IsFittingClass], 0, 
    function(alpha, F)

        return FittingSet(Source(alpha), rec(
            inj := G ->PreImagesSet(alpha, 
                Injector(ImagesSet(alpha, G), F))));
    end);


#############################################################################
##
#M    PreImageFittingSet(<alpha>, <fit>) 
##
##    return Fitting set of preimage of an isomorphism
##
InstallMethod(PreImageFittingSet, "for Fitting class - injective case", true,
     [IsGroupHomomorphism and IsInjective, IsFittingClass], 0, 
    function(alpha, F)

        return FittingSet(Source(alpha), rec(
            \in := G ->ImagesSet(alpha, G) in F, 
            rad := G ->PreImagesSet(alpha, 
                Radical(ImagesSet(alpha, G), F)),
            inj := G ->PreImagesSet(alpha, 
                Injector(ImagesSet(alpha, G), F))));
    end);

#############################################################################
##
#M    ImageFittingSet(<alpha>, <fitset>) 
##
##    return Fitting set of image
##
InstallMethod(ImageFittingSet, "for Fitting class", true,
     [IsGroupHomomorphism, IsFittingClass], 0, 
    function(alpha, F)

        return FittingSet(Image(alpha), rec(
            inj := G ->ImagesSet(alpha, 
                Injector(PreImagesSet(alpha, G), F))));
    end);



#############################################################################
##
#M    ImageFittingSet(<alpha>, <fitset>) 
##
##    return Fitting set of image when alpha is injective
##
InstallMethod(ImageFittingSet, "for Fitting class - injective case", true,
     [IsGroupHomomorphism and IsInjective, IsFittingClass], 0, 
    function(alpha, F)

        return FittingSet(Image(alpha), rec(
            \in := G ->PreImagesSet(alpha, G) in F, 
            rad := G ->ImagesSet(alpha, 
                Radical(PreImagesSet(alpha, G), F)),
            inj := G ->ImagesSet(alpha, 
                Injector(PreImagesSet(alpha, G), F))));
    end);


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


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