%!TEX root = manual.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%%  matgroups.tex         IRREDSOL documentation            Burkhard Höfling
%%
%%  Copyright © Burkhard Höfling (burkhard@hoefling.name)
%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Chapter{Additional functionality for matrix groups}

This chapter explains some attributes, properties, and operations which may
be useful for working with matrix groups. Some of these are part of the 
{\GAP} library and are listed for the sake of completeness, and some
are provided by the package {\IRREDSOL}. Note that  groups constructed
by functions in {\IRREDSOL} already have the appropriate properties and
attributes. 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Basic attributes for matrix groups}

\>DegreeOfMatrixGroup(<G>) A
\>Degree(<G>)!{for matrix groups} O
\>DimensionOfMatrixGroup(<G>) A
\>Dimension(<G>)!{for matrix groups} A

This is the degree of the matrix group or, equivalently, the dimension of the
natural underlying vector space. See also "ref:DimensionOfMatrixGroup" in the {\GAP} reference manual.

\>FieldOfMatrixGroup(<G>) A

This is the field generated by the matrix entries of the elements of~<G>. See also 
"ref:FieldOfMatrixGroup" in the {\GAP} reference manual.

\>DefaultFieldOfMatrixGroup(<G>) A

This is a field containing all matrix entries of the elements of~<G>. See also 
"ref:DefaultFieldOfMatrixGroup" in the {\GAP} reference manual.

\>SplittingField(<G>) A

Let <G> be an irreducible subgroup of $GL(n, F)$, where $F =  `FieldOfMatrixGroup(<G>)'$
is a finite field. This attribute stores the splitting field <E> for <G>, that is,
the (unique) smallest field $E$ containing $F$ such 
that the natural $E G$-module $E^n$ is the direct sum of absolutely irreducible $E G$-
submodules. The number of these absolutely irreducible summands equals the dimension of $E$
as an $F$-vector space.

\>CharacteristicOfField(<G>) A
\>Characteristic(<G>)!{for matrix groups} O

This is the characteristic of `FieldOfMatrixGroup'(<G>) (see "FieldOfMatrixGroup").


\>RepresentationIsomorphism(<G>) A

This attribute stores an isomorphism $<H> \to <G>$, where <H> is a group
in which computations can be carried out more efficiently than in <G>, and 
the isomorphism can be evaluated easily. Every group in the {\IRREDSOL} library
has such a representation isomorphism from a pc group <H> to <G>.

In this way, computations which only depend on the 
isomorphism type of <G> can be carried out in the group <H> and translated
back to the group <G> via the representation isomorphism. Possible applications are the conjugacy classes of <G>, Sylow subgroups, composition and chief series, normal subgroups, group theoretical properties of <G>, and many more. 

The concept of a representation isomorphism is related to 
nice monomorphisms; see Section "ref:Nice Monomorphisms" in the {\GAP} 
reference manual. However, unlike nice monomorphisms, 
`RepresentationIsomorphism' need not be efficient for computing preimages (and, indeed, will not usually be, in the case of the groups in the {\IRREDSOL} library). 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Irreducibility and maximality of matrix groups}

\>IsIrreducibleMatrixGroup(<G>) P
\>IsIrreducibleMatrixGroup(<G>, <F>) O
\>IsIrreducible(<G> [, <F>])!{for matrix groups} O

The matrix group <G> of degree <d> is irreducible over the field <F> if no subspace of $<F>^d$ is
invariant under the action of <G>. If <F> is not
specified, `FieldOfMatrixGroup'(<G>) is used as <F>.

\beginexample
gap> G := IrreducibleSolvableMatrixGroup (4, 2, 2, 3);
<matrix group of size 10 with 2 generators>
gap> IsIrreducibleMatrixGroup (G);
true
gap> IsIrreducibleMatrixGroup (G, GF(2));
true
gap> IsIrreducibleMatrixGroup (G, GF(4));
false
\endexample

\>IsAbsolutelyIrreducibleMatrixGroup(<G>) P
\>IsAbsolutelyIrreducible(<G>) O

