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


Quelle  form.gi   Sprache: unbekannt

 
Spracherkennung für: .gi vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

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


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


#############################################################################
##
#M  ViewObj(<form>)
##
InstallMethod(ViewObj, "for formation", true, 
    [IsOrdinaryFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("OrdinaryFormation(");
        ViewDefiningAttributes(C);
        Print(")");
    end);

#############################################################################
##
#M  PrintObj(<form>)
##
InstallMethod(PrintObj, "for formation", true, 
    [IsOrdinaryFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("OrdinaryFormation(");
        PrintDefiningAttributes(C);
        Print(")");
    end);


#############################################################################
##
#M  IsMemberOp(<grp>, <form>)
##
InstallMethod(IsMemberOp, "if residual function is known", true, 
    [IsGroup, IsOrdinaryFormation and HasResidualFunction], 10,  
            # residual function is usually faster 
            # than computation of radical or injector
    function(G, C)
        if HasMemberFunction(C) then
            TryNextMethod();
        else
            return IsTrivial(ResidualFunction(C)(G));
        fi;
    end);
 

#############################################################################
##
#M  SaturatedFormation(<rec>)
##
InstallMethod(SaturatedFormation, true, [IsRecord], 0,
    function(record)
        local F, r;
        r := ShallowCopy(record);
        F := NewClass("saturated Formation", IsGroupClass and IsClassByPropertyRep, 
                rec(definingAttributes := 
                      [    ["in", MemberFunction],
                      ["res", ResidualFunction],
                      ["proj", ProjectorFunction],
                      ["locdef", LocalDefinitionFunction],
                      ["bound", BoundaryFunction]]));
        if IsBound(r.char) then
            SetCharacteristic(F, r.char);
            Unbind(r.char);
        fi;
          SetIsSaturatedFormation(F, true);
          InstallDefiningAttributes(F, r);
        return F;
    end);

#############################################################################
##
#M  ViewObj(<form>)
##
InstallMethod(ViewObj, "for a saturated formation", true, 
    [IsSaturatedFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("SaturatedFormation(");
        ViewDefiningAttributes(C);
        Print(")");
    end);


#############################################################################
##
#M  PrintObj(<form>)
##
InstallMethod(PrintObj, "for a saturated formation", true, 
    [IsSaturatedFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("SaturatedFormation(");
        PrintDefiningAttributes(C);
        Print(")");
    end);


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


#############################################################################
##
#M  ViewObj(<fitform>)
##
InstallMethod(ViewObj, "for Fitting formation", true, 
    [IsFittingFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("FittingFormation(");
        ViewDefiningAttributes(C);
        Print(")");
    end);


#############################################################################
##
#M  PrintObj(<fitform>)
##
InstallMethod(PrintObj, "for Fitting formation", true, 
    [IsFittingFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("FittingFormation( ");
        PrintDefiningAttributes(C);
        Print(")");
    end);


#############################################################################
##
#M  SaturatedFittingFormation(<rec>)
##
InstallMethod(SaturatedFittingFormation, true, [IsRecord], 0,
    function(record)
        local F, r;
        r := ShallowCopy(record);
        F := NewClass("SaturatedFittingFormation", IsGroupClass and IsClassByPropertyRep, rec(
            definingAttributes :=
            [    ["in", MemberFunction],
                 ["rad", RadicalFunction],
                 ["inj", InjectorFunction],
                 ["locdef", LocalDefinitionFunction],
                  ["res", ResidualFunction],
                  ["proj", ProjectorFunction],
                  ["bound", BoundaryFunction]
              ]));
        SetIsSaturatedFittingFormation(F, true);
        if IsBound(r.char) then
            SetCharacteristic(F, r.char);
            Unbind(r.char);
        fi;
        InstallDefiningAttributes(F, r);
        return F;
    end);


#############################################################################
##
#M  ViewObj(<fitform>)
##
InstallMethod(ViewObj, "for saturated Fitting formation", true, 
    [IsSaturatedFittingFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("SaturatedFittingFormation(");
        ViewDefiningAttributes(C);
        Print(")");
    end);


#############################################################################
##
#M  PrintObj(<fitform>)
##
InstallMethod(PrintObj, "for saturated Fitting formation", true, 
    [IsSaturatedFittingFormation and IsClassByPropertyRep], 0,
    function(C) 
        Print("SaturatedFittingFormation(");
        PrintDefiningAttributes(C);
        Print(")");
    end);


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


#############################################################################
##
#M  FormationProduct(<bot>, <top>)
##
InstallMethod(FormationProduct, "of two formations", true, 
    [IsOrdinaryFormation, IsOrdinaryFormation], 0, 
    function(B, T)
        return NewClass("formation product fam", IsFormationProductRep,
            rec(bot := B, top := T));
    end);


#############################################################################
##
#M  ViewObj
##
InstallMethod(ViewObj, "for formation product", true, [IsFormationProductRep], 0,
    function(C) 
        Print("FormationProduct(");
        ViewObj(C!.bot);
        Print(", ");
        ViewObj(C!.top);
        Print(")");
    end);


#############################################################################
##
#M  PrintObj
##
InstallMethod(PrintObj, "for formation product", true, [IsFormationProductRep], 0,
    function(C) 
        Print("FormationProduct(");
        PrintObj(C!.bot);
        Print(", ");
        PrintObj(C!.top);
        Print(")");
    end);


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


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

#############################################################################
##
#M  IsSaturated(<grpclass>)
##
InstallImmediateMethod(IsSaturated, IsFormationProductRep, 0,
    function(C) 
        if HasIsSaturated(C!.bot) and HasIsSaturated(C!.top)
            and IsSaturated(C!.bot) and IsSaturated(C!.top) then
                return true;
        else
            TryNextMethod();
        fi;
    end);
            
            
#############################################################################
##
#M  LocalDefinitionFunction(<prod>)
##
InstallImmediateMethod(LocalDefinitionFunction, 
    IsFormationProductRep and IsSaturated, 0,
    function(C) 
        if HasLocalDefinitionFunction(C!.bot) 
                and HasLocalDefinitionFunction(C!.top) then
            return function(G, p)
                local gens;
                gens := LocalDefinitionFunction(C!.bot)(Residual(G, C!.top), p);
                if gens = fail then # p is not in the characteristic of C!.bot
                    return LocalDefinitionFunction(C!.top)(G, p);
                else
                    return gens;
                fi;
            end;
        else
            TryNextMethod();
        fi;
    end);
    
    
#############################################################################
##
#M  IsSaturated(<grpclass>)
##
InstallImmediateMethod(IsSaturated, IsFormationProductRep, 0,
    function(C) 
        local char;
        if HasIsSaturated(C!.bot) and IsSaturated(C!.bot) 
                and HasCharacteristic(C!.bot) 
                and Characteristic(C!.bot) = AllPrimes then
            return true;
        else
            TryNextMethod();
        fi;
    end);
            
            

#############################################################################
##
#M  LocalDefinitionFunction(<prod>)
##
InstallImmediateMethod(LocalDefinitionFunction, 
    IsFormationProductRep and IsSaturated, 0,
    function(C) 
        if HasCharacteristic(C!.bot) and Characteristic(C!.bot) = AllPrimes
                and HasLocalDefinitionFunction(C!.bot) then
            SetCharacteristic(C, AllPrimes);
            return function(G, p)
                return LocalDefinitionFunction(C!.bot)(Residual(G, C!.top), p);
            end;
        else
            TryNextMethod();
        fi;
    end);
    

#############################################################################
##
#M  IsSaturated(<grpclass>)
##
##  (this can be expensive in some cases, so it is not an immediate method)
##
InstallMethod(IsSaturated, 
    "test if char of top class is subset of char of bot class",
    true, [IsFormationProductRep], 0,
    function(C) 
        local char;
        char := Characteristic(C!.top);
        if IsSaturated(C!.bot) and IsList(char) and ForAll(char, p -> p in Characteristic(C!.bot)) then
            return true;
        else
            TryNextMethod();
        fi;
    end);
            
            
#############################################################################
##
#M  LocalDefinitionFunction(<prod>)
##
##  (this can be expensive in some cases, so it is not an immediate method)
##
InstallMethod(LocalDefinitionFunction, 
    "test if char of top class is subset of char of bot class",
    true, [IsFormationProductRep], 0,
    function(C) 
        local char;
        char := Characteristic(C!.top);
        if IsList(char) and ForAll(char, p -> p in Characteristic(C!.bot)) then
            SetIsSaturated(C, true);
            SetCharacteristic(C, Characteristic(C!.bot));
            return function(G, p)
                return LocalDefinitionFunction(C!.bot)(Residual(G, C!.top), p);
            end;;
        else
            TryNextMethod();
        fi;
    end);
            
            
#############################################################################
##
#M  FormationProduct(<bot>, <top>)
##
InstallMethod(FormationProduct, "of two Fitting formations", true, 
    [IsOrdinaryFormation and IsFittingClass, 
        IsOrdinaryFormation and IsFittingClass], 0, 
    function(B, T)
        return NewClass("formation/Fitting product fam", 
            IsFormationProductRep and IsFittingProductRep,
            rec(bot := B, top := T));
    end);


#############################################################################
##
#M  FittingFormationProduct(<bot>, <top>)
##
InstallMethod(FittingFormationProduct, "of two Fitting formations", true, 
    [IsOrdinaryFormation and IsFittingClass, IsOrdinaryFormation and IsFittingClass], 0, 
    FormationProduct);


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


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


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


#############################################################################
##
#M  IsSubgroupClosed(<prod>)
##
InstallImmediateMethod(IsSubgroupClosed, IsFittingProductRep, 0,
    function(C)
        if HasIsSubgroupClosed(C!.bot) and IsSubgroupClosed(C!.bot) and 
                HasIsSubgroupClosed(C!.top) and IsSubgroupClosed(C!.top) then
            return true;
        else
            TryNextMethod();
        fi;
    end);


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

    

[ Dauer der Verarbeitung: 0.48 Sekunden  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


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