  
  [1X9 Iterated monodromy groups[0X
  
  Iterated  monodromy  machines  are a special class of group FR machines (see
  Section  [14X3[0m)  with  attribute  [2XIMGRelator[0m  ([14X9.1-2[0m).  This attribute records a
  cyclic ordering of the generators of the machine whose product is trivial.
  
  The  interpretation  is  the  following: the machine encodes a [13XThurston map[0m,
  i.e.  a  post-critically  finite  topological  branched self-covering of the
  sphere S^2. Generators of the machine correspond to loops in the fundamental
  group  of  the  sphere (punctured at post-critical points), that circle once
  counter-clockwise  around  a  post-critical  point.  For more details on the
  connection between self-similar groups and Thurston maps, see [Nek05].
  
  IMG  FR elements are a bit different from group FR elements: while we said a
  group  FR  element  is  trivial  if  and  only if its action on sequences is
  trivial,  we  say  that  an  IMG  FR element g is trivial if there exists an
  integer  N  such  that  unfolding  N  times  the recursion for g yields only
  trivial states (as elements of the underlying free group).
  
  
  [1X9.1 Creators and operations for IMG FR machines[0X
  
  [1X9.1-1 IMGFRMachine[0m
  
  [2X> IMGFRMachine( [0X[3Xm[, w][0X[2X ) __________________________________________[0Xoperation
  [6XReturns:[0X  An IMG FR machine.
  
  This function creates a new IMG FR machine, starting from a group FR machine
  [3Xm[0m.  If a state [3Xw[0m is specified, it is used as IMG relator; otherwise, if some
  ordering  of  the  generators  is trivial, it is used as a relator; in other
  cases,  an additional generator is added to the machine in such a way that a
  product of generators is trivial.
  
  A  standard  FR  machine  can  be  recovered  from  an  IMG  FR  machine  by
  [2XAsGroupFRMachine[0m      ([14X3.3-4[0m),      [2XAsMonoidFRMachine[0m      ([14X3.3-4[0m),      and
  [2XAsSemigroupFRMachine[0m ([14X3.3-4[0m).
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X!!![0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.1-2 IMGRelator[0m
  
  [2X> IMGRelator( [0X[3Xm[0X[2X ) _________________________________________________[0Xattribute
  [6XReturns:[0X  The relator of the IMG FR machine.
  
  This attribute stores the product of generators that is trivial. In essence,
  it  records  an  ordering  of the generators whose product is trivial in the
  punctured sphere's fundamental group.
  
  [1X9.1-3 Mating[0m
  
  [2X> Mating( [0X[3Xm1, m2[, w1, w2][0X[2X ) ______________________________________[0Xoperation
  [6XReturns:[0X  An IMG FR machine.
  
  This  function  mates  two  IMG  FR machines. The arguments [3Xw1,w2[0m are IMG FR
  elements  that  represent  adding  elements;  they  may  be omitted if [3Xm1,m2[0m
  contain  pre-specified  adding machines (through the attribute [2XAddingElement[0m
  ([14X10.1-4[0m)). The elements [3Xw1[0m and [3Xw2[0m must satisfy the same recursion.
  
  The  mating  is  defined  as  follows:  one removes a disc around the adding
  machine  in  [3Xm1[0m and [3Xm2[0m; one applies complex conjugation to [3Xm2[0m; and one glues
  the hollowed spheres along their boundary circle.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X!!![0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.1-4 PolynomialFRMachine[0m
  
  [2X> PolynomialFRMachine( [0X[3Xd, per, pre[0X[2X ) ______________________________[0Xoperation
  [2X> PolynomialIMGMachine( [0X[3Xd, per, pre[0X[2X ) _____________________________[0Xoperation
  [2X> PolynomialMealyMachine( [0X[3Xd, per, pre[0X[2X ) ___________________________[0Xoperation
  [6XReturns:[0X  An IMG FR machine.
  
  This  function  creates  a  group,  IMG  or  Mealy  machine that describes a
  topological  polynomial.  The  polynomial  is  described symbolically in the
  language of [13Xexternal angles[0m. For more details, see [DH84] and [DH85] (in the
  quadratic  case),  [BFH92]  (in  the  preperiodic  case),  and [Poi] (in the
  general case).
  
  [3Xd[0m  is  the  degree  of  the  polynomial.  [3Xper[0m and [3Xpre[0m are lists of angles or
  preangles.  In  what follows, angles are rational numbers, considered modulo
  1.  Each entry in [3Xper[0m or [3Xpre[0m is either a rational (interpreted as an angle),
  or a list of angles [a_1,dots,a_i] such that da_1=dots=da_i.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> PolynomialIMGMachine(2,[0],[]); # the adding machine[0X
    [4X<FR machine with alphabet [ 1 .. 2 ] on Group( [ f1, f2 ] )/[ f2*f1 ]>[0X
    [4Xgap> Display(last);[0X
    [4X G  |     1        2[0X
    [4X----+--------+--------+[0X
    [4X f1 | <id>,2     f1,1[0X
    [4X f2 |   f2,2   <id>,1[0X
    [4X----+--------+--------+[0X
    [4XRelator: f2*f1[0X
    [4Xgap> Display(PolynomialIMGMachine(2,[1/3],[])); # the Basilica[0X
    [4X G  |      1         2[0X
    [4X----+---------+---------+[0X
    [4X f1 | f1^-1,2   f2*f1,1[0X
    [4X f2 |    f1,1    <id>,2[0X
    [4X f3 |    f3,2    <id>,1[0X
    [4X----+---------+---------+[0X
    [4XRelator: f3*f2*f1[0X
    [4Xgap> Display(PolynomialIMGMachine(2,[],[1/6])); # z^2+I[0X
    [4X G  |            1         2[0X
    [4X----+---------------+---------+[0X
    [4X f1 | f1^-1*f2^-1,2   f2*f1,1[0X
    [4X f2 |          f1,1      f3,2[0X
    [4X f3 |          f2,1    <id>,2[0X
    [4X f4 |          f4,2    <id>,1[0X
    [4X----+---------------+---------+[0X
    [4XRelator: f4*f3*f2*f1[0X
    [4Xgap> PolynomialIMGMachine(3,[[0,1/3],[5/9,8/9]],[]);[0X
    [4X<FR machine with alphabet [ 1 .. 3 ] on Group( [ f1, f2, f3 ] )/[ f3*f2*f1 ]>[0X
    [4Xgap> PolynomialIMGMachine(3,[[0,1/3]],[[5/9,8/9]]);[0X
    [4X<FR machine with alphabet [ 1 .. 3 ] on Group( [ f1, f2, f3, f4 ] )/[ f4*f3*f2*f1 ]>[0X
  [4X------------------------------------------------------------------[0X
  
  The following construct the examples in Poirier's paper:
  
  [4X------------------------------------------------------------------[0X
    [4XPoirierExamples := function(arg)[0X
    [4X    if arg=[1] then[0X
    [4X        return PolynomialIMGMachine(2,[1/7],[]);[0X
    [4X    elif arg=[2] then[0X
    [4X        return PolynomialIMGMachine(2,[],[1/2]);[0X
    [4X    elif arg=[3,1] then[0X
    [4X        return PolynomialIMGMachine(2,[],[5/12]);[0X
    [4X    elif arg=[3,2] then[0X
    [4X        return PolynomialIMGMachine(2,[],[7/12]);[0X
    [4X    elif arg=[4,1] then[0X
    [4X        return PolynomialIMGMachine(3,[[3/4,1/12],[1/4,7/12]],[]);[0X
    [4X    elif arg=[4,2] then[0X
    [4X        return PolynomialIMGMachine(3,[[7/8,5/24],[5/8,7/24]],[]);[0X
    [4X    elif arg=[4,3] then[0X
    [4X        return PolynomialIMGMachine(3,[[1/8,19/24],[3/8,17/24]],[]);[0X
    [4X    elif arg=[5] then[0X
    [4X        return PolynomialIMGMachine(3,[[3/4,1/12],[3/8,17/24]],[]);[0X
    [4X    elif arg=[6,1] then[0X
    [4X        return PolynomialIMGMachine(4,[],[[1/4,3/4],[1/16,13/16],[5/16,9/16]]);[0X
    [4X    elif arg=[6,2] then[0X
    [4X        return PolynomialIMGMachine(4,[],[[1/4,3/4],[3/16,15/16],[7/16,11/16]]);[0X
    [4X    elif arg=[7] then[0X
    [4X        return PolynomialIMGMachine(5,[[0,4/5],[1/5,2/5,3/5]],[[1/5,4/5]]);[0X
    [4X    elif arg=[9,1] then[0X
    [4X        return PolynomialIMGMachine(3,[[0,1/3],[5/9,8/9]],[]);[0X
    [4X    elif arg=[9,2] then[0X
    [4X        return PolynomialIMGMachine(3,[[0,1/3]],[[5/9,8/9]]);[0X
    [4X    fi;[0X
    [4Xend;[0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.1-5 DBRationalIMGGroup[0m
  
  [2X> DBRationalIMGGroup( [0X[3Xsequence, or, rational, map[0X[2X ) ________________[0Xfunction
  [6XReturns:[0X  An IMG group from Dau's database.
  
  This function returns the iterated monodromy group from a database of groups
  associated  to  quadratic  rational maps. This database has been compiled by
  Dau Truong Tan [Tan02].
  
  When called with no arguments, this command returns the database contents in
  raw form.
  
  The  argments  can  be  a  sequence;  the  first  integer is the size of the
  postcritical  set,  the  second  argument  is  an index for the postcritical
  graph,  and  sometimes a third argument distinguishes between maps with same
  post-critical graph.
  
  If the argument is a rational map, the command returns the IMG group of that
  map,  assuming  its  [2XCanonicalQuadraticRational[0m  ([14X9.1-8[0m)  form exists in the
  database.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> DBRationalIMGGroup(z^2-1);[0X
    [4XIMG((z-1)^2)[0X
    [4Xgap> DBRationalIMGGroup(z^2+1); # not post-critically finite[0X
    [4Xfail[0X
    [4Xgap> DBRationalIMGGroup(4,1,1);[0X
    [4XIMG((z/h+1)^2|2h^3+2h^2+2h+1=0,h~-0.64)[0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.1-6 ValueRational[0m
  
  [2X> ValueRational( [0X[3Xf, x[0X[2X ) ____________________________________________[0Xfunction
  [6XReturns:[0X  The value of [3Xf[0m at [3Xx[0m.
  
  This  function  is almost identical to [10XValue(f,x)[0m. It accepts [9Xinfinity[0m as an
  argument, and may return [9Xinfinity[0m as a value.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> z := Indeterminate(Rationals,"z");;[0X
    [4Xgap> ValueRational(1/z,infinity);[0X
    [4X0[0X
    [4Xgap> ValueRational(1/z,0);[0X
    [4Xinfinity[0X
    [4Xgap> ValueRational(1/z,1/2);[0X
    [4X2[0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.1-7 CriticalValuesQuadraticRational[0m
  
  [2X> CriticalValuesQuadraticRational( [0X[3Xf[0X[2X ) _____________________________[0Xfunction
  [6XReturns:[0X  The critical values of [3Xf[0m.
  
  This  function  returns,  as  a  list,  the  values of [3Xf[0m at places where the
  derivative of [3Xf[0m vanishes.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> z := Indeterminate(Rationals,"z");;[0X
    [4Xgap> CriticalValuesQuadraticRational(z^2);[0X
    [4X[ 0, infinity ][0X
    [4Xgap> CriticalValuesQuadraticRational(z^2+1);[0X
    [4X[ 1, infinity ][0X
    [4Xgap> CriticalValuesQuadraticRational((z^2+1)/(z^2-1));[0X
    [4X[ -1, 1 ][0X
    [4Xgap> CriticalValuesQuadraticRational((z^2+1)/(z^2-z-1));[0X
    [4X[ 2/5*E(5)-2/5*E(5)^2-2/5*E(5)^3+2/5*E(5)^4, -2/5*E(5)+2/5*E(5)^2+2/5*E(5)^3-2/5*E(5)^4 ][0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.1-8 CanonicalQuadraticRational[0m
  
  [2X> CanonicalQuadraticRational( [0X[3Xf[0X[2X ) __________________________________[0Xfunction
  [6XReturns:[0X  The canonical forms of the quadratic rational map [3Xf[0m.
  
  This  function puts the quadratic rational map [3Xf[0m in canonical form, that is,
  in form ((az+b)/(cz+d))^2, such that its critical values are [9X0[0m and [9Xinfinity[0m.
  Furthermore, it attempts to make [10Xf(infinity)=1[0m, and if this is impossible to
  make [10Xf(0)=1[0m.
  
  The command returns the set of all maps with these properties.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> z := Indeterminate(Rationals,"z");;[0X
    [4Xgap> CanonicalQuadraticRational(z^2);[0X
    [4X[ z^2 ][0X
    [4Xgap> CanonicalQuadraticRational(z^2+1);[0X
    [4X[ (z^2)/(z^2+2*z+1), z^2+2*z+1 ][0X
    [4Xgap> CanonicalQuadraticRational((z^2+1)/(z^2-1));[0X
    [4X[ (1/2*z^2+z+1/2)/(1/2*z^2-z+1/2), (-1/2*z^2+z-1/2)/(-1/2*z^2-z-1/2) ][0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.1-9 PostCriticalMachine[0m
  
  [2X> PostCriticalMachine( [0X[3Xf[0X[2X ) _________________________________________[0Xfunction
  [6XReturns:[0X  The Mealy machine of [3Xf[0m's post-critical orbit.
  
  This  function  constructs  a  Mealy  machine  [10XP[0m  on the alphabet [10X[1][0m, which
  describes  the  post-critical set of [3Xf[0m. It is in fact an oriented graph with
  constant out-degree 1. It is most conveniently passed to [2XDraw[0m ([14X5.2-1[0m).
  
  The  attribute  [10XCorrespondence(P)[0m  is the list of values associated with the
  stateset of [10XP[0m.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> z := Indeterminate(Rationals,"z");;[0X
    [4Xgap> m := PostCriticalMachine(z^2);[0X
    [4X<Mealy machine on alphabet [ 1 ] with 2 states>[0X
    [4Xgap> Display(m);[0X
    [4X   |  1[0X
    [4X---+-----+[0X
    [4X a | a,1[0X
    [4X b | b,1[0X
    [4X---+-----+[0X
    [4Xgap> Correspondence(m);[0X
    [4X[ 0, infinity ][0X
    [4Xgap> m := PostCriticalMachine(z^2-1);; Display(m); Correspondence(m);[0X
    [4X   |  1[0X
    [4X---+-----+[0X
    [4X a | c,1[0X
    [4X b | b,1[0X
    [4X c | a,1[0X
    [4X---+-----+[0X
    [4X[ -1, infinity, 0 ][0X
  [4X------------------------------------------------------------------[0X
  
  
  [1X9.2 Spiders[0X
  
  [1X9.2-1 RationalFunction[0m
  
  [2X> RationalFunction( [0X[3Xm[0X[2X ) ___________________________________________[0Xoperation
  [6XReturns:[0X  A rational function.
  
  !!!
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X!!![0X
  [4X------------------------------------------------------------------[0X
  
  [1X9.2-2 IMGFRMachine[0m
  
  [2X> IMGFRMachine( [0X[3Xm[0X[2X ) _______________________________________________[0Xoperation
  [6XReturns:[0X  An IMG FR machine.
  
  !!!
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X!!![0X
  [4X------------------------------------------------------------------[0X
  
