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


Quelle  grpnames.gd   Sprache: unbekannt

 
#############################################################################
##
##  This file is part of GAP, a system for computational discrete algebra.
##  This file's authors include Gábor Horváth, Stefan Kohl, Markus Püschel, Sebastian Egner.
##
##  Copyright of GAP belongs to its developers, whose names are too numerous
##  to list here. Please refer to the COPYRIGHT file for details.
##
##  SPDX-License-Identifier: GPL-2.0-or-later
##
##  This file contains declarations of attributes, operations and functions
##  related to the determination of structure descriptions for finite groups.
##
##  It also includes comments from corresponding GAP3 code written by
##  Markus Püschel and Sebastian Egner.
##

#############################################################################
##
#O  IsTrivialNormalIntersection( <G>, <U>, <V> ) . . . . . . . generic method
##
##  <ManSection>
##  <Oper Name="IsTrivialNormalIntersection" Arg="G, U, V"/>
##
##  <Description>
##    For normal subgroups <A>U</A> and <A>V</A> of <A>G</A>,
##    <Ref Oper="IsTrivialNormalIntersection"/> returns <K>true</K> if
##    <A>U</A> and <A>V</A> intersect trivially, and <K>false</K> otherwise.
##    The result is undefined if either <A>U</A> or <A>V</A> is not a normal
##    subgroup of G.
##  </Description>
##  </ManSection>
##
DeclareOperation( "IsTrivialNormalIntersection",
                  [ IsGroup, IsGroup, IsGroup ] );

#############################################################################
##
#F  IsTrivialNormalIntersectionInList( <MinNs>, <U>, <V> ) . . generic method
##
##  <ManSection>
##  <Func Name="IsTrivialNormalIntersectionInList" Arg="MinNs, U, V"/>
##
##  <Description>
##    For groups <A>U</A> and <A>V</A>,
##    <Ref Func="IsTrivialNormalIntersectionInList"/> returns <K>false</K>
##    if for any group <M>H</M> in list <A>MinNs</A> both <A>U</A> and
##    <A>V</A> contains the first nontrivial generator of <M>H</M>.
##    Otherwise, the result is <K>true</K>.
##    This function is useful if it is already known that the intersection
##    of <A>U</A> and <A>V</A> is either trivial, or contains at least one
##    group from <A>MinNs</A>.
##    For example if <A>U</A> and <A>V</A> are normal subgroups of a group
##    <M>G</M> and
##    <A>MinNs</A>=<Ref Attr="MinimalNormalSubgroups"/>(<M>G</M>).
##  </Description>
##  </ManSection>
##
DeclareGlobalFunction( "IsTrivialNormalIntersectionInList" );

#############################################################################
##
#F  UnionIfCanEasilySortElements( <L1>[, <L2>, ... ] ) . . . . generic method
##
##  <ManSection>
##  <Func Name="UnionIfCanEasilySortElements" Arg="L1[, L2, ... ]"/>
##
##  <Description>
##    Returns the <Ref Func="Union"/> of <A>Li</A> if
##    <Ref Prop="CanEasilySortElements"/> is <K>true</K> for all elements
##    of all <A>Li</A>, and the <Ref Func="Concatenation"/> of them,
##    otherwise.
##  </Description>
##  </ManSection>
##
DeclareGlobalFunction( "UnionIfCanEasilySortElements" );

#############################################################################
##
#F  AddSetIfCanEasilySortElements( <list>, <object> ) . . . . generic method
##
##  <ManSection>
##  <Func Name="AddSetIfCanEasilySortElements" Arg="list, obj"/>
##
##  <Description>
##    Adds the <A>obj</A> to the list <A>list</A>. If
##    <Ref Prop="CanEasilySortElements"/> is <K>true</K> for <A>list</A>
##    and <A>list</A> is a set, then <Ref Oper="AddSet"/> is used instead
##    of <Ref Oper="Add"/>. Does not return anything, but changes
##    <A>list</A>.
##  </Description>
##  </ManSection>
##
DeclareGlobalFunction( "AddSetIfCanEasilySortElements" );

#############################################################################
##
#O  NormalComplement( <G>, <N> ) . . . . . . . . . . . generic method
##
##  <#GAPDoc Label="NormalComplement">
##  <ManSection>
##  <Oper Name="NormalComplement" Arg="G, N"/>
##
##  <Description>
##    Gives a normal complement to the normal subgroup <A>N</A> in <A>G</A>
##    if exists, <K>fail</K> otherwise.
##    In theory it finds the normal complement for infinite <A>G</A>,
##    but can have an infinite loop if <A>G</A>/<A>N</A> is abelian and
##    <A>N</A> is infinite.
##    <C>NormalComplementsNC</C> does not check if <A>N</A> is a normal
##    subgroup of <A>G</A>.
##  </Description>
##  </ManSection>
##  <#/GAPDoc>
##
##    This is the implementation of the algorithm described in
##    Neeraj Kayal and Timur Nezhmetdinov, Factoring Groups Efficiently,
##    in International Colloquium on Automata, Languages and Programming
##    (ICALP), Lecture Notes in Computer Science 5555, 585-596,
##    Springer Verlag, Berlin Heidelberg 2009.
##
DeclareOperation( "NormalComplement", [IsGroup, IsGroup]);
DeclareOperation( "NormalComplementNC", [IsGroup, IsGroup]);

