Skip to content

Commit

Permalink
Add SemidirectDecompositions and change StructureDescription
Browse files Browse the repository at this point in the history
!!! WARNING !!! This changes the behaviour of StructureDescription
compared to the previous state, which was inconsistent with the manual.

SemidirectDecompositionsOfFiniteGroup is added. This computes all or some
semidirect decompositions of a group. An optional second argument can be
given as the normal subgroups for which complements should be sought.
Complements for normal subgroups are found by
ComplementClassesRepresentatives. Unfortunately, this does not work if
both N and G/N are nonsolvable.
Further, an optional argument "any" is recognized, when it should return
only one nontrivial semidirect decomposition if exists and fail otherwise.
This is mostly implemented by applying Schur-Zassenhaus by checking if
any nontrivial normal Hall subgroups exist. Another optional argument
"str" is recognized, when it does not necessarily compute the complement
to the normal subgroup if Schur-Zassenhaus applies. The reason is that
computing the complement might be expensive and for StructureDescription
only the isomorphism type of the complement is interesting.

SemidirectDecompositions is a new attribute, computing all semidirect
decompositions.

SemidirectFactorsOfGroup is removed completely. It computed all conjugacy
classes of all subgroups and therefore was rather inefficient. Further, it
did not compute _all_ semidirect decompositions, but only the ones with
subgroups having the same size as the first subgroup having a normal
complement. This yielded inconsistent behaviour with the manual, the
smallest example for such a group was SmallGroup(504,7).

StructureDescription now works for infinite abelian groups, as well.
Further, for semidirect decompositions it calls
SemidirectDecompositionsOfFiniteGroup with "str" argument.

NOTE that if the group G has a nonsolvable normal subgroup N such that
G/N is nonsolvable, as well, then ComplementClassesRepresentatives errors
with "No method found", and thus so do SemidirectDecompositions and
StructureDescription. Previously computations for such groups did not error
with "No method found", but probably took a long time. #563 tries to
remedy this using the old and inefficient method, however whether it should
be merged or not is currently under debate. In the meantime, for such
groups we throw an error.

StructureDescription of groups having size at most 100 are recomputed,
and the manual of StructureDescription is rewritten to match current
behaviour.
Tests are added. All lines of SemidirectDecompositions are run. Not all
lines of StructureDescription are run, some examples for the missing lines
should be found later.
  • Loading branch information
