<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --> <!-- %% --> <!-- %W meataxe.tex GAP documentation Alexander Hulpke --> <!-- %% --> <!-- %% --> <!-- %Y Copyright 1997, Lehrstuhl D für Mathematik, RWTH Aachen, Germany --> <!-- %% --> <!-- %% This file contains a description of the MeatAxe functions. --> <!-- %% -->
<Chapter Label="The MeatAxe">
<Heading>The MeatAxe</Heading>
The MeatAxe <Cite Key="Par84"/> is a tool for the examination of submodules of a
group algebra. It is a basic tool for the examination of group actions on
finite-dimensional modules.
<P/>
&GAP; uses the improved MeatAxe of Derek Holt and Sarah Rees, and
also incorporates further improvements of Ivanyos and Lux.
<P/>
Please note that, consistently with the convention for group actions, the action of the &GAP; MeatAxe is always that of matrices
on row vectors by multiplication on the right. If you want to investigate
left modules you will have to transpose the matrices.
<ManSection>
<Heading>GModuleByMats</Heading>
<Func Name="GModuleByMats" Arg='gens, field'
Label="for generators and a field"/>
<Func Name="GModuleByMats" Arg='emptygens, dim, field'
Label="for empty list, the dimension, and a field"/>
<Description>
creates a MeatAxe module over <A>field</A> from a list of invertible matrices
<A>gens</A> which reflect a group's action. If the list of generators is empty,
the dimension must be given as second argument.
<P/>
MeatAxe routines are on a level with Gaussian elimination. Therefore they do
not deal with &GAP; modules but essentially with lists of matrices. For the
MeatAxe, a module is a record with components
<P/>
<List>
<Mark><C>generators</C></Mark>
<Item>
A list of matrices which represent a group operation on a
finite dimensional row vector space.
</Item>
<Mark><C>dimension</C></Mark>
<Item>
The dimension of the vector space (this is the common length of
the row vectors (see <Ref Attr="DimensionOfVectors"/>)).
</Item>
<Mark><C>field</C></Mark>
<Item>
The field over which the vector space is defined.
</Item>
</List>
<P/>
Once a module has been created its entries may not be changed. A MeatAxe may
create a new component <A>NameOfMeatAxe</A> in which it can store private
information. By a MeatAxe <Q>submodule</Q> or <Q>factor module</Q> we denote
actually the <E>induced action</E> on the submodule, respectively factor module.
Therefore the submodules or factor modules are again MeatAxe modules. The
arrangement of <C>generators</C> is guaranteed to be the same for the induced
modules, but to obtain the complete relation to the original module, the
bases used are needed as well.
</Description>
</ManSection>
<ManSection>
<Heading>NaturalGModule</Heading>
<Func Name="NaturalGModule" Arg='group[, field]' Label="for matrix group and a field"/>
<Description>
creates a MeatAxe module over <A>field</A> from the generators of the matrix
group <A>group</A>. If <A>field</A> is not provided then the value returned by
<Ref Attr="DefaultFieldOfMatrixGroup"/> is used instead.
</Description>
</ManSection>
<Description>
Called with a permutation group <A>G</A> and a field <A>F</A> (<A>F</A> may be infinite),
<Ref Func="PermutationGModule"/> returns the natural permutation module
<M>M</M> over <A>F</A>
for the group of permutation matrices that acts on the canonical basis of
<M>M</M> in the same way as <A>G</A> acts on the points up to its largest
moved point (see <Ref Attr="LargestMovedPoint" Label="for a list or collection of permutations"/>).
</Description>
</ManSection>
<Description>
Called with a group <A>G</A> and a field <A>F</A> (<A>F</A> may be infinite),
<Ref Func="TrivialGModule"/> returns the trivial module over <A>F</A>.
</Description>
</ManSection>
<Description>
<Ref Func="TensorProductGModule"/> calculates the tensor product
of the modules <A>m1</A> and <A>m2</A>.
They are assumed to be modules over the same algebra so, in particular,
they should have the same number of generators.
</Description>
</ManSection>
<Description>
<Ref Func="WedgeGModule"/> calculates the wedge product of a <A>G</A>-module.
That is the action on antisymmetric tensors.
</Description>
</ManSection>
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Selecting a Different MeatAxe">
<Heading>Selecting a Different MeatAxe</Heading>
<ManSection>
<Var Name="MTX"/>
<Description>
All MeatAxe routines are accessed via the global variable <Ref Var="MTX"/>,
which is a record whose components hold the various functions.
It is possible to have several implementations of a MeatAxe available.
Each MeatAxe represents its routines in an own global variable and assigning
<Ref Var="MTX"/> to this variable selects the corresponding MeatAxe.
</Description>
</ManSection>
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Accessing a Module">
<Heading>Accessing a Module</Heading>
Even though a MeatAxe module is a record, its components should never be
accessed outside of MeatAxe functions. Instead the following operations
should be used:
<Description>
A module is absolutely irreducible if it remains irreducible over the
algebraic closure of the field.
(Formally: If the tensor product <M>L \otimes_K M</M> is irreducible
where <M>M</M> is the module defined over <M>K</M> and <M>L</M> is the
algebraic closure of <M>K</M>.)
</Description>
</ManSection>
<Description>
returns the degree of the splitting field as extension of the prime field.
</Description>
</ManSection>
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Decomposition of modules">
<Heading>Decomposition of modules</Heading>
A module is <E>decomposable</E> if it can be written as the direct sum of two
proper submodules (and <E>indecomposable</E> if not). Obviously every finite
dimensional module is a direct sum of its indecomposable parts.
The <E>homogeneous components</E> of a module are the direct sums of isomorphic
indecomposable components. They are uniquely determined.
<P/>
<ManSection>
<Func Name="MTX.IsIndecomposable" Arg='module'/>
<Description>
returns a decomposition of <A>module</A> as a direct sum of indecomposable
modules. It returns a list, each entry is a list of form [<A>B</A>,<A>ind</A>] where
<A>B</A> is a list of basis vectors for the indecomposable component and <A>ind</A>
the induced module action on this component. (Such a decomposition is not
unique.)
</Description>
</ManSection>
<P/>
<ManSection>
<Func Name="MTX.HomogeneousComponents" Arg='module'/>
<Description>
computes the homogeneous components of <A>module</A> given as sums of
indecomposable components. The function returns a list, each entry of which
is a record corresponding to one isomorphism type of indecomposable
components.
The record has the following components.
<P/>
<List>
<Mark><C>indices</C></Mark>
<Item>
the index numbers of the indecomposable components,
as given by <Ref Func="MTX.Indecomposition"/>,
that are in the homogeneous component,
</Item>
<Mark><C>component</C></Mark>
<Item>
one of the indecomposable components,
</Item>
<Mark><C>images</C></Mark>
<Item>
a list of the remaining indecomposable components,
each given as a record with the components
<C>component</C> (the component itself) and
<C>isomorphism</C> (an isomorphism from the defining component to this one).
</Item>
</List>
</Description>
</ManSection>
<Description>
<A>subspace</A> should be a subspace of (or a vector in) the underlying vector
space of <A>module</A> i.e. the full row space of the same dimension and over
the same field as <A>module</A>. A normalized basis of the submodule of
<A>module</A> generated by <A>subspace</A> is returned.
</Description>
</ManSection>
<Description>
returns a list <C>[<A>bas</A>, <A>change</A> ]</C> where <A>bas</A> is a
normed basis (i.e. in echelon form with pivots normed to 1) for <A>sub</A>
and <A>change</A> is the base change from <A>bas</A> to <A>sub</A>
(the basis vectors of <A>bas</A> expressed in coefficients for <A>sub</A>).
</Description>
</ManSection>
<Description>
creates a new module corresponding to the action of <A>module</A> on
the non-trivial submodule
<A>sub</A>.
In the <C>NB</C> version the basis <A>sub</A> must be normed.
(That is it must be in echelon form with pivots normed to 1,
see <Ref Func="MTX.NormedBasisAndBaseChange"/>.)
</Description>
</ManSection>
<Description>
creates a new module corresponding to the action of <A>module</A> on the
factor of the proper submodule <A>sub</A>. If <A>compl</A> is given, it has to be a basis of a
(vector space-)complement of <A>sub</A>. The action then will correspond to
<A>compl</A>.
<P/>
The basis <A>sub</A> has to be given in normed form. (That is it must be in
echelon form with pivots normed to 1,
see <Ref Func="MTX.NormedBasisAndBaseChange"/>)
</Description>
</ManSection>
<Description>
Computes induced actions on submodules or factor modules and also returns the
corresponding bases. The action taken is binary encoded in <A>type</A>:
<C>1</C> stands for subspace action,
<C>2</C> for factor action,
and <C>4</C> for action of the full module on a subspace adapted basis.
The routine returns the computed results in a list in sequence
(<A>sub</A>,<A>quot</A>,<A>both</A>,<A>basis</A>)
where <A>basis</A> is a basis for the whole space,
extending <A>sub</A>. (Actions which are not computed are omitted, so the
returned list may be shorter.)
If no <A>type</A> is given, it is assumed to be <C>7</C>.
The basis given in <A>sub</A> must be normed!
<P/>
All these routines return <K>fail</K> if <A>sub</A> is not a proper subspace.
</Description>
</ManSection>
<Description>
returns a basis of all module homomorphisms from <A>module1</A> to
<A>module2</A>.
Homomorphisms are by matrices, whose rows give the images of the
standard basis vectors of <A>module1</A> in the standard basis of
<A>module2</A>.
</Description>
</ManSection>
<Description>
If <A>module1</A> and <A>module2</A> are isomorphic modules,
this function returns an isomorphism from <A>module1</A> to <A>module2</A>
in form of a matrix.
It returns <K>fail</K> if the modules are not isomorphic.
</Description>
</ManSection>
<Description>
returns the module automorphisms of <A>module</A> (the set of all isomorphisms
from <A>module</A> to itself) as a matrix group.
</Description>
</ManSection>
</Section>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Module Homomorphisms for irreducible modules">
<Heading>Module Homomorphisms for irreducible modules</Heading>
The following are lower-level functions that provide homomorphism
functionality for irreducible modules. Generic code should use the functions
in Section <Ref Sect="Module Homomorphisms"/> instead.
<Description>
returns an isomorphism from <A>module1</A> to <A>module2</A> (if one exists),
and <K>fail</K> otherwise. It requires that one of the modules is known to be
irreducible. It implicitly assumes that the same group is acting, otherwise
the results are unpredictable.
The isomorphism is given by a matrix <M>M</M>, whose rows give the images of
the standard basis vectors of <A>module1</A> in the standard basis of
<A>module2</A>.
That is, conjugation of the generators of <A>module2</A> with <M>M</M> yields
the generators of <A>module1</A>.
</Description>
</ManSection>
<Description>
<A>mat</A> should be a <A>dim1</A> <M>\times</M> <A>dim2</A> matrix
defining a homomorphism from <A>module1</A> to <A>module2</A>.
This function verifies that <A>mat</A>
really does define a module homomorphism, and then returns the
corresponding homomorphism between the underlying row spaces of the
modules. This can be used for computing kernels, images and pre-images.
</Description>
</ManSection>
<Description>
returns a basis of the space of all homomorphisms from the irreducible module
<A>module1</A> to <A>module2</A>.
</Description>
</ManSection>
<Description>
Let <A>cf</A> be the output of <Ref Func="MTX.CollectedFactors"/>.
This routine tries to find a group algebra element that has nullity zero
on all composition factors except number <A>nr</A>.
</Description>
</ManSection>
<Description>
returns an invariant bilinear form, which may be symmetric or anti-symmetric,
of <A>module</A>, or <K>fail</K> if no such form exists.
</Description>
</ManSection>
<Description>
returns an invariant hermitian (= self-adjoint) sesquilinear form of
<A>module</A>,
which must be defined over a finite field whose order is a square,
or <K>fail</K> if no such form exists.
</Description>
</ManSection>
<Description>
returns a basis of the underlying vector space of <A>module</A> which is contained
in an orbit of the action of the generators of module on that space.
This is used by <Ref Func="MTX.InvariantQuadraticForm"/> in characteristic 2.
</Description>
</ManSection>
The standard MeatAxe provided in the &GAP; library is
based on the MeatAxe in the &GAP; 3 package <Package>Smash</Package>,
originally written by Derek Holt and Sarah Rees <Cite Key="HR94"/>.
It is accessible via the variable <C>SMTX</C> to which <Ref Var="MTX"/>
is assigned by default.
For the sake of completeness the remaining sections document more technical
functions of this MeatAxe.
<Description>
returns (at most <A>max</A>) bases of submodules of <A>module2</A> which are
isomorphic to the irreducible module <A>module1</A>.
</Description>
</ManSection>
<Description>
Tests for irreducibility and sets a subbasis if reducible. It neither sets
an irreducibility flag, nor tests it. Thus the routine also can simply be
called to obtain a random submodule.
</Description>
</ManSection>
<Description>
Tests for absolute irreducibility and sets splitting field degree. It
neither sets an absolute irreducibility flag, nor tests it.
</Description>
</ManSection>
<Description>
returns the basis of a minimal submodule of <A>module</A> containing the
indicated composition factor. It assumes <C>Distinguish</C> has been called
already.
</Description>
</ManSection>
<Description>
extends the partial basis <A>pbasis</A> to a basis of the full space
by action of <A>module</A>. It returns whether it succeeded.
</Description>
</ManSection>
<Description>
matrix centralising all generators which is computed as
a byproduct of <Ref Func="SMTX.AbsoluteIrreducibilityTest"/>.
</Description>
</ManSection>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.