#############################################################################
##
#A  DirectFactorsOfGroup( <G> ) . . . . . decomposition into a direct product
##
##  <#GAPDoc Label="DirectFactorsOfGroup">
##  <ManSection>
##  <Attr Name="DirectFactorsOfGroup" Arg="G"/>
##
##  <Description>
##    A (sorted if possible) list of factors [<M>G_1</M>, .., <M>G_r</M>] such
##    that <A>G</A> = <M>G_1</M> x .. x <M>G_r</M> and none of the <M>G_i</M>
##    is a direct product.
##    If <A>G</A> is an infinite abelian group, then it returns an unsorted
##    list of the factors. DirectFactorsOfGroup currently cannot compute the
##    direct factors of a nonabelian infinite group.
##
##    The option <Q>useKN</Q> forces to use the function
##    DirectFactorsOfGroupKN based on
##    Neeraj Kayal and Timur Nezhmetdinov, Factoring Groups Efficiently,
##    in International Colloquium on Automata, Languages and Programming
##    (ICALP), Lecture Notes in Computer Science 5555, 585-596,
##    Springer Verlag, Berlin Heidelberg 2009.
##    This algorithm never computes normal subgroups, and performs slower in
##    practice than the default method.
##  </Description>
##  </ManSection>
##  <#/GAPDoc>
##
DeclareAttribute( "DirectFactorsOfGroup", IsGroup );

#############################################################################
##
#A  CharacteristicFactorsOfGroup( <G> ) . decomposition into a direct product
##
##  <#GAPDoc Label="CharacteristicFactorsOfGroup">
##  <ManSection>
##  <Attr Name="CharacteristicFactorsOfGroup" Arg="G"/>
##
##  <Description>
##    For a finite group this function returns a list
##    of characteristic subgroups [<M>G_1</M>, .., <M>G_r</M>] such
##    that <A>G</A> = <M>G_1</M> x .. x <M>G_r</M> and none of the <M>G_i</M>
##    is a direct product of characteristic subgroups.
##  </Description>
##  </ManSection>
##  <#/GAPDoc>
##
DeclareAttribute( "CharacteristicFactorsOfGroup", IsGroup );

