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

Quelle  reidemeisterclasses.gi   Sprache: unbekannt

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

###############################################################################
##
## RepresentativesReidemeisterClassesOp( hom1, hom2, N, one )
##
##  INPUT:
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G
##      N:          normal subgroup of G with hom1 = hom2 mod N
##      one:        boolean to toggle returning fail as soon as there is more
##                  than one Reidemeister class
##
##  OUTPUT:
##      L:          list containing a representative of each (hom1,hom2)-
##                  twisted conjugacy class in N, or fail if there are
##                  infinitely many
##
InstallMethod(
    RepresentativesReidemeisterClassesOp,
    "for finite range",
    [ IsGroupHomomorphism, IsGroupHomomorphism, IsGroup, IsBool ],
    7,
    function( hom1, hom2, N, one )
        local G, H;
        G := Range( hom1 );
        H := Source( hom1 );
        if not (
            IsPcpGroup( H ) and
            not IsTrivial( G ) and
            not IsFinite( H ) and
            IsFinite( G )
        ) then TryNextMethod(); fi;
        return TWC.ReidemeisterClassesByTrivSub( G, H, hom1, hom2, N, one );
    end
);

InstallMethod(
    RepresentativesReidemeisterClassesOp,
    "for nilpotent range",
    [ IsGroupHomomorphism, IsGroupHomomorphism, IsGroup, IsBool ],
    4,
    function( hom1, hom2, N, one )
        local G, H, C;
        G := Range( hom1 );
        H := Source( hom1 );
        if not (
            IsPcpGroup( H ) and
            IsPcpGroup( G ) and
            not IsFinite( H ) and
            not IsFinite( G ) and
            IsNilpotentGroup( G )
        ) then TryNextMethod(); fi;
        C := Center( G );
        return TWC.ReidemeisterClassesByNormSub( G, H, hom1, hom2, N, C, one );
    end
);

InstallMethod(
    RepresentativesReidemeisterClassesOp,
    "for nilpotent-by-finite range",
    [ IsGroupHomomorphism, IsGroupHomomorphism, IsGroup, IsBool ],
    3,
    function( hom1, hom2, N, one )
        local G, H, F;
        G := Range( hom1 );
        H := Source( hom1 );
        if not (
            IsPcpGroup( H ) and
            IsPcpGroup( G ) and
            not IsFinite( H ) and
            not IsFinite( G ) and
            not IsNilpotentGroup( G ) and
            IsNilpotentByFinite( G )
        ) then TryNextMethod(); fi;
        F := FittingSubgroup( G );
        return TWC.ReidemeisterClassesByFinQuo( G, H, hom1, hom2, N, F, one );
    end
);

InstallMethod(
    RepresentativesReidemeisterClassesOp,
    "for abelian subgroup commuting with the derived subgroup",
    [ IsGroupHomomorphism, IsGroupHomomorphism, IsGroup, IsBool ],
    2,
    function( hom1, hom2, N, one )
        local G, H, D;
        G := Range( hom1 );
        H := Source( hom1 );
        if not (
            IsPcpGroup( H ) and
            IsPcpGroup( G ) and
            not IsFinite( H ) and
            not IsNilpotentByFinite( G ) and
            IsAbelian( N )
        ) then TryNextMethod(); fi;
        D := DerivedSubgroup( G );
        if ForAny( GeneratorsOfGroup( N ), n ->
            ForAny( GeneratorsOfGroup( D ), d -> d * n <> n * d )
        ) then TryNextMethod(); fi;
        return TWC.RepsReidClassesStep1( G, H, hom1, hom2, N, one );
    end
);

InstallMethod(
    RepresentativesReidemeisterClassesOp,
    "for nilpotent-by-abelian range",
    [ IsGroupHomomorphism, IsGroupHomomorphism, IsGroup, IsBool ],
    1,
    function( hom1, hom2, N, one )
        local G, H, K;
        G := Range( hom1 );
        H := Source( hom1 );
        if not (
            IsPcpGroup( H ) and
            IsPcpGroup( G ) and
            not IsFinite( H ) and
            not IsNilpotentByFinite( G ) and
            IsNilpotentByAbelian( G )
        ) then TryNextMethod(); fi;
        K := Center( DerivedSubgroup( G ) );
        return TWC.ReidemeisterClassesByNormSub( G, H, hom1, hom2, N, K, one );
    end
);

InstallMethod(
    RepresentativesReidemeisterClassesOp,
    "for polycyclic range",
    [ IsGroupHomomorphism, IsGroupHomomorphism, IsGroup, IsBool ],
    0,
    function( hom1, hom2, N, one )
        local G, H, K;
        G := Range( hom1 );
        H := Source( hom1 );
        if not (
            IsPcpGroup( H ) and
            IsPcpGroup( G ) and
            not IsFinite( H ) and
            not IsNilpotentByFinite( G ) and
            not IsNilpotentByAbelian( G )
        ) then TryNextMethod(); fi;
        K := NilpotentByAbelianByFiniteSeries( G )[2];
        return TWC.ReidemeisterClassesByFinQuo( G, H, hom1, hom2, N, K, one );
    end
);

[ Dauer der Verarbeitung: 0.37 Sekunden  ]