Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  fitting.gi   Sprache: Shell

 

#############################################################################
##
##  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
##


Messung
CHZG
1001009297

¤ Dauer der Verarbeitung: 0.9 Sekunden  ¤

*© Formatika GbR, Deutschland






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=1104856
#Domains=417513