#############################################################################
##
#F  DirectFactorsOfGroupFromList( <G>, <Ns>, <MinNs> )
##
##  <ManSection>
##  <Func Name="DirectFactorsOfGroup" Arg="G, Ns, MinNs"/>
##
##  <Description>
##    A (sorted if possible) list of factors [<M>G_1</M>, .., <M>G_r</M>] such
##    that <A>G</A> = <M>G_1</M> x .. x <M>G_r</M> and none of the <M>G_i</M>
##    is a direct product, and all the factors <M>G_i</M> are from the list
##    <A>Ns</A>. The list <A>MinNs</A> is supposed to be a list such that the
##    intersection of any two groups from <A>Ns</A> is either trivial or
##    contains a group from <A>MinNs</A>.
##  </Description>
##  </ManSection>
##
##  The following hold:
##
##    (1) <Gi> is a normal subgroup of <G>.
##    (2) <i> <= <j> ==> Size(<Gi>) <= Size(<Gj>).
##    (3) Size(<Gi>) > 1 unless <r> = 1 and <G> = 1.
##    (4) <G> = <G1> * .. * <Gr> as the complex product.
##    (5) $Gi \cap (G1 * .. * G_{i-1} * G_{i+1} * .. * Gr) = 1$.
##
##  Factorization of a permutation group into a direct product
##  ==========================================================
##
##  Def.: Seien G1, .., Gr endliche Gruppen, dann ist
##        G := (G1 x .. x Gr, *) eine Gruppe mit der Operation
##          (g1, .., gr)*(h1, .., hr) := (g1 h1, .., gr hr).
##        Wir sagen dann G ist das ("au"sere) direkte Produkt
##        der Gruppen G1, .., Gr und schreiben G = G1 x .. x Gr.
##
##  Lemma: Seien G1, .., Gr Normalteiler der endlichen Gruppe G
##         mit den Eigenschaften
##           (1) |G| = |G1| * .. * |Gr|
##           (2) |Gi meet (Gi+1 * .. * Gr)| = 1
##         Dann ist G = G1 x .. x Gr.
##  Bew.:  M. Hall, Th. 2.5.2.
##
##  Lemma: Seien G = G1 x .. x Gr = H1 x .. x Hs zwei Zerlegungen
##         von G in direkt unzerlegbare Faktoren. Dann gilt
##         (1) r = s
##         (2) Es gibt ein Permutation p der Faktoren, so
##             da"s G[i] ~= H[p(i)] f"ur alle i.
##  Bew.: Satz von Krull-Remak-Schmidt, Huppert I.
##
##  Statements needed for DirectFactorsGroup
##  ========================================
##
##  Lemma:
##  If G1, G2 are normal subgroups in G and (G1 meet G2) = 1
##  then G = G1 x G2 <==> |G| = |G1|*|G2|.
##  Proof:
##    "==>": trivial.
##    "<==": Use G1*G2/G1 ~= G2/(G1 meet G2) = G2/1 ==>
##           |G1*G2|/|G1| = |G2|/|1|. q.e.d.
##
##  Remark:
##   The normal subgroup lattice of G does not contain
##   all the information needed for the normal subgroup lattice
##   of G2 for a decomposition G = G1 x G2. However let
##   G = G1 x .. x Gr be finest direct product decomposition
##   then all Gi are normal subgroups in G. Thus all Gi occur in
##   the set NormalSubgroups(G) and we may split G recursively
##   without recomputing normal subgroup lattices for factors.
##
##  Method to enumerate factorizations given the divisors:
##   Consider a strictly increasing chain
##     1  <  a1 < a2 < .. < a_n  <  A
##   of positive divisors of an integer A.
##   The task is to enumerate all pairs 1 <= i <= j <= n
##   such that a_i*a_j = A. This is done by
##
##   i := 1;
##   j := n;
##   while i <= j do
##     while j > i and a_i*a_j > A do
##       j := j-1;
##     end while;
##     if a_i*a_j = A then
##       "found i <= j with a_i*a_j = A"
##     end if;
##     i := i+1;
##   end while;
##
##   which is based on the following fact:
##   Lemma:
##      Let i1 <= j1, i2 <= j2 be such that
##      a_i1*a_j1 = a_i2*a_j2 = A, then
##        i2 > i1 ==> j2 < j1.
##   Proof:
##      i2 > i1
##      ==> a_i2 > a_i1  by strictly increasing a's
##      ==> a_i1*a_j1 = A = a_i2*a_j2 > a_i1*a_j2 by *a_j2
##      ==> a_j1 > a_j2 by /a_i1
##      ==> j1 > j2. q.e.d
##
##   Now consider two strictly increasing chains
##     1 <= a1 < a2 < .. < a_n <= A
##     1 <= b1 < b2 < .. < b_m <= A
##   of positive divisors of an integer A.
##   The task is to enumerate all pairs i, j with
##   1 <= i <= n, 1 <= j <= m such that a_i*b_j = A.
##      This is done by merging the two sequences into
##   a single increasing sequence of pairs <c_i, which_i>
##   where which_i indicates where c_i is in the a-sequence
##   and where it is in the b-sequence if any. Then the
##   linear algorithm above may be used.
##
DeclareGlobalFunction( "DirectFactorsOfGroupFromList" );

#############################################################################
##
#F  DirectFactorsOfGroupByKN( <G> ) . . . decomposition into a direct product
##
##  <ManSection>
##  <Func Name="DirectFactorsOfGroupKN" Arg="G"/>
##
##  <Description>
##    A (sorted if possible) list of factors [<M>G_1</M>, .., <M>G_r</M>] such
##    that <M>G</M> = <M>G_1</M> x .. x <M>G_r</M> and none of the <M>G_i</M>
##    is a direct product.
##    This is the implementation of the algorithm described in
##    Neeraj Kayal and Timur Nezhmetdinov, Factoring Groups Efficiently,
##    in International Colloquium on Automata, Languages and Programming
##    (ICALP), Lecture Notes in Computer Science 5555, 585-596,
##    Springer Verlag, Berlin Heidelberg 2009.
##  </Description>
##  </ManSection>
##
DeclareGlobalFunction( "DirectFactorsOfGroupByKN" );

#############################################################################
##
#F  SemidirectDecompositionsOfFiniteGroup( <G>[, <L>][, <method>] )
##
##  <ManSection>
##  <Func Name="SemidirectDecompositionsOfFiniteGroup" Arg="G[, L][, method]"/>
##
##  <Description>
##    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 [[<M>N1</M>, <M>H1</M>], .., [<M>Nr</M>, <M>Hr</M>]] of
##    all direct or semidirect decompositions, where <M>Ni</M> are from
##    <A>L</A>.
##
##    If <A>method</A> <Q>"any"</Q> is used, then
##    SemidirectDecompositionsOfFiniteGroup returns [ <M>N</M>, <M>H</M> ]
##    for some nontrivial <M>N</M> in <A>L</A> if exists, and returns
##    <K>fail</K> 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 <M>N</M>, and in this case returns
##    [ <M>N</M>, <M><A>G</A>/N</M> ].
##  </Description>
##  </ManSection>
##
DeclareGlobalFunction( "SemidirectDecompositionsOfFiniteGroup" );

