  
  [1X11 [33X[0;0YFunctors[133X[101X
  
  [33X[0;0YFunctors  and  their  natural  transformations  form the heart of the [5Xhomalg[105X
  package.  Usually,  a  functor  is realized in computer algebra systems as a
  procedure  which  can  be applied to a certain type of objects. In [BR08] it
  was  explained how to implement a functor of Abelian categories -- by itself
  --  as  an object which can be further manipulated (composed, derived, ...).
  So in addition to the constructor [2XCreateHomalgFunctor[102X ([14X11.2-1[114X) which is used
  to  create  functors  from  scratch,  [5Xhomalg[105X  provides  further  easy-to-use
  constructors to create new functors out of existing ones:[133X
  
  [30X    [33X[0;6Y[2XInsertObjectInMultiFunctor[102X ([14X11.2-2[114X)[133X
  
  [30X    [33X[0;6Y[2XRightSatelliteOfCofunctor[102X ([14X11.2-3[114X)[133X
  
  [30X    [33X[0;6Y[2XLeftSatelliteOfFunctor[102X ([14X11.2-4[114X)[133X
  
  [30X    [33X[0;6Y[2XRightDerivedCofunctor[102X ([14X11.2-5[114X)[133X
  
  [30X    [33X[0;6Y[2XLeftDerivedFunctor[102X ([14X11.2-6[114X)[133X
  
  [30X    [33X[0;6Y[2XComposeFunctors[102X ([14X11.2-7[114X)[133X
  
  [33X[0;0YIn [5Xhomalg[105X each functor is implemented as a [5XGAP4[105X object.[133X
  
  [33X[0;0YSo-called  installers  (-->  [2XInstallFunctor[102X ([14X11.7-1[114X) and [2XInstallDeltaFunctor[102X
  ([14X11.7-2[114X)) take such a functor object and create operations in order to apply
  the  functor  on  objects,  morphisms,  complexes  (of  objects  or again of
  complexes),  and chain morphisms. The installer [2XInstallDeltaFunctor[102X ([14X11.7-2[114X)
  creates  additional operations for [22Xδ[122X-functors in order to compute connecting
  homomorphisms,  exact  triangles,  and  associated  long  exact sequences by
  starting with a short exact sequence.[133X
  
  [33X[0;0YIn  [5Xhomalg[105X  special emphasis is laid on the action of functors on [13Xmorphisms[113X,
  as  an  essential  part  of the very definition of a functor. This is for no
  obvious  reason often neglected in computer algebra systems. Starting from a
  functor  where  the  action  on  morphisms  is  also  defined, all the above
  constructors  again  create  functors  with  actions  both on objects and on
  morphisms (and hence on chain complexes and chain morphisms).[133X
  
  [33X[0;0YIt  turned  out  that  in  a  variety  of situations a caching mechanism for
  functors  is  not  only  extremely  useful (e.g. to avoid repeated expensive
  computations)  but  also  an  absolute  necessity for the coherence of data.
  Functors in [5Xhomalg[105X are therefore endowed with a caching mechanism.[133X
  
  [33X[0;0YIf  [22XR[122X  is  a [5Xhomalg[105X ring in which the component [22XR[122X!.[10XByASmallerPresentation[110X is
  set to true[133X
  [33X[0;0Y[10XR!.ByASmallerPresentation := true[110X;[133X
  [33X[0;0Yany   functor   which   returns   an   object   over   [22XR[122X  will  first  apply
  [10XByASmallerPresentation[110X to its result before returning it.[133X
  
  [33X[0;0YOne  of  the  highlights  in  [5Xhomalg[105X  is  the  computation of Grothendieck's
  spectral  sequences  connecting  the  composition  of the derivations of two
  functors with the derived functor of their composite.[133X
  
  
  [1X11.1 [33X[0;0YFunctors: Category and Representations[133X[101X
  
  [1X11.1-1 IsHomalgFunctor[101X
  
  [33X[1;0Y[29X[2XIsHomalgFunctor[102X( [3XF[103X ) [32X Category[133X
  [6XReturns:[106X  [33X[0;10Y[10Xtrue[110X or [10Xfalse[110X[133X
  
  [33X[0;0YThe [5XGAP[105X category of [5Xhomalg[105X (multi-)functors.[133X
  
  [1X11.1-2 IsHomalgFunctorRep[101X
  
  [33X[1;0Y[29X[2XIsHomalgFunctorRep[102X( [3XE[103X ) [32X Representation[133X
  [6XReturns:[106X  [33X[0;10Y[10Xtrue[110X or [10Xfalse[110X[133X
  
  [33X[0;0YThe [5XGAP[105X representation of [5Xhomalg[105X (multi-)functors.[133X
  
  [33X[0;0Y(It is a representation of the [5XGAP[105X category [2XIsHomalgFunctor[102X ([14X11.1-1[114X).)[133X
  
  
  [1X11.2 [33X[0;0YFunctors: Constructors[133X[101X
  
  [1X11.2-1 CreateHomalgFunctor[101X
  
  [33X[1;0Y[29X[2XCreateHomalgFunctor[102X( [3Xlist1[103X, [3Xlist2[103X, [3X...[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya [5Xhomalg[105X functor[133X
  
  [33X[0;0YThis  constructor  is used to create functors for [5Xhomalg[105X from scratch. [3XlistN[103X
  is  of  the  form [3XlistN = [ stringN, valueN ][103X. [3XstringN[103X will be the name of a
  component  of  the  created  functor  and  [3XvalueN[103X  will  be  its value. This
  constructor  is  listed here for the sake of completeness. Its documentation
  is  rather  better  placed  in  a  [5Xhomalg[105X  programmers  guide. The remaining
  constructors  create new functors out of existing ones and are probably more
  interesting for end users.[133X
  
  [33X[0;0YThe constructor does [13Xnot[113X invoke [2XInstallFunctor[102X ([14X11.7-1[114X). This has to be done
  manually![133X
  
  [1X11.2-2 InsertObjectInMultiFunctor[101X
  
  [33X[1;0Y[29X[2XInsertObjectInMultiFunctor[102X( [3XF[103X, [3Xp[103X, [3Xobj[103X, [3XH[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya [5Xhomalg[105X functor[133X
  
  [33X[0;0YGiven a [5Xhomalg[105X multi-functor [3XF[103X with multiplicity [22Xm[122X and a string [3XH[103X return the
  functor  [10XFunctor_[110X[3XH[103X  [22X:=[122X  [3XF[103X[22X(...,[122X[3Xobj[103X[22X,...)[122X,  where  [3Xobj[103X  is inserted at the [3Xp[103X-th
  position.  Of course [3Xobj[103X must be an object (e.g. ring, module, ...) that can
  be  inserted  at  this particular position. The string [3XH[103X becomes the name of
  the  returned  functor  (--> [2XNameOfFunctor[102X ([14X11.3-1[114X)). The variable [10XFunctor_[110X[3XH[103X
  will automatically be assigned if free, otherwise a warning is issued.[133X
  
  [33X[0;0YThe constructor automatically invokes [2XInstallFunctor[102X ([14X11.7-1[114X) which installs
  several necessary operations under the name [3XH[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XZZ := HomalgRingOfIntegers( );[127X[104X
    [4X[28XZ[128X[104X
    [4X[25Xgap>[125X [27XZZ * 1;[127X[104X
    [4X[28X<The free right module of rank 1 on a free generator>[128X[104X
    [4X[25Xgap>[125X [27XInsertObjectInMultiFunctor( Functor_Hom_for_fp_modules, 2, ZZ * 1, "Hom_ZZ" );[127X[104X
    [4X[28X<The functor Hom_ZZ for f.p. modules and their maps over computable rings>[128X[104X
    [4X[25Xgap>[125X [27XFunctor_Hom_ZZ_for_fp_modules; ## got automatically defined[127X[104X
    [4X[28X<The functor Hom_ZZ for f.p. modules and their maps over computable rings>[128X[104X
    [4X[25Xgap>[125X [27XHom_ZZ; ## got automatically defined[127X[104X
    [4X[28X<Operation "Hom_ZZ">[128X[104X
  [4X[32X[104X
  
  [1X11.2-3 RightSatelliteOfCofunctor[101X
  
  [33X[1;0Y[29X[2XRightSatelliteOfCofunctor[102X( [3XF[103X[, [3Xp[103X][, [3XH[103X] ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya [5Xhomalg[105X functor[133X
  
  [33X[0;0YGiven  a  [5Xhomalg[105X (multi-)functor [3XF[103X and a string [3XH[103X return the right satellite
  of  [3XF[103X  with  respect to its [3Xp[103X-th argument. [3XF[103X is assumed contravariant in its
  [3Xp[103X-th  argument.  The  string [3XH[103X becomes the name of the returned functor (-->
  [2XNameOfFunctor[102X  ([14X11.3-1[114X)).  The  variable  [10XFunctor_[110X[3XH[103X  will  automatically  be
  assigned if free, otherwise a warning is issued.[133X
  
  [33X[0;0YIf  [3Xp[103X is not specified it is assumed [22X1[122X. If the string [3XH[103X is not specified the
  letter  'S'  is  added  to  the  left  of  the  name of [3XF[103X (--> [2XNameOfFunctor[102X
  ([14X11.3-1[114X)).[133X
  
  [33X[0;0YThe constructor automatically invokes [2XInstallFunctor[102X ([14X11.7-1[114X) which installs
  several necessary operations under the name [3XH[103X.[133X
  
  [1X11.2-4 LeftSatelliteOfFunctor[101X
  
  [33X[1;0Y[29X[2XLeftSatelliteOfFunctor[102X( [3XF[103X[, [3Xp[103X][, [3XH[103X] ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya [5Xhomalg[105X functor[133X
  
  [33X[0;0YGiven a [5Xhomalg[105X (multi-)functor [3XF[103X and a string [3XH[103X return the left satellite of
  [3XF[103X  with  respect  to  its  [3Xp[103X-th argument. [3XF[103X is assumed covariant in its [3Xp[103X-th
  argument.  The  string  [3XH[103X  becomes  the  name  of  the returned functor (-->
  [2XNameOfFunctor[102X  ([14X11.3-1[114X)).  The  variable  [10XFunctor_[110X[3XH[103X  will  automatically  be
  assigned if free, otherwise a warning is issued.[133X
  
  [33X[0;0YIf  [3Xp[103X is not specified it is assumed [22X1[122X. If the string [3XH[103X is not specified the
  string  [21XS_[121X  is  added  to  the  left  of  the  name  of [3XF[103X (--> [2XNameOfFunctor[102X
  ([14X11.3-1[114X)).[133X
  
  [33X[0;0YThe constructor automatically invokes [2XInstallFunctor[102X ([14X11.7-1[114X) which installs
  several necessary operations under the name [3XH[103X.[133X
  
  [1X11.2-5 RightDerivedCofunctor[101X
  
  [33X[1;0Y[29X[2XRightDerivedCofunctor[102X( [3XF[103X[, [3Xp[103X][, [3XH[103X] ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya [5Xhomalg[105X functor[133X
  
  [33X[0;0YGiven  a  [5Xhomalg[105X  (multi-)functor  [3XF[103X and a string [3XH[103X return the right derived
  functor  of  [3XF[103X with respect to its [3Xp[103X-th argument. [3XF[103X is assumed contravariant
  in  its [3Xp[103X-th argument. The string [3XH[103X becomes the name of the returned functor
  (-->  [2XNameOfFunctor[102X  ([14X11.3-1[114X)). The variable [10XFunctor_[110X[3XH[103X will automatically be
  assigned if free, otherwise a warning is issued.[133X
  
  [33X[0;0YIf  [3Xp[103X is not specified it is assumed [22X1[122X. If the string [3XH[103X is not specified the
  letter  'R'  is  added  to  the  left  of  the  name of [3XF[103X (--> [2XNameOfFunctor[102X
  ([14X11.3-1[114X)).[133X
  
  [33X[0;0YThe   constructor   automatically   invokes   [2XInstallFunctor[102X   ([14X11.7-1[114X)  and
  [2XInstallDeltaFunctor[102X  ([14X11.7-2[114X)  which  install  several  necessary operations
  under the name [3XH[103X.[133X
  
  [1X11.2-6 LeftDerivedFunctor[101X
  
  [33X[1;0Y[29X[2XLeftDerivedFunctor[102X( [3XF[103X[, [3Xp[103X][, [3XH[103X] ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya [5Xhomalg[105X functor[133X
  
  [33X[0;0YGiven  a  [5Xhomalg[105X  (multi-)functor  [3XF[103X  and a string [3XH[103X return the left derived
  functor  of  [3XF[103X  with respect to its [3Xp[103X-th argument. [3XF[103X is assumed covariant in
  its  [3Xp[103X-th  argument.  The  string [3XH[103X becomes the name of the returned functor
  (-->  [2XNameOfFunctor[102X  ([14X11.3-1[114X)). The variable [10XFunctor_[110X[3XH[103X will automatically be
  assigned if free, otherwise a warning is issued.[133X
  
  [33X[0;0YIf  [3Xp[103X is not specified it is assumed [22X1[122X. If the string [3XH[103X is not specified the
  letter  [21XS_[121X  is  added  to  the  left  of  the  name  of [3XF[103X (--> [2XNameOfFunctor[102X
  ([14X11.3-1[114X)).[133X
  
  [33X[0;0YThe   constructor   automatically   invokes   [2XInstallFunctor[102X   ([14X11.7-1[114X)  and
  [2XInstallDeltaFunctor[102X  ([14X11.7-2[114X)  which  install  several  necessary operations
  under the name [3XH[103X.[133X
  
  [1X11.2-7 ComposeFunctors[101X
  
  [33X[1;0Y[29X[2XComposeFunctors[102X( [3XF[103X[, [3Xp[103X], [3XG[103X[, [3XH[103X] ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya [5Xhomalg[105X functor[133X
  
  [33X[0;0YGiven two [5Xhomalg[105X (multi-)functors [3XF[103X and [3XG[103X and a string [3XH[103X return the composed
  functor  [10XFunctor_[110X[3XH[103X  [22X:=[122X  [3XF[103X[22X(...,[122X[3XG[103X[22X(...),...)[122X,  where  [3XG[103X is inserted at the [3Xp[103X-th
  position.  Of  course  [3XG[103X  must  be  a  functor  that can be inserted at this
  particular  position.  The string [3XH[103X becomes the name of the returned functor
  (-->  [2XNameOfFunctor[102X  ([14X11.3-1[114X)). The variable [10XFunctor_[110X[3XH[103X will automatically be
  assigned if free, otherwise a warning is issued.[133X
  
  [33X[0;0YIf  [3Xp[103X is not specified it is assumed [22X1[122X. If the string [3XH[103X is not specified the
  names  of  [3XF[103X  and  [3XG[103X  are  concatenated  in  this  order  (--> [2XNameOfFunctor[102X
  ([14X11.3-1[114X)).[133X
  
  [33X[0;0Y[3XF[103X * [3XG[103X is a shortcut for [10XComposeFunctors[110X([3XF[103X,1,[3XG[103X).[133X
  
  [33X[0;0YThe constructor automatically invokes [2XInstallFunctor[102X ([14X11.7-1[114X) which installs
  several necessary operations under the name [3XH[103X.[133X
  
  [33X[0;0YCheck this:[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XFunctor_Hom_for_fp_modules * Functor_TensorProduct_for_fp_modules;[127X[104X
    [4X[28X<The functor HomTensorProduct for f.p. modules and their maps over computable \[128X[104X
    [4X[28Xrings>[128X[104X
    [4X[25Xgap>[125X [27XFunctor_HomTensorProduct_for_fp_modules; ## got automatically defined[127X[104X
    [4X[28X<The functor HomTensorProduct for f.p. modules and their maps over computable \[128X[104X
    [4X[28Xrings>[128X[104X
    [4X[25Xgap>[125X [27XHomTensorProduct; ## got automatically defined[127X[104X
    [4X[28X<Operation "HomTensorProduct">[128X[104X
  [4X[32X[104X
  
  
  [1X11.3 [33X[0;0YFunctors: Attributes[133X[101X
  
  [1X11.3-1 NameOfFunctor[101X
  
  [33X[1;0Y[29X[2XNameOfFunctor[102X( [3XF[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya string[133X
  
  [33X[0;0YThe name of the [5Xhomalg[105X functor [3XF[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XNameOfFunctor( Functor_Ext_for_fp_modules );[127X[104X
    [4X[28X"Ext"[128X[104X
    [4X[25Xgap>[125X [27XDisplay( Functor_Ext_for_fp_modules );[127X[104X
    [4X[28XExt[128X[104X
  [4X[32X[104X
  
  [1X11.3-2 OperationOfFunctor[101X
  
  [33X[1;0Y[29X[2XOperationOfFunctor[102X( [3XF[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Yan operation[133X
  
  [33X[0;0YThe operation of the functor [3XF[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XFunctor_Ext_for_fp_modules;[127X[104X
    [4X[28X<The functor Ext for f.p. modules and their maps over computable rings>[128X[104X
    [4X[25Xgap>[125X [27XOperationOfFunctor( Functor_Ext_for_fp_modules );[127X[104X
    [4X[28X<Operation "Ext">[128X[104X
  [4X[32X[104X
  
  [1X11.3-3 Genesis[101X
  
  [33X[1;0Y[29X[2XGenesis[102X( [3XF[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya list[133X
  
  [33X[0;0YThe  first entry of the returned list is the name of the constructor used to
  create  the  functor  [3XF[103X.  The reset of the list contains arguments that were
  passed to this constructor for creating [3XF[103X.[133X
  
  [33X[0;0YThese  are  examples  of  different  functors  created  using  the different
  constructors:[133X
  
  [30X    [33X[0;6Y[10XCreateHomalgFunctor[110X:[133X
  
  [4X      [32X  Example  [32X[104X
          [4X[25Xgap>[125X [27XFunctor_Hom_for_fp_modules;[127X[104X
          [4X[28X<The functor Hom for f.p. modules and their maps over computable rings>[128X[104X
        [4X[32X[104X
  
  [30X    [33X[0;6Y[10XInsertObjectInMultiFunctor[110X:[133X
  
  [4X      [32X  Example  [32X[104X
          [4X[25Xgap>[125X [27XZZ := HomalgRingOfIntegers( );[127X[104X
          [4X[28XZ[128X[104X
          [4X[25Xgap>[125X [27XLeftDualizingFunctor( ZZ, "ZZ_Hom" );[127X[104X
          [4X[28X<The functor ZZ_Hom for f.p. modules and their maps over computable rings>[128X[104X
          [4X[25Xgap>[125X [27XFunctor_ZZ_Hom_for_fp_modules; ## got automatically defined[127X[104X
          [4X[28X<The functor ZZ_Hom for f.p. modules and their maps over computable rings>[128X[104X
          [4X[25Xgap>[125X [27XZZ_Hom; ## got automatically defined[127X[104X
          [4X[28X<Operation "ZZ_Hom">[128X[104X
          [4X[25Xgap>[125X [27XGenesis( Functor_ZZ_Hom_for_fp_modules );[127X[104X
          [4X[28X[ "InsertObjectInMultiFunctor",[128X[104X
          [4X[28X  <The functor Hom for f.p. modules and their maps over computable rings>, 2,[128X[104X
          [4X[28X  <The free left module of rank 1 on a free generator> ][128X[104X
          [4X[25Xgap>[125X [27X1 * ZZ;[127X[104X
          [4X[28X<The free left module of rank 1 on a free generator>[128X[104X
        [4X[32X[104X
  
  [30X    [33X[0;6Y[10XLeftDerivedFunctor[110X:[133X
  
  [4X      [32X  Example  [32X[104X
          [4X[25Xgap>[125X [27XFunctor_TensorProduct_for_fp_modules;[127X[104X
          [4X[28X<The functor TensorProduct for f.p. modules and their maps over computable rin\[128X[104X
          [4X[28Xgs>[128X[104X
          [4X[25Xgap>[125X [27XGenesis( Functor_LTensorProduct_for_fp_modules );[127X[104X
          [4X[28X[ "LeftDerivedFunctor",[128X[104X
          [4X[28X  <The functor TensorProduct for f.p. modules and their maps over computable r\[128X[104X
          [4X[28Xings>, 1 ][128X[104X
        [4X[32X[104X
  
  [30X    [33X[0;6Y[10XRightDerivedCofunctor[110X:[133X
  
  [4X      [32X  Example  [32X[104X
          [4X[25Xgap>[125X [27XGenesis( Functor_RHom_for_fp_modules );[127X[104X
          [4X[28X[ "RightDerivedCofunctor",[128X[104X
          [4X[28X  <The functor Hom for f.p. modules and their maps over computable rings>, 1 ][128X[104X
        [4X[32X[104X
  
  [30X    [33X[0;6Y[10XLeftSatelliteOfFunctor[110X:[133X
  
  [4X      [32X  Example  [32X[104X
          [4X[25Xgap>[125X [27XGenesis( Functor_Tor_for_fp_modules );[127X[104X
          [4X[28X[ "LeftSatelliteOfFunctor",[128X[104X
          [4X[28X  <The functor TensorProduct for f.p. modules and their maps over computable r\[128X[104X
          [4X[28Xings>, 1 ][128X[104X
        [4X[32X[104X
  
  [30X    [33X[0;6Y[10XRightSatelliteOfCofunctor[110X:[133X
  
  [4X      [32X  Example  [32X[104X
          [4X[25Xgap>[125X [27XGenesis( Functor_Ext_for_fp_modules );[127X[104X
          [4X[28X[ "RightSatelliteOfCofunctor",[128X[104X
          [4X[28X  <The functor Hom for f.p. modules and their maps over computable rings>, 1 ][128X[104X
        [4X[32X[104X
  
  [30X    [33X[0;6Y[10XComposeFunctors[110X:[133X
  
  [4X      [32X  Example  [32X[104X
          [4X[25Xgap>[125X [27XGenesis( Functor_HomHom_for_fp_modules );[127X[104X
          [4X[28X[ "ComposeFunctors",[128X[104X
          [4X[28X  [ <The functor Hom for f.p. modules and their maps over computable rings>,[128X[104X
          [4X[28X      <The functor Hom for f.p. modules and their maps over computable rings>[128X[104X
          [4X[28X     ], 1 ][128X[104X
          [4X[25Xgap>[125X [27XValueGlobal( "ComposeFunctors" );[127X[104X
          [4X[28X<Operation "ComposeFunctors">[128X[104X
        [4X[32X[104X
  
  [1X11.3-4 ProcedureToReadjustGenerators[101X
  
  [33X[1;0Y[29X[2XProcedureToReadjustGenerators[102X( [3XFunctor[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya function[133X
  
  
  [1X11.4 [33X[0;0YBasic Functors[133X[101X
  
  [1X11.4-1 functor_Kernel[101X
  
  [33X[1;0Y[29X[2Xfunctor_Kernel[102X [32X global variable[133X
  
  [33X[0;0YThe functor that associates to a map its kernel.[133X
  
  [4X[32X  Code  [32X[104X
    [4XInstallValue( functor_Kernel,[104X
    [4X        CreateHomalgFunctor([104X
    [4X                [ "name", "Kernel" ],[104X
    [4X                [ "category", HOMALG.category ],[104X
    [4X                [ "operation", "Kernel" ],[104X
    [4X                [ "natural_transformation", "KernelEmb" ],[104X
    [4X                [ "special", true ],[104X
    [4X                [ "number_of_arguments", 1 ],[104X
    [4X                [ "1", [ [ "covariant" ],[104X
    [4X                        [ IsStaticMorphismOfFinitelyGeneratedObjectsRep,[104X
    [4X                          [ IsHomalgChainMorphism, IsKernelSquare ] ] ] ],[104X
    [4X                [ "OnObjects", _Functor_Kernel_OnObjects ][104X
    [4X                )[104X
    [4X        );[104X
  [4X[32X[104X
  
  [1X11.4-2 functor_DefectOfExactness[101X
  
  [33X[1;0Y[29X[2Xfunctor_DefectOfExactness[102X [32X global variable[133X
  
  [33X[0;0YThe  functor  that  associates  to  a  pair  of  composable maps with a zero
  compositum  the defect of exactness, i.e. the kernel of the outer map modulo
  the image of the inner map.[133X
  
  [4X[32X  Code  [32X[104X
    [4XInstallValue( functor_DefectOfExactness,[104X
    [4X        CreateHomalgFunctor([104X
    [4X                [ "name", "DefectOfExactness" ],[104X
    [4X                [ "category", HOMALG.category ],[104X
    [4X                [ "operation", "DefectOfExactness" ],[104X
    [4X                [ "special", true ],[104X
    [4X                [ "number_of_arguments", 2 ],[104X
    [4X                [ "1", [ [ "covariant" ],[104X
    [4X                        [ IsStaticMorphismOfFinitelyGeneratedObjectsRep,[104X
    [4X                          [ IsHomalgChainMorphism, IsLambekPairOfSquares ] ] ] ],[104X
    [4X                [ "2", [ [ "covariant" ],[104X
    [4X                        [ IsStaticMorphismOfFinitelyGeneratedObjectsRep ] ] ],[104X
    [4X                [ "OnObjects", _Functor_DefectOfExactness_OnObjects ][104X
    [4X                )[104X
    [4X        );[104X
  [4X[32X[104X
  
  
  [1X11.5 [33X[0;0YTool Functors[133X[101X
  
  
  [1X11.6 [33X[0;0YOther Functors[133X[101X
  
  
  [1X11.7 [33X[0;0YFunctors: Operations and Functions[133X[101X
  
  [1X11.7-1 InstallFunctor[101X
  
  [33X[1;0Y[29X[2XInstallFunctor[102X( [3XF[103X ) [32X operation[133X
  
  [33X[0;0YInstall  several methods for [5XGAP[105X operations that get declared under the name
  of  the [5Xhomalg[105X (multi-)functor [3XF[103X (--> [2XNameOfFunctor[102X ([14X11.3-1[114X)). These methods
  are  used  to  apply  the  functor  to  objects, morphisms, (co)complexes of
  objects,  and  (co)chain  morphisms.  The objects in the (co)complexes might
  again be (co)complexes.[133X
  
  [33X[0;0Y(For  purely technical reasons the multiplicity of the functor might at most
  be three. This restriction should disappear in future versions.)[133X
  
  [4X[32X  Code  [32X[104X
    [4XInstallMethod( InstallFunctor,[104X
    [4X        "for homalg functors",[104X
    [4X        [ IsHomalgFunctorRep ],[104X
    [4X        [104X
    [4X  function( Functor )[104X
    [4X    [104X
    [4X    InstallFunctorOnObjects( Functor );[104X
    [4X    [104X
    [4X    if IsSpecialFunctor( Functor ) then[104X
    [4X        [104X
    [4X        InstallSpecialFunctorOnMorphisms( Functor );[104X
    [4X        [104X
    [4X    else[104X
    [4X        [104X
    [4X        InstallFunctorOnMorphisms( Functor );[104X
    [4X        [104X
    [4X        InstallFunctorOnComplexes( Functor );[104X
    [4X        [104X
    [4X        InstallFunctorOnChainMorphisms( Functor );[104X
    [4X        [104X
    [4X    fi;[104X
    [4X    [104X
    [4Xend );[104X
  [4X[32X[104X
  
  [33X[0;0YThe method does not return anything.[133X
  
  [1X11.7-2 InstallDeltaFunctor[101X
  
  [33X[1;0Y[29X[2XInstallDeltaFunctor[102X( [3XF[103X ) [32X operation[133X
  
  [33X[0;0YIn case [3XF[103X is a [22Xδ[122X-functor in the sense of Grothendieck the procedure installs
  several  operations  under  the  name  of  the [5Xhomalg[105X (multi-)functor [3XF[103X (-->
  [2XNameOfFunctor[102X  ([14X11.3-1[114X))  allowing  one to compute connecting homomorphisms,
  exact  triangles,  and  associated  long exact sequences. The input of these
  operations is a short exact sequence.[133X
  
  [33X[0;0Y(For  purely technical reasons the multiplicity of the functor might at most
  be three. This restriction should disappear in future versions.)[133X
  
  [4X[32X  Code  [32X[104X
    [4XInstallMethod( InstallDeltaFunctor,[104X
    [4X        "for homalg functors",[104X
    [4X        [ IsHomalgFunctorRep ],[104X
    [4X        [104X
    [4X  function( Functor )[104X
    [4X    local number_of_arguments;[104X
    [4X    [104X
    [4X    number_of_arguments := MultiplicityOfFunctor( Functor );[104X
    [4X    [104X
    [4X    if number_of_arguments = 1 then[104X
    [4X        [104X
    [4X        HelperToInstallUnivariateDeltaFunctor( Functor );[104X
    [4X        [104X
    [4X    elif number_of_arguments = 2 then[104X
    [4X        [104X
    [4X        HelperToInstallFirstArgumentOfBivariateDeltaFunctor( Functor );[104X
    [4X        HelperToInstallSecondArgumentOfBivariateDeltaFunctor( Functor );[104X
    [4X        [104X
    [4X    elif number_of_arguments = 3 then[104X
    [4X        [104X
    [4X        HelperToInstallFirstArgumentOfTrivariateDeltaFunctor( Functor );[104X
    [4X        HelperToInstallSecondArgumentOfTrivariateDeltaFunctor( Functor );[104X
    [4X        HelperToInstallThirdArgumentOfTrivariateDeltaFunctor( Functor );[104X
    [4X        [104X
    [4X    fi;[104X
    [4X    [104X
    [4Xend );[104X
  [4X[32X[104X
  
  [33X[0;0YThe method does not return anything.[133X
  
