Quotients Functorial Construction


  • Nicolas M. Thiery (2010): initial revision
  • self – a concrete category

Given a concrete category As() (i.e. a subcategory of Sets()), As().Quotients() returns the category of objects of As() endowed with a distinguished description as quotient of some other object of As().

See Subquotients() for background.


sage: C = Semigroups().Quotients(); C
Category of quotients of semigroups
sage: C.super_categories()
[Category of subquotients of semigroups, Category of quotients of sets]
sage: C.all_super_categories()
[Category of quotients of semigroups,
 Category of subquotients of semigroups,
 Category of semigroups,
 Category of subquotients of magmas,
 Category of magmas,
 Category of quotients of sets,
 Category of subquotients of sets,
 Category of sets,
 Category of sets with partial maps,
 Category of objects]

The caller is responsible for checking that the given category admits a well defined category of quotients:

sage: EuclideanDomains().Quotients()
Join of Category of euclidean domains and Category of subquotients of monoids and Category of quotients of semigroups


sage: TestSuite(C).run()
class sage.categories.quotients.QuotientsCategory(category, *args)

Bases: sage.categories.covariant_functorial_construction.RegressiveCovariantConstructionCategory


sage: from sage.categories.covariant_functorial_construction import CovariantConstructionCategory
sage: class FooBars(CovariantConstructionCategory):
...       _functor_category = "FooBars"
sage: Category.FooBars = lambda self: FooBars.category_of(self)
sage: C = FooBars(ModulesWithBasis(ZZ))
sage: C
Category of foo bars of modules with basis over Integer Ring
sage: C.base_category()
Category of modules with basis over Integer Ring
sage: latex(C)
sage: import __main__; __main__.FooBars = FooBars # Fake FooBars being defined in a python module
sage: TestSuite(C).run()
classmethod default_super_categories(category)

Returns the default super categories of category.Quotients()

Mathematical meaning: if \(A\) is a quotient of \(B\) in the category \(C\), then \(A\) is also a subquotient of \(B\) in the category \(C\).


  • cls – the class QuotientsCategory
  • category – a category \(Cat\)

OUTPUT: a (join) category

In practice, this returns category.Subquotients(), joined together with the result of the method RegressiveCovariantConstructionCategory.default_super_categories() (that is the join of category and cat.Quotients() for each cat in the super categories of category).


Consider category=Groups(), which has cat=Monoids() as super category. Then, a subgroup of a group \(G\) is simultaneously a subquotient of \(G\), a group by itself, and a quotient monoid of G:

sage: Groups().Quotients().super_categories()
[Category of groups, Category of subquotients of monoids, Category of quotients of semigroups]

Mind the last item above: there is indeed currently nothing implemented about quotient monoids.

This resulted from the following call:

sage: sage.categories.quotients.QuotientsCategory.default_super_categories(Groups())
Join of Category of groups and Category of subquotients of monoids and Category of quotients of semigroups

Previous topic

Subquotient Functorial Construction

Next topic

Subobjects Functorial Construction

This Page