Covariant Functorial Constructions¶
A functorial construction is a collection of functors
\((F_{Cat})_{Cat}\) (indexed by a collection of categories) which associate
to a sequence of parents \((A, B, ...)\) in a category \(Cat\) a parent
\(F_{Cat}(A, B, ...)\). Typical examples of functorial
constructions are cartesian_product
and tensor_product
.
The category of \(F_{Cat}(A, B, ...)\), which only depends on \(Cat\), is called the (functorial) construction category.
A functorial construction is (category)-covariant if for every categories \(Cat\) and \(SuperCat\), the category of \(F_{Cat}(A, B, ...)\) is a subcategory of the category of \(F_{SuperCat}(A, B, ...)\) whenever \(Cat\) is a subcategory of \(SuperCat\). A functorial construction is (category)-regressive if the category of \(F_{Cat}(A, B, ...)\) is a subcategory of \(Cat\).
The goal of this module is to provide generic support for covariant functorial constructions. In particular, given some parents \(A\), \(B\), …, in respective categories \(Cat_A\), \(Cat_B\), …, it provides tools for calculating the best known category for the parent \(F(A,B,...)\). For examples, knowing that Cartesian products of semigroups (resp. monoids, groups) have a semigroup (resp. monoid, group) structure, and given a group \(B\) and two monoids \(A\) and \(C\) it can calculate that \(A \times B \times C\) is naturally endowed with a monoid structure.
See CovariantFunctorialConstruction
,
CovariantConstructionCategory
and
RegressiveCovariantConstructionCategory
for more details.
AUTHORS:
- Nicolas M. Thiery (2010): initial revision
-
sage.categories.covariant_functorial_construction.
CovariantConstructionCategory
¶ Abstract class for categories \(F_{Cat}\) obtained through a covariant functorial construction
-
sage.categories.covariant_functorial_construction.
CovariantFunctorialConstruction
¶ An abstract class for construction functors \(F\) (eg \(F\) = Cartesian product, tensor product, \(\QQ\)-algebra, …) such that:
- Each category \(Cat\) (eg \(Cat=\)
Groups()
) can provide a category \(F_{Cat}\) for parents constructed via this functor (e.g. \(F_{Cat} =\)CartesianProductsOf(Groups())
). - For every category \(Cat\), \(F_{Cat}\) is a subcategory of \(F_{SuperCat}\) for every super category \(SuperCat\) of \(Cat\) (the functorial construction is (category)-covariant).
- For parents \(A\), \(B\), …, respectively in the categories \(Cat_A\), \(Cat_B\), …, the category of \(F(A,B,...)\) is \(F_{Cat}\) where \(Cat\) is the meet of the categories \(Cat_A\), \(Cat_B\), …,.
This covers two slightly different use cases:
In the first use case, one uses directly the construction functor to create new parents:
sage: tensor() # todo: not implemented (add an example)
or even new elements, which indirectly constructs the corresponding parent:
sage: tensor(...) # todo: not implemented
In the second use case, one implements a parent, and then put it in the category \(F_{Cat}\) to specify supplementary mathematical information about that parent.
The main purpose of this class is to handle automatically the trivial part of the category hierarchy. For example,
CartesianProductsOf(Groups())
is set automatically as a subcategory ofCartesianProductsOf(Monoids())
.In practice, each subclass of this class should provide the following attributes:
_functor_category
- a string which should match the name of the nested category class to be used in each category to specify information and generic operations for elements of this category._functor_name
- an string which specifies the name of the functor, and also (when relevant) of the method on parents and elements used for calling the construction.
TODO: What syntax do we want for \(F_{Cat}\)? For example, for the tensor product construction, which one of the followings do we want (see chat on IRC, on 07/12/2009):
tensor(Cat)
tensor((Cat, Cat))
tensor.of((Cat, Cat))
tensor.category_from_categories((Cat, Cat, Cat))
Cat.TensorProducts()
The syntax
Cat.TensorProducts()
does not supports well multivariate constructions liketensor.of([Algebras(), HopfAlgebras(), ...])
. Also it forces every category to be (somehow) aware of all the tensorial construction that could apply to it, even those which are only induced from super categories.Note: for each functorial construction, there probably is one (or several) largest categories on which it applies. For example, the
CartesianProducts()
construction makes only sense for concrete categories, that is subcategories ofSets()
. Maybe we want to model this one way or the other.- Each category \(Cat\) (eg \(Cat=\)
-
sage.categories.covariant_functorial_construction.
FunctorialConstructionCategory
¶ Abstract class for categories \(F_{Cat}\) obtained through a functorial construction
-
sage.categories.covariant_functorial_construction.
RegressiveCovariantConstructionCategory
¶ Abstract class for categories \(F_{Cat}\) obtained through a regressive covariant functorial construction