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 11 kB image not shown  

Quelle  reidemeisterclasses.g   Sprache: unbekannt

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

###############################################################################
##
## ReidemeisterClassesByTrivSub( G, H, hom1, hom2, N, one )
##
##  INPUT:
##      G:          finite group
##      H:          infinite PcpGroup
##      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
##
##  REMARKS:
##      Calculates the representatives by calculating the representatives of
##      hom1HL, hom2HL: H/L -> G, with L the intersection of Ker(hom1) and
##      Ker(hom2).
##
TWC.ReidemeisterClassesByTrivSub := function( G, H, hom1, hom2, N, one )
    local L, id, q, hom1HL, hom2HL;
    L := TWC.IntersectionOfKernels( hom1, hom2 );
    id := IdentityMapping( G );
    q := NaturalHomomorphismByNormalSubgroupNC( H, L );
    hom1HL := InducedHomomorphism( q, id, hom1 );
    hom2HL := InducedHomomorphism( q, id, hom2 );
    return RepresentativesReidemeisterClassesOp( hom1HL, hom2HL, N, one );
end;

###############################################################################
##
## ReidemeisterClassesByFinQuo( G, H, hom1, hom2, N, K, one )
##
##  INPUT:
##      G:          infinite PcpGroup
##      H:          infinite PcpGroup
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G
##      N:          normal subgroup of G with hom1 = hom2 mod N
##      K:          finite index normal subgroup of G
##      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
##
##  REMARKS:
##      Calculates the representatives of (hom1,hom2) by first calculating the
##      representatives of (hom1p,hom2p), with hom1p, hom2p: H/L -> G/K,
##      where L is normal in H.
##
TWC.ReidemeisterClassesByFinQuo := function( G, H, hom1, hom2, N, K, one )
    local L, p, q, GK, pN, hom1p, hom2p, RclGK, Rcl, hom1K, hom2K, M, pn,
          inn_pn, Coin, n, conj_n, inn_n_hom1K, RclM, inRclM, inn_n, tc, m1,
          isNew, h, m2, inn_nm2_hom1K;
    L := TWC.IntersectionOfPreImages( hom1, hom2, K );
    p := NaturalHomomorphismByNormalSubgroupNC( G, K );
    q := NaturalHomomorphismByNormalSubgroupNC( H, L );
    hom1p := InducedHomomorphism( q, p, hom1 );
    hom2p := InducedHomomorphism( q, p, hom2 );
    pN := ImagesSet( p, N );
    RclGK := RepresentativesReidemeisterClassesOp( hom1p, hom2p, pN, one );
    if RclGK = fail then
        return fail;
    fi;
    GK := ImagesSource( p );
    Rcl := [];
    hom1K := RestrictedHomomorphism( hom1, L, K );
    hom2K := RestrictedHomomorphism( hom2, L, K );
    M := NormalIntersection( N, K );
    for pn in RclGK do
        n := PreImagesRepresentativeNC( p, pn );
        conj_n := ConjugatorAutomorphismNC( K, n );
        inn_n_hom1K := hom1K * conj_n;
        RclM := RepresentativesReidemeisterClassesOp(
            inn_n_hom1K, hom2K, M, false
        );
        if RclM = fail then
            return fail;
        fi;
        inRclM := [ Remove( RclM, 1 ) ];
        if not IsEmpty( RclM ) then
            inn_pn := InnerAutomorphismNC( GK, pn );
            inn_n := InnerAutomorphismNC( G, n );
            tc := TwistedConjugation( hom1 * inn_n, hom2 );
            Coin := List(
                CoincidenceGroup2( hom1p * inn_pn, hom2p ),
                qh -> PreImagesRepresentativeNC( q, qh )
            );
            for m1 in RclM do
                isNew := true;
                for h in Coin do
                    m2 := tc( m1, h );
                    inn_nm2_hom1K := inn_n_hom1K *
                        InnerAutomorphismNC( K, m2 );
                    if ForAny(
                        inRclM,
                        k -> RepresentativeTwistedConjugationOp(
                            inn_nm2_hom1K,
                            hom2K,
                            m2 ^ -1 * k
                        ) <> fail
                    ) then
                        isNew := false;
                        break;
                    fi;
                od;
                if isNew then
                    if one then
                        return fail;
                    fi;
                    Add( inRclM, m1 );
                fi;
            od;
        fi;
        Append( Rcl, List( inRclM, m -> n * m ) );
    od;
    return Rcl;
end;

###############################################################################
##
## ReidemeisterClassesByNormSub( G, H, hom1, hom2, N, K, one )
##
##  INPUT:
##      G:          infinite PcpGroup
##      H:          infinite PcpGroup
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G
##      N:          normal subgroup of G with hom1 = hom2 mod N
##      M:          normal subgroup of G
##      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
##
##  REMARKS:
##      Calculates the representatives of (hom1,hom2) by first calculating the
##      representatives of (hom1p,hom2p), with hom1p, hom2p: H -> G/K.
##
TWC.ReidemeisterClassesByNormSub := function( G, H, hom1, hom2, N, K, one )
    local p, idH, pN, hom1p, hom2p, RclGK, Rcl, M, pn, n, inn_n, C_n, hom1_n,
          hom2_n, RclM, inn_pn, GK;
    p := NaturalHomomorphismByNormalSubgroupNC( G, K );
    idH := IdentityMapping( H );
    pN := ImagesSet( p, N );
    hom1p := InducedHomomorphism( idH, p, hom1 );
    hom2p := InducedHomomorphism( idH, p, hom2 );
    RclGK := RepresentativesReidemeisterClassesOp( hom1p, hom2p, pN, one );
    if RclGK = fail then
        return fail;
    fi;
    Rcl := [];
    M := NormalIntersection( N, K );
    GK := ImagesSource( p );
    for pn in RclGK do
        n := PreImagesRepresentativeNC( p, pn );
        inn_n := InnerAutomorphismNC( G, n );
        inn_pn := InnerAutomorphismNC( GK, pn );
        C_n := CoincidenceGroup2( hom1p * inn_pn, hom2p );
        hom1_n := RestrictedHomomorphism( hom1 * inn_n, C_n, G );
        hom2_n := RestrictedHomomorphism( hom2, C_n, G );
        RclM := RepresentativesReidemeisterClassesOp(
            hom1_n, hom2_n, M, one
        );
        if RclM = fail then
            return fail;
        fi;
        Append( Rcl, List( RclM, m -> n * m ) );
    od;
    return Rcl;
