  
  [1X32 [33X[0;0YCommutative diagrams and abstract categories[133X[101X
  
  [33X[0;0Y[12XCOMMUTATIVE DIAGRAMS[112X[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XHomomorphismChainToCommutativeDiagram(H) [110X[133X
  
  [33X[0;0YInputs  a  list  [22XH=[h_1,h_2,...,h_n][122X  of  mappings  such  that the composite
  [22Xh_1h_2...h_n[122X is defined. It returns the list of composable homomorphism as a
  commutative diagram.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XNormalSeriesToQuotientDiagram(L) [110X[133X
  [33X[0;0Y[10XNormalSeriesToQuotientDiagram(L,M)[110X[133X
  
  [33X[0;0YInputs  an  increasing  (or  decreasing)  list [22XL=[L_1,L_2,...,L_n][122X of normal
  subgroups  of  a  group  [22XG[122X  with  [22XG=L_n[122X.  It  returns  the chain of quotient
  homomorphisms [22XG/L_i → G/L_i+1[122X as a commutative diagram.[133X
  
  [33X[0;0YOptionally  a subseries [22XM[122X of [22XL[122X can be entered as a second variable. Then the
  resulting  diagram  of quotient groups has two rows of horizontal arrows and
  one row of vertical arrows.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XNerveOfCommutativeDiagram(D) [110X[133X
  
  [33X[0;0YInputs  a  commutative  diagram  [22XD[122X  and  returns  the commutative diagram [22XND[122X
  consisting of all possible composites of the arrows in [22XD[122X.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XGroupHomologyOfCommutativeDiagram(D,n) [110X[133X
  [33X[0;0Y[10XGroupHomologyOfCommutativeDiagram(D,n,prime) [110X[133X
  [33X[0;0Y[10XGroupHomologyOfCommutativeDiagram(D,n,prime,Resolution_Algorithm) [110X[133X
  
  [33X[0;0YInputs  a  commutative  diagram  [22XD[122X  of  [22Xp[122X-groups  and positive integer [22Xn[122X. It
  returns  the commutative diagram of vector spaces obtained by applying mod p
  homology.[133X
  
  [33X[0;0YNon-prime  power  groups  can also be handled if a prime [22Xp[122X is entered as the
  third  argument.  Integral  homology can be obtained by setting [22Xp=0[122X. For [22Xp=0[122X
  the result is a diagram of groups.[133X
  
  [33X[0;0YA  particular resolution algorithm, such as ResolutionNilpotentGroup, can be
  entered   as   a   fourth   argument.   For   positive   [22Xp[122X  the  default  is
  ResolutionPrimePowerGroup. For [22Xp=0[122X the default is ResolutionFiniteGroup.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XPersistentHomologyOfCommutativeDiagramOfPGroups(D,n) [110X[133X
  
  [33X[0;0YInputs  a commutative diagram [22XD[122X of finite [22Xp[122X-groups and a positive integer [22Xn[122X.
  It  returns  a  list  containing, for each homomorphism in the nerve of [22XD[122X, a
  triple  [22X[k,l,m][122X  where [22Xk[122X is the dimension of the source of the induced mod [22Xp[122X
  homology  map  in  degree  [22Xn[122X,  [22Xl[122X is the dimension of the image, and [22Xm[122X is the
  dimension of the cokernel.[133X
  [33X[0;0Y[12XABSTRACT CATEGORIES[112X[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XCategoricalEnrichment(X,Name) [110X[133X
  
  [33X[0;0YInputs  a  structure  [22XX[122X such as a group or group homomorphism, together with
  the  name  of  some  existing  category  such as Name:=Category_of_Groups or
  Category_of_Abelian_Groups.  It  returns, as appropriate, an object or arrow
  in the named category.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XIdentityArrow(X) [110X[133X
  
  [33X[0;0YInputs  an  object [22XX[122X in some category, and returns the identity arrow on the
  object [22XX[122X.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XInitialArrow(X) [110X[133X
  
  [33X[0;0YInputs  an object [22XX[122X in some category, and returns the arrow from the initial
  object in the category to [22XX[122X.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XTerminalArrow(X) [110X[133X
  
  [33X[0;0YInputs  an  object  [22XX[122X  in some category, and returns the arrow from [22XX[122X to the
  terminal object in the category.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XHasInitialObject(Name) [110X[133X
  
  [33X[0;0YInputs the name of a category and returns true or false depending on whether
  the category has an initial object.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XHasTerminalObject(Name) [110X[133X
  
  [33X[0;0YInputs the name of a category and returns true or false depending on whether
  the category has a terminal object.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XSource(f) [110X[133X
  
  [33X[0;0YInputs an arrow [22Xf[122X in some category, and returns its source.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XTarget(f) [110X[133X
  
  [33X[0;0YInputs an arrow [22Xf[122X in some category, and returns its target.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XCategoryName(X) [110X[133X
  
  [33X[0;0YInputs  an  object  or arrow [22XX[122X in some category, and returns the name of the
  category.[133X
  [33X[0;0Y[10X"*", "=", "+", "-" [110X[133X
  
  [33X[0;0YComposition  of  suitable  arrows  [22Xf,g[122X  is given by [22Xf*g[122X when the source of [22Xf[122X
  equals  the  target  of  [22Xg[122X.  (Warning:  this  differes  to  the standard GAP
  convention.)[133X
  
  [33X[0;0YEquality is tested using [22Xf=g[122X.[133X
  
  [33X[0;0YIn  an  additive category the sum and difference of suitable arrows is given
  by [22Xf+g[122X and [22Xf-g[122X.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XObject(X) [110X[133X
  
  [33X[0;0YInputs  an  object  [22XX[122X in some category, and returns the GAP structure [22XY[122X such
  that [22XX=CategoricalEnrichment(Y,CategoryName(X))[122X.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XMapping(X) [110X[133X
  
  [33X[0;0YInputs  an  arrow  [22Xf[122X  in some category, and returns the GAP structure [22XY[122X such
  that [22Xf=CategoricalEnrichment(Y,CategoryName(X))[122X.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XIsCategoryObject(X) [110X[133X
  
  [33X[0;0YInputs [22XX[122X and returns true if [22XX[122X is an object in some category.[133X
  [33X[0;0Y::::::::::::::::::::::::[133X
  [33X[0;0Y[10XIsCategoryArrow(X) [110X[133X
  
  [33X[0;0YInputs [22XX[122X and returns true if [22XX[122X is an arrow in some category.[133X
  
