  
  [1X1 [33X[0;0YCAP Categories[133X[101X
  
  [33X[0;0YCategories  are  the main GAP objects in CAP. They are used to associate GAP
  objects  which  represent  objects  and  morphisms  with  their category. By
  associating  a  GAP  object to the category, one of two filters belonging to
  the category (ObjectFilter/MorphismFilter) are set to true. Via Add methods,
  functions  for  specific  existential  quantifiers  can be associated to the
  category and after that can be applied to GAP objects in the category. A GAP
  category  object  also  knows  which constructions are currently possible in
  this category.[133X
  
  [33X[0;0YClassically,  a category consists of a class of objects, a set of morphisms,
  identity  morphisms,  and  a  composition  function  satisfying  some simple
  axioms. In CAP, we use a slightly different notion of a category.[133X
  
  [33X[0;0YA CAP category [23X\mathbf{C}[123X consists of the following data:[133X
  
  [30X    [33X[0;6YA set [23X\mathrm{Obj}_{\mathbf{C}}[123X of [13Xobjects[113X.[133X
  
  [30X    [33X[0;6YFor    every   pair   [23Xa,b   \in   \mathrm{Obj}_{\mathbf{C}}[123X,   a   set
        [23X\mathrm{Hom}_{\mathbf{C}}( a, b )[123X of [13Xmorphisms[113X.[133X
  
  [30X    [33X[0;6YFor  every  pair  [23Xa,b  \in  \mathrm{Obj}_{\mathbf{C}}[123X,  an equivalence
        relation  [23X\sim_{a,b}[123X  on  [23X\mathrm{Hom}_{\mathbf{C}}(  a,  b  )[123X  called
        [13Xcongruence for morphisms[113X.[133X
  
  [30X    [33X[0;6YFor  every  [23Xa  \in  \mathrm{Obj}_{\mathbf{C}}[123X,  an  [13Xidentity  morphism[113X
        [23X\mathrm{id}_a \in \mathrm{Hom}_{\mathbf{C}}( a, a )[123X.[133X
  
  [30X    [33X[0;6YFor  every triple [23Xa, b, c \in \mathrm{Obj}_{\mathbf{C}}[123X, a [13Xcomposition
        function[113X[133X
  
  
  [24X      [33X[0;6Y\circ:      \mathrm{Hom}_{\mathbf{C}}(      b,      c     )     \times
        \mathrm{Hom}_{\mathbf{C}}(        a,       b       )       \rightarrow
        \mathrm{Hom}_{\mathbf{C}}( a, c )[133X
  
  [124X
  
        [33X[0;6Ycompatible   with   the  congruence,  i.e.,  if  [23X\alpha,  \alpha'  \in
        \mathrm{Hom}_{\mathbf{C}}(    a,    b    )[123X,    [23X\beta,    \beta'    \in
        \mathrm{Hom}_{\mathbf{C}}( b, c )[123X, [23X\alpha \sim_{a,b} \alpha'[123X and [23X\beta
        \sim_{b,c}  \beta'[123X,  then  [23X\beta  \circ \alpha \sim_{a,c} \beta' \circ
        \alpha'[123X.[133X
  
  [30X    [33X[0;6YFor    all    [23Xa,   b   \in   \mathrm{Obj}_{\mathbf{C}}[123X,   [23X\alpha   \in
        \mathrm{Hom}_{\mathbf{C}}( a, b )[123X, we have[133X
  
  
  [24X      [33X[0;6Y\left( \mathrm{id}_{b} \circ \alpha \right) \sim_{a,b} \alpha[133X
  
  [124X
  
        [33X[0;6Yand[133X
  
  
  [24X      [33X[0;6Y\alpha \sim_{a,b} \left( \alpha \circ \mathrm{id}_{a} \right).[133X
  
  [124X
  
  [30X    [33X[0;6YFor    all   [23Xa,b,c,d   \in   \mathrm{Obj}_{\mathbf{C}}[123X,   [23X\alpha   \in
        \mathrm{Hom}_{\mathbf{C}}(       a,      b      )[123X,      [23X\beta      \in
        \mathrm{Hom}_{\mathbf{C}}(      b,      c      )[123X,      [23X\gamma      \in
        \mathrm{Hom}_{\mathbf{C}}( c, d )[123X, we have[133X
  
  
  [24X      [33X[0;6Y\left((  \gamma  \circ  \beta ) \circ \alpha \right) \sim_{a,d} \left(
        \gamma \circ ( \beta \circ \alpha ) \right)[133X
  
  [124X
  
  
  [1X1.1 [33X[0;0YCategories[133X[101X
  
  [1X1.1-1 IsCapCategory[101X
  
  [33X[1;0Y[29X[2XIsCapCategory[102X( [3Xobject[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe  GAP  category  of  CAP  categories. Objects of this type handle the CAP
  category  information,  the  caching,  and  filters  for  objects in the CAP
  category.  Please note that the object itself is not related to methods, you
  only need it as a handler and a presentation of the CAP category.[133X
  
  [1X1.1-2 IsCapCategoryCell[101X
  
  [33X[1;0Y[29X[2XIsCapCategoryCell[102X( [3Xobject[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe  GAP  category of CAP category cells. Every object, morphism, and [23X2[123X-cell
  of a CAP category lies in this GAP category.[133X
  
  [1X1.1-3 IsCapCategoryObject[101X
  
  [33X[1;0Y[29X[2XIsCapCategoryObject[102X( [3Xobject[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe  GAP  category  of  CAP category objects. Every object of a CAP category
  lies in this GAP category.[133X
  
  [1X1.1-4 IsCapCategoryMorphism[101X
  
  [33X[1;0Y[29X[2XIsCapCategoryMorphism[102X( [3Xobject[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe GAP category of CAP category morphisms. Every morphism of a CAP category
  lies in this GAP category.[133X
  
  [1X1.1-5 IsCapCategoryTwoCell[101X
  
  [33X[1;0Y[29X[2XIsCapCategoryTwoCell[102X( [3Xobject[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe  GAP  category  of  CAP category [23X2[123X-cells. Every [23X2[123X-cell of a CAP category
  lies in this GAP category.[133X
  
  
  [1X1.2 [33X[0;0YCategorical properties[133X[101X
  
  [1X1.2-1 AddCategoricalProperty[101X
  
  [33X[1;0Y[29X[2XAddCategoricalProperty[102X( [3Xlist[103X ) [32X function[133X
  
  [33X[0;0YAdds  a categorical property to the list of CAP categorical properties. [3Xlist[103X
  must  be  a list containing one entry, if the property is self dual, or two,
  if the dual property has a different name. If the first entry of the list is
  empty  and the second is a property name, the property is assumed to have no
  dual.[133X
  
  [1X1.2-2 IsEquippedWithHomomorphismStructure[101X
  
  [33X[1;0Y[29X[2XIsEquippedWithHomomorphismStructure[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being equipped with a homomorphism structure.[133X
  
  [1X1.2-3 IsCategoryWithDecidableLifts[101X
  
  [33X[1;0Y[29X[2XIsCategoryWithDecidableLifts[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X having decidable lifts.[133X
  
  [1X1.2-4 IsCategoryWithDecidableColifts[101X
  
  [33X[1;0Y[29X[2XIsCategoryWithDecidableColifts[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X having decidable colifts.[133X
  
  [1X1.2-5 IsEnrichedOverCommutativeRegularSemigroup[101X
  
  [33X[1;0Y[29X[2XIsEnrichedOverCommutativeRegularSemigroup[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe  property  of  the  category [3XC[103X being enriched over a commutative regular
  semigroup.[133X
  
  [1X1.2-6 IsSkeletalCategory[101X
  
  [33X[1;0Y[29X[2XIsSkeletalCategory[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being skeletal.[133X
  
  [1X1.2-7 IsAbCategory[101X
  
  [33X[1;0Y[29X[2XIsAbCategory[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being preadditive.[133X
  
  [1X1.2-8 IsLinearCategoryOverCommutativeRing[101X
  
  [33X[1;0Y[29X[2XIsLinearCategoryOverCommutativeRing[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being linear over a commutative ring.[133X
  
  [1X1.2-9 IsAdditiveCategory[101X
  
  [33X[1;0Y[29X[2XIsAdditiveCategory[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being additive.[133X
  
  [1X1.2-10 IsPreAbelianCategory[101X
  
  [33X[1;0Y[29X[2XIsPreAbelianCategory[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being preabelian.[133X
  
  [1X1.2-11 IsAbelianCategory[101X
  
  [33X[1;0Y[29X[2XIsAbelianCategory[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being abelian.[133X
  
  [1X1.2-12 IsAbelianCategoryWithEnoughProjectives[101X
  
  [33X[1;0Y[29X[2XIsAbelianCategoryWithEnoughProjectives[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being abelian with enough projectives.[133X
  
  [1X1.2-13 IsAbelianCategoryWithEnoughInjectives[101X
  
  [33X[1;0Y[29X[2XIsAbelianCategoryWithEnoughInjectives[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being abelian with enough injectives.[133X
  
  [1X1.2-14 IsLocallyOfFiniteProjectiveDimension[101X
  
  [33X[1;0Y[29X[2XIsLocallyOfFiniteProjectiveDimension[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being locally of finite projective dimension.[133X
  
  [1X1.2-15 IsLocallyOfFiniteInjectiveDimension[101X
  
  [33X[1;0Y[29X[2XIsLocallyOfFiniteInjectiveDimension[102X( [3XC[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe property of the category [3XC[103X being locally of finite injective dimension.[133X
  
  
  [1X1.3 [33X[0;0YConstructor[133X[101X
  
  [1X1.3-1 CreateCapCategory[101X
  
  [33X[1;0Y[29X[2XCreateCapCategory[102X(  ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya category[133X
  
  [33X[0;0YCreates a new CAP category from scratch. It gets a generic name.[133X
  
  [1X1.3-2 CreateCapCategory[101X
  
  [33X[1;0Y[29X[2XCreateCapCategory[102X( [3Xs[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya category[133X
  
  [33X[0;0YThe  argument  is a string [23Xs[123X. This operation creates a new CAP category from
  scratch. Its name is set to [23Xs[123X.[133X
  
  [1X1.3-3 CreateCapCategory[101X
  
  [33X[1;0Y[29X[2XCreateCapCategory[102X( [3Xs[103X, [3Xcategory_filter[103X, [3Xobject_filter[103X, [3Xmorphism_filter[103X, [3Xtwo_cell_filter[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya category[133X
  
  [33X[0;0YThe  argument  is a string [23Xs[123X. This operation creates a new CAP category from
  scratch. Its name is set to [23Xs[123X. The category, its objects, its morphisms, and
  its two cells will lie in the corresponding given filters.[133X
  
  [1X1.3-4 CreateCapCategoryWithDataTypes[101X
  
  [33X[1;0Y[29X[2XCreateCapCategoryWithDataTypes[102X( [3Xs[103X, [3Xcategory_filter[103X, [3Xobject_filter[103X, [3Xmorphism_filter[103X, [3Xtwo_cell_filter[103X, [3Xobject_datum_type[103X, [3Xmorphism_datum_type[103X, [3Xtwo_cell_datum_type[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya category[133X
  
  [33X[0;0YThe  argument  is a string [23Xs[123X. This operation creates a new CAP category from
  scratch. Its name is set to [23Xs[123X. The category, its objects, its morphisms, and
  its two cells will lie in the corresponding given filters. The data types of
  the   object/morphism/two   cell   datum   can  be  given  as  described  in
  [2XCapJitInferredDataTypes[102X   ([14XCompilerForCAP:  CapJitInferredDataTypes[114X).  As  a
  convenience,  simply  a  filter  can  be  given  if  this  suffices to fully
  determine the data type. If a data type is not specified, pass [10Xfail[110X instead.[133X
  
  
  [1X1.4 [33X[0;0YInternal Attributes[133X[101X
  
  [1X1.4-1 Name[101X
  
  [33X[1;0Y[29X[2XName[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya string[133X
  
  [33X[0;0YThe argument is a category [23XC[123X. The output is its name.[133X
  
  [33X[0;0YEach  category  [23XC[123X  stores  various filters. They are used to apply the right
  functions in the method selection.[133X
  
  [1X1.4-2 CategoryFilter[101X
  
  [33X[1;0Y[29X[2XCategoryFilter[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya filter[133X
  
  [33X[0;0YThe argument is a category [23XC[123X. The output is a filter in which [23XC[123X lies.[133X
  
  [1X1.4-3 ObjectFilter[101X
  
  [33X[1;0Y[29X[2XObjectFilter[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya filter[133X
  
  [33X[0;0YThe argument is a category [23XC[123X. The output is a filter in which all objects of
  [23XC[123X shall lie.[133X
  
  [1X1.4-4 MorphismFilter[101X
  
  [33X[1;0Y[29X[2XMorphismFilter[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya filter[133X
  
  [33X[0;0YThe  argument is a category [23XC[123X. The output is a filter in which all morphisms
  of [23XC[123X shall lie.[133X
  
  [1X1.4-5 TwoCellFilter[101X
  
  [33X[1;0Y[29X[2XTwoCellFilter[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya filter[133X
  
  [33X[0;0YThe argument is a category [23XC[123X. The output is a filter in which all [23X2[123X-cells of
  [23XC[123X shall lie.[133X
  
  [1X1.4-6 ObjectDatumType[101X
  
  [33X[1;0Y[29X[2XObjectDatumType[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya data type or [10Xfail[110X[133X
  
  [33X[0;0YThe   argument   is  a  category  [23XC[123X.  The  output  is  the  data  type  (see
  [2XCapJitInferredDataTypes[102X ([14XCompilerForCAP: CapJitInferredDataTypes[114X)) of object
  data of [23XC[123X (or [10Xfail[110X if this data type is not specified).[133X
  
  [1X1.4-7 MorphismDatumType[101X
  
  [33X[1;0Y[29X[2XMorphismDatumType[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya data type or [10Xfail[110X[133X
  
  [33X[0;0YThe   argument   is  a  category  [23XC[123X.  The  output  is  the  data  type  (see
  [2XCapJitInferredDataTypes[102X    ([14XCompilerForCAP:   CapJitInferredDataTypes[114X))   of
  morphism data of [23XC[123X (or [10Xfail[110X if this data type is not specified).[133X
  
  [1X1.4-8 TwoCellDatumType[101X
  
  [33X[1;0Y[29X[2XTwoCellDatumType[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya data type or [10Xfail[110X[133X
  
  [33X[0;0YThe   argument   is  a  category  [23XC[123X.  The  output  is  the  data  type  (see
  [2XCapJitInferredDataTypes[102X  ([14XCompilerForCAP:  CapJitInferredDataTypes[114X))  of two
  cell data of [23XC[123X (or [10Xfail[110X if this data type is not specified).[133X
  
  [1X1.4-9 CommutativeRingOfLinearCategory[101X
  
  [33X[1;0Y[29X[2XCommutativeRingOfLinearCategory[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya ring[133X
  
  [33X[0;0YThe  argument  is  a  category  [23XC[123X  which  is  expected  to lie in the filter
  [10XIsLinearCategoryOverCommutativeRing[110X.  The  output is a commutative ring over
  which the category is linear.[133X
  
  [1X1.4-10 RangeCategoryOfHomomorphismStructure[101X
  
  [33X[1;0Y[29X[2XRangeCategoryOfHomomorphismStructure[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya category[133X
  
  [33X[0;0YThe  argument  is  a  category  [23XC[123X  which  is  expected  to lie in the filter
  [10XIsEquippedWithHomomorphismStructure[110X.  The  output is the range category [23XD[123X of
  the  defining  functor  [23XH:  C^{\mathrm{op}}  \times  C  \rightarrow D[123X of the
  homomorphism structure.[133X
  
  [1X1.4-11 AdditiveGenerators[101X
  
  [33X[1;0Y[29X[2XAdditiveGenerators[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya list of objects[133X
  
  [33X[0;0YThe argument is an additive category [23XC[123X. The output is a list [23XL[123X of objects in
  [23XC[123X such that every object in [23XC[123X is a finite direct sum of objects in [23XL[123X.[133X
  
  [1X1.4-12 IndecomposableProjectiveObjects[101X
  
  [33X[1;0Y[29X[2XIndecomposableProjectiveObjects[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya list of objects[133X
  
  [33X[0;0YThe argument is an Abelian category [23XC[123X with enough projectives. The output is
  the set of indecomposable projective objects in [23XC[123X up to isomorphism. That is
  every projective object in [23XC[123X is isomorphic to a finite direct sum over these
  objects.[133X
  
  [1X1.4-13 IndecomposableInjectiveObjects[101X
  
  [33X[1;0Y[29X[2XIndecomposableInjectiveObjects[102X( [3XC[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya list of objects[133X
  
  [33X[0;0YThe  argument is an Abelian category [23XC[123X with enough injectives. The output is
  the  set of indecomposable injective objects in [23XC[123X up to isomorphism. That is
  every  injective object in [23XC[123X is isomorphic to a finite direct sum over these
  objects.[133X
  
  
  [1X1.5 [33X[0;0YLogic switcher[133X[101X
  
  [1X1.5-1 CapCategorySwitchLogicPropagationForObjectsOn[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicPropagationForObjectsOn[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YActivates  the  predicate  logic  propagation  between equal objects for the
  category [3XC[103X.[133X
  
  [1X1.5-2 CapCategorySwitchLogicPropagationForObjectsOff[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicPropagationForObjectsOff[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YDeactivates  the  predicate  logic propagation between equal objects for the
  category [3XC[103X.[133X
  
  [1X1.5-3 CapCategorySwitchLogicPropagationForMorphismsOn[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicPropagationForMorphismsOn[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YActivates  the  predicate  logic propagation between equal morphisms for the
  category [3XC[103X.[133X
  
  [1X1.5-4 CapCategorySwitchLogicPropagationForMorphismsOff[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicPropagationForMorphismsOff[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YDeactivates  the predicate logic propagation between equal morphisms for the
  category [3XC[103X.[133X
  
  [1X1.5-5 CapCategorySwitchLogicPropagationOn[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicPropagationOn[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YActivates  the  predicate  logic  propagation  between  equal  cells for the
  category [3XC[103X.[133X
  
  [1X1.5-6 CapCategorySwitchLogicPropagationOff[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicPropagationOff[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YDeactivates  the  predicate  logic  propagation  between equal cells for the
  category [3XC[103X.[133X
  
  [1X1.5-7 CapCategorySwitchLogicOn[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicOn[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YActivates the predicate implication logic for the category [3XC[103X.[133X
  
  [1X1.5-8 CapCategorySwitchLogicOff[101X
  
  [33X[1;0Y[29X[2XCapCategorySwitchLogicOff[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YDeactivates the predicate implication logic for the category [3XC[103X.[133X
  
  
  [1X1.6 [33X[0;0YTool functions[133X[101X
  
  [1X1.6-1 CanCompute[101X
  
  [33X[1;0Y[29X[2XCanCompute[102X( [3XC[103X, [3Xstring[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCanCompute[102X( [3XC[103X, [3Xoperation[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Y[10Xtrue[110X or [10Xfalse[110X[133X
  
  [33X[0;0YThe  argument  is a category [3XC[103X and a string [3Xstring[103X, which should be the name
  of a CAP operation, e.g., PreCompose. If applying this method is possible in
  [23XC[123X,  the  method returns [10Xtrue[110X, [10Xfalse[110X otherwise. If the string is not the name
  of  a CAP operation, an error is raised. For debugging purposes one can also
  pass the CAP operation instead of its name.[133X
  
  [1X1.6-2 CheckConstructivenessOfCategory[101X
  
  [33X[1;0Y[29X[2XCheckConstructivenessOfCategory[102X( [3XC[103X, [3Xs[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya list[133X
  
  [33X[0;0YThe  arguments  are  a  category  [23XC[123X  and  a  string [23Xs[123X. If [23Xs[123X is a categorical
  property  (e.g.  [10X"IsAbelianCategory"[110X),  the output is a list of strings with
  CAP  operations  which  are  missing  in  [23XC[123X to have the categorical property
  constructively. If [23Xs[123X is not a categorical property, an error is raised.[133X
  
  
  [1X1.7 [33X[0;0YWell-Definedness of Cells[133X[101X
  
  [1X1.7-1 IsWellDefined[101X
  
  [33X[1;0Y[29X[2XIsWellDefined[102X( [3Xc[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Ya boolean[133X
  
  [33X[0;0YThe argument is a cell [23Xc[123X. The output is [10Xtrue[110X if [23Xc[123X is well-defined, otherwise
  the output is [10Xfalse[110X.[133X
  
  
  [1X1.8 [33X[0;0YUnpacking data structures[133X[101X
  
  [1X1.8-1 Down[101X
  
  [33X[1;0Y[29X[2XDown[102X( [3Xx[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya GAP object[133X
  
  [33X[0;0YThe  argument  is  a  GAP object [23Xx[123X. If [23Xx[123X is an object in a CAP category, the
  output  consists of data which are needed to reconstruct [23Xx[123X (e.g., by passing
  them  to  an appropriate constructor). If [23Xx[123X is a morphism in a CAP category,
  the  output  consists  of a triple whose first entry is the source of [23Xx[123X, the
  third  entry  is the range of [23Xx[123X, and the second entry consists of data which
  are  needed  to  reconstruct  [23Xx[123X  (e.g.,  by  passing  them to an appropriate
  constructor, possibly together with the source and range of [23Xx[123X).[133X
  
  [1X1.8-2 DownOnlyMorphismData[101X
  
  [33X[1;0Y[29X[2XDownOnlyMorphismData[102X( [3Xx[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya GAP object[133X
  
  [33X[0;0YThe  argument  is  a morphism in a CAP category, the output consists of data
  which  are  needed  to  reconstruct [23Xx[123X (e.g., by passing it to an appropriate
  constructor, possibly together with its source and range).[133X
  
  [1X1.8-3 DownToBottom[101X
  
  [33X[1;0Y[29X[2XDownToBottom[102X( [3Xx[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya GAP object[133X
  
  [33X[0;0YThe  argument  is a GAP object [23Xx[123X. This function iteratively calls [10XDown[110X until
  it becomes stable.[133X
  
  
  [1X1.9 [33X[0;0YCaching[133X[101X
  
  [1X1.9-1 SetCachingOfCategory[101X
  
  [33X[1;0Y[29X[2XSetCachingOfCategory[102X( [3Xcategory[103X, [3Xtype[103X ) [32X function[133X
  
  [33X[0;0YSets the caching of [3Xcategory[103X to [3Xtype[103X.[133X
  
  [1X1.9-2 SetCachingOfCategoryWeak[101X
  
  [33X[1;0Y[29X[2XSetCachingOfCategoryWeak[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XSetCachingOfCategoryCrisp[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XDeactivateCachingOfCategory[102X( [3Xcategory[103X ) [32X function[133X
  
  [33X[0;0YSets the caching of [3Xcategory[103X to [10Xweak[110X, [10Xcrisp[110X or [10Xnone[110X, respectively.[133X
  
  [1X1.9-3 SetDefaultCaching[101X
  
  [33X[1;0Y[29X[2XSetDefaultCaching[102X( [3Xtype[103X ) [32X function[133X
  [33X[1;0Y[29X[2XSetDefaultCachingWeak[102X(  ) [32X function[133X
  [33X[1;0Y[29X[2XSetDefaultCachingCrisp[102X(  ) [32X function[133X
  [33X[1;0Y[29X[2XDeactivateDefaultCaching[102X(  ) [32X function[133X
  
  [33X[0;0YSets  the  default  caching  behaviour,  all  new categories will have their
  caching set to either [10Xweak[110X, [10Xcrisp[110X, or [10Xnone[110X. The default at startup is [10Xweak[110X.[133X
  
  
  [1X1.10 [33X[0;0YSanity checks[133X[101X
  
  [1X1.10-1 DisableInputSanityChecks[101X
  
  [33X[1;0Y[29X[2XDisableInputSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XDisableOutputSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XEnablePartialInputSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XEnablePartialOutputSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XEnableFullInputSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XEnableFullOutputSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XDisableSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XEnablePartialSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XEnableFullSanityChecks[102X( [3Xcategory[103X ) [32X function[133X
  
  [33X[0;0YMost  operations  can  perform optional sanity checks on their arguments and
  results.  The  checks  can  either  be  partial  (set  by default), full, or
  disabled. With the following commands you can either enable the full checks,
  the  partial  checks or, for performance, disable the checks altogether. You
  can do this for input checks, output checks or for both at once.[133X
  
  
  [1X1.11 [33X[0;0YTiming statistics[133X[101X
  
  [1X1.11-1 EnableTimingStatistics[101X
  
  [33X[1;0Y[29X[2XEnableTimingStatistics[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XDisableTimingStatistics[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XResetTimingStatistics[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XDisplayTimingStatistics[102X( [3Xcategory[103X ) [32X function[133X
  [33X[1;0Y[29X[2XBrowseTimingStatistics[102X( [3Xcategory[103X ) [32X function[133X
  
  [33X[0;0YEnable,  disable,  reset,  display,  or  browse  timing  statistics  of  the
  primitive  operations  of  [3Xcategory[103X. Caution: If a primitive operation calls
  another  primitive  operation,  the  runtime  of the later (including sanity
  checks etc.) is also included in the runtime of the former.[133X
  
  
  [1X1.12 [33X[0;0YEnable automatic calls of [10XAdd[110X[101X[1X[133X[101X
  
  [1X1.12-1 EnableAddForCategoricalOperations[101X
  
  [33X[1;0Y[29X[2XEnableAddForCategoricalOperations[102X( [3XC[103X ) [32X function[133X
  [33X[1;0Y[29X[2XDisableAddForCategoricalOperations[102X( [3XC[103X ) [32X function[133X
  
  [33X[0;0YEnables/disables  the  automatic  call  of [10XAdd[110X for the output of primitively
  added functions for the category [3XC[103X. If the automatic call of [10XAdd[110X is disabled
  (default),  the  output  of  primitively  added functions must belong to the
  correct  category.  If  the  automatic call of [10XAdd[110X is enabled, the output of
  primitively   added  functions  only  has  to  be  a  GAP  object  lying  in
  [10XIsAttributeStoringRep[110X  (with  suitable  attributes  [10XSource[110X  and [10XRange[110X if the
  output should be a morphism or a twocell).[133X
  
  
  [1X1.13 [33X[0;0YPerformance tweaks[133X[101X
  
  [33X[0;0YFor  finding  performance  issues  in  primitive operations, you can collect
  timing  statistics,  see  [14X1.11[114X. Additionally, CAP has several settings which
  can improve the performance. In the following some of these are listed.[133X
  
  [30X    [33X[0;6Y[10XDeactivateCachingOfCategory[110X or [10XDeactivateDefaultCaching[110X: see [14X1.9[114X. This
        can  either  improve  or  degrade  the  performance  depending  on the
        concrete example.[133X
  
  [30X    [33X[0;6Y[10XCapCategorySwitchLogicOff[110X        (on        by       default)       or
        [10XCapCategorySwitchLogicPropagationOff[110X  (off  by default): see [14X1.5[114X. This
        can  either  improve  or  degrade  the  performance  depending  on the
        concrete example.[133X
  
  [30X    [33X[0;6Y[10XDisableSanityChecks[110X: see [14X1.10[114X.[133X
  
  [30X    [33X[0;6Y[10XDisableAddForCategoricalOperations[110X: see [14X1.12[114X.[133X
  
  [30X    [33X[0;6Y[10XDeactivateToDoList[110X: see the package [10XToolsForHomalg[110X.[133X
  
  [30X    [33X[0;6YUse  [10XCreateCapCategoryObjectWithAttributes[110X  ([14X2.6[114X) instead of [10XAddObject[110X
        and    [10XCreateCapCategoryMorphismWithAttributes[110X    ([14X3.6[114X)   instead   of
        [10XAddMorphism[110X.[133X
  
  [30X    [33X[0;6YAdd  all attribute testers ([10XHas...[110X) of your objects resp. morphisms to
        the    filters   passed   to   [10XAddObjectRepresentation[110X   ([14X2.6[114X)   resp.
        [10XAddMorphismRepresentation[110X ([14X3.6[114X).[133X
  
  [30X    [33X[0;6YPass the option [10Xoverhead := false[110X to [10XCreateCapCategory[110X. Note: this may
        have unintended effects. Use with care![133X
  
  
  [1X1.14 [33X[0;0YLaTeX[133X[101X
  
  [1X1.14-1 LaTeXOutput[101X
  
  [33X[1;0Y[29X[2XLaTeXOutput[102X( [3Xc[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya string[133X
  
  [33X[0;0YThe  argument is a cell [23Xc[123X. The output is a LaTeX string [23Xs[123X (without enclosing
  dollar signs) that may be used to print out [23Xc[123X nicely.[133X
  
  [1X1.14-2 LaTeXOutput[101X
  
  [33X[1;0Y[29X[2XLaTeXOutput[102X( [3XC[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya string[133X
  
  [33X[0;0YThe  argument  is  a  category  [23XC[123X.  The  output is a LaTeX string [23Xs[123X (without
  enclosing dollar signs) that may be used to print out [23XC[123X nicely.[133X
  