end;

###############################################################################
##
## RepsReidClassesStep3( G, H, hom1, hom2, A, one )
##
##  INPUT:
##      G:          infinite PcpGroup
##      H:          infinite PcpGroup
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G
##      A:          abelian normal subgroup of G with hom1 = hom2 mod A
##      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 A, or fail if there are
##                  infinitely many
##
##  REMARKS:
##      Assumes that:
##        - [A,[G,G]] = 1;
##        - G = A Im(hom1) = A Im(hom2);
##        - [H,H] is a subgroup of Coin(hom1,hom2);
##
TWC.RepsReidClassesStep3 := function( _, H, hom1, hom2, A, one )
    local q, Hab, igs, prei, imgs1, auts, Aut, alpha, S, imgs2, n, diff,
          iHab, iA, embsHab, embsA, l, r, N, Rcl;
    q := NaturalHomomorphismByNormalSubgroupNC( H, DerivedSubgroup( H ) );
    Hab := ImagesSource( q );
    igs := Igs( Hab );
    prei := List( igs, qh -> PreImagesRepresentativeNC( q, qh ) );
    imgs1 := List( prei, h -> ImagesRepresentative( hom1, h ) );
    auts := List( imgs1, h -> ConjugatorAutomorphismNC( A, h ) );
    Aut := Group( auts );

    alpha := GroupHomomorphismByImagesNC( Hab, Aut, igs, auts );
    S := SemidirectProduct( Hab, alpha, A );
    if not IsNilpotentByFinite( S ) then
        return fail;
    fi;

    imgs2 := List( prei, h -> ImagesRepresentative( hom2, h ) );
    n := Length( igs );
    diff := List( [ 1 .. n ], i -> imgs1[i] ^ -1 * imgs2[i] );
    iHab := Embedding( S, 1 );
    iA := Embedding( S, 2 );
    embsHab := List( igs, qh -> ImagesRepresentative( iHab, qh ) );
    embsA := List( diff, a -> ImagesRepresentative( iA, a ) );
    l := GroupHomomorphismByImagesNC( Hab, S, igs, embsHab );
    r := GroupHomomorphismByImagesNC(
        Hab, S,
        igs, List( [ 1 .. n ], i -> embsHab[i] * embsA[i] )
    );
    N := ImagesSource( iA );
    Rcl := RepresentativesReidemeisterClassesOp( l, r, N, one );
    if Rcl = fail then
        return fail;
    fi;
    return List( Rcl, a -> PreImagesRepresentativeNC( iA, a ) );
end;

###############################################################################
##
## RepsReidClassesStep2( G, H, hom1, hom2, A, one )
##
##  INPUT:
##      G:          infinite PcpGroup
##      H:          infinite PcpGroup
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G
##      A:          abelian normal subgroup of G with hom1 = hom2 mod A
##      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 A, or fail if there are
##                  infinitely many
##
##  REMARKS:
##      Assumes that:
##        - [A,[G,G]] = 1;
##        - G = A Im(hom1) = A Im(hom2);
##
TWC.RepsReidClassesStep2 := function( G, H, hom1, hom2, A, one )
    local HH, delta, dHH, p, q, hom1p, hom2p, pG, pA, Rcl;
    HH := DerivedSubgroup( H );
    delta := TWC.DifferenceGroupHomomorphisms( hom1, hom2, HH, A );
    dHH := ImagesSource( delta );
    p := NaturalHomomorphismByNormalSubgroupNC( G, dHH );
    q := IdentityMapping( H );
    hom1p := InducedHomomorphism( q, p, hom1 );
    hom2p := InducedHomomorphism( q, p, hom2 );
    pG := ImagesSource( p );
    pA := ImagesSet( p, A );
    Rcl := TWC.RepsReidClassesStep3( pG, H, hom1p, hom2p, pA, one );
    if Rcl = fail then
        return fail;
    fi;
    return List( Rcl, pa -> PreImagesRepresentativeNC( p, pa ) );
end;

###############################################################################
##
## RepsReidClassesStep1( G, H, hom1, hom2, A )
##
##  INPUT:
##      G:          infinite PcpGroup
##      H:          infinite PcpGroup
##      hom1:       group homomorphism H -> G
##      hom2:       group homomorphism H -> G
##      A:          abelian normal subgroup of G with hom1 = hom2 mod A
##      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 A, or fail if there are
##                  infinitely many
##
##  REMARKS:
##      Assumes that [A,[G,G]] = 1
##
TWC.RepsReidClassesStep1 := function( _G, H, hom1, hom2, A, one )
    local K, l, r;
    K := ClosureGroup( ImagesSource( hom1 ), A );
    l := RestrictedHomomorphism( hom1, H, K );
    r := RestrictedHomomorphism( hom2, H, K );
    return TWC.RepsReidClassesStep2( K, H, l, r, A, one );
end;

[ Dauer der Verarbeitung: 0.42 Sekunden  ]