Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/twistedconjugacy/lib/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 12.9.2025 mit Größe 2 kB image not shown  

Quelle  reidemeisternumber.gi   Sprache: unbekannt

 
###############################################################################
##
## ReidemeisterNumber( hom1, hom2 )
##
##  INPUT:
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G (optional)
##
##  OUTPUT:
##      R:          Reidemeister number R(hom1,hom2)
##
BindGlobal(
    "ReidemeisterNumber",
    function( arg... )
        return CallFuncList( ReidemeisterNumberOp, arg );
    end
);

BindGlobal( "NrTwistedConjugacyClasses", ReidemeisterNumber );

###############################################################################
##
## ReidemeisterNumberOp( hom1, hom2 )
##
##  INPUT:
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G (optional)
##
##  OUTPUT:
##      R:          Reidemeister number R(hom1,hom2)
##
InstallMethod(
    ReidemeisterNumberOp,
    "for abelian range",
    [ IsGroupHomomorphism, IsGroupHomomorphism ],
    1,
    function( hom1, hom2 )
        local G, H, diff, N;
        H := Source( hom1 );
        G := Range( hom1 );
        if not IsAbelian( G ) then TryNextMethod(); fi;
        diff := TWC.DifferenceGroupHomomorphisms( hom1, hom2, H, G );
        N := Image( diff );
        return IndexNC( G, N );
    end
);

InstallMethod(
    ReidemeisterNumberOp,
    "by counting Reidemeister classes",
    [ IsGroupHomomorphism, IsGroupHomomorphism ],
    0,
    function( hom1, hom2 )
        local G, Rcl;
        G := Range( hom1 );
        Rcl := RepresentativesReidemeisterClassesOp( hom1, hom2, G, false );
        if Rcl <> fail then
            return Size( Rcl );
        fi;
        return infinity;
    end
);

InstallOtherMethod(
    ReidemeisterNumberOp,
    "for finite non-abelian groups",
    [ IsGroupHomomorphism ],
    1,
    function( endo )
        local G;
        G := Source( endo );
        if not (
            IsFinite( G ) and
            not IsAbelian( G )
        ) then TryNextMethod(); fi;
        return Number(
            ConjugacyClasses( G ),
            c -> ImagesRepresentative(
                endo,
                Representative( c )
            ) in AsSSortedList( c )
        );
    end
);

InstallOtherMethod(
    ReidemeisterNumberOp,
    "default to two-agument version",
    [ IsGroupHomomorphism ],
    0,
    function( endo )
        local G, id;
        G := Source( endo );
        id := IdentityMapping( G );
        return ReidemeisterNumberOp( endo, id );
    end
);

[ Dauer der Verarbeitung: 0.25 Sekunden  (vorverarbeitet)  ]