Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  maps.gi   Sprache: Shell

 

#############################################################################
##
#W  maps.gi                  GAP4 package `Utils'                 Stefan Kohl 
##                                                              Chris Wensley
#Y  Copyright (C) 2015-2019, The GAP Group 

#############################################################################
##
#F  EpimorphismByGenerators( <D1>, <D2> ) . epi: gen's of <D1>->gen's of <D2>
##
InstallMethod( EpimorphismByGenerators, "for groups", ReturnTrue, 
    [ IsGroup, IsGroup ], 0, 

function( G, H )
    if not ( IsFreeGroup( G ) ) then 
      Print( "Warning: calling GroupHomomorphismByImagesNC without checks\n" );
    fi; 
    
return GroupHomomorphismByImagesNC( G, H, GeneratorsOfGroup(G),
                                              GeneratorsOfGroup(H) );
end );

##############################################################################
##
#M  Pullback . . . . . . . . . for two group homomorphisms with a common range
##
InstallMethod( Pullback, "for two group homomorphisms", true, 
    [ IsGroupHomomorphism, IsGroupHomomorphism ], 0,
function( nu, mu )

    local M, N, P, NxM, projM, pmu, projN, pnu, genNxM, e, genL, L, 
          imphi, phi, impsi, psi, info; 

    M := Source( mu ); 
    P := Range( mu ); 
    N := Source( nu ); 
    if not ( Range(nu) = P ) then 
        Error( "homs nu,mu should have a common range" );
    fi; 
    NxM := DirectProduct( N, M ); 
    genNxM := GeneratorsOfGroup( NxM ); 
    projN := Projection( NxM, 1 ); 
    pnu := projN * nu; 
    projM := Projection( NxM, 2 ); 
    pmu := projM * mu; 
    if IsFinite( NxM ) then 
        genL := [ ]; 
        L := Subgroup( NxM, [ One(NxM) ] ); 
        for e in NxM do 
            if ImageElm( pnu, e ) = ImageElm( pmu, e ) then 
                if not ( e in L ) then 
                    Add( genL, e ); 
                    L := Group( genL );
                fi;
            fi; 
        od;
    else 
        return fail; 
    fi;
    imphi := List( genL, g -> ImageElm( projN, g ) ); 
    phi := GroupHomomorphismByImages( L, N, genL, imphi ); 
    impsi := List( genL, g -> ImageElm( projM, g ) ); 
    psi := GroupHomomorphismByImages( L, M, genL, impsi ); 
    info := rec( directProduct := NxM, projections := [phi,psi] ); 
    SetPullbackInfo( L, info ); 
    return L;
end ); 

#############################################################################
##
#M  CentralProduct( <G1>, <G2>, <Z1>, <Phi> )
##
InstallMethod( CentralProduct,
    [ "IsGroup", "IsGroup", "IsGroup", "IsGroupHomomorphism" ],
    function( G1, G2, Z1, Phi )
    local gens, imgs, dp, emb1, emb2, N, proj, G;

    if not ( IsSubset( G1, Z1 ) and IsCentral( G1, Z1 ) ) then
      Error( "<Z1> must be a central subgroup of <G1>" );
    fi;
    gens:= GeneratorsOfGroup( Z1 );
    imgs:= List( gens, x -> (x^-1)^Phi );
    if not ( IsSubset( G2, imgs ) and
             ForAll( imgs, x -> IsCentral( G2, x ) ) ) then
      Error( "<Phi> must map <Z1> to a central subgroup of <G2>" );
    fi;

    dp:= DirectProduct( G1, G2 );
    emb1:= Embedding( dp, 1 );
    emb2:= Embedding( dp, 2 );
    N:= SubgroupNC( dp,
            List( [ 1 .. Length( gens ) ], i -> gens[i]^emb1 * imgs[i]^emb2 ) );
    proj:= NaturalHomomorphismByNormalSubgroup( dp, N );
    G:= Image( proj );
    SetCentralProductInfo( G, rec( projection:= proj, phi:= Phi ) );

    return G;
end );

##############################################################################
##
#M  IdempotentEndomorphisms  . . . . . . . . . . . . . . . . . . . for a group  
#M  IdempotentEndomorphismsData  . . . . . . . . . . . . . . . . . for a group  
#M  IdempotentEndomorphismsWithImage . . . . .  for a group and a chosen image 
##
InstallMethod( IdempotentEndomorphismsWithImage, 
    "for a list of group generators and a chosen image", 
    [ IsList, IsGroup ], 0, 
function( genG, R ) 

    local G, numG, r, q, norm, n, reps, i, j, rc;

    G := Group( genG );
    if not IsSubgroup( G, R ) then 
        Error( "R should be a subgroup of G" ); 
    fi; 
    numG := Length( genG );
    r := Size( R ); 
    q := Size( G )/r;     
    norm := Filtered( NormalSubgroups( G ), N -> ( Size( N ) = q ) and 
                          IsTrivial( Intersection( N, R ) ) ); 
    n := Length( norm );
    reps := [ ]; 
    for i in [1..n] do 
        Add( reps, [ ] );
        for j in [1..numG] do 
            rc := norm[i]*genG[j]; 
            Add( reps[i], First( rc, g -> g in R ) );   
        od;
    od;
    return reps; 
end );