If present, this operation returns true if <G> is absolutely irreducible, i.~e., irreducible over any
extension field of `FieldOfMatrixGroup'(<G>).

\beginexample
gap> G := IrreducibleSolvableMatrixGroup (4, 2, 2, 3);
<matrix group of size 10 with 2 generators>
gap> IsAbsolutelyIrreducibleMatrixGroup(G);
false
\endexample

\>`IsMaximalAbsolutelyIrreducibleSolvableMatrixGroup(<G>)'%
{IsMaximalAbsolutelyIrreducibleSolvableMatrixGroup}%
@{`IsMaximalAbsolutelyIrreducibleSolvable\\MatrixGroup'} P

This property, if present, is `true' if, and only if, <G> is absolutely irreducible and maximal among 
the solvable subgroups of $GL(d, F)$, where $d$ is `DegreeOfMatrixGroup'(<G>) and
$F$ equals `FieldOfMatrixGroup'(<G>). 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Primitivity of matrix groups}

\>MinimalBlockDimensionOfMatrixGroup(<G>) A
\>MinimalBlockDimensionOfMatrixGroup(<G>, <F>) O
\>MinimalBlockDimension(<G> [, <F>])!{for matrix groups} O

Let <G> be a matrix group of degree <d> over the field <F>.  A 
decomposition $V_1 \oplus \cdots \oplus V_k$ of $<F>^d$ into <F>-subspaces
$V_i$ is a block system of $<G>$ if the $V_i$ are permuted by the natural
action of <G>. Obviously, all $V_i$ have the same dimension; this is the
dimension of the block system
$V_1 \oplus \cdots \oplus V_k$. The function
`MinimalBlockDimensionOfMatrixGroup' returns the minimum of the dimensions
of all block systems of <G>. If <F> is not specified, `FieldOfMatrixGroup'(<G>)
 is used as <F>. At present, only methods for groups 
which are irreducible over <F> are available.

\beginexample
gap> G := IrreducibleSolvableMatrixGroup (2,3,1,4);;
gap> MinimalBlockDimension (G, GF(3));
2
gap> MinimalBlockDimension (G, GF(9));
1
\endexample

\>IsPrimitiveMatrixGroup(<G>) P
\>IsPrimitiveMatrixGroup(<G>, <F>) O
\>IsPrimitive(<G> [, <F>])!{for matrix groups} O
\>IsLinearlyPrimitive(<G> [, <F>]) O

An irreducible matrix group <G> of degree <d> is primitive over the field <F> if it
only has the trivial block system $<F>^d$ or, equivalently, if
$`MinimalBlockDimensionOfMatrixGroup'(<G>, <F>) = d$. If <F> is not
specified, it is assumed that <F> is `FieldOfMatrixGroup'(<G>).

\beginexample
gap> G := IrreducibleSolvableMatrixGroup (2,2,1,1);;
gap> IsPrimitiveMatrixGroup (G, GF(2));
true
gap> IsIrreducibleMatrixGroup (G, GF(4));
true
gap> IsPrimitiveMatrixGroup (G, GF(4));
false
\endexample

\>ImprimitivitySystems(<G> [, <F>]) O

This function returns the list of all imprimitivity systems of the 
irreducible matrix group <G> over the field <F>. If <F> is not given, 
`FieldOfMatrixGroup(<G>)' is used. 
Each imprimitivity system is given by a record with the following entries:

\beginitems
`bases' & a list of the bases of the subspaces which form the imprimitivity system. 
          Note that a basis here is just a list of vectors, not a basis in the sense of
          {\GAP} (see "ref:Basis" in the {\GAP} reference manual). Each basis is
          in Hermite normal form so that the action of <G> on the imprimitivity
          system can be determined by `OnSubspacesByCanonicalBasis'
          
`stab1' & the subgroup of <G> stabilizing the subspace <W> spanned by `bases[1]'

`min'   & is true if the imprimitivity system is minimal, that is, if `stab1' 
          acts primitively on <W>, and false otherwise 
\enditems

\beginexample
gap> G := IrreducibleSolvableMatrixGroup (6, 2, 1, 9);
<matrix group of size 54 with 4 generators>
gap> impr := ImprimitivitySystems(G, GF(2));;
gap> List (ImprimitivitySystems(G, GF(2)), r -> Length (r.bases));
[ 3, 3, 1 ]
gap> List (ImprimitivitySystems(G, GF(4)), 
>        r -> Action (G, r.bases, OnSubspacesByCanonicalBasis));
[ Group([ (), (1,2)(3,6)(4,5), (1,3,4)(2,5,6), (1,4,3)(2,6,5) ]), 
  Group([ (1,2,4)(3,5,6), (1,3)(2,5)(4,6), (), () ]), 
  Group([ (1,2,4)(3,5,6), (1,3)(2,5)(4,6), (1,2,4)(3,6,5), (1,4,2)(3,5,6) ]), 
  Group([ (1,2,4)(3,5,6), (1,3)(2,5)(4,6), (1,4,2)(3,5,6), (1,2,4)(3,6,5) ]), 
  Group([ (), (1,2), (), () ]), Group([ (1,2,3), (), (), () ]), 
  Group([ (), (2,3), (1,2,3), (1,3,2) ]), 
  Group([ (), (2,3), (1,2,3), (1,3,2) ]), 
  Group([ (), (2,3), (1,2,3), (1,3,2) ]), Group(()) ]
\endexample


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Conjugating matrix groups into smaller fields}

\>TraceField(<G>) A

This is the field generated by the traces of the elements of the matrix group~<G>. 
If <G> is an irreducible matrix group over a finite field then, by a theorem of Brauer, <G>
has a conjugate which is a matrix group over `TraceField'(<G>).

\beginexample
gap> repeat
>        G := IrreducibleSolvableMatrixGroup (8, 2, 2, 7)^RandomInvertibleMat (8, GF(8));
>    until FieldOfMatrixGroup (G) = GF(8);
gap> TraceField (G);
GF(2)
\endexample

\>ConjugatingMatTraceField(<G>) A

If bound, this is a matrix <x> over `FieldOfMatrixGroup'(<G>) such that
$<G>^<x>$ is a  matrix group over `TraceField'(<G>). Currently, there are
only methods available for irreducible matrix groups <G> over finite fields
and certain trivial cases.
The method for absolutely irreducible groups is described in
\cite{GH}. 
Note that, for matrix groups over infinite fields, such a matrix <x> 
need not exist.
\beginexample
gap> repeat
>       G := IrreducibleSolvableMatrixGroup (8, 2, 2, 7) ^ 
>                RandomInvertibleMat (8, GF(8));
>    until FieldOfMatrixGroup(G) = GF(8);
gap> FieldOfMatrixGroup (G^ConjugatingMatTraceField (G));
GF(2)
\endexample


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%E
%%
