# CAP-based packages

## Categorical doctrines

CAP defines *and* allows defining (hierarchies of) categorical doctrines.

- There are several CAP-based packages that define various
.*categorical doctrines* - Defining a doctrine means several things:
**Type specification**of all the categorical operations which are required by the doctrine: In particular this means specifying those operations involved in the definition of a certain (co)limit (e.g., a kernel) which exists in the doctrine (e.g., Abelian category). This includes the specification of the input and output^{1,}^{2}of each such operation. Specifying a certain limit means specifying all operations involved in the definition of that limit.

For example, specifying “kernel” means specifying all operations entering the definition of the “kernel”:`KernelObject`

^{3},`KernelEmbedding`

^{4},`KernelLift`

^{5}.

**Doctrine-specific derivations**of categorical operations from other ones: For example in an Abelian category the`LiftAlongMonomorphism`

can be derived from^{6}This is wrong in other doctrines like pre-Abelian, and does not even make sense in doctrines without kernels and cokernels.

**Doctrine-specific logical implications**: For example, in an Abelian category the algorithm`IsIsomorphism( ImageEmbedding( α ) )`

is equivalent to the algorithm`IsEpimorphism( α )`

. Again, this is wrong in other doctrines like pre-Abelian.

- Even if GAP (automatically) organizes the doctrines in hierarchies, the relations among the category (instances) fulfilling these doctrines are much richer than these hierarchies.
^{6}These relations are given by several functors, natural transformations between (parallel) functors, and adjunctions (also described by natural transformations) between (anti-parallel) functors.

For example, in set-theoretic modelling of mathematics one would say that a group*is*a monoid (in which each element is invertible). In category-theoretic modelling of mathematics one would say that there is a fully faithful forgetful functor from the category of groups to that of monoids which has a left adjoint*and*a right adjoint:- The left adjoint adds formal inverses to the monoid (Grothendieck construction in the commutative case).
- The right adjoint maps a monoid to its group of units.

## Category constructors and building towers of categories

The CAP-based packages provide various ** category constructors** which take a combinatorial or algebraic data structure, or even a category or several categories (of a certain doctrine) as input and provide another category (of a possibly different doctrine) as output. The true strength of CAP is that it allows concatenating these category constructor to build arbitrary high towers.

## Functors and natural transformations

The CAP-based packages provide various functors between these categories as well as natural transformations between (parallel) functors.

## CompilerForCAP

CompilerForCAP should be able to use the logical rules valid in the various doctrines to compile these towers of categories —built by applying multiple category constructors— and produce highly efficient (parallel) code (ultimately in HPC-GAP/Julia).

## Packages part of or based on CAP_project:

Name | Description | Documentation | Build Status | Code Coverage | Status |
---|---|---|---|---|---|

CAP | Categories, Algorithms, Programming | deposited | |||

Algebroids | Algebroids and bialgebroids as preadditive categories generated by enhanced quivers | dev | |||

ActionsForCAP | Actions and Coactions for CAP | dev | |||

AttributeCategoryForCAP | Automatic enhancement with attributes of a CAP category | dev | |||

Bicomplexes | Bicomplexes for Abelian categories | dev | |||

CartesianCategories | Cartesian and cocartesian categories and various subdoctrines | dev | |||

CategoriesWithAmbientObjects | Categories with objects having ambient objects | dev | |||

CatReps | Representations and cohomology of finite categories | dev | |||

CompilerForCAP | Speed up and verify categorical algorithms | dev | |||

ComplexesAndFilteredObjectsForCAP | Implementation of complexes, cocomplexes and filtered objects for CAP | dev | |||

ComplexesCategories | Category of (co)chain complexes of an additive category | dev | |||

DerivedCategories | Derived categories of Abelian categories | dev | |||

ExteriorPowersCategories | The graded category of exterior powers of objects of a given Ab-category | dev | |||

FinSetsForCAP | The elementary topos of (skeletal) finite sets | dev | |||

FinGSetsForCAP | The elementary topos of (skeletal) finite G-sets | dev | |||

FiniteCocompletions | Finite (co)product/(co)limit (co)completions | dev | |||

FpCategories | Finitely presented categories by generating quivers and relations | dev | |||

FreydCategoriesForCAP | Freyd categories - Formal (co)kernels for additive categories | dev | |||

FunctorCategories | Categories of functors | dev | |||

GeneralizedMorphismsForCAP | Implementations of generalized morphisms for the CAP project | deposited | |||

GradedCategories | Graded closures of categories | dev | |||

GradedModulePresentationsForCAP | Presentations for graded modules | dev | |||

GroupRepresentationsForCAP | Skeletal category of group representations for CAP | dev | |||

HeckeCategories | Categorification of Hecke algebras | dev | |||

HomologicalAlgebraForCAP | Homological algebra algorithms for CAP | dev | |||

HomotopyCategories | Homotopy categories of additive categories | dev | |||

InternalExteriorAlgebraForCAP | Constructions for Modules over the Internal Exterior Algebra for CAP | dev | |||

InternalModules | Modules over internal algebras | dev | |||

IntrinsicCategories | Intrinsic categories for CAP | dev | |||

IntrinsicGradedModules | Finitely presented graded modules over computable graded rings allowing multiple presentations and the notion of elements | dev | |||

IntrinsicModules | Finitely presented modules over computable rings allowing multiple presentations and the notion of elements | dev | |||

LazyCategories | Construct an equivalent lazy category out of a CAP category | dev | |||

LinearAlgebraForCAP | Category of Matrices over a Field for CAP | deposited | |||

Locales | Locales, frames, coframes, meet semi-lattices of locally closed subsets, and Boolean algebras of constructible sets | dev | |||

ModulePresentationsForCAP | Category R-pres for CAP | deposited | |||

ModulesOverLocalRingsForCAP | Category of modules over a local ring modeled by Serre quotients for CAP | dev | |||

MonoidalCategories | Monoidal and monoidal (co)closed categories | deposited | |||

PreSheaves | Categories of (co)presheaves | dev | |||

QPA2 | Quivers and Path Algebras | N/A | N/A | N/A | dev |

QuotientCategories | Quotient categories | dev | |||

StableCategories | Stable categories of additive categories | dev | |||

SubcategoriesForCAP | Subcategory and other related constructors for CAP categories | dev | |||

ToolsForCategoricalTowers | Tools for CategoricalTowers | dev | |||

Toposes | Elementary toposes | dev | |||

ToricSheaves | Toric sheaves as Serre quotients | dev | |||

TriangulatedCategories | Framework for triangulated categories | dev | |||

ZariskiFrames | (Co)frames/Locales of Zariski closed/open subsets of affine, projective, or toric varieties | dev | |||

ZXCalculusForCAP | The category of ZX-diagrams | dev |

**1** Kernel: Documentation of the limit. ↩

**2** Kernel: Specification of the limit. ↩

**3** Specification of KernelObject. ↩

**4** Specification of KernelEmbedding. ↩

**5** Specification of KernelLift. ↩

**6** One can view a doctrine as a (specific) 2-category and the category of doctrines as a 3-category of 2-categories. ↩