InstallMethod( IdempotentEndomorphismsData, "for a group", [ IsGroup ], 0, 
function( G ) 

    local genG, R, data, images; 

    genG := SmallGeneratingSet( G ); 
    images := [ ]; 
    for R in AllSubgroups( G ) do 
        data := IdempotentEndomorphismsWithImage( genG, R ); 
        if ( data <> [ ] ) then 
            Add( images, data ); 
        fi; 
    od;
    return rec( gens := genG, images := images );
end );

InstallMethod( IdempotentEndomorphisms, "for a group", [ IsGroup ], 0, 
function( G ) 

    local data, genG, images, len, L, i, im; 

    data := IdempotentEndomorphismsData( G ); 
    genG := data!.gens;
    G := Group( genG );  
    images := data!.images; 
    len := Length( images ); 
    L := [ ]; 
    for i in [1..len] do 
        for im in images[i] do 
            Add( L, GroupHomomorphismByImages( G, G, genG, im ) ); 
        od;  
    od;  
    return L;
end );

##############################################################################
##
#M  DirectProductOfFunctions . . . . . . for two groups and two homomorphisms  
##
InstallMethod( DirectProductOfFunctions, "for two groups and two homs", 
    [ IsGroup, IsGroup, IsGroupHomomorphism, IsGroupHomomorphism ], 0, 
function( G, H, f1, f2 ) 

    local infoG, gpsG, G1, G2, infoH, gpsH, H1, H2, eG1, eG2, eH1, eH2, 
          mgi1, mgi2, genG, imH1, imH2, imH;

    if not HasDirectProductInfo( G ) and HasDirectProductInfo( H ) then 
        Error( "first two parameters should be direct products" ); 
    fi; 
    infoG := DirectProductInfo( G ); 
    gpsG := infoG!.groups; 
    G1 := gpsG[1]; 
    G2 := gpsG[2]; 
    if not ( ( G1 = Source( f1 ) ) and ( G2 = Source( f2 ) ) ) then 
        Error( "f1,f2 should have source G1,G2" ); 
    fi; 
    eG1 := Embedding( G, 1 ); 
    eG2 := Embedding( G, 2 ); 
    mgi1 := MappingGeneratorsImages( f1 ); 
    mgi2 := MappingGeneratorsImages( f2 ); 
    infoH := DirectProductInfo( H ); 
    gpsH := infoH!.groups; 
    H1 := gpsH[1]; 
    H2 := gpsH[2]; 
    if not ( ( H1 = Range( f1 ) ) and ( H2 = Range( f2 ) ) ) then 
        Error( "f1,f2 should have range H1,H2" ); 
    fi; 
    eH1 := Embedding( H, 1 ); 
    eH2 := Embedding( H, 2 ); 
    genG := Concatenation( List( mgi1[1], g -> ImageElm( eG1, g ) ),
                           List( mgi2[1], g -> ImageElm( eG2, g ) ) ); 
    imH1 := List( mgi1[2], h -> ImageElm( eH1, h ) ); 
    imH2 := List( mgi2[2], h -> ImageElm( eH2, h ) ); 
    imH := Concatenation( imH1, imH2 );
    return GroupHomomorphismByImagesNC( G, H, genG, imH ); 
end );

##############################################################################
##
#M  DirectProductOfAutomorphismGroups . . . . . . for two automorphism groups   
##
InstallMethod( DirectProductOfAutomorphismGroups, "for two groups", 
    [ IsGroup, IsGroup ], 0, 
function( A1, A2 ) 

    local gen1, gen2, G1, G2, id1, id2, dp, dp1, dp2, gen12, A12, 
          em1, em2, pr1, pr2, info; 

    if not ( IsGroupOfAutomorphisms(A1) and IsGroupOfAutomorphisms(A2) ) then 
        Error( "A1,A2 should be automorphism groups" ); 
    fi;
    gen1 := GeneratorsOfGroup( A1 ); 
    gen2 := GeneratorsOfGroup( A2 ); 
    G1 := Source( gen1[1] ); 
    G2 := Source( gen2[1] ); 
    if not ( IsGroup( G1 ) and IsGroup( G2 ) ) then 
        Error( "A1,A2 should be automorphism groups of groups G1,G2" ); 
    fi; 
    id1 := IdentityMapping( G1 ); 
    id2 := IdentityMapping( G2 ); 
    dp := DirectProduct( G1, G2 ); 
    dp1 := List( gen1, g -> DirectProductOfFunctions( dp, dp, g, id2 ) ); 
    dp2 := List( gen2, g -> DirectProductOfFunctions( dp, dp, id1, g ) ); 
    gen12 := Concatenation( dp1, dp2 ); 
    A12 := Group( gen12 ); 
    em1 := GroupHomomorphismByImages( A1, A12, gen1, dp1 ); 
    em2 := GroupHomomorphismByImages( A2, A12, gen2, dp2 ); 
    pr1 := GroupHomomorphismByImages( A12, A1, gen12, 
               Concatenation( gen1, List( gen2, g -> id1 ) ) ); 
    pr2 := GroupHomomorphismByImages( A12, A2, gen12, 
               Concatenation( List( gen1, g -> id2 ), gen2 ) ); 
    info := rec( embeddings := [ em1, em2 ], 
                 groups := [ A1, A2 ], 
                 projections := [ pr1, pr2 ] ); 
    SetDirectProductInfo( A12, info ); 
    return A12; 
end ); 

Messung
CHZG
889910095

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104857
#Domains=417833