|
|
|
|
Quelle grpend.gi
Sprache: unbekannt
|
|
# file: endos.gi
##############################################################################
##
#M Automorphisms ( <G> )
##
## returns a list of all Automorphisms of the group <G>.
##
InstallMethod(
Automorphisms,
"default method for Automorphisms",
true,
[IsGroup],
0,
function ( G )
return AsList (AutomorphismGroup (G));
end );
##############################################################################
##
#M InnerAutomorphisms ( <G> )
##
## returns a list of all InnerAutomorphisms of the group <G>.
##
InstallMethod(
InnerAutomorphisms,
"default method for InnerAutomorphisms",
true,
[IsGroup],
0,
function ( G )
return List( RepresentativesModNormalSubgroup(G,Centre(G)),
g -> InnerAutomorphism( G, g ) );
end );
## new methods for computing additive generators of
## homomorphisms/endomorphisms into abelian groups
## by pm 12.05.00
#############################################################################
##
#M IndependentGeneratorsOfAbelianGroup( <G> ) . . . . . . . nice generators
##
#InstallMethod( IndependentGeneratorsOfAbelianGroup, "for pc group", true,
# [ IsPcGroup and IsAbelian ], 0,
# function ( G )
#
# local gens, # generators of G, not independent
# gensorders, # orders of the generators
# qs, # list of sizes of the p-Sylow subgroups of G
# p, # prime factor of the size of G
# pgens, # generators of of the p-Sylow subgroups of G,
# # not independent
# indpgens, # independent generators of a p-Sylow subgroup
# Gp, # p-Sylow subgroup by indpgens
# indgens, # independent generators of G as union of indpgens
# mingens, # minimal set of independent generators of G
# n, # length of mingens
# # maximal number of cyclic factors of all Gp's
# np,
# g, i, j, q, x, y;
#
#
# gens := GeneratorsOfGroup( G );
# qs := List( Collected( Factors( Size( G ) ) ), x -> x[1]^x[2] );
# indgens := [];
#
## split into p-groups
#
# for q in qs do
# p := SmallestRootInt( q );
# pgens := [];
# for g in gens do
# if Order( g ) mod p = 0 then
# i := 2;
# while Order( g ) mod p^(i) = 0 do
# i := i+1;
# od;
# Add( pgens, g^QuoInt( Order( g ), p^(i-1) ) );
# fi;
# od;
# Sort( pgens, function( x, y ) return Order(x) > Order(y); end );
#
# indpgens := [pgens[1]]; Gp := Group( indpgens ); i := 2;
# while Size( Gp ) <> q do
# g := SiftedPcElement( Pcgs( Gp ), pgens[i] );
# if Order( g ) = Order( pgens[i] ) then
## g is independent from Gp
# Add( indpgens, g );
# Gp := Group( indpgens );
# elif Order( g ) > 1 then
## pgens[i] depends on indpgens, but is not in Gp
## g is inserted in pgens according to its order
# np := Length( pgens );
# j := PositionProperty( pgens{[i+1..np]}, x ->
# Order(x) = Order(g) );
# pgens := Concatenation( pgens{[1..j-1]}, [g], pgens{[j..np]} );
# fi;
# i := i+1;
# od;
# Add( indgens, indpgens );
# od;
#
## this new generating set can now be minimized
#
# n := Maximum( List( indgens, Length ) );
# mingens := [];
# for i in [1..n] do
# g := Identity( G );
# for pgens in indgens do
# if IsBound( pgens[i] ) then
# g := g*pgens[i];
# fi;
# od;
# Add( mingens, g );
# od;
#
# return mingens;
#end );
#
#
#############################################################################
##
#M AdditiveGeneratorsForHomomorphisms( <G>, <H> )
##
## returns a list of additive generators for Hom(G,H) with abelian H.
## compare elementary matrices for vectorspaces.
##
InstallMethod( AdditiveGeneratorsForHomomorphisms, "default", true,
[ IsGroup, IsGroup and IsAbelian ], 0,
function ( G, H )
local homos, # additive generators for Hom(G,H); result
F, # F = G/G' ; the maximal abelian factor of G
h, # natural homo from G to f
fomos, # additive generators for Hom(F,H)
gens, hens,
fens, # generators for G, H, F
gensorders,
hensorders, # orders of the generators
id, # identity of H
idimgs, # list of images of gens under the homo x -> id
# from G to H
imgs, # list of images of gens under some elementary homo
# from G to H
n, m, d,
i, j, f, x;
if not IsAbelian( G ) then
## Since H is abelian, homos from G to H are maps from G via G/G', abelian,
## to H. We find the additive generators for Hom( G/G', H ).
h := NaturalHomomorphismByNormalSubgroupNC( G, DerivedSubgroup( G ) );
F := Image( h, G );
fomos := AdditiveGeneratorsForHomomorphisms( F, H );
gens := GeneratorsOfGroup( G );
fens := List( gens, x -> Image( h, x ) );
homos := [];
## Now the homos from G to H are compositions from h and fomos
for f in fomos do
Add( homos, GroupHomomorphismByImagesNC( G, H, gens,
List( fens, x -> Image( f, x ) ) ) );
od;
return homos;
fi;
gens := IndependentGeneratorsOfAbelianGroup( G );
gensorders := List( gens, Order );
if G = H then
hens := gens; hensorders := gensorders;
else
hens := IndependentGeneratorsOfAbelianGroup( H );
hensorders := List( hens, Order );
fi;
id := Identity( H );
n := Length( gens ); m := Length( hens );
idimgs := List( [1..n], x -> id );
homos := [];
for i in [1..n] do
for j in [1..m] do
d := Gcd( gensorders[i], hensorders[j] );
if d > 1 then
imgs := ShallowCopy( idimgs );
imgs[i] := hens[j]^QuoInt( hensorders[j], d );
Add( homos, GroupHomomorphismByImages( G, H, gens, imgs ) );
fi;
od;
od;
return homos;
end );
#############################################################################
##
#M AdditiveGeneratorsForEndomorphisms( <G> )
##
## returns additive generators of E(G) for abelian G
##
InstallMethod( AdditiveGeneratorsForEndomorphisms, "default", true,
[ IsGroup and IsAbelian ], 0,
function ( G )
return AdditiveGeneratorsForHomomorphisms( G, G );
end );
#############################################################################
##
ExtendHomo := function( bs, gens, i, H, As )
##
## extends partial homomorphisms from Group( <gens> ) to <H> that are
## defined via the images <bs[j]> on the first <i>-1 elements of <gens> to
## partial homos on the first <i> generators whenever this is possible.
## <As> is the correspondig list of automorphism of <H> that stabilize
## the homos represented by <bs>
## The extensions and the new stabilizers are returned.
local n, # number of partial homos given by <bs>
g, # gens[i]; generator whose possible images have to
# be determined
o, # its order
G, # Group( gens{[1..i]} )
b, # list of images representing one homo bs[j]
orbits, # orbits of the stabilizer As[j] on H
reps, # representatives of these orbits
repsorders, # their orders
newbs, newstabs,# list of new image tupels and the corresponding
# stabilizers
img, # list of possible images for g
j, x;
n := Length( bs ); g := gens[i]; o := Order( g );
G := Group( gens{[1..i]} );
newbs := []; newstabs := [];
for j in [1..n] do
## for all tuples b of images in bs do
b := bs[j];
orbits := Orbits( As[j], H );
reps := List( orbits, Representative );
repsorders := List( reps, Order );
img := reps{Filtered( [1..Length( reps )], x ->
o mod repsorders[x] = 0 )};
img := Filtered( img, x ->
GroupHomomorphismByImages( G, H, gens{[1..i]},
Concatenation( b, [x] ) ) <> fail );
## Only feasible choices for the image of g remain.
Append( newbs, List( img, x -> Concatenation( b, [x] ) ) );
Append( newstabs, List( img, x -> Stabilizer( As[j], x ) ) );
## The stabilizer of the extended homo is found in the old stabilizer of the
## initial homo.
od;
return [newbs, newstabs];
end;
#############################################################################
##
#M NearRingGeneratorsForHomomorphisms( <G>, <H> )
##
## returns a list of homomorphisms h from G to H and a list
## of the respective groups of automorphisms A of H which stabilize h
## i.e., h = h*a for a in A.
## ( Homomorphisms operate from the left. )
## Each homomorphism from G to H has a unique representation h*c for some
## h and c some coset representative for A*c in Aut( H ).
##
InstallMethod( NearRingGeneratorsForHomomorphisms, "default", true,
[ IsGroup, IsGroup ], 0,
function ( G, H )
local gens, # generators of G
bs, # list of images of gens under the (partial)
# homorphism h
As, # list of stabilizers of the (partial) homorphism h
# in Aut( H )
imgs, # complete list of images of gens under h
i, t;
gens := GeneratorsOfGroup( G );
As := [AutomorphismGroup( H )];
bs := [[]];
for i in [1..Length(gens)] do
## Let h be defined on the first i-1 generators of G.
## Now the possible images for the next generator gens[i] are determined.
## If h can not be extended, then it is discarded.
## Otherwise, the new stabilizers are for the partial homos defined on
## the first i generators are determined.
## Images and stabilizers are returned for the next iteration.
t := ExtendHomo( bs, gens, i, H, As );
bs := t[1]; As := t[2];
od;
return [List( bs, imgs -> GroupHomomorphismByImagesNC( G, H, gens, imgs ) ),
As];
end );
#############################################################################
##
#M Homomorphisms( G, H )
##
## returns a list of all endomorphisms of the group <G> into the group <H>
InstallMethod( Homomorphisms, "default", true, [ IsGroup, IsGroup ], 0,
function ( G, H )
local homoreps, # list of homomorphism representatives as by
# NearRingGeneratorsForHomomorphisms( G, H )
As, # list of automorphism groups stabilizing the homos
# in homoreps
A, # Aut( G )
homos, # list of all homomorphisms from G to H, result
n, t, U, h, i;
t := NearRingGeneratorsForHomomorphisms( G, H );
homoreps := t[1]; As := t[2];
A := AutomorphismGroup( H );
n := Length( homoreps );
homos := [];
for i in [1..n] do
U := As[i]; h := homoreps[i];
Append( homos, List( RightTransversal( A, As[i] ), x -> h*x ) );
od;
return homos;
end );
## for abelian <H> it is more efficient to use additive generators from
## AdditiveGeneratorsForEndomorphisms( <H> ) and take all sums
#############################################################################
##
#M Endomorphisms( G )
##
## returns a list of all endomorphisms of the group <G>
InstallMethod( Endomorphisms, "default", true, [ IsGroup], 0,
function ( G )
return Homomorphisms( G, G );
end );
[ Dauer der Verarbeitung: 0.38 Sekunden
(vorverarbeitet)
]
|
2026-04-02
|
|
|
|
|