<Chapter Label="Introduction">
<Heading>Introduction</Heading>

<Index>FGA</Index>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Overview">
<Heading>Overview</Heading>

This manual describes the &FGA; (<E>Free Group Algorithms</E>) package,
a &GAP; package for computations with finitely generated subgroups of
free groups.
<P/>
This package allows you to (constructively) test membership and
conjugacy, and to compute free generators, the rank, the index,
normalizers, centralizers, and intersections
where the groups involved are finitely generated subgroups of free groups.
<!-- % -->
In addition, it provides generators and a finite presentation for the
automorphism group of a finitely generated free group and allows to
write any such automorphism as word in these generators.
<P/>
See Chapter <Ref Chap="Functionality of the FGA package" Style="Text"/> for details.
<P/>
Chapter <Ref Chap="Installing and loading the FGA package" Style="Text"/> explains
how to install and load the &FGA; package.
<P/>
</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Implementation and background">
<Heading>Implementation and background</Heading>

The methods which are used work mainly with inverse finite automata,
a variation of an idea known from theoretical computer science.
An inverse finite automaton is a finite state automaton over a
symmetric alphabet, i.e. one in which every letter has an inverse,
such that each transition between two states for a letter corresponds
to a transition in the opposite direction for the inverse letter.
<P/>
Most of these techniques are described in Chapter 4 of <Cite Key="Sims94"/>,
where the same concept is called coset automaton.
The method to obtain this automaton is called basic coset enumeration,
and in fact it is coset enumeration where only important cosets are
defined.  Here a coset <A>Gg</A> is called important when there
are words <A>w</A> and <A>v</A> such that <A>wv</A> is reduced and denotes an element
of <A>G</A> and <A>w</A> denotes an element of <A>Gg</A>.
<P/>
In <Cite Key="BirgetEtAl00"/>, the connection between finitely generated
subgroups of free groups and inverse finite automata is used to transfer
results about the space complexity of problems concerning inverse finite
automata to analogous results about finitely generated subgroups of free
groups.
<P/>
Chapter 6 of <Cite Key="Sims94"/> describes the Reidemeister-Schreier
procedure and a variant called extended coset enumeration which yields
a presentation in the given generators.  The &FGA; package uses a
variation thereof for its constructive membership test: it leaves out the
part of the algorithm that fills in relations and interprets the
resulting extended coset table differently.
This algorithm might be called extended basic coset enumeration.
<P/>
Some word oriented algorithms in the &FGA; package use basic facts about
free groups.  These can, for example, be found in <Cite Key="LyndonSchupp77"/>.
<P/>
The presentation of the automorphism groups follows <Cite Key="Neumann33"/>.
The algorithm for writing an automorphism in the generators works
first at the level of Nielsen generators and uses relations from
<Cite Key="Nielsen"/>.
<P/>
The theoretical background for most of this implementation is
explained in <Cite Key="Sievers03"/>.
<P/>
</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Integration of the package">
<Heading>Integration of the package</Heading>

The &FGA; package mainly installs new methods for operations that are
already known to &GAP;.  They overlap with methods in the &GAP;
library in the case of groups of finite index.  In this case, &GAP;s
methods are usually faster, and the &FGA; package tries to recognize
such cases and to refer to &GAP;.
<P/>
The methods of the &FGA; package will only be selected when the groups
involved know they are finitely generated.  This may not always be the
case for groups that were not created by methods of the &FGA;
package.  In such a case you will get a <C>no method found</C> error, or
&GAP; may try a coset enumeration that stops with the message
<C>the coset enumeration has defined more than 256000 cosets</C>.
You may then call <C>GeneratorsOfGroup</C>, and try again.
<P/>
Please inform the package author if you observe any remaining problems.
<P/>
</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="License">
<Heading>License</Heading>

Like the &GAP; system itself, the &FGA; package is free software;
you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later
version.
<P/>
This package is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.
<P/>
You can find the GNU General Public License in the file <C>COPYING</C> of
the &FGA; package, and also in the file <C>GPL</C> in the <C>etc</C> directory
of the main &GAP; distribution, or see
<URL>http://www.gnu.org/licenses/gpl.html</URL>.
<P/>

</Section>
</Chapter>
