In this section, we describe functions developed by Celler and Leedham-Green (see [3] for details) to recognise classical groups in their natural representation over finite fields.
RecogniseClassicalCLG( G [,case] [,N] )
This is the top-level function, taking as input a group G, which is a
subgroup of GL(d,q) with d > 1. The other optional arguments have
the same meaning as those supplied to RecogniseClassical
. The default
value of N, the number of random elements to consider, depends on the
case; it is 40 for small fields and dimensions, but decreases to 10 for
larger dimensions.
Constraints
In the case of an orthogonal group, the dimension of the underlying
vector space must be at least 7, since there are exceptional isomorphisms
between the orthogonal groups in dimensions 6 or less and other
classical groups which are not dealt with in RecogniseClassical-CLG
.
In dimension 8, RecognizeSO
will not rule out the possibility of
O_7(q) embedded as irreducible subgroup of O_8^+(q). Since G must
also act irreducibly, RecogniseClassicalCLG
does not recognise
O_{2n+1}^0(2^k).
The record returned by this function is similar to that described in RecogniseClassical. In particular, the flag functions described there and below can be applied to the record. You should ignore undocumented record components.
Additional information
DualFormFlag
:DualFormFlag
returns the symplectic or orthogonal form.
QuadraticFormFlag
:QuadraticFormFlag
returns the quadratic form.
UnitaryFormFlag
:DualFormFlag
returns
the symplectic or orthogonal form.
If RecogniseClassical
failed to prove that G is a classical group,
additional information about the possible Aschbacher categories of G
might have been obtained.
In particular, the following flag functions may be applied to the record. If one of these functions returns a list, it has the following meaning: if G belongs to the corresponding Aschbacher category, then G is determined by one of the possibilities returned; it does not imply that G is a member of this category. However, an empty list indicates that G does not belong to this category. Each of these functions may also return "unknown".
A group G is almost simple if G contains a non-abelian simple group T and is contained in the automorphism group of T. If G is almost simple, then G is either an almost sporadic group, an almost alternating group, or an almost Chevalley group.
PossibleAlmostSimpleFlag
:
PossibleAlternatingGroupsFlag
:
PossibleChevalleyGroupsFlag
:
IsPossibleImprimitiveFlag
:true
if G might be imprimitive.
PossibleImprimitiveDimensionsFlag
:IsPossibleImprimitiveFlag
must be true
).
IsPossibleTensorProductFlag
:true
if G might be a tensor product.
PossibleTensorDimensionsFlag
:Is-Possible-Tensor-Product-Flag
is true
or
Is-Possible-Tensor-Power-Flag
is true and the dimension is a
square.
IsPossibleTensorPowerFlag
:true
if G might be a tensor power.
IsPossibleSmallerFieldFlag
:true
if G could be defined (modulo scalars) over a
smaller field.
PossibleSmallerFieldFlag
:IsPossibleSmallerFieldFlag
must be true
).
IsPossibleSemiLinearFlag
:
IsPossibleNormalizerPGroupFlag
:Examples
gap> m1 := [ [ 0*Z(17), Z(17), Z(17)^10, Z(17)^12, Z(17)^2 ], [ Z(17)^13, Z(17)^10, Z(17)^15, Z(17)^8, Z(17)^0 ], [ Z(17)^10, Z(17)^6, Z(17)^9, Z(17)^8, Z(17)^10 ], [ Z(17)^13, Z(17)^5, Z(17)^0, Z(17)^12, Z(17)^5 ], [ Z(17)^14, Z(17)^13, Z(17)^5, Z(17)^10, Z(17)^0 ] ];; gap> m2 := [ [ 0*Z(17), Z(17)^10, Z(17)^2, 0*Z(17), Z(17)^10 ], [ 0*Z(17), Z(17)^6, Z(17)^0, Z(17)^4, Z(17)^15 ], [ Z(17)^7, Z(17)^6, Z(17)^10, Z(17), Z(17)^2 ], [ Z(17)^3, Z(17)^10, Z(17)^5, Z(17)^4, Z(17)^6 ], [ Z(17)^0, Z(17)^8, Z(17)^0, Z(17)^5, Z(17) ] ];; gap> G := Group( m1, m2 );; gap> sl := RecogniseClassicalCLG( G, "all", 1 );; gap> IsSLContainedFlag(sl); "unknown"
Since the algorithm has a random component, it may fail to prove that a
group contains the special linear group even if the group does. As a
reminder, IsSLContainedFlag
may return true
, false
, or
"unknown"
.
Here we chose only one random element. If RecogniseClassicalCLG
fails
but you suspect that the group contains the special linear group, you can
restart it using more random elements. You should, however, not change
the case. If you don't already know the case, then call
RecogniseClassicalCLG
either without a case parameter or "all".
gap> sl := RecogniseClassicalCLG( G, 5 );; gap> IsSLContainedFlag(sl); true
The following is an example where G is not an classical group but additional information has been obtained.
gap> ReadDataPkg ("matrix", "data", "j1.gap" ); gap> DisplayMat(GeneratorsFlag(G)); 9 1 1 3 1 3 3 1 1 3 1 3 3 9 1 3 1 3 3 9 1 3 1 3 3 9 1 1 1 3 3 9 1 1 3 3 3 9 1 1 3 1 3 9 1 1 3 1 3 . 1 . . . . . . . 1 . . . . . . . 10 . . . . . . . 1 . . . . . . . 10 . . . . . . . 10 10 . . . . . . gap> r := RecogniseClassical( G, "clg" );; gap> ClassicalTypeFlag(r); "unknown" gap> IsPossibleImprimitiveFlag(r); false gap> IsPossibleTensorProductFlag(r); false gap> IsPossibleTensorPowerFlag(r); false gap> PossibleAlmostSimpleFlag(r); [ "J1" ] gap> PossibleAlternatingGroupsFlag(r); [ ] gap> PossibleChevalleyGroupsFlag(r); [ [ "A", 1, 11, 3 ], [ "A", 2, 11, 2 ], [ "A", 3, 11, 1 ], [ "G", 2, 11, 1 ] ]
GAP 3.4.4