hungaborhorvath committed Apr 21, 2016
1 parent 49efad4 commit 8377194
Show file tree
Hide file tree
Showing 5 changed files with 405 additions and 187 deletions.
114 changes: 57 additions & 57 deletions lib/grpnames.g
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ NAMES_OF_SMALL_GROUPS :=
[ "C5 : C4", "C20", "C5 : C4", "D20", "C10 x C2" ], [ "C7 : C3", "C21" ],
[ "D22", "C22" ], [ "C23" ],
[ "C3 : C8", "C24", "SL(2,3)", "C3 : Q8", "C4 x S3", "D24",
"C2 x (C3 : C4)", "(C6 x C2) : C2", "C12 x C2", "C3 x D8", "C3 x Q8",
"S4", "C2 x A4", "C2 x C2 x S3", "C6 x C2 x C2" ], [ "C25", "C5 x C5" ],
"C2 x (C3 : C4)", "C3 : D8", "C12 x C2", "C3 x D8", "C3 x Q8", "S4",
"C2 x A4", "C2 x C2 x S3", "C6 x C2 x C2" ], [ "C25", "C5 x C5" ],
[ "D26", "C26" ],
[ "C27", "C9 x C3", "(C3 x C3) : C3", "C9 : C3", "C3 x C3 x C3" ],
[ "C7 : C4", "C28", "D28", "C14 x C2" ], [ "C29" ],
Expand All @@ -37,39 +37,39 @@ NAMES_OF_SMALL_GROUPS :=
"Q8 : C4", "(C4 x C4) : C2", "C4 : C8", "C8 : C4", "C8 : C4",
"C4 . D8 = C4 . (C4 x C2)", "C16 x C2", "C16 : C2", "D32", "QD32",
"Q32", "C4 x C4 x C2", "C2 x ((C4 x C2) : C2)", "C2 x (C4 : C4)",
"(C4 x C4) : C2", "C4 x D8", "C4 x Q8", "(C2 x C2 x C2 x C2) : C2",
"(C4 x C2 x C2) : C2", "(C2 x Q8) : C2", "(C4 x C2 x C2) : C2",
"(C4 x C4) : C2", "(C2 x C2) . (C2 x C2 x C2)", "(C4 x C4) : C2",
"(C4 x C4) : C2", "C4 : Q8", "C8 x C2 x C2", "C2 x (C8 : C2)",
"(C8 x C2) : C2", "C2 x D16", "C2 x QD16", "C2 x Q16", "(C8 x C2) : C2",
"(C2 x D8) : C2", "(C2 x Q8) : C2", "C4 x C2 x C2 x C2",
"C2 x C2 x D8", "C2 x C2 x Q8", "C2 x ((C4 x C2) : C2)",
"(C2 x D8) : C2", "(C2 x Q8) : C2", "C2 x C2 x C2 x C2 x C2" ],
[ "C33" ], [ "D34", "C34" ], [ "C35" ],
"(C4 x C4) : C2", "C4 x D8", "C4 x Q8", "(C2 x D8) : C2",
"(C2 x D8) : C2", "(C4 : C4) : C2", "((C4 x C2) : C2) : C2",
"((C4 x C2) : C2) : C2", "(C2 x C2) . (C2 x C2 x C2)", "(C4 x C4) : C2",
"(C2 x D8) : C2", "C4 : Q8", "C8 x C2 x C2", "C2 x (C8 : C2)",
"(C8 x C2) : C2", "C2 x D16", "C2 x QD16", "C2 x Q16", "(D8 : C2) : C2",
"(D8 : C2) : C2", "QD16 : C2", "C4 x C2 x C2 x C2", "C2 x C2 x D8",
"C2 x C2 x Q8", "C2 x ((C4 x C2) : C2)", "(C2 x D8) : C2",
"(D8 : C2) : C2", "C2 x C2 x C2 x C2 x C2" ], [ "C33" ],
[ "D34", "C34" ], [ "C35" ],
[ "C9 : C4", "C36", "(C2 x C2) : C9", "D36", "C18 x C2", "C3 x (C3 : C4)",
"(C3 x C3) : C4", "C12 x C3", "(C3 x C3) : C4", "S3 x S3", "C3 x A4",
"C6 x S3", "C2 x ((C3 x C3) : C2)", "C6 x C6" ], [ "C37" ],
[ "D38", "C38" ], [ "C13 : C3", "C39" ],
[ "C5 : C8", "C40", "C5 : C8", "C5 : Q8", "C4 x D10", "D40",
"C2 x (C5 : C4)", "(C10 x C2) : C2", "C20 x C2", "C5 x D8", "C5 x Q8",
"C2 x (C5 : C4)", "C5 : D8", "C20 x C2", "C5 x D8", "C5 x Q8",
"C2 x (C5 : C4)", "C2 x C2 x D10", "C10 x C2 x C2" ], [ "C41" ],
[ "(C7 : C3) : C2", "C2 x (C7 : C3)", "C7 x S3", "C3 x D14", "D42", "C42" ],
[ "C7 : C6", "C2 x (C7 : C3)", "C7 x S3", "C3 x D14", "D42", "C42" ],
[ "C43" ], [ "C11 : C4", "C44", "D44", "C22 x C2" ], [ "C45", "C15 x C3" ],
[ "D46", "C46" ], [ "C47" ],
[ "C3 : C16", "C48", "(C4 x C4) : C3", "C8 x S3", "C24 : C2", "C24 : C2",
"D48", "C3 : Q16", "C2 x (C3 : C8)", "(C3 : C8) : C2", "C4 x (C3 : C4)",
"(C3 : C4) : C4", "C12 : C4", "(C12 x C2) : C2", "(C3 x D8) : C2",
"(C3 : C8) : C2", "(C3 x Q8) : C2", "C3 : Q16", "(C2 x (C3 : C4)) : C2",
"C12 x C4", "C3 x ((C4 x C2) : C2)", "C3 x (C4 : C4)", "C24 x C2",
"C3 x (C8 : C2)", "C3 x D16", "C3 x QD16", "C3 x Q16",
"C2 . S4 = SL(2,3) . C2", "GL(2,3)", "A4 : C4", "C4 x A4",
"C2 x SL(2,3)", "SL(2,3) : C2", "C2 x (C3 : Q8)", "C2 x C4 x S3",
"C2 x D24", "(C12 x C2) : C2", "D8 x S3", "(C4 x S3) : C2",
"Q8 x S3", "(C3 x Q8) : C2", "C2 x C2 x (C3 : C4)",
"C2 x ((C6 x C2) : C2)", "C12 x C2 x C2", "C6 x D8", "C6 x Q8",
"C3 x ((C4 x C2) : C2)", "C2 x S4", "C2 x C2 x A4",
"(C2 x C2 x C2 x C2) : C3", "C2 x C2 x C2 x S3", "C6 x C2 x C2 x C2" ],
[ "C49", "C7 x C7" ],
[ "C3 : C16", "C48", "(C4 x C4) : C3", "C8 x S3", "C3 : (C8 : C2)",
"C3 : QD16", "D48", "C3 : Q16", "C2 x (C3 : C8)", "C3 : (C8 : C2)",
"C4 x (C3 : C4)", "C3 : (C4 : C4)", "C3 : (C4 : C4)",
"C3 : ((C4 x C2) : C2)", "C3 : D16", "C3 : QD16", "C3 : QD16",
"C3 : Q16", "C3 : ((C4 x C2) : C2)", "C12 x C4",
"C3 x ((C4 x C2) : C2)", "C3 x (C4 : C4)", "C24 x C2", "C3 x (C8 : C2)",
"C3 x D16", "C3 x QD16", "C3 x Q16", "C2 . S4 = SL(2,3) . C2",
"GL(2,3)", "A4 : C4", "C4 x A4", "C2 x SL(2,3)",
"((C4 x C2) : C2) : C3", "C2 x (C3 : Q8)", "C2 x C4 x S3", "C2 x D24",
"C3 : (D8 : C2)", "D8 x S3", "C3 : (D8 : C2)", "Q8 x S3",
"C3 : (D8 : C2)", "C2 x C2 x (C3 : C4)", "C2 x (C3 : D8)",
"C12 x C2 x C2", "C6 x D8", "C6 x Q8", "C3 x ((C4 x C2) : C2)",
"C2 x S4", "C2 x C2 x A4", "(C2 x C2 x C2 x C2) : C3",
"C2 x C2 x C2 x S3", "C6 x C2 x C2 x C2" ], [ "C49", "C7 x C7" ],
[ "D50", "C50", "C5 x D10", "(C5 x C5) : C2", "C10 x C5" ], [ "C51" ],
[ "C13 : C4", "C52", "C13 : C4", "D52", "C26 x C2" ], [ "C53" ],
[ "D54", "C54", "C3 x D18", "C9 x S3", "((C3 x C3) : C3) : C2",
Expand All @@ -78,62 +78,62 @@ NAMES_OF_SMALL_GROUPS :=
"C3 x ((C3 x C3) : C2)", "(C3 x C3 x C3) : C2", "C6 x C3 x C3" ],
[ "C11 : C5", "C55" ],
[ "C7 : C8", "C56", "C7 : Q8", "C4 x D14", "D56", "C2 x (C7 : C4)",
"(C14 x C2) : C2", "C28 x C2", "C7 x D8", "C7 x Q8",
"(C2 x C2 x C2) : C7", "C2 x C2 x D14", "C14 x C2 x C2" ],
[ "C19 : C3", "C57" ], [ "D58", "C58" ], [ "C59" ],
[ "C5 x (C3 : C4)", "C3 x (C5 : C4)", "C15 : C4", "C60", "A5",
"C3 x (C5 : C4)", "C15 : C4", "S3 x D10", "C5 x A4", "C6 x D10",
"C7 : D8", "C28 x C2", "C7 x D8", "C7 x Q8", "(C2 x C2 x C2) : C7",
"C2 x C2 x D14", "C14 x C2 x C2" ], [ "C19 : C3", "C57" ],
[ "D58", "C58" ], [ "C59" ],
[ "C5 x (C3 : C4)", "C3 x (C5 : C4)", "C3 : (C5 : C4)", "C60", "A5",
"C3 x (C5 : C4)", "C3 : (C5 : C4)", "S3 x D10", "C5 x A4", "C6 x D10",
"C10 x S3", "D60", "C30 x C2" ], [ "C61" ], [ "D62", "C62" ],
[ "C7 : C9", "C63", "C3 x (C7 : C3)", "C21 x C3" ],, [ "C65" ],
[ "C11 x S3", "C3 x D22", "D66", "C66" ], [ "C67" ],
[ "C17 : C4", "C68", "C17 : C4", "D68", "C34 x C2" ], [ "C69" ],
[ "C7 x D10", "C5 x D14", "D70", "C70" ], [ "C71" ],
[ "C9 : C8", "C72", "Q8 : C9", "C9 : Q8", "C4 x D18", "D72",
"C2 x (C9 : C4)", "(C18 x C2) : C2", "C36 x C2", "C9 x D8", "C9 x Q8",
"C2 x (C9 : C4)", "C9 : D8", "C36 x C2", "C9 x D8", "C9 x Q8",
"C3 x (C3 : C8)", "(C3 x C3) : C8", "C24 x C3", "((C2 x C2) : C9) : C2",
"C2 x ((C2 x C2) : C9)", "C2 x C2 x D18", "C18 x C2 x C2",
"(C3 x C3) : C8", "(C3 : C4) x S3", "(C3 x (C3 : C4)) : C2",
"(C6 x S3) : C2", "(C6 x S3) : C2", "(C3 x C3) : Q8", "C3 x SL(2,3)",
"(C3 x C3) : C8", "(C3 : C4) x S3", "(C3 x C3) : (C4 x C2)",
"(C3 x C3) : D8", "(C3 x C3) : D8", "(C3 x C3) : Q8", "C3 x SL(2,3)",
"C3 x (C3 : Q8)", "C12 x S3", "C3 x D24", "C6 x (C3 : C4)",
"C3 x ((C6 x C2) : C2)", "(C3 x C3) : Q8", "C4 x ((C3 x C3) : C2)",
"(C12 x C3) : C2", "C2 x ((C3 x C3) : C4)", "(C6 x C6) : C2",
"C3 x (C3 : D8)", "(C3 x C3) : Q8", "C4 x ((C3 x C3) : C2)",
"(C3 x C3) : D8", "C2 x ((C3 x C3) : C4)", "(C3 x C3) : D8",
"C12 x C6", "C3 x C3 x D8", "C3 x C3 x Q8", "(C3 x C3) : C8",
"(S3 x S3) : C2", "(C3 x C3) : Q8", "C3 x S4", "(C3 x A4) : C2",
"(C3 x C3) : D8", "(C3 x C3) : Q8", "C3 x S4", "(C3 x A4) : C2",
"A4 x S3", "C2 x ((C3 x C3) : C4)", "C2 x S3 x S3", "C6 x A4",
"C2 x C6 x S3", "C2 x C2 x ((C3 x C3) : C2)", "C6 x C6 x C2" ],
[ "C73" ], [ "D74", "C74" ], [ "C75", "(C5 x C5) : C3", "C15 x C5" ],
[ "C19 : C4", "C76", "D76", "C38 x C2" ], [ "C77" ],
[ "(C13 : C3) : C2", "C2 x (C13 : C3)", "C13 x S3", "C3 x D26", "D78",
"C78" ], [ "C79" ],
[ "C5 : C16", "C80", "C5 : C16", "C8 x D10", "C40 : C2", "C40 : C2", "D80",
"C5 : Q16", "C2 x (C5 : C8)", "(C5 : C8) : C2", "C4 x (C5 : C4)",
"(C5 : C4) : C4", "C20 : C4", "(C20 x C2) : C2", "(C5 x D8) : C2",
"(C5 : C8) : C2", "(C5 x Q8) : C2", "C5 : Q16", "(C2 x (C5 : C4)) : C2",
"C20 x C4", "C5 x ((C4 x C2) : C2)", "C5 x (C4 : C4)", "C40 x C2",
"C5 x (C8 : C2)", "C5 x D16", "C5 x QD16", "C5 x Q16", "(C5 : C8) : C2",
"(C5 : C8) : C2", "C4 x (C5 : C4)", "C20 : C4", "C2 x (C5 : C8)",
"(C5 : C8) : C2", "(C2 x (C5 : C4)) : C2", "C2 x (C5 : Q8)",
"C2 x C4 x D10", "C2 x D40", "(C20 x C2) : C2", "D8 x D10",
"(C4 x D10) : C2", "Q8 x D10", "(C4 x D10) : C2",
"C2 x C2 x (C5 : C4)", "C2 x ((C10 x C2) : C2)", "C20 x C2 x C2",
"C10 x D8", "C10 x Q8", "C5 x ((C4 x C2) : C2)",
[ "C13 : C6", "C2 x (C13 : C3)", "C13 x S3", "C3 x D26", "D78", "C78" ],
[ "C79" ],
[ "C5 : C16", "C80", "C5 : C16", "C8 x D10", "C5 : (C8 : C2)", "C5 : QD16",
"D80", "C5 : Q16", "C2 x (C5 : C8)", "C5 : (C8 : C2)", "C4 x (C5 : C4)",
"C5 : (C4 : C4)", "C5 : (C4 : C4)", "C5 : ((C4 x C2) : C2)",
"C5 : D16", "C5 : QD16", "C5 : QD16", "C5 : Q16",
"C5 : ((C4 x C2) : C2)", "C20 x C4", "C5 x ((C4 x C2) : C2)",
"C5 x (C4 : C4)", "C40 x C2", "C5 x (C8 : C2)", "C5 x D16",
"C5 x QD16", "C5 x Q16", "C5 : (C8 x C2)", "C5 : (C8 : C2)",
"C4 x (C5 : C4)", "C5 : (C4 : C4)", "C2 x (C5 : C8)", "C5 : (C8 : C2)",
"C5 : ((C4 x C2) : C2)", "C2 x (C5 : Q8)", "C2 x C4 x D10", "C2 x D40",
"C5 : (D8 : C2)", "D8 x D10", "C5 : (D8 : C2)", "Q8 x D10",
"C5 : (D8 : C2)", "C2 x C2 x (C5 : C4)", "C2 x (C5 : D8)",
"C20 x C2 x C2", "C10 x D8", "C10 x Q8", "C5 x ((C4 x C2) : C2)",
"(C2 x C2 x C2 x C2) : C5", "C2 x C2 x (C5 : C4)", "C2 x C2 x C2 x D10",
"C10 x C2 x C2 x C2" ],
[ "C81", "C9 x C9", "(C9 x C3) : C3", "C9 : C9", "C27 x C3", "C27 : C3",
"(C3 x C3 x C3) : C3", "(C9 x C3) : C3", "(C9 x C3) : C3",
"C3 . ((C3 x C3) : C3) = (C3 x C3) . (C3 x C3)", "C9 x C3 x C3",
"C3 x ((C3 x C3) : C3)", "C3 x (C9 : C3)", "(C9 x C3) : C3",
"C3 x C3 x C3 x C3" ], [ "D82", "C82" ], [ "C83" ],
[ "(C7 : C4) : C3", "C4 x (C7 : C3)", "C7 x (C3 : C4)", "C3 x (C7 : C4)",
"C21 : C4", "C84", "C2 x ((C7 : C3) : C2)", "S3 x D14",
"C2 x C2 x (C7 : C3)", "C7 x A4", "(C14 x C2) : C3", "C6 x D14",
[ "C7 : C12", "C4 x (C7 : C3)", "C7 x (C3 : C4)", "C3 x (C7 : C4)",
"C3 : (C7 : C4)", "C84", "C2 x (C7 : C6)", "S3 x D14",
"C2 x C2 x (C7 : C3)", "C7 x A4", "(C2 x C2) : (C7 : C3)", "C6 x D14",
"C14 x S3", "D84", "C42 x C2" ], [ "C85" ], [ "D86", "C86" ],
[ "C87" ],
[ "C11 : C8", "C88", "C11 : Q8", "C4 x D22", "D88", "C2 x (C11 : C4)",
"(C22 x C2) : C2", "C44 x C2", "C11 x D8", "C11 x Q8", "C2 x C2 x D22",
"C11 : D8", "C44 x C2", "C11 x D8", "C11 x Q8", "C2 x C2 x D22",
"C22 x C2 x C2" ], [ "C89" ],
[ "C5 x D18", "C9 x D10", "D90", "C90", "C3 x C3 x D10", "C15 x S3",
"C3 x D30", "C5 x ((C3 x C3) : C2)", "(C15 x C3) : C2", "C30 x C3" ],
"C3 x D30", "C5 x ((C3 x C3) : C2)", "(C3 x C3) : D10", "C30 x C3" ],
[ "C91" ], [ "C23 : C4", "C92", "D92", "C46 x C2" ], [ "C31 : C3", "C93" ],
[ "D94", "C94" ], [ "C95" ],, [ "C97" ],
[ "D98", "C98", "C7 x D14", "(C7 x C7) : C2", "C14 x C7" ],
Expand Down
90 changes: 62 additions & 28 deletions lib/grpnames.gd
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#############################################################################
##
#W grpnames.gd Stefan Kohl
#W grpnames.gd Gábor Horváth
## Stefan Kohl
## Markus Püschel
## Sebastian Egner
##
Expand Down Expand Up @@ -267,17 +268,56 @@ DeclareGlobalFunction( "DirectFactorsOfGroupKN", IsGroup );

#############################################################################
##
#A SemidirectFactorsOfGroup( <G> ) . decomposition into a semidirect product
#F SemidirectDecompositionsOfFiniteGroup( <G>[, <L>][, <method>] )
##
## <ManSection>
## <Attr Name="SemidirectFactorsOfGroup" Arg="G"/>
## <Func Name="SemidirectDecompositionsOfFiniteGroup" Arg="G[, L][, method]"/>
##
## <Description>
## A list [[<A>H1</A>, <A>N1</A>], .., [<A>Hr</A>, <A>Nr</A>]] of all
## direct or semidirect decompositions with minimal <A>H</A>:
## <A>G</A> = <A>Hi</A> semidirect <A>Ni</A> and |<A>Hi</A>| = |<A>Hj</A>|
## is minimal with respect to all semidirect products.
## Note that this function also recognizes direct products.
## Computes all conjugacy classes of complements to the normal subgroups
## in the list <A>L</A>. If <A>L</A> is not given, then it is considered
## to be the list of all normal subgroups of G.
##
## Sometimes it is not desirable to compute complements to all normal
## subgroups, but rather to some. The user can express such a wish by
## using the <A>method</A> <Q>"any"</Q>.
##
## With the <A>method</A> <Q<"all"</Q>,
## SemidirectDecompositionsOfFiniteGroup computes all conjugacy classes
## of complement subgroups to all normal subgroups in <A>L</A>, and
## returns a list [[<A>N1</A>, <A>H1</A>], .., [<A>Nr</A>, <A>Hr</A>]] of
## all direct or semidirect decompositions, where <A>Ni</A> are from
## <A>L</A>.
##
## If <A>method</A> <Q>"any"</Q> is used, then
## SemidirectDecompositionsOfFiniteGroup returns [ <A>N</A>, <A>H</A> ]
## for some nontrivial <A>N</A> in <A>L</A> if exists, and returns fail
## otherwise. In particular, it first looks if $<A>G</A> is defined as a
## nontrivial semidirect product, and if yes, then it returns the two
## factors. Second, it looks for a nontrivial normal Hall subgroup, and
## if finds any, then will compute a complement to it. Otherwise it goes
## through the list <A>L</A>.
##
## The <A>method</A> <Q>"str"</Q> differs from the <A>method</A>
## <Q>"any</Q> by not computing normal complement to a normal Hall
## subgroup <A>N</A>, and in this case returns [ <A>N</A>, <A>G/N</A> ].
## </Description>
## </ManSection>
##
DeclareGlobalFunction( "SemidirectDecompositionsOfFiniteGroup", IsGroup );

#############################################################################
##
#A SemidirectDecompositions( <G> )
##
## <ManSection>
## <Attr Name="SemidirectDecompositions" Arg="G"/>
##
## <Description>
## A list [[<A>N1</A>, <A>H1</A>], .., [<A>Nr</A>, <A>Hr</A>]] of all
## direct or semidirect decompositions up to conjugacy classes of
## <A>Hi</A>. Note that this function also recognizes direct products,
## and it may take a very long time to run for particular groups.
## </Description>
## </ManSection>
##
Expand Down Expand Up @@ -316,7 +356,7 @@ DeclareGlobalFunction( "DirectFactorsOfGroupKN", IsGroup );
## 3. Die Form von psi wie oben angegeben kann durch berechnen
## von psi(h)(n) nachgepr"uft werden.
##
DeclareAttribute( "SemidirectFactorsOfGroup", IsGroup );
DeclareAttribute( "SemidirectDecompositions", IsGroup );

#############################################################################
##
Expand Down Expand Up @@ -646,13 +686,14 @@ DeclareGlobalFunction( "LinearGroupParameters" );
## <Mark>1.</Mark>
## <Item>
## Lookup in a precomputed list, if the order of <A>G</A> is not
## larger than 100 and not equal to 64.
## larger than 100 and not equal to 64 or 96.
## </Item>
## <Mark>2.</Mark>
## <Item>
## If <A>G</A> is abelian, then decompose it into cyclic factors
## in <Q>elementary divisors style</Q>. For example,
## <C>"C2 x C3 x C3"</C> is <C>"C6 x C3"</C>.
## For infinite abelian groups, <C>"C0"</C> denotes the group of integers.
## </Item>
## <Mark>3.</Mark>
## <Item>
Expand All @@ -673,28 +714,19 @@ DeclareGlobalFunction( "LinearGroupParameters" );
## <List>
## <Mark>1.</Mark>
## <Item>
## <M>H</M> is abelian
## if <A>G</A> is defined as a semidirect product of <M>N</M>, <M>H</M>
## then select <M>N</M>, <M>H</M>,
## </Item>
## <Mark>2.</Mark>
## <Item>
## <M>N</M> is abelian
## </Item>
## <Mark>2a.</Mark>
## <Item>
## <M>N</M> has many abelian invariants
## if <A>G</A> is solvable, then select a solvable normal Hall subgroup
## <M>N</M>, if exists, and consider the semidirect decomposition of
## <M>N</M> and <M>G/N</M>,
## </Item>
## <Mark>3.</Mark>
## <Item>
## <M>N</M> is a direct product
## </Item>
## <Mark>3a.</Mark>
## <Item>
## <M>N</M> has many direct factors
## </Item>
## <Mark>4.</Mark>
## <Item>
## <M>\phi: H \rightarrow</M> Aut(<M>N</M>),
## <M>h \mapsto (n \mapsto n^h)</M> is injective.
## find any nontrivial normal subgroup <M>N</M> which has a complement
## <M>H</M>.
## </Item>
## </List>
## </Item>
Expand Down Expand Up @@ -740,12 +772,14 @@ DeclareGlobalFunction( "LinearGroupParameters" );
## gap> List(l,StructureDescription);; l;
## [ C3 : C4, C12, A4, D12, C6 x C2 ]
## gap> List(AllSmallGroups(40),G->StructureDescription(G:short));
## [ "5:8", "40", "5:8", "5:Q8", "4xD10", "D40", "2x(5:4)", "(10x2):2",
## [ "5:8", "40", "5:8", "5:Q8", "4xD10", "D40", "2x(5:4)", "5:D8",
## "20x2", "5xD8", "5xQ8", "2x(5:4)", "2^2xD10", "10x2^2" ]
## gap> List(AllTransitiveGroups(DegreeAction,6),
## > G->StructureDescription(G:short));
## [ "6", "S3", "D12", "A4", "3xS3", "2xA4", "S4", "S4", "S3xS3",
## "(3^2):4", "2xS4", "A5", "(S3xS3):2", "S5", "A6", "S6" ]
## "(3^2):4", "2xS4", "A5", "(3^2):D8", "S5", "A6", "S6" ]
## gap> StructureDescription(AbelianGroup([0,2,3]));
## "C0 x C6"
## gap> StructureDescription(PSL(4,2));
## "A8"
## ]]></Example>
Expand Down
Loading

0 comments on commit 8377194

Please sign in to comment.