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  cosets.gi   Sprache: unbekannt

 
###############################################################################
##
## Intersection2( U, V )
##
##  INPUT:
##      Ux:         right coset of a PcpGroup G
##      Vy:         right coset of a PcpGroup G
##
##  OUTPUT:
##      Iz:         intersection of Ux and Vy
##
InstallMethod(
    Intersection2,
    "for cosets of pcp groups",
    [ IsRightCoset and IsPcpElementCollection,
      IsRightCoset and IsPcpElementCollection ],
    function( Ux, Vy )
        local U, V, x, y, s, I, z;

        U := ActingDomain( Ux );
        V := ActingDomain( Vy );

        x := Representative( Ux );
        y := Representative( Vy );

        s := TWC.AsElementOfProductGroups( x * y ^ -1, U, V );
        if s = fail then
            return [];
        fi;

        I := TWC.IntersectionPcpGroups( U, V );
        z := s[2] * y;

        if TWC.ASSERT then
            if not (
                IsSubgroup( U, I ) and
                IsSubgroup( V, I ) and
                z in Ux and
                z in Vy
            ) then Error( "Assertion failure" ); fi;
        fi;
        return RightCoset( I, z );
    end
);

###############################################################################
##
## \in( y, UxV )
##
##  INPUT:
##      y:          element of a PcpGroup G
##      UxV:        double coset of a PcpGroup G
##
##  OUTPUT:
##      bool:       true if y belongs to UxV, otherwise false
##
InstallMethod(
    \in,
    "for double cosets of pcp groups",
    [ IsPcpElement, IsDoubleCoset and IsPcpElementCollection ],
    function( y, UxV )
        local U, V, T, x, z, s;

        U := LeftActingGroup( UxV );
        V := RightActingGroup( UxV );

        x := Representative( UxV );
        T := OnPoints( U, x );
        z := OnLeftInverse( y, x );

        s := TWC.AsElementOfProductGroups( z, T, V );
        if TWC.ASSERT then
            if not IsBool( s ) and not(
                z = s[1] * s[2] and
                s[1] in T and
                s[2] in V
            ) then Error( "Assertion failure" ); fi;
        fi;
        return not IsBool( s );
    end
);

###############################################################################
##
## \=( UxV, UyV )
##
##  INPUT:
##      UxV:        double coset of a PcpGroup G
##      UyV:        double coset of a PcpGroup G
##
##  OUTPUT:
##      bool:       true if UxV = UyV, otherwise false
##
InstallMethod(
    \=,
    "for double cosets of pcp groups",
    [ IsDoubleCoset and IsPcpElementCollection,
      IsDoubleCoset and IsPcpElementCollection ],
    function( UxV, UyV )
        if (
            LeftActingGroup( UxV ) <> LeftActingGroup( UyV ) or
            RightActingGroup( UxV ) <> RightActingGroup( UyV )
        ) then
            return false;
        fi;
        return Representative( UxV ) in UyV;
    end
);

###############################################################################
##
## Size( UxV )
##
##  INPUT:
##      UxV:        double coset of a PcpGroup G
##
##  OUTPUT:
##      size:       the size of the double coset
##
InstallMethod(
    Size,
    "for a double coset of a pcp group",
    [ IsDoubleCoset and IsPcpElementCollection ],
    function( UxV )
        local U, V, x, G, dp, tcc;
        U := LeftActingGroup( UxV );
        V := RightActingGroup( UxV );
        x := Representative( UxV );
        G := PcpGroupByCollectorNC( Collector( U ) );
        dp := TWC.DirectProductInclusions( G, U, V );
        tcc := ReidemeisterClass( dp[1], dp[2], x );
        return Size( tcc );
    end
);

###############################################################################
##
## DoubleCosetRepsAndSizes( G, U, V )
##
##  INPUT:
##      G:          PcpGroup
##      U:          subgroup of G
##      V:          subgroup of G
##
##  OUTPUT:
##      L:          List of double coset representatives and sizes
##
InstallMethod(
    DoubleCosetRepsAndSizes,
    "for pcp groups",
    [ IsPcpGroup, IsPcpGroup, IsPcpGroup ],
    function( G, U, V )
        local dp, Rcl, tcc;
        dp := TWC.DirectProductInclusions( G, U, V );
        Rcl := CallFuncList( ReidemeisterClasses, dp );
        if Rcl = fail then
            return fail;
        fi;
        return List( Rcl, tcc -> [ Representative( tcc ), Size( tcc ) ] );
    end
);

###############################################################################
##
## DoubleCosetsNC( G, U, V )
##
##  INPUT:
##      G:          PcpGroup
##      U:          subgroup of G
##      V:          subgroup of G
##
##  OUTPUT:
##      L:          List of DoubleCosets
##
InstallMethod(
    DoubleCosetsNC,
    "for pcp groups",
    [ IsPcpGroup, IsPcpGroup, IsPcpGroup ],
    function( G, U, V )
        local dp, Rcl, g;
        dp := TWC.DirectProductInclusions( G, U, V );
        Rcl := CallFuncList( RepresentativesReidemeisterClasses, dp );
        if Rcl = fail then
            return fail;
        fi;
        return List( Rcl, g -> DoubleCoset( U, g, V ) );
    end
);

[ Dauer der Verarbeitung: 0.22 Sekunden  (vorverarbeitet)  ]