%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%W  history.tex                XMOD documentation               Chris Wensley
%W                                                                & Murat Alp
%%
%H  $Id: history.tex,v 2.006 2004/09/06 gap Exp $
%%
%Y  Copyright (C) 1999,2001 University of St. Andrews, North Haugh,
%Y                          St. Andrews, Fife KY16 9SS, Scotland
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\Chapter{Development History}

This chapter, which is intended to contain details of the major changes 
to the package as it develops, was first created in April 2002. 
Details of the changes from {\XMod}~1 to {\XMod}~2.001 
are far from complete.

%\Section{Version 1}
\bigskip
{\bf Version 1}

The inspiration for this package was the need, in the mid-1990's, 
to calculate induced crossed modules (see \cite{BW1,BW2,BW3}).
{\GAP} was chosen over other computational group theory systems
because the code was freely available, and it was possible to
modify the Tietze transformation code so as to record the images
of the original generators of a presentation as words in the
simplified presentation.  
(These modifications are now a standard part of the Tietze transformation
package in {\GAP}.)

The first version of {\XMod} became an accepted share package 
for {\GAP}~3.4.3 in December 1996.

%\Section{Version 2}
\bigskip
{\bf Version 2}

Conversion of {\XMod}~1 from {\GAP}~3.4.3 to the new {\GAP} syntax  
began soon after {\GAP}~4 was released, and had a lengthy gestation.
The new {\GAP} syntax encouraged a re-naming of many of the function names.
An early decision was to introduce generic names 
`2dObject' for (pre-)crossed modules and (pre-)cat1-groups, 
and `2dMapping' for the various types of morphism.
This allows `3dObject' to be used in future for crossed squares and
cat2-groups, and `3dMapping' for their morphisms.
A generic name for derivations and sections is also required, 
and `Up2dMapping' is currently used.

%\Section{Version 2.001}
\bigskip
{\bf Version 2.001}

This was the first version of {\XMod} for {\GAP}~4,
completed in April 2002 in a rush to catch the release of {\GAP}~4.3.
Functions for actors and induced crossed modules were not included,
nor many of the functions for derivations and sections,
for example `InnerDerivation'.
During the ten days prior to the release, the main changes made were:
\beginlist
\item{$\bullet$} 
Generic name `UpMapping' chosen for derivations and sections 
(now changed to `Up2dMapping').
\item{$\bullet$} 
File names changed to `obj2.gd', `map2.gi', `up2.tex', etc.
\item{$\bullet$} 
Added alternative methods for `IsomorphismPermGroup' for `2dObjects'.
(Strange terminology here!  Will probably define global functions
`IsomorphismPermObject', `IsomorphismFpObject', etc. in a later version
which will call `IsomorphismPermGroup', `IsomorphismPerm2dObject' 
or whatever is appropriate.)
\item{$\bullet$} 
Sorted a problem with fixing the generating set for <R>
when used to define derivations.  The (old) code uses an fp-group
version of <R> and checks that all the relators map by <chi> to <1>.
Unfortunately, `IsomorphismFpGroup' sometimes permutes the order
of the <R>-generators, with unfortunate effects.  
The fix is to use `IsomorphismFpGroupByGenerators' 
which returns the images of the generators specified in the function call.  
We have also used `genR := StrongGeneratorsStabChain( StabChain( rng ) );'
throughout to specify the generators of <R>.
\item{$\bullet$} 
Operation `XModMorphism' renamed as `XModMorphismByHoms',
and a new global function `XModMorphism' introduced
(and ditto for other `2dMappings').
\item{$\bullet$} 
Now using $\chi_1 \star \chi_2$ for Whitehead multiplication
{\bf on the right}, with `CompositeDerivation' still giving
multiplication {\bf on the left}.  This means that the second
axiom for derivations and for sections has changed -- see Chapter 4.
\endlist

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% \Section{Induced crossed modules}

During the period May 20th - May 27th 2002
converted `induce.g' to `induce.gd' and `induce.gi'
(later renamed `induce2.gd', `induce2.gi'),
at least as regards induced crossed modules --- 
induced cat1-groups still to come.
This involved the following. 
\beginlist
\item{$\bullet$}
Converted combinatorial functions -- 
`DistinctRepresentatives', `CommonRepresentatives',
`Common'- `Transversal' and `IsCommonTransversal'.
\item{$\bullet$}
Converted Tietze modification functions
`TzCommutatorPair', `TzPartition' and `FactorsPresentation'.
\item{$\bullet$}
As suggested above, introduced global functions
`IsomorphismPermObject', `IsomorphismFpObject', `IsomorphismPcObject'
which call `IsomorphismPermGroup' etc. when the object is a group.
Added functions `IsomorphismPermPreXMod', `IsomorphismPermPreCat1', etc.
to be called when the object is a 2d-object.
\item{$\bullet$}
Added `IsomorphismXModByNormalSubgroup' which applies when the boundary
of the xmod is injective.
\item{$\bullet$}
Added `PreXModIsomorphismByIsomorphisms'
( a similar `PreCat1IsomorphismByIsomorphisms' will be needed)
where the data consists of an xmod, an isomorphism of the source,
and an isomorphism of the range.
\item{$\bullet$}
Changed `RModule' to `AbelianModule'.
\endlist

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Versions 2.002 -- 2.005}