#############################################################################
##
#A  SemidirectDecompositions( <G> )
##
##  <ManSection>
##  <Attr Name="SemidirectDecompositions" Arg="G"/>
##
##  <Description>
##    A list [[<M>N_1</M>, <M>H_1</M>], .., [<M>N_r</M>, <M>H_r</M>]] of all
##    direct or semidirect decompositions up to conjugacy classes of
##    <M>H_i</M>. Note that this function also recognizes direct products,
##    and it may take a very long time to run for particular groups.
##  </Description>
##  </ManSection>
##
##  Literatur:
##    [1] Huppert Bd. I, Springer 1983.
##    [2] M. Hall: Theory of Groups. 2nd ed.,
##        Chelsea Publ. Co., 1979 NY.
##
##  Zerlegung eines semidirekten Produkts, Grundlagen
##  =================================================
##
##  Def.: Seien H, N Gruppen und f: H -> Aut(N) ein Gr.-Hom.
##        Dann wird G := (H x N, *) eine Gruppe mit der Operation
##        (h1, n1)*(h2, n2) := (h1 h2, f(h2)(n1)*n2).
##        Wir nennen G das ("au"sere) semidirekte Produkt von H und N
##        und schreiben G = H semidirect[f] N.
##
##  Lemma1:
##    Sei G eine endliche Gruppe, N ein Normalteiler und H eine
##    Untergruppe von G mit den Eigenschaften
##      (1) |H| * |N| = |G| und
##      (2) |H meet N| = 1.
##    Dann gibt es ein f mit G = H semidirect[f] N.
##  Bew.: [2], Th. 6.5.3.
##
##  Lemma2:
##    Sei G = H semidirect[phi] N und h in H, n in N, dann ist auch
##    G = H^(h n) semidirect[psi] N mit
##    psi = inn_n o phi o inn_h^-1 o inn_n^-1.
##  Bew.:
##    1. |H^(h n)| = |H| ==> |H^(h n)|*|N| = |G| und
##       |H^(h n) meet N| = 1 <==> |H meet N| = 1, weil N normal ist.
##       Daher ist G = H^(h n) semidirect[psi] N mit einem
##       psi : H^(h n) -> Aut(N).
##    2. Das psi ist durch H und N eindeutig bestimmt.
##    3. Die Form von psi wie oben angegeben kann durch berechnen
##       von psi(h)(n) nachgepr"uft werden.
##
DeclareAttribute( "SemidirectDecompositions", IsGroup );

#############################################################################
##
#A  DecompositionTypesOfGroup( <G> ) . .  descriptions of decomposition types
#A  DecompositionTypes( <G> )
##
##  <ManSection>
##  <Attr Name="DecompositionTypesOfGroup" Arg="G"/>
##  <Attr Name="DecompositionTypes" Arg="G"/>
##
##  <Description>
##    A list of all possible decomposition types of the group
##    into direct/semidirect products of non-splitting factors. <P/>
##
##    A <E>decomposition type</E> <A>type</A> is denoted by a specification
##    of the form
##    <Log><![CDATA[
##    <type> ::=
##      <integer>                 ; cyclic group of prime power order
##    | ["non-split", <integer>]  ; non-split extension; size annotated
##    | ["x", <type>, .., <type>] ; non-trivial direct product (ass., comm.)
##    | [":", <type>, <type>]     ; non-direct, non-trivial split extension
##    ]]></Log>
##  </Description>
##  </ManSection>
##
DeclareAttribute( "DecompositionTypesOfGroup", IsGroup );
DeclareSynonym( "DecompositionTypes", DecompositionTypesOfGroup );

#############################################################################
##
#P  IsDihedralGroup( <G> )
#A  DihedralGenerators( <G> )
##
##  <#GAPDoc Label="IsDihedralGroup">
##  <ManSection>
##  <Prop Name="IsDihedralGroup" Arg="G"/>
##  <Attr Name="DihedralGenerators" Arg="G"/>
##
##  <Description>
##    <Ref Prop="IsDihedralGroup"/> indicates whether the group <A>G</A> is a
##   dihedral group. If it is, methods may set the attribute
##    <Ref Attr="DihedralGenerators" /> to
##    [<A>t</A>,<A>s</A>], where <A>t</A> and <A>s</A> are two elements such
##    that <A>G</A> = <M>\langle t, s | t^2 = s^n = 1, s^t = s^{-1} \rangle</M>.
##  </Description>
##  </ManSection>
##  <#/GAPDoc>
##
DeclareProperty( "IsDihedralGroup", IsGroup );
DeclareAttribute( "DihedralGenerators", IsGroup );

InstallTrueMethod( IsGroup, IsDihedralGroup );
InstallTrueMethod( IsDihedralGroup, HasDihedralGenerators );


