<!-- ------------------------------------------------------------------- -->
<!--                                                                     -->
<!--  history.xml              KAN documentation          Chris Wensley  -->
<!--                                                    & Anne Heyworth  -->
<!--                                                                     -->
<!--  $Id: history.xml,v 0.94 2006/06/02 gap Exp $                       -->
<!--                                                                     -->
<!-- ------------------------------------------------------------------- -->

<?xml version="1.0" encoding="ISO-8859-15"?>
  <!-- <M>Id: history.xml,v 0.94  Exp <M> -->

<Chapter Label="chap-history">
<Heading>Development History</Heading>

<Section><Heading>Versions of the package</Heading>

The first version of the package, written for &GAP;~3, 
formed part of Anne Heyworth's thesis <Cite Key="anne-thesis" /> in 1999,
but was not made generally available.
<P/>
Version, &kan;~0.91, was prepared to run under &GAP;~4.4.6, in July 2005.
<P/>
This version, &kan;~0.94, differs in three ways:
<List>
<Item>
this manual is prepared using the <Package>GAPDoc</Package> package;
</Item>
<Item>
The test file <F>kan/tst/kan\_manual.tst</F> sets the <C>AssertionLevel</C> 
to <C>0</C> to avoid recursion in the <Package>Automata</Package> package.
</Item>
<Item>
implementations of <C>RightCosetsNC</C> and <C>DoubleCosetsNC</C> have been 
changed to <C>RightCosetsAutomaton</C> and <C>DoubleCosetsAutomaton</C>. 
</Item>
</List>
</Section>


<Section><Heading>What needs doing next?</Heading>

There are too many items to list here, but some of the most important
are as follows.

<List>
<Item>
Implement iterators and enumerators for double cosets.
</Item>
<Item> 
At present the methods for <C>DoubleCosetsNC</C> and <C>RightCosetsNC</C> 
in this package return automata, rather than lists of cosets 
or coset enumerators.  This needs to be fixed.
</Item>
<Item>
Provide methods for operations such as <C>DoubleCosetRepsAndSizes</C>.
</Item>
<Item>
Convert the rest of the &GAP;~3 &kan; package to &GAP;~4.
</Item>
</List>

<ManSection>
   <Oper Name="DoubleCosetsAutomaton"
         Arg="G, U, V" />
   <Oper Name="RightCosetsAutomaton"
         Arg="G, V" />
<Description>
Alternative methods for <C>DoubleCosetsNC(G,U,V)</C> 
and <C>RightCosetsNC(G,V)</C> <E>should be</E> provided in the cases 
where the group <C>G</C> has a rewriting system or is known to be infinite.
At present the functions <C>RightCosetsAutomaton</C> and 
<C>DoubleCosetsAutomaton</C> return minimized automata, 
and <C>Iterators</C> for these are not yet available.
</Description>
</ManSection>
<Example>
<![CDATA[
gap> F := FreeGroup(2);;
gap> rels := [ F.2^2, (F.1*F.2)^2 ];;
gap> G4 := F/rels;;
gap> genG4 := GeneratorsOfGroup( G4 );;
gap> a := genG4[1];  b := genG4[2];;
gap> U := Subgroup( G4, [a^2] );;
gap> V := Subgroup( G4, [b] );;
gap> dc4 := DoubleCosetsAutomaton( G4, U, V );;
gap> Print( dc4 );
Automaton("det",5,"HKaAbB",[ [ 2, 2, 2, 5, 2 ], [ 2, 2, 1, 2, 1 ], [ 2, 2, 2, \
2, 3 ], [ 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2 ] ],[ 4 ],[ 1 ])\
;;
gap> rc4 := RightCosetsAutomaton( G4, V );;
gap> Print( rc4 );
Automaton("det",6,"HKaAbB",[ [ 2, 2, 2, 6, 2, 2 ], [ 2, 2, 1, 2, 1, 1 ], [ 2, \
2, 3, 2, 2, 3 ], [ 2, 2, 2, 2, 5, 5 ], [ 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, \
2 ] ],[ 4 ],[ 1 ]);;
]]>
</Example>
</Section>
</Chapter>
