Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/lib/   (GAP Algebra Version 4.15.1©)  Datei vom 18.9.2025 mit Größe 10 kB image not shown  

Quelle  rws.gi   Sprache: Shell

 

#############################################################################
##
##  This file is part of GAP, a system for computational discrete algebra.
##  This file's authors include Frank Celler.
##
##  Copyright of GAP belongs to its developers, whose names are too numerous
##  to list here. Please refer to the COPYRIGHT file for details.
##
##  SPDX-License-Identifier: GPL-2.0-or-later
##
##  This file contains generic methods for rewriting systems.
##


#############################################################################
##
#M  AddGenerators( <rws>, <gens> )
##
InstallMethod( AddGenerators,
    true,
    [ IsRewritingSystem and IsMutable,
      IsHomogeneousList ],
    0,

function( rws, gens )
    local   lst;

    lst := GeneratorsOfRws(rws);
    if not IsEmpty( Intersection( lst, gens ) )  then
        Error( "new generators contain old ones" );
    fi;
    lst := Concatenation( lst, gens );
    SetGeneratorsOfRws( rws, lst );
    SetNumberGeneratorsOfRws( rws, Length(lst) );

end );


#############################################################################
##
#M  NumberGeneratorsOfRws( <rws> )
##
InstallMethod( NumberGeneratorsOfRws,
    true,
    [ IsRewritingSystem ],
    0,

function( rws )
    return Length( GeneratorsOfRws(rws) );
end );


#############################################################################
##
#M  UnderlyingFamily( <rws> )
##
InstallMethod( UnderlyingFamily,
    true,
    [ IsRewritingSystem ],
    0,

function( rws )
    return FamilyObj(rws)!.underlyingFamily;
end );


#############################################################################
##
#M  ViewObj( <rws> )
##


#############################################################################
InstallMethod( ViewObj,
    true,
    [ IsRewritingSystem ],
    0,

function( rws )
    Print( "<<rewriting system>>" );
end );


#############################################################################
InstallMethod( ViewObj, true,
    [ IsRewritingSystem and IsBuiltFromGroup ],
    0,

function( rws )
    Print( "<<group rewriting system>>" );
end );


#############################################################################
##
#M  PrintObj( <rws> )
##


#############################################################################
InstallMethod( PrintObj,
    true,
    [ IsRewritingSystem ],
    0,

function( rws )
    Print( "<<rewriting system>>" );
end );
#T install a better `PrintObj' method!


#############################################################################
InstallMethod( PrintObj, true,
    [ IsRewritingSystem and IsBuiltFromGroup ],
    0,

function( rws )
    Print( "<<group rewriting system>>" );
end );
#T install a better `PrintObj' method!


#############################################################################
##
#M  ReduceRules( <rws> )
##
InstallMethod( ReduceRules,
    true,
    [ IsRewritingSystem and IsMutable ],
    0,
    function( rws ) return; end );


#############################################################################
##
#F  IsIdenticalObjFamiliesRwsObj( <rws>, <obj> )
##
BindGlobal( "IsIdenticalObjFamiliesRwsObj", function( a, b )
    return IsIdenticalObj( a!.underlyingFamily, b );
end );


#############################################################################
##
#F  IsIdenticalObjFamiliesRwsObjObj( <rws>, <obj>, <obj> )
##
BindGlobal( "IsIdenticalObjFamiliesRwsObjObj", function( a, b, c )
    return IsIdenticalObj( a!.underlyingFamily, b )
       and IsIdenticalObj( b, c );
end );


#############################################################################
##
#F  IsIdenticalObjFamiliesRwsObjXXX( <rws>, <obj>, <obj> )
##
BindGlobal( "IsIdenticalObjFamiliesRwsObjXXX", function( a, b, c )
    return IsIdenticalObj( a!.underlyingFamily, b );
end );


#############################################################################
##
#M  ReducedAdditiveInverse( <rws>, <obj> )
##
InstallMethod( ReducedAdditiveInverse,
    "ReducedForm",
    IsIdenticalObjFamiliesRwsObj,
    [ IsRewritingSystem and IsBuiltFromAdditiveMagmaWithInverses,
      IsAdditiveElementWithInverse ],
    0,

function( rws, obj )
    return ReducedForm( rws, -obj );
end );


#############################################################################
##
#M  ReducedComm( <rws>, <left>, <right> )
##
InstallMethod( ReducedComm,
    "ReducedLeftQuotient/ReducedProduct",
    IsIdenticalObjFamiliesRwsObjObj,
    [ IsRewritingSystem and IsBuiltFromGroup,
      IsMultiplicativeElementWithInverse,
      IsMultiplicativeElementWithInverse ],
    0,

function( rws, left, right )
    return ReducedLeftQuotient( rws,
        ReducedProduct( rws, right, left ),
        ReducedProduct( rws, left, right ) );
end );


#############################################################################
##
#M  ReducedConjugate( <rws>, <left>, <right> )
##
InstallMethod( ReducedConjugate,
    "ReducedLeftQuotient/ReducedProduct",
    IsIdenticalObjFamiliesRwsObjObj,
    [ IsRewritingSystem and IsBuiltFromGroup,
      IsMultiplicativeElementWithInverse,
      IsMultiplicativeElementWithInverse ], 0,

function( rws, left, right )
    return ReducedLeftQuotient( rws, right,
               ReducedProduct( rws, left, right ) );
end );