#############################################################################
##
#P  IsDicyclicGroup( <G> )
#P  IsGeneralizedQuaternionGroup( <G> )
#A  DicyclicGenerators( <G> )
#A  GeneralizedQuaternionGenerators( <G> )
##
##  <#GAPDoc Label="IsQuaternionGroup">
##  <ManSection>
##  <Prop Name="IsDicyclicGroup" Arg="G"/>
##  <Attr Name="DicyclicGenerators" Arg="G"/>
##  <Prop Name="IsGeneralisedQuaternionGroup" Arg="G"/>
##  <Attr Name="GeneralisedQuaternionGenerators" Arg="G"/>
##  <Prop Name="IsQuaternionGroup" Arg="G"/>
##  <Attr Name="QuaternionGenerators" Arg="G"/>
##
##  <Description>
##  <Ref Prop="IsDicyclicGroup"/> indicates whether the group
##  <A>G</A> is a dicyclic group of order <M>N = 4n</M>.
##  If it is, methods may set the attribute <Ref Attr="DicyclicGenerators"/>
##  to <M>[ t, s ]</M>, where <M>t</M> and <M>s</M> are two elements
##  such that <A>G</A> =
##  <M>\langle t, s | s^{2n} = 1, t^2 = s^n, s^t = s^{-1} \rangle</M> holds.
##  <P/>
##  <Ref Prop="IsGeneralisedQuaternionGroup"/> indicates whether <A>G</A> is
##  a generalized quaternion group, i. e.,
##  a dicyclic group of <M>2</M>-power order.
##  If it is, methods may set the attribute
##  <Ref Attr="GeneralisedQuaternionGenerators"/> to the value of
##  <Ref Attr="DicyclicGenerators"/> for <A>G</A>.
##  <P/>
##  <Ref Prop="IsQuaternionGroup"/> and <Ref Attr="QuaternionGenerators"/>
##  are provided for backwards compatibility with existing code.
##  </Description>
##  </ManSection>
##  <#/GAPDoc>
##
DeclareProperty( "IsDicyclicGroup", IsGroup );
DeclareProperty( "IsGeneralisedQuaternionGroup", IsGroup );
DeclareAttribute( "DicyclicGenerators", IsGroup );
DeclareAttribute( "GeneralisedQuaternionGenerators", IsGroup );

# Backwards compatibility
DeclareSynonymAttr( "IsQuaternionGroup", IsGeneralisedQuaternionGroup );
DeclareSynonymAttr( "QuaternionGenerators", GeneralisedQuaternionGenerators );

InstallTrueMethod( IsGroup, IsDicyclicGroup );
InstallTrueMethod( IsDicyclicGroup, HasDicyclicGenerators );
InstallTrueMethod( IsGroup, IsGeneralisedQuaternionGroup );
InstallTrueMethod( IsGeneralisedQuaternionGroup, HasGeneralisedQuaternionGenerators );


#############################################################################
##
#P  IsQuasiDihedralGroup( <G> )
#A  QuasiDihedralGenerators( <G> )
##
##  <ManSection>
##  <Prop Name="IsQuasiDihedralGroup" Arg="G"/>
##  <Attr Name="QuasiDihedralGenerators" Arg="G"/>
##
##  <Description>
##    Indicates whether the group <A>G</A> is a quasidihedral group
##    of size <M>N = 2^(k+1)</M>, <M>k >= 2</M>. If it is, methods may set
##    the attribute <C>QuasiDihedralGenerators</C> to [<A>t</A>,<A>s</A>],
##    where <A>t</A> and <A>s</A> are two elements such that <A>G</A> =
##    <M><A>t, s | s^(2^k) = t^2 = 1, s^t = s^(-1 + 2^(k-1))</A></M>.
##  </Description>
##  </ManSection>
##
DeclareProperty( "IsQuasiDihedralGroup", IsGroup );
DeclareAttribute( "QuasiDihedralGenerators", IsGroup );

InstallTrueMethod( IsGroup, IsQuasiDihedralGroup );

#############################################################################
##
#P  IsPSL( <G> )
##
##  <ManSection>
##  <Prop Name="IsPSL" Arg="G"/>
##
##  <Description>
##    Indicates whether the group <A>G</A> is isomorphic to the projective
##    special linear group PSL(<A>n</A>,<A>q</A>) for some integer <A>n</A>
##    and some prime power <A>q</A>. If it is, methods may set the attribute
##    <C>ParametersOfGroupViewedAsPSL</C>.
##  </Description>
##  </ManSection>
##
DeclareProperty( "IsPSL", IsGroup );
InstallTrueMethod( IsGroup, IsPSL );

#############################################################################
##
#A  ParametersOfGroupViewedAsPSL
#A  ParametersOfGroupViewedAsSL
#A  ParametersOfGroupViewedAsGL
##
##  triples (n,p,e) such that the group is isomorphic to PSL(n,p^e), SL(n,p^e)
##  and GL(n,p^e) respectively
##
##  <ManSection>
##  <Attr Name="ParametersOfGroupViewedAsPSL" Arg="G"/>
##  <Attr Name="ParametersOfGroupViewedAsSL" Arg="G"/>
##  <Attr Name="ParametersOfGroupViewedAsGL" Arg="G"/>
##
##  <Description>
##  </Description>
##  </ManSection>
##
DeclareAttribute( "ParametersOfGroupViewedAsPSL", IsGroup );
DeclareAttribute( "ParametersOfGroupViewedAsSL", IsGroup );
DeclareAttribute( "ParametersOfGroupViewedAsGL", IsGroup );

