  
  [1XC [33X[0;0YContracting Homotopies[133X[101X
  
  
  [1XC.1 [33X[0;0YThe [9XPartialContractingHomotopy[109X[101X[1X Data Type[133X[101X
  
  [33X[0;0YA  partial  contracting homotopy is a component object that knows the values
  of  a  contracting  homotopy  on  some  subspace of a resolution. It has two
  mandatory components:[133X
  
  [30X    [33X[0;6Y[10X.resolution[110X a [9XHapResolution[109X on which the contraction is defined.[133X
  
  [30X    [33X[0;6Y[10X.knownPartOfHomotopy[110X  a  list  of  [9XRecord[109Xs  with components [10X.space[110X and
        [10X.map[110X.[133X
  
  [33X[0;0YLet  [10Xh[110X  be a contracting homotopy. The lookup table [10X.knownPartOfHomotopy[110X has
  one  entry  for  each term of the resolution [10Xh.resolution[110X (that is, one more
  than [10XLength(h.resolution)[110X).[133X
  
  [33X[0;0YThe  [22Xi[122X  th element of [10X.knownPartOfHomotopy[110X contains a record with components
  [10X.space[110X  and  [10X.map[110X  where  [10X.space[110X  is  a [9XFreeZGWord[109X of the [22Xi-1[122X st term of the
  resolution.     The     component    [10X.map[110X    is    a    list    of    length
  [10XDimension(h.resolution)(i-1)[110X.  The  entries  of  this  list are pairs [10X[g,im][110X
  where  [10Xg[110X  represents  a  group  element  and  [10Xim[110X represents the image of the
  contraction. So the entry [10X[g,im][110X in the [10Xk[110Xth component of the list [10X.map[110X means
  that  the [10Xk[110Xth free generator of the corresponding module multiplied with the
  group element represented by [10Xg[110X is mapped to [10Xim[110X under the partial contracting
  homotopy.  Note  that  the data type of [10Xg[110X or [10Xim[110X are not fixed at this level.
  They  must  be  specified  by  the  sub  representations.  Also, [10Xim[110X need not
  represent  the  actual image under a contracting homotopy. It is possible to
  just  store  a  bit  of information that is then used to generate the actual
  image.[133X
  
  [33X[0;0YAs this is a very general data type, it has very few methods.[133X
  
  [1XC.1-1 ResolutionOfContractingHomotopy[101X
  
  [33X[1;0Y[29X[2XResolutionOfContractingHomotopy[102X( [3Xhomotopy[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10YA [9XHapResolution[109X[133X
  
  [33X[0;0YThis  returns  the  resolution  of  the  homotopy  [3Xhomotopy[103X  (the  component
  [3Xhomotopy!.resolution[103X).[133X
  
  [1XC.1-2 PartialContractingHomotopyLookup[101X
  
  [33X[1;0Y[29X[2XPartialContractingHomotopyLookup[102X( [3Xhomotopy[103X, [3Xterm[103X, [3Xgenerator[103X, [3Xgroupel[103X ) [32X method[133X
  [33X[1;0Y[29X[2XPartialContractingHomotopyLookupNC[102X( [3Xhomotopy[103X, [3Xterm[103X, [3Xgenerator[103X, [3Xgroupel[103X ) [32X method[133X
  [6XReturns:[106X  [33X[0;10YThe entry [10Xim[110X of the corresponding lookup table[133X
  
  [33X[0;0YLooks up the known part of the contracting homotopy [3Xhomotopy[103X and returns the
  corresponding image. More precisely, it returns the image of the [3Xgenerator[103Xth
  generator  times the group element represented by [3Xgroupel[103X in term [3Xterm[103X under
  the   partial  homotopy.  The  data  type  of  this  image  depends  on  the
  representation of [3Xhomotopy[103X.[133X
  
  [33X[0;0Y[3Xterm[103X has to be an integer and [3Xgenerator[103X a positive integer. [3Xgroupel[103X only has
  to be an [9XObject[109X.[133X
  
  [33X[0;0YThe NC version does not do any checks on the input. The other version checks
  if [3Xterm[103X and [3Xgenerator[103X are sensible. It does not check [3Xgroupel[103X.[133X
  
