  
  [1X12 [33X[0;0YCreate wrapper hulls of a category[133X[101X
  
  [33X[0;0YThe  support for building towers of category constructors is one of the main
  design  features  of  CAP.  Many  categories  that  appear  in  the  various
  applications can be modeled by towers of multiple category constructors. The
  wrapper  category  constructor  allows  adding  one  last layer on top which
  allows  expressing  the desired (re)interpretation of such a modeling tower.
  In  particular,  the wrapper category constructor allows specifying the name
  of the category together with customized methods for the operations[133X
  
  [30X    [33X[0;6YObjectConstructor[133X
  
  [30X    [33X[0;6YMorphismConstructor[133X
  
  [30X    [33X[0;6YObjectDatum[133X
  
  [30X    [33X[0;6YMorphismDatum[133X
  
  [33X[0;0Yin order to reflect the desired interpretation with a user-interface that is
  independent  of  the  modeling  tower.  Note  that the same tower might have
  multiple interpretations.[133X
  
      ┌─────────────────────────────────────────────────────────┐
      │              [10XW := WrapperCategory( cat_n )[110X              │ 
      ├─────────────────────────────────────────────────────────┤
      │       [10Xcat_n := CategoryConstructor_n( cat_{n-1} )[110X       │ 
      ├─────────────────────────────────────────────────────────┤
      │                           ...                           │ 
      ├─────────────────────────────────────────────────────────┤
      │ [10Xcat_1 := CategoryConstructor_1( non_categorical_input )[110X │ 
      └─────────────────────────────────────────────────────────┘
  
       [1XTable:[101X A tower of categories modeling the category [10XW[110X
  
  
  [33X[0;0YThe  wrapper  category  [10XW[110X  is by construction equivalent to the top category
  [10Xcat_n[110X  in the tower. In practice, the word [21Xtower[121X stands more generally for a
  finite poset with a greatest element.[133X
  
  
  [1X12.1 [33X[0;0YGAP categories[133X[101X
  
  [1X12.1-1 IsWrapperCapCategory[101X
  
  [33X[1;0Y[29X[2XIsWrapperCapCategory[102X( [3Xarg[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe  [5XGAP[105X  category  of  a  wrapper  CAP  category  (using  the  default data
  structure).[133X
  
  [1X12.1-2 IsWrapperCapCategoryObject[101X
  
  [33X[1;0Y[29X[2XIsWrapperCapCategoryObject[102X( [3Xarg[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe [5XGAP[105X category of objects in a wrapper CAP category.[133X
  
  [1X12.1-3 IsWrapperCapCategoryMorphism[101X
  
  [33X[1;0Y[29X[2XIsWrapperCapCategoryMorphism[102X( [3Xarg[103X ) [32X filter[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YThe [5XGAP[105X category of morphisms in a wrapper CAP category.[133X
  
  
  [1X12.2 [33X[0;0YAttributes[133X[101X
  
  [1X12.2-1 ModelingCategory[101X
  
  [33X[1;0Y[29X[2XModelingCategory[102X( [3Xcategory[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya category[133X
  
  [33X[0;0YThe category used to model the wrapper category [3Xcategory[103X.[133X
  
  [1X12.2-2 UnderlyingCell[101X
  
  [33X[1;0Y[29X[2XUnderlyingCell[102X( [3Xobject[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya category object[133X
  
  [33X[0;0YThe cell underlying the wrapper category object [3Xobject[103X.[133X
  
  [1X12.2-3 UnderlyingCell[101X
  
  [33X[1;0Y[29X[2XUnderlyingCell[102X( [3Xmorphism[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya category morphism[133X
  
  [33X[0;0YThe cell underlying the wrapper category morphism [3Xmorphism[103X.[133X
  
  
  [1X12.3 [33X[0;0YConstructors[133X[101X
  
  [1X12.3-1 AsObjectInWrapperCategory[101X
  
  [33X[1;0Y[29X[2XAsObjectInWrapperCategory[102X( [3Xcategory[103X, [3Xobject[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Yan object[133X
  
  [33X[0;0YWrap  an  object  [3Xobject[103X  (in  the  category underlying the wrapper category
  [3Xcategory[103X) to form an object in [3Xcategory[103X.[133X
  
  [1X12.3-2 AsMorphismInWrapperCategory[101X
  
  [33X[1;0Y[29X[2XAsMorphismInWrapperCategory[102X( [3Xsource[103X, [3Xmorphism[103X, [3Xrange[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya morphism[133X
  
  [33X[0;0YWrap  a  morphism  [3Xmorphism[103X (in the category underlying the wrapper category
  [10XCapCategory([110X[3Xsource[103X[10X)[110X)  to  form  a morphism in [10XCapCategory([110X[3Xsource[103X[10X)[110X with given
  source and range.[133X
  
  [1X12.3-3 AsMorphismInWrapperCategory[101X
  
  [33X[1;0Y[29X[2XAsMorphismInWrapperCategory[102X( [3Xcategory[103X, [3Xmorphism[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya morphism[133X
  
  [33X[0;0YWrap  a  morphism  [3Xmorphism[103X (in the category underlying the wrapper category
  [3Xcategory[103X) to form a morphism in [3Xcategory[103X.[133X
  
  [1X12.3-4 /[101X
  
  [33X[1;0Y[29X[2X/[102X( [3Xcell[103X, [3Xcategory[103X ) [32X operation[133X
  
  [33X[0;0YConvenience    method    for    [2XAsObjectInWrapperCategory[102X    ([14X12.3-1[114X)    and
  [2XAsMorphismInWrapperCategory[102X ([14X12.3-3[114X).[133X
  
  [1X12.3-5 WrapperCategory[101X
  
  [33X[1;0Y[29X[2XWrapperCategory[102X( [3Xcategory[103X, [3Xoptions[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya category[133X
  
  [33X[0;0YWraps  a  category  [3Xcategory[103X  to  form a new category subject to the options
  given via [3Xoptions[103X, which is a record with the following keys:[133X
  
  [30X    [33X[0;6Y[10Xname[110X (optional): the name of the wrapper category[133X
  
  [30X    [33X[0;6Y[10Xonly_primitive_operations[110X  (optional,  default [10Xfalse[110X): whether to only
        wrap primitive operations or all operations[133X
  
  [30X    [33X[0;6Y[10Xwrap_range_of_hom_structure[110X (optional, default [10Xfalse[110X): whether to wrap
        the range category of the homomorphism structure[133X
  
  [33X[0;0YAdditionally,  the  following  options  of  [2XCategoryConstructor[102X ([14X11.2-1[114X) are
  supported:              [10Xcategory_filter[110X,             [10Xcategory_object_filter[110X,
  [10Xcategory_morphism_filter[110X,          [10Xobject_constructor[110X,         [10Xobject_datum[110X,
  [10Xmorphism_constructor[110X,  [10Xmorphism_datum[110X.  To avoid inconsistencies, either all
  or  none of those options should be set. If they are set, also the following
  options should be set:[133X
  
  [30X    [33X[0;6Y[10Xmodeling_tower_object_constructor[110X:  a  function which gets the wrapper
        category  and  an  object  datum  (in  the  sense of [10Xobject_datum[110X) and
        returns the corresponding modeling object in the modeling category,[133X
  
  [30X    [33X[0;6Y[10Xmodeling_tower_object_datum[110X:   a   function  which  gets  the  wrapper
        category  and  an  object  in  the  modeling  category and returns the
        corresponding object datum (in the sense of [10Xobject_datum[110X),[133X
  
  [30X    [33X[0;6Y[10Xmodeling_tower_morphism_constructor[110X: a function which gets the wrapper
        category,  a source in the modeling category, a morphism datum (in the
        sense  of  [10Xmorphism_datum[110X),  and  a range in the modeling category and
        returns the corresponding modeling morphism in the modeling category,[133X
  
  [30X    [33X[0;6Y[10Xmodeling_tower_morphism_datum[110X:  a  function  which  gets  the  wrapper
        category  and  a  morphism  in  the  modeling category and returns the
        corresponding morphism datum (in the sense of [10Xmorphism_datum[110X),[133X
  
  [1X12.3-6 WrappingFunctor[101X
  
  [33X[1;0Y[29X[2XWrappingFunctor[102X( [3XW[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya functor[133X
  
  [33X[0;0YReturn  the  functor  from  the  wrapped category [10XModelingCategory[110X([3XW[103X) to the
  wrapper  category  [3XW[103X.  The  functor maps each wrapped object/morphism to its
  wrapping object/morphism.[133X
  
  [1X12.3-7 ModelingObject[101X
  
  [33X[1;0Y[29X[2XModelingObject[102X( [3Xcat[103X, [3Xobj[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya CAP category object[133X
  
  [33X[0;0YReturns  the  object  modeling  the  object  [3Xobj[103X  in  [3Xcat[103X. [3Xcat[103X must be a CAP
  category  which  has  been  created  as  a  wrapper  CAP  category  (but not
  necessarily uses the default data structure).[133X
  
  [1X12.3-8 ModeledObject[101X
  
  [33X[1;0Y[29X[2XModeledObject[102X( [3Xcat[103X, [3Xobj[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya CAP category object[133X
  
  [33X[0;0YReturns  the  object  modeled  by the object [3Xobj[103X in the modeling category of
  [3Xcat[103X.  [3Xcat[103X  must  be  a  CAP category which has been created as a wrapper CAP
  category (but not necessarily uses the default data structure).[133X
  
  [1X12.3-9 ModelingMorphism[101X
  
  [33X[1;0Y[29X[2XModelingMorphism[102X( [3Xcat[103X, [3Xmor[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya CAP category morphism[133X
  
  [33X[0;0YReturns  the  morphism  modeling  the morphism [3Xmor[103X in [3Xcat[103X. [3Xcat[103X must be a CAP
  category  which  has  been  created  as  a  wrapper  CAP  category  (but not
  necessarily uses the default data structure).[133X
  
  [1X12.3-10 ModeledMorphism[101X
  
  [33X[1;0Y[29X[2XModeledMorphism[102X( [3Xcat[103X, [3Xsource[103X, [3Xobj[103X, [3Xrange[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya CAP category morphism[133X
  
  [33X[0;0YReturns the morphism modeled by the morphism [3Xmor[103X in the modeling category of
  [3Xcat[103X  with  given source and range. [3Xcat[103X must be a CAP category which has been
  created as a wrapper CAP category (but not necessarily uses the default data
  structure).[133X
  