#############################################################################
##
#A  AlternatingDegree . . . .  degree of isomorphic natural alternating group
#A  SymmetricDegree . . . . . .  degree of isomorphic natural symmetric group
#A  PSLDegree . . . . . .  (one possible) degree of an isomorphic natural PSL
#A  PSLUnderlyingField . . (one possible) underlying field   "      "      "
#A  SLDegree  . . . . . .  (one possible) degree of an isomorphic natural SL
#A  SLUnderlyingField . .  (one possible) underlying field   "      "      "
#A  GLDegree  . . . . . .  (one possible) degree of an isomorphic natural GL
#A  GLUnderlyingField . .  (one possible) underlying field   "      "      "
##
##  <Attr Name="AlternatingDegree" Arg="G"/>
##  <Attr Name="SymmetricDegree" Arg="G"/>
##  <Attr Name="PSLDegree" Arg="G"/>
##  <Attr Name="PSLUnderlyingField" Arg="G"/>
##  <Attr Name="SLDegree" Arg="G"/>
##  <Attr Name="SLUnderlyingField" Arg="G"/>
##  <Attr Name="GLDegree" Arg="G"/>
##  <Attr Name="GLUnderlyingField" Arg="G"/>
##
##  <Description>
##  </Description>
##  </ManSection>
##
DeclareAttribute( "AlternatingDegree", IsGroup );
DeclareAttribute( "SymmetricDegree", IsGroup );
DeclareAttribute( "PSLDegree", IsGroup );
DeclareAttribute( "PSLUnderlyingField", IsGroup );
DeclareAttribute( "SLDegree", IsGroup );
DeclareAttribute( "SLUnderlyingField", IsGroup );
DeclareAttribute( "GLDegree", IsGroup );
DeclareAttribute( "GLUnderlyingField", IsGroup );

#############################################################################
##
#F  SizeGL(  <n>, <q> )
#F  SizeSL(  <n>, <q> )
#F  SizePSL( <n>, <q> )
##
##  <ManSection>
##  <Func Name="SizeGL" Arg="n, q"/>
##  <Func Name="SizeSL" Arg="n, q"/>
##  <Func Name="SizePSL" Arg="n, q"/>
##
##  <Description>
##    Computes the size of the group GL(<A>n</A>,<A>p</A>^<A>e</A>),
##    SL(<A>n</A>,<A>p</A>^<A>e</A>) or PSL(<A>n</A>,<A>p</A>^<A>e</A>),
##    respectively.
##  </Description>
##  </ManSection>
##
##  The following formulas are used:
##
##      |GL(n, p, e)|  = Product(p^(e n) - p^(e k) : k in [0..n-1])
##      |SL(n, p, e)|  = |GL(n, p, e)| / (p^e - 1)
##      |PSL(n, p, e)| = |SL(n, p, e)| / gcd(p^e - 1, n)
##
DeclareGlobalFunction( "SizeGL" );
DeclareGlobalFunction( "SizeSL" );
DeclareGlobalFunction( "SizePSL" );

#############################################################################
##
#F  LinearGroupParameters( <N> )
##
##  <ManSection>
##  <Func Name="LinearGroupParameters" Arg="N"/>
##
##  <Description>
##    Determines all parameters <A>n</A> >= 2, <A>p</A> prime, <A>e</A> >= 1,
##    such that the given number is the size of one of the linear groups
##    GL(<A>n</A>,<A>p</A>^<A>e</A>), SL(<A>n</A>,<A>p</A>^<A>e</A>) or
##    PSL(<A>n</A>,<A>p</A>^<A>e</A>). <P/>
##    A record with the fields <C>npeGL</C>, <C>npeSL</C>, <C>npePSL</C> is
##    returned, which contains the lists of possible triples
##    [<A>n</A>,<A>p</A>,<A>e</A>].
##  </Description>
##  </ManSection>
##
##  Lemma (o.B.):
##  Es bezeichne
##
##    gl(n, p, e)  = Product(p^(e n) - p^(e k) : k in [0..n-1])
##    sl(n, p, e)  = gl(n, p, e) / (p^e - 1)
##    psl(n, p, e) = sl(n, p, e) / gcd(p^e - 1, n)
##
##  die Gr"o"sen der Gruppen GL, SL, PSL mit den Parametern
##  n, p, e. Dann gilt
##
##    gl(n, p, e)  = sl(n, p, e)  <==>  p^e = 2
##    sl(n, p, e)  = psl(n, p, e) <==>  gcd(p^e - 1, n) = 1
##    psl(n, p, e) = gl(n, p, e)  <==>  p^e = 2
##
##  und in diesen F"allen sind die dazugeh"origen Gruppen auch
##  isomorph. Dar"uberhinaus existieren genau die folgenden
##  sporadischen "Ubereinstimmungen
##
##    psl(2, 2, 2) = psl(2, 5, 1) = 60    ; PSL(2, 4) ~= PSL(2, 5) ~= A5
##    psl(2, 7, 1) = psl(3, 2, 1) = 168   ; PSL(2, 7) ~= PSL(3, 2)
##    psl(4, 2, 1) = psl(3, 2, 2) = 20160 ; PSL(4, 2) not~= PSL(3, 4)
##
##  wobei in den ersten beiden F"allen die dazugeh"origen Gruppen
##  isomorph sind, im letzten Fall aber nicht! Die Gruppen PSL(4, 2)
##  und PSL(3, 4) sind "uber das Zentrum ihrer 2-Sylowgruppen
##  unterscheidbar (Huppert: S.185).
##  Es bezeichne Z1, Z2 die Zentren der 2-Sylowgruppen von PSL(4, 2)
##  bzw. PSL(3, 4). Dann ist |Z1| = 2 und |Z2| = 4.
##
##  Die Aussage des Lemmas wurde rechnerisch bis zur Gruppenordnung 10^100
##  getestet.
##
DeclareGlobalFunction( "LinearGroupParameters" );