Version 2.002 was prepared for the 4.4 release at the end of January 2004,
and so required a {\bf PackageInfo.g} file.

Version 2.003 of February 28th 2004 just fixed some file protections.

Version 2.004 of April 14th 2004 gave a new email address for Murat Alp
and added the `Cat1Select' functionality of version 1 to the `Cat1' function
(the loading mechanism was revised in version 2.006).

Version 2.005 of April 16th 2004 moved the example files from
*tst/test_i.g* to *examples/example_i.g*,
and converted *testmanual.g* to a proper test file *tst/xmod_manual.tst*.

Changes made include the following.

\beginlist
\item{$\bullet$} 
Replaced `OperationHomomorphism' by `ActionHomomorphism' --
a general {\GAP} 4.4 change.
\item{$\bullet$} 
Finished replacing `RModule' by `AbelianModule'.
\item{$\bullet$} 
Renamed `UpMapping' as `Up2dMapping'.
%\item{$\bullet$} 
%\item{$\bullet$} 
\item{$\bullet$} 
Added `MappingGeneratorsImages' and `InverseGeneralMapping' for a `2dMapping'.
\item{$\bullet$} 
Converted the actor crossed module functions from the 3.4.4 version, including
`AutomorphismPermGroup' for a crossed module, 
`WhiteheadXMod', `NorrieXMod', `LueXMod', `ActorXMod', 
`Centre' of a crossed module, `InnerMorphism' and `InnerActorXMod'.
\item{$\bullet$} 
Added `SmallerDegreePermPreXMod' after discovering
`SmallerDegreePermutationRepresentation' in the library.
\endlist

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Version 2.006}

This version contains changes made between May 4th and September 6th 2004. 

\beginlist
\item{$\bullet$}
Changed morphism functions to return `fail' when invalid data is supplied, 
rather than calling `Error'.
\item{$\bullet$}
Fixed a bug in `XmodByGroupOfAutomorphisms'.
\endlist

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{What needs doing next?}

\beginlist
\item{$\bullet$} 
Speed up the calculation of Whitehead groups.
\item{$\bullet$} 
Complete the conversion from Version 1 of the calculation of sections
using `EndoClasses'.
\item{$\bullet$} 
Add basic functions for `3dObjects': 
the actor of a crossed module is a typical example of a crossed square.
\item{$\bullet$} 
Add interaction with {\sf IdRel}, {\sf XRes}, {\sf ntp}.
\item{$\bullet$} 
Need `InverseGeneralMapping' for morphisms.
\item{$\bullet$} 
Need more features for `FpXMods', `PcXMods', etc.
\item{$\bullet$} 
Implement actions of a crossed module.
\item{$\bullet$} 
Implement `FreeXMods'.
\item{$\bullet$} 
Implement an operation `Isomorphism2dObjects'.
\endlist