#############################################################################
##
#M  ReducedDifference( <rws>, <left>, <right> )
##
InstallMethod( ReducedDifference,
    "ReducedSum/ReducedAdditiveInverse",
    IsIdenticalObjFamiliesRwsObjObj,
    [ IsRewritingSystem and IsBuiltFromAdditiveMagmaWithInverses,
      IsAdditiveElementWithInverse,
      IsAdditiveElementWithInverse ],
    0,

function( rws, left, right )
    return ReducedSum( rws, left, ReducedAdditiveInverse( rws, right ) );
end );


#############################################################################
##
#M  ReducedInverse( <rws>, <obj> )
##
InstallMethod( ReducedInverse,
    "ReducedForm",
    IsIdenticalObjFamiliesRwsObj,
    [ IsRewritingSystem and IsBuiltFromMagmaWithInverses,
      IsMultiplicativeElementWithInverse ],
    0,

function( rws, obj )
    return ReducedForm( rws, obj^-1 );
end );


#############################################################################
##
#M  ReducedLeftQuotient( <rws>, <left>, <right> )
##
InstallMethod( ReducedLeftQuotient,
    "ReducedProduct/ReducedInverse",
    IsIdenticalObjFamiliesRwsObjObj,
    [ IsRewritingSystem and IsBuiltFromMagmaWithInverses,
      IsMultiplicativeElementWithInverse,
      IsMultiplicativeElementWithInverse ],
    0,

function( rws, left, right )
    return ReducedProduct( rws, ReducedInverse( rws, left ), right );
end );


#############################################################################
##
#M  ReducedOne( <rws> )
##
InstallMethod( ReducedOne,
    "ReducedForm",
    true,
    [ IsRewritingSystem and IsBuiltFromMagmaWithOne ],
    0,

function( rws )
    return ReducedForm( rws, One(UnderlyingFamily(rws)) );
end );


#############################################################################
##
#M  ReducedPower( <rws>, <obj>, <pow> )
##
InstallMethod( ReducedPower,
    "ReducedProduct/ReducedInverse",
    IsIdenticalObjFamiliesRwsObjXXX,
    [ IsRewritingSystem and IsBuiltFromGroup,
      IsMultiplicativeElement,
      IsInt ],
    0,

function( rws, obj, pow )
    local   res,  i;

    # if <pow> is negative invert <obj> first
    if pow < 0  then
        obj := ReducedInverse( rws, obj );
        pow := -pow;
    fi;

    # if <pow> is zero, reduce the identity
    if pow = 0  then
        return ReducedOne(rws);

    # catch some trivial cases
    elif pow <= 5  then
        if pow = 1  then
            return obj;
        elif pow = 2  then
            return ReducedProduct( rws, obj, obj );
        elif pow = 3  then
            res := ReducedProduct( rws, obj, obj );
            return ReducedProduct( rws, res, obj );
        elif pow = 4  then
            res := ReducedProduct( rws, obj, obj );
            return ReducedProduct( rws, res, res );
        elif pow = 5  then
            res := ReducedProduct( rws, obj, obj );
            res := ReducedProduct( rws, res, res );
            return ReducedProduct( rws, res, obj );
        fi;
    fi;

    # use repeated squaring (right to left)
    res := ReducedOne(rws);
    i   := 1;
    while i <= pow  do i := i * 2; od;
    while 1 < i  do
        res := ReducedProduct( rws, res, res );
        i   := QuoInt( i, 2 );
        if i <= pow  then
            res := ReducedProduct( rws, res, obj );
            pow := pow - i;
        fi;
    od;
    return res;

end );


#############################################################################
##
#M  ReducedProduct( <rws>, <left>, <right> )
##
InstallMethod( ReducedProduct,
    "ReducedForm",
    IsIdenticalObjFamiliesRwsObjObj,
    [ IsRewritingSystem and IsBuiltFromMagma,
      IsMultiplicativeElement,
      IsMultiplicativeElement ],
    0,

function( rws, left, right )
    return ReducedForm( rws, left * right );
end );


#############################################################################
##
#M  ReducedQuotient( <rws>, <left>, <right> )
##
InstallMethod( ReducedQuotient,
    "ReducedProduct/ReducedInverse",
    IsIdenticalObjFamiliesRwsObjObj,
    [ IsRewritingSystem and IsBuiltFromMagmaWithInverses,
      IsMultiplicativeElementWithInverse,
      IsMultiplicativeElementWithInverse ],
    0,

function( rws, left, right )
    return ReducedProduct( rws, left, ReducedInverse( rws, right ) );
end );


#############################################################################
##
#M  ReducedSum( <rws>, <left>, <right> )
##
InstallMethod( ReducedSum,
    "ReducedForm",
    IsIdenticalObjFamiliesRwsObjObj,
    [ IsRewritingSystem and IsBuiltFromAdditiveMagmaWithInverses,
      IsAdditiveElement,
      IsAdditiveElement ],
    0,

function( rws, left, right )
    return ReducedForm( rws, left + right );
end );


#############################################################################
##
#M  ReducedZero( <rws> )
##
InstallMethod( ReducedOne,
    "ReducedForm",
    true,
    [ IsRewritingSystem and IsBuiltFromAdditiveMagmaWithInverses ],
    0,

function( rws )
    return ReducedForm( rws, Zero(UnderlyingFamily(rws)) );
end );

#############################################################################
##
#M  IsReducedForm( <rws>,<w> )
##
InstallMethod(IsReducedForm,
    "for a rewriting system and an object", true,
    [IsRewritingSystem,IsObject],
    function(rws,w)
            return ReducedForm(rws,w)=w;
    end);

Messung V0.5 in Prozent
C=74 H=95 G=84

¤ Dauer der Verarbeitung: 0.36 Sekunden  (vorverarbeitet am  2026-10-13) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

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.