#############################################################################
##
#A  StructureDescription( <G> )
##
##  <#GAPDoc Label="StructureDescription">
##  <ManSection>
##  <Attr Name="StructureDescription" Arg="G"/>
##
##  <Description>
##  The method for <Ref Attr="StructureDescription"/> exhibits a structure
##  of the given group <A>G</A> to some extent, using the strategy outlined
##    below. The idea is to return a possibly short string which gives some
##    insight in the structure of the considered group. It is intended
##  primarily for small groups (order less than 100) or groups with few normal
##  subgroups, in other cases, in particular large <M>p</M>-groups, it can
##  be very costly. Furthermore, the string returned is -- as the action on
##  chief factors is not described -- often not the most useful way to describe
##  a group.<P/>
##
##  The string returned by <Ref Attr="StructureDescription"/> is
##  <B>not</B> an isomorphism invariant: non-isomorphic groups can have the
##  same string value, and two isomorphic groups in different representations
##  can produce different strings.
##
##  The value returned by <Ref Attr="StructureDescription"/> is a string of
##  the following form: <P/>
##  <Listing><![CDATA[
##    StructureDescription(<G>) ::=
##        1                                 ; trivial group
##      | C<size>                           ; finite cyclic group
##      | Z                                 ; infinite cyclic group
##      | A<degree>                         ; alternating group
##      | S<degree>                         ; symmetric group
##      | D<size>                           ; dihedral group
##      | Q<size>                           ; quaternion group
##      | QD<size>                          ; quasidihedral group
##      | PSL(<n>,<q>)                      ; projective special linear group
##      | SL(<n>,<q>)                       ; special linear group
##      | GL(<n>,<q>)                       ; general linear group
##      | PSU(<n>,<q>)                      ; proj. special unitary group
##      | O(2<n>+1,<q>)                     ; orthogonal group, type B
##      | O+(2<n>,<q>)                      ; orthogonal group, type D
##      | O-(2<n>,<q>)                      ; orthogonal group, type 2D
##      | PSp(2<n>,<q>)                     ; proj. special symplectic group
##      | Sz(<q>)                           ; Suzuki group
##      | Ree(<q>)                          ; Ree group (type 2F or 2G)
##      | E(6,<q>) | E(7,<q>) | E(8,<q>)    ; Lie group of exceptional type
##      | 2E(6,<q>) | F(4,<q>) | G(2,<q>)
##      | 3D(4,<q>)                         ; Steinberg triality group
##      | M11 | M12 | M22 | M23 | M24
##      | J1 | J2 | J3 | J4 | Co1 | Co2
##      | Co3 | Fi22 | Fi23 | Fi24' | Suz
##      | HS | McL | He | HN | Th | B
##      | M | ON | Ly | Ru                  ; sporadic simple group
##      | 2F(4,2)'                          ; Tits group
##      | PerfectGroup(<size>,<id>)         ; the indicated group from the
##                                          ; library of perfect groups
##      | A x B                             ; direct product
##      | N : H                             ; semidirect product
##      | C(G) . G/C(G) = G' . G/G'         ; non-split extension
##                                          ; (equal alternatives and
##                                          ; trivial extensions omitted)
##      | Phi(G) . G/Phi(G)                 ; non-split extension:
##                                          ; Frattini subgroup and
##                                          ; Frattini factor group
##  ]]></Listing>
##  <P/>
##  Note that the <Ref Attr="StructureDescription"/> is only <E>one</E>
##  possible way of building up the given group from smaller pieces. <P/>
##
##  The option <Q>short</Q> is recognized - if this option is set, an
##  abbreviated output format is used (e.g. <C>"6x3"</C> instead of
##  <C>"C6 x C3"</C>). <P/>
##
##  If the <Ref Attr="Name"/> attribute is not bound, but
##  <Ref Attr="StructureDescription"/> is, <Ref Func="View"/> prints the
##  value of the attribute <Ref Attr="StructureDescription"/>.
##  The <Ref Func="Print"/>ed representation of a group is not affected
##  by computing a <Ref Attr="StructureDescription"/>. <P/>
##
##  The strategy used to compute a <Ref Attr="StructureDescription"/> is
##  as follows:
##  <P/>
##  <List>
##  <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 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>"Z"</C> denotes the group of integers.
##  </Item>
##  <Mark>3.</Mark>
##  <Item>
##    Recognize alternating groups, symmetric groups,
##    dihedral groups, quasidihedral groups, quaternion groups,
##    PSL's, SL's, GL's and simple groups not listed so far
##    as basic building blocks.
##  </Item>
##  <Mark>4.</Mark>
##  <Item>
##    Decompose <A>G</A> into a direct product of irreducible factors.
##  </Item>
##  <Mark>5.</Mark>
##  <Item>
##    Recognize semidirect products <A>G</A>=<M>N</M>:<M>H</M>,
##    where <M>N</M> is normal.
##    Select a pair <M>N</M>, <M>H</M> with the following preferences:
##    <List>
##    <Mark>1.</Mark>
##    <Item>
##      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>
##      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><A>G</A>/N</M>,
##    </Item>
##    <Mark>3.</Mark>
##    <Item>
##      find any nontrivial normal subgroup <M>N</M> which has a complement
##      <M>H</M>.
##    </Item>
##    </List>
##    The option <Q>nice</Q> is recognized. If this option is set, then all
##    semidirect products are computed in order to find a possibly nicer
##    presentation. Note, that this may take a very long time if <A>G</A> has
##    many normal subgroups, e.g. if <M><A>G</A>/<A>G</A>'</M> has many cyclic
##    factors.
##    If the option <Q>nice</Q> is set, then GAP would select a pair
##    <M>N</M>, <M>H</M> with the following preferences:
##    <List>
##    <Mark>1.</Mark>
##    <Item>
##      <M>H</M> is abelian
##    </Item>
##    <Mark>2.</Mark>
##    <Item>
##      <M>N</M> is abelian
##    </Item>
##    <Mark>2a.</Mark>
##    <Item>
##      <M>N</M> has many abelian invariants
##    </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.
##    </Item>
##    </List>
##  </Item>
##  <Mark>6.</Mark>
##  <Item>
##    Fall back to non-splitting extensions:
##    If the centre or the commutator factor group is non-trivial,
##    write <A>G</A> as <M>Z(<A>G</A>)</M>.<M><A>G</A>/Z(<A>G</A>)</M> or
##    <M><A>G</A>'</M>.<M><A>G</A>/<A>G</A>'</M>, respectively.
##    Otherwise if the Frattini subgroup is non-trivial, write <A>G</A>
##    as <M>\Phi</M>(<A>G</A>).<A>G</A>/<M>\Phi</M>(<A>G</A>).
##  </Item>
##  <Mark>7.</Mark>
##  <Item>
##    If no decomposition is found (maybe this is not the case for
##    any finite group), try to identify <A>G</A> in the perfect groups
##    library. If this fails also, then return a string describing this
##    situation.
##  </Item>
##  </List>
##  Note that <Ref Attr="StructureDescription"/> is <E>not</E> intended
##  to be a research tool, but rather an educational tool. The reasons for
##  this are as follows:
##  <List>
##    <Mark>1.</Mark>
##    <Item>
##      <Q>Most</Q> groups do not have <Q>nice</Q> decompositions.
##      This is in some contrast to what is often taught in elementary
##      courses on group theory, where it is sometimes suggested that
##      basically every group can be written as iterated direct or
##      semidirect product of cyclic groups and nonabelian simple groups.
##    </Item>
##    <Mark>2.</Mark>
##    <Item>
##      In particular many <M>p</M>-groups have very <Q>similar</Q>
##      structure, and <Ref Attr="StructureDescription"/> can only
##      exhibit a little of it. Changing this would likely make the
##      output not essentially easier to read than a pc presentation.
##    </Item>
##  </List>
##  <Example><![CDATA[
##  gap> l := AllSmallGroups(12);;
##  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",
##    "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" ]
##  gap> StructureDescription(SmallGroup(504,7));
##  "C7 : (C9 x Q8)"
##  gap> StructureDescription(SmallGroup(504,7):nice);
##  "(C7 : Q8) : C9"
##  gap> StructureDescription(AbelianGroup([0,2,3]));
##  "Z x C6"
##  gap> StructureDescription(AbelianGroup([0,0,0,2,3,6]):short);
##  "Z^3x6^2"
##  gap> StructureDescription(PSL(4,2));
##  "A8"
##  ]]></Example>
##  </Description>
##  </ManSection>
##  <#/GAPDoc>
##
DeclareAttribute( "StructureDescription", IsGroup );

[ Dauer der Verarbeitung: 0.38 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge