Function Repository Resource:

AbstractCategory

Source Notebook

Make an abstract model of a category (i.e. a collection of objects and morphisms obeying associativity and identity axioms)

Contributed by: Jonathan Gorard

ResourceFunction["AbstractCategory"][ob,arr,comp,id,eqob,eqmor]

makes an abstract category using the list of objects ob, the list or association of arrows arr, the composition symbol comp, the identity symbol id, the list of object equivalences eqob and the list of morphism equivalences eqmor.

ResourceFunction["AbstractCategory"][quiv,]

makes an abstract category based on the abstract quiver quiv.

ResourceFunction["AbstractCategory"][gr,]

makes an abstract category based on the directed graph gr.

ResourceFunction["AbstractCategory"][assoc]

makes an abstract category using the association of composition symbol, identity symbol, underlying abstract quiver, object equivalences and morphism equivalences assoc.

ResourceFunction["AbstractCategory"][ResourceFunction["AbstractCategory"][],comp,id,eqob,eqmor]

makes a new abstract category from an old category by imposing a new composition symbol comp, new identity symbol id, new object equivalences eqob and new morphism equivalences eqmor.

Details

A category is a collection of objects and morphisms/arrows (i.e. a quiver) such that each object is equipped with an identity morphism mapping to and from itself, and pairs of morphisms that share the same domain/codomain can be composed associatively.
A quiver (i.e. a directed multigraph) forms the underlying structure of an abstract category. Any abstract category may be obtained by starting from an appropriate quiver, introducing all necessary identity morphisms and morphism compositions (thus yielding the "free" category generated by that quiver) and then imposing any appropriate equivalences between objects and morphisms in the resulting "free" category. For the sake of terminological consistency, you will see references to "arrows" within a quiver, but "morphisms" within a corresponding category.
An abstract presentation of a category can therefore be given in terms of an underlying abstract quiver, a composition symbol, an identity symbol and a collection of relations on objects and morphisms (effectively specifying which objects and morphisms may be treated as equivalent).
ResourceFunction["AbstractCategory"] supports the specification of abstract categories by: (1) six lists/associations/symbols (a list of objects ob, a list/association of arrows arr, a composition symbol comp, an identity symbol id, a list of object equivalences eqob and a list of morphism equivalences eqmor); (2) an abstract quiver quiv (along with a composition symbol, an identity symbol and possible additional equivalences between objects and morphisms); (3) a directed graph gr (again, along with composition and identity symbols and possible object and morphism equivalences); or (4) an explicit association of the form <|"Quiver"quiv,"CompositionSymbol"comp,"IdentitySymbol"id,"ObjectEquivalences"eqob,"MorphismEquivalences"eqmor|>.
An abstract quiver object can be generated using the resource function AbstractQuiver.
Where specified, the composition symbol comp should be a binary operator and the identity symbol id should be a unary operator.
When specifying an abstract category by a collection of lists/associations/symbols, ResourceFunction["AbstractCategory"] allows one to omit the list of objects, the composition symbol, the identity symbol, the list object equivalences or the list of morphism equivalences (or some combination of these). When the object list is omitted, it is automatically populated from the list/association of arrows. When the composition or identity symbol is omitted, CircleDot (⊙) and OverTilde (∼) are assumed by default. When lists of either object equivalences or morphism equivalences are omitted, they are assumed to be empty (corresponding to a "free" category).
Likewise, when composition/identity symbols or object/morphism equivalence lists (or any combination of these) are omitted when specifying an abstract category by an abstract quiver or a directed graph, the appropriate defaults are assumed.
The association arr of arrows/morphisms should be of the form <|arr1DirectedEdge[src1,tgt1],|>, where arr1 is the name of the arrow/morphism, src1 is the source object and tgt2 is the target object.
If the function succeeds in constructing the specified abstract category, it will return a ResourceFunction["AbstractCategory"] expression.
In ResourceFunction["AbstractCategory"], the following properties are supported:
"Objects"list of objects in the abstract category
"ObjectCount"number of objects in the abstract category
"MorphismAssociation"association of morphism names/edges in the abstract category
"MorphismNames"list of names of morphisms in the abstract category
"MorphismEdges"list of directed edges associated with morphisms in the abstract category
"MorphismCount"number of morphisms in the abstract category
"ObjectEquivalences"list of equivalences between objects in the abstract category
"ObjectEquivalenceCount"number of equivalences between objects in the abstract category
"MorphismEquivalences"list of equivalences between morphisms in the abstract category
"MorphismEquivalenceCount"number of equivalences between morphisms in the abstract category
"ReducedObjects"list of objects in the abstract category modulo the list of object equivalences
"ReducedObjectCount"number of objects in the abstract category modulo the list of object equivalences
"ReducedMorphismAssociation"association of morphism names/edges in the abstract category modulo the lists of morphism/object equivalences
"ReducedMorphismNames"list of names of morphisms in the abstract category modulo the list of morphism equivalences
"ReducedMorphismEdges"list of directed edges associated with morphisms in the abstract category modulo the lists of morphism/object equivalences
"ReducedMorphismCount"number of morphisms in the abstract category modulo the list of morphism equivalences
"SimpleMorphismAssociation"association of morphism names/edges in the abstract category with self-loops and multiedges removed
"SimpleMorphismNames"list of names of morphisms in the abstract category with self-loops and multiedges removed
"SimpleMorphismEdges"list of directed edges associated with morphisms in the abstract category with self-loops and multiedges removed
"SimpleMorphismCount"number of morphisms in the abstract category with self-loops and multiedges removed
"ReducedSimpleMorphismAssociation"association of morphism names/edges in the abstract category with self-loops and multiedges removed, modulo the lists of morphism/object equivalences
"ReducedSimpleMorphismNames"list of names of morphisms in the abstract category with self-loops and multiedges removed, modulo the list of morphism equivalences
"ReducedSimpleMorphismEdges"list of directed edges in the abstract category with self-loops and multiedges removed, modulo the list of morphism/object equivalences
"ReducedSimpleMorphismCount"number of morphisms in the abstract category with self-loops and multiedges removed, modulo the list of morphism equivalences
"CompositionSymbol"symbol used to denote morphism composition (should be a binary operator)
"IdentitySymbol"symbol used to denote identity morphisms on objects (should be a unary operator)
"DualCategory"dual/opposite category (i.e. the abstract category obtained by swapping the source and target arrows of all the morphisms and reversing the direction of morphism composition)
"Quiver"abstract quiver forming the underlying structure of the abstract category (i.e. containing the objects and arrows, but without identity morphisms or morphism composition)
"AssociativityEquations"list of equations implicitly imposed by the axiom that morphism composition must be associative
"ReducedAssociativityEquations"list of equations implicitly imposed by the axiom that morphism composition must be associative, modulo the lists of morphism/object equivalences
"IdentityEquations"list of equations implicitly imposed by the axiom that every object must have an identity morphism
"ReducedIdentityEquations"list of equations implicitly imposed by the axiom that every object must have an identity morphism, modulo the lists of morphism/object equivalences
"CommutativeDiagramQ"whether the abstract category forms a commutative diagram (i.e. all directed paths with the same source and target object yield the same result)
"CommutativityEquations"list of equations required to force the abstract category to be a commutative diagram
"ReducedCommutativityEquations"list of equations required to force the abstract category to be a commutative diagram, modulo the lists of morphism/object equivalences
"Monomorphisms"association showing which morphisms in the abstract category are monomorphisms (i.e. left-cancellative/injective)
"ReducedMonomorphisms"association showing which morphisms in the abstract category are monomorphisms (i.e. left-cancellative/injective), modulo the lists of morphism/object equivalences
"Epimorphisms"association showing which morphisms in the abstract category are epimorphisms (i.e. right-cancellative/surjective)
"ReducedEpimorphisms"association showing which morphisms in the abstract category are epimorphisms (i.e. right-cancellative/surjective), modulo the lists of morphism/object equivalences
"Bimorphisms"association showing which morphisms in the abstract category are bimorphisms (i.e. left- and right-cancellative/bijective)
"ReducedBimorphisms"association showing which morphisms in the abstract category are bimorphisms (i.e. left- and right-cancellative/bijective), modulo the lists of morphism/object equivalences
"Retractions"association showing which morphisms in the abstract category are retractions (i.e. left inverses of some morphism)
"ReducedRetractions"association showing which morphisms in the abstract category are retractions (i.e. left inverses of some morphism), modulo the lists of morphism/object equivalences
"LeftInverses"association showing the left inverses (i.e. retractions) of each morphism in the abstract category
"ReducedLeftInverses"association showing the left inverses (i.e. retractions) of each morphism in the abstract category, modulo the lists of morphism/object equivalences
"Sections"association showing which morphisms in the abstract category are sections (i.e. right inverses of some morphism)
"ReducedSections"association showing which morphisms in the abstract category are sections (i.e. right inverses of some morphism), modulo the lists of morphism/object equivalences
"RightInverses"association showing the right inverses (i.e. sections) of each morphism in the abstract category
"ReducedRightInverses"association showing the right inverses (i.e. sections) of each morphism in the abstract category, modulo the lists of morphism/object equivalences
"Isomorphisms"association showing which morphisms in the abstract category are isomorphisms (i.e. both left and right inverses of some morphism)
"ReducedIsomorphisms"association showing which morphisms in the abstract category are isomorphisms (i.e. both left and right inverses of some morphism), modulo the lists of morphism/object equivalences
"Inverses"association showing the inverses (i.e. isomorphisms) of each morphism in the abstract category
"ReducedInverses"association showing the inverses (i.e. isomorphisms) of each morphism in the abstract category, modulo the lists of morphism/object equivalences
"Endomorphisms"association showing which morphisms in the abstract category are endomorphisms (i.e. morphisms from an object to itself)
"ReducedEndomorphisms"association showing which morphisms in the abstract category are endomorphisms (i.e. morphisms from an object to itself), modulo the lists of morphism/object equivalences
"Automorphisms"association showing which morphisms in the abstract category are automorphisms (i.e. isomorphisms from an object to itself)
"ReducedAutomorphisms"association showing which morphisms in the abstract category are automorphisms (i.e. isomorphisms from an object to itself), modulo the lists of morphism/object equivalences
"InitialObjects"association showing which objects in the abstract category are initial (i.e. have exactly one outgoing morphism to every object in the category)
"ReducedInitialObjects"association showing which objects in the abstract category are initial (i.e. have exactly one outgoing morphism to every object in the category), modulo the lists of morphism/object equivalences
"StrictInitialObjects"association showing which objects in the abstract category are strictly initial (i.e. initial objects for which all incoming morphisms are isomorphisms)
"ReducedStrictInitialObjects"association showing which objects in the abstract category are strictly initial (i.e. initial objects for which all incoming morphisms are isomorphisms), modulo the lists of morphism/object equivalences
"TerminalObjects"association showing which objects in the abstract category are terminal (i.e. have exactly one incoming morphism from every object in the category)
"ReducedTerminalObjects"association showing which objects in the abstract category are terminal (i.e. have exactly one incoming morphism from every object in the category), modulo the lists of morphism/object equivalences
"StrictTerminalObjects"association showing which objects in the abstract category are strictly terminal (i.e. terminal objects for which all outgoing morphisms are isomorphisms)
"ReducedStrictTerminalObjects"association showing which objects in the abstract category are strictly terminal (i.e. terminal objects for which all outgoing morphisms are isomorphisms), modulo the lists of morphism/object equivalences
"ZeroObjects"association showing which objects in the abstract category are zero (i.e. have exactly one outgoing morphism from and one incoming morphism to every object in the category)
"ReducedZeroObjects"association showing which objects in the abstract category are zero (i.e. have exactly one outgoing morphism from and one incoming morphism to every object in the category), modulo the lists of morphism/object equivalences
"StrictZeroObjects"association showing which objects in the abstract category are strictly zero (i.e. zero objects for which all incoming and outgoing morphisms are isomorphisms)
"ReducedStrictZeroObjects"association showing which objects in the abstract category are strictly zero (i.e. zero objects for which all incoming and outgoing morphisms are isomorphisms), modulo the lists of morphism/object equivalences
"PointedCategoryQ"whether the abstract category is pointed (i.e. contains a zero object)
"ConstantMorphisms"association showing which morphisms in the abstract category are constant (i.e. yield the same result when composed on the right with either member of a parallel pair of morphisms)
"ReducedConstantMorphisms"association showing which morphisms in the abstract category are constant (i.e. yield the same result when composed on the right with either member of a parallel pair of morphisms), modulo the lists of morphism/object equivalences
"CoconstantMorphisms"association showing which morphisms in the abstract category are coconstant (i.e. yield the same result when composed on the left with either member of a parallel pair of morphisms)
"ReducedCoconstantMorphisms"association showing which morphisms in the abstract category are coconstant (i.e. yield the same result when composed on the left with either member of a parallel pair of morphisms), modulo the lists of morphism/object equivalences
"ZeroMorphisms"association showing which morphisms in the abstract category are zero (i.e. yield the same result when composed on the left or right with either member of a parallel pair of morphisms)
"ReducedZeroMorphisms"association showing which morphisms in the abstract category are zero (i.e. yield the same result when composed on the left or right with either member of a parallel pair of morphisms), modulo the lists of morphism/object equivalences
"DiscreteCategoryQ"whether the abstract category is discrete (i.e. every morphism is an identity morphism)
"IndiscreteCategoryQ"whether the abstract category is indiscrete (i.e. there exists a unique morphism between every pair of objects)
"BalancedCategoryQ"whether the abstract category is balanced (i.e. every bimorphism is also an isomorphism)
"GroupoidQ"whether the abstract category is a groupoid (i.e. every morphism is an isomorphism)
"GroupoidEquations"list of equations required to force the abstract category to be a groupoid
"ReducedGroupoidEquations"list of equations required to force the abstract category to be a groupoid, modulo the lists of morphism/object equivalences
"FullLabeledGraph"directed graph form of the abstract category with labels on the morphisms
"FullUnlabeledGraph"directed graph form of the abstract category with no labels on the morphisms
"ReducedLabeledGraph"directed graph form of the abstract category, modulo the lists of morphism/object equivalences, with labels on the morphisms
"ReducedUnlabeledGraph"directed graph form of the abstract category, modulo the lists of morphism/object equivalences, with no labels on the morphisms
"SimpleLabeledGraph"directed graph form of the abstract category, with self-loops and multiedges removed, with labels on the morphisms
"SimpleUnlabeledGraph"directed graph form of the abstract category, with self-loops and multiedges removed, with no labels on the morphisms
"ReducedSimpleLabeledGraph"directed graph form of the abstract category, with self-loops and multiedges removed, modulo the lists of morphism/object equivalences, with labels on the morphisms
"ReducedSimpleUnlabeledGraph"directed graph form of the abstract category, with self-loops and multiedges removed, modulo the lists of morphism/object equivalences, with no labels on the morphisms
"AssociationForm"abstract category represented as an association of an underlying abstract quiver, a composition symbol, an identity symbol, object equivalences and morphism equivalences
"Properties"list of properties

Examples

Basic Examples (6) 

Construct a simple abstract category from an association of arrows/morphisms:

In[1]:=
category = ResourceFunction["AbstractCategory"][<|f -> {X, Y}, g -> {Y, Z}|>]
Out[1]=

Show the full directed graph with labels on the morphisms:

In[2]:=
category["FullLabeledGraph"]
Out[2]=

Show the full directed graph without labels on the morphisms:

In[3]:=
category["FullUnlabeledGraph"]
Out[3]=

Show the association of morphisms:

In[4]:=
category["MorphismAssociation"]
Out[4]=

Show the list of directed edges:

In[5]:=
category["MorphismEdges"]
Out[5]=

Construct the same abstract category, but with new composition and identity symbols ⊗ and ─, and with an equivalence imposed between objects X and Y and morphisms gf and g:

In[6]:=
category2 = ResourceFunction["AbstractCategory"][<|f -> {X, Y}, g -> {Y, Z}|>, CircleTimes, OverBar, {X == Y}, {CircleTimes[g, f] == g}]
Out[6]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms:

In[7]:=
category2["ReducedLabeledGraph"]
Out[7]=

Show the reduced directed graph without labels on the morphisms:

In[8]:=
category2["ReducedUnlabeledGraph"]
Out[8]=

Show the association of morphisms, with all equivalences between objects and morphisms imposed:

In[9]:=
category2["ReducedMorphismAssociation"]
Out[9]=

Show the list of equivalences between objects:

In[10]:=
category2["ObjectEquivalences"]
Out[10]=

Show the list of equivalences between morphisms:

In[11]:=
category2["MorphismEquivalences"]
Out[11]=

Show the association form of the abstract category:

In[12]:=
category2["AssociationForm"]
Out[12]=

Construct an abstract category from a square-shaped quiver:

In[13]:=
quiver = ResourceFunction["AbstractQuiver"][<|f -> {X, Y}, g -> {X, Z}, h -> {Y, W}, i -> {Z, W}|>]
Out[13]=
In[14]:=
quiver["FullLabeledGraph"]
Out[14]=

The corresponding abstract category:

In[15]:=
category = ResourceFunction["AbstractCategory"][quiver]
Out[15]=
In[16]:=
category["FullLabeledGraph"]
Out[16]=

Show that the resulting square is not commutative:

In[17]:=
category["CommutativeDiagramQ"]
Out[17]=

Compute the list of equations between morphisms that must hold for the square to be commutative:

In[18]:=
category["CommutativityEquations"]
Out[18]=

Construct the same abstract category, but with the aforementioned equivalence between morphisms hf and ig imposed:

In[19]:=
category2 = ResourceFunction["AbstractCategory"][category, {}, category["CommutativityEquations"]]
Out[19]=

Show that the resulting square is now commutative:

In[20]:=
category2["CommutativeDiagramQ"]
Out[20]=

Construct an abstract category from an oblong-shaped quiver:

In[21]:=
quiver2 = ResourceFunction["AbstractQuiver"][<|f1 -> {X, Y}, f2 -> {Y, Z}, g1 -> {U, V}, g2 -> {V, W}, h1 -> {X, U}, h2 -> {Y, V}, h3 -> {Z, W}|>]
Out[21]=
In[22]:=
quiver2["FullLabeledGraph"]
Out[22]=

The corresponding abstract category:

In[23]:=
category3 = ResourceFunction["AbstractCategory"][quiver2]
Out[23]=
In[24]:=
category3["FullLabeledGraph"]
Out[24]=

Compute the list of equations between morphisms that must hold for the oblong to be commutative:

In[25]:=
category3["CommutativityEquations"]
Out[25]=

Compute the list of equations between morphisms that must hold by virtue of morphism composition being associative:

In[26]:=
category3["AssociativityEquations"]
Out[26]=

Compute the list of equations between morphisms that must hold by virtue of all objects having an identity morphism:

In[27]:=
category3["IdentityEquations"]
Out[27]=

Construct an abstract category consisting of a pair of parallel morphisms g1 and g2 and a third morphism f leading out from them, together with an equivalence between morphisms fg1 and fg2:

In[28]:=
category = ResourceFunction[
  "AbstractCategory"][<|Subscript[g, 1] -> {Z, X}, Subscript[g, 2] -> {Z, X}, f -> {X, Y}|>, {}, {CircleDot[f, Subscript[g, 1]] == CircleDot[f, Subscript[g, 2]]}]
Out[28]=

Show the full directed graph with labels on the morphisms:

In[29]:=
category["FullLabeledGraph"]
Out[29]=

Show the full directed graph without labels on the morphisms:

In[30]:=
category["FullUnlabeledGraph"]
Out[30]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms:

In[31]:=
category["ReducedLabeledGraph"]
Out[31]=

Show the reduced directed graph without labels on the morphisms:

In[32]:=
category["ReducedUnlabeledGraph"]
Out[32]=

Show the association of monomorphisms (i.e. left-cancellative/injective morphisms), illustrating that f is not a monomorphism:

In[33]:=
category["Monomorphisms"]
Out[33]=

Construct the same abstract category, but with an additional equivalence imposed between morphisms g1 and g2, thus forcing f to be a monomorphism:

In[34]:=
category2 = ResourceFunction[
  "AbstractCategory"][<|Subscript[g, 1] -> {Z, X}, Subscript[g, 2] -> {Z, X}, f -> {X, Y}|>, {}, {CircleDot[f, Subscript[g, 1]] == CircleDot[f, Subscript[g, 2]], Subscript[g, 1] == Subscript[g, 2]}]
Out[34]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms:

In[35]:=
category2["ReducedLabeledGraph"]
Out[35]=

Show the reduced directed graph without labels on the morphisms:

In[36]:=
category2["ReducedUnlabeledGraph"]
Out[36]=

Show that f is now a monomorphism:

In[37]:=
category2["Monomorphisms"]
Out[37]=

Show the association of monomorphisms modulo all equivalences between objects and morphisms:

In[38]:=
category2["ReducedMonomorphisms"]
Out[38]=

Every monomorphism is an epimorphism (i.e. a right-cancellative/surjective morphism) in the dual category:

In[39]:=
category3 = category2["DualCategory"]
Out[39]=
In[40]:=
category3["ReducedEpimorphisms"]
Out[40]=

Show the full directed graph with labels on the morphisms:

In[41]:=
category3["FullLabeledGraph"]
Out[41]=

Show the full directed graph without labels on the morphisms:

In[42]:=
category3["FullUnlabeledGraph"]
Out[42]=

Show the association of bimorphisms (i.e. left- and right-cancellative/bijective morphisms) in the original category, illustrating that f is not a bimorphism:

In[43]:=
category["Bimorphisms"]
Out[43]=

Show the association of bimorphisms modulo all equivalences between objects and morphisms:

In[44]:=
category["ReducedBimorphisms"]
Out[44]=

Construct an abstract category consisting of a pair of morphisms f and g leading between objects X and Y in opposite directions:

In[45]:=
category = ResourceFunction["AbstractCategory"][<|f -> {X, Y}, g -> {Y, X}|>]
Out[45]=

Show the full directed graph with labels on the morphisms:

In[46]:=
category["FullLabeledGraph"]
Out[46]=

Show the full directed graph without labels on the morphisms:

In[47]:=
category["FullUnlabeledGraph"]
Out[47]=

Show that neither f nor g is a retraction (i.e. a left inverse) nor a section (i.e. a right inverse), and therefore is also not an isomorphism (i.e. a left and right inverse):

In[48]:=
category["Retractions"]
Out[48]=
In[49]:=
category["Sections"]
Out[49]=
In[50]:=
category["Isomorphisms"]
Out[50]=

Construct the same abstract category, but with an equivalence imposed between morphisms gf and the identity on object X:

In[51]:=
category2 = ResourceFunction[
  "AbstractCategory"][<|f -> {X, Y}, g -> {Y, X}|>, {}, {CircleDot[g, f] == OverTilde[X]}]
Out[51]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms:

In[52]:=
category2["ReducedLabeledGraph"]
Out[52]=

Show the reduced labeled graph without labels on the morphisms:

In[53]:=
category2["ReducedUnlabeledGraph"]
Out[53]=

Show that g is now a retraction and f is now a section, though neither is an isomorphism:

In[54]:=
category2["Retractions"]
Out[54]=
In[55]:=
category2["Sections"]
Out[55]=
In[56]:=
category2["Isomorphisms"]
Out[56]=

Show, equivalently, that g is a left inverse of f and f is a right inverse of g, but neither is a full inverse of the other:

In[57]:=
category2["LeftInverses"]
Out[57]=
In[58]:=
category2["RightInverses"]
Out[58]=
In[59]:=
category2["Inverses"]
Out[59]=

Construct the same abstract category, but with an additional equivalence imposed between morphisms fg and the identity on object Y:

In[60]:=
category3 = ResourceFunction[
  "AbstractCategory"][<|f -> {X, Y}, g -> {Y, X}|>, {}, {CircleDot[g, f] == OverTilde[X], CircleDot[f, g] == OverTilde[Y]}]
Out[60]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms:

In[61]:=
category3["ReducedLabeledGraph"]
Out[61]=

Show the reduced directed graph without labels on the morphisms:

In[62]:=
category3["ReducedUnlabeledGraph"]
Out[62]=

Show that f is now a retraction and g is now a section, and both are now isomorphisms:

In[63]:=
category3["Retractions"]
Out[63]=
In[64]:=
category3["Sections"]
Out[64]=
In[65]:=
category3["Isomorphisms"]
Out[65]=

Show, equivalently, that f is now both a left and right inverse of g, and vice versa:

In[66]:=
category3["LeftInverses"]
Out[66]=
In[67]:=
category3["RightInverses"]
Out[67]=
In[68]:=
category3["Inverses"]
Out[68]=

Show the associations of retractions, sections and isomorphisms modulo all equivalences between objects and morphisms:

In[69]:=
category3["ReducedRetractions"]
Out[69]=
In[70]:=
category3["ReducedSections"]
Out[70]=
In[71]:=
category3["ReducedIsomorphisms"]
Out[71]=

Show the associations of left inverses, right inverses and "full" inverses modulo all equivalences between objects and morphisms:

In[72]:=
category3["ReducedLeftInverses"]
Out[72]=
In[73]:=
category3["ReducedRightInverses"]
Out[73]=
In[74]:=
category3["ReducedInverses"]
Out[74]=

Show that the category is therefore a groupoid (i.e. all morphisms are isomorphisms):

In[75]:=
category3["GroupoidQ"]
Out[75]=

Show that the category is also balanced (i.e. all bimorphisms are also isomorphisms):

In[76]:=
category3["BalancedCategoryQ"]
Out[76]=

Construct a new abstract category with two-way arrows between objects X, Y and Z:

In[77]:=
category4 = ResourceFunction[
  "AbstractCategory"][<|f -> {X, Y}, g -> {Y, Z}, h -> {Z, Y}, i -> {Y, X}|>]
Out[77]=

Show the full directed graph with labels on the morphisms:

In[78]:=
category4["FullLabeledGraph"]
Out[78]=

Show the full directed graph without labels on the morphisms:

In[79]:=
category4["FullUnlabeledGraph"]
Out[79]=

Show that the category is not a groupoid:

In[80]:=
category4["GroupoidQ"]
Out[80]=

Compute the list of equations between morphisms that must hold for the category to be a groupoid:

In[81]:=
category4["GroupoidEquations"]
Out[81]=

Show the associations of endomorphisms (morphisms from an object to itself) and automorphisms (isomorphisms from an object to itself):

In[82]:=
category4["Endomorphisms"]
Out[82]=
In[83]:=
category4["Automorphisms"]
Out[83]=

Construct an abstract category consisting of exactly one morphism from object X to every morphism in the category, together with a single morphism to X, modulo all equivalences between morphisms:

In[84]:=
category = ResourceFunction[
  "AbstractCategory"][<|f -> {X, Y}, g -> {X, Z}, h -> {X, W}, i -> {Y, X}|>, {}, {CircleDot[CircleDot[h, i], f] == h, CircleDot[CircleDot[g, i], f] == g, CircleDot[i, f] == OverTilde[X]}]
Out[84]=

Show the full directed graph with labels on the morphisms:

In[85]:=
category["FullLabeledGraph"]
Out[85]=

Show the full directed graph without labels on the morphisms:

In[86]:=
category["FullUnlabeledGraph"]
Out[86]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms:

In[87]:=
category["ReducedLabeledGraph"]
Out[87]=

Show the reduced directed graph without labels on the morphisms:

In[88]:=
category["ReducedUnlabeledGraph"]
Out[88]=

Show the association of initial objects (i.e. objects with exactly one outgoing morphism to every object):

In[89]:=
category["InitialObjects"]
Out[89]=

Show that X is an initial object, modulo all equivalences between morphisms:

In[90]:=
category["ReducedInitialObjects"]
Out[90]=

Show that X is also a strict initial object (i.e. every incoming morphism to X is an isomorphism) when one mods out by all equivalences between morphisms:

In[91]:=
category["StrictInitialObjects"]
Out[91]=
In[92]:=
category["ReducedStrictInitialObjects"]
Out[92]=

Every initial object is a terminal object (i.e. an object with exactly one incoming morphism to every object) in the dual category:

In[93]:=
category2 = category["DualCategory"]
Out[93]=
In[94]:=
category2["TerminalObjects"]
Out[94]=
In[95]:=
category2["ReducedTerminalObjects"]
Out[95]=

Likewise with strictly initial objects being strictly terminal objects (i.e. terminal objects for which every outgoing morphism is an isomorphism) in the dual category:

In[96]:=
category2["StrictTerminalObjects"]
Out[96]=
In[97]:=
category2["ReducedStrictTerminalObjects"]
Out[97]=

Show the full directed graph with labels on the morphisms:

In[98]:=
category2["FullLabeledGraph"]
Out[98]=

Show the full directed graph without labels on the morphisms:

In[99]:=
category2["FullUnlabeledGraph"]
Out[99]=

In both cases, X is not a zero object (i.e. it is not both initial and terminal) nor a strict zero object (i.e. it is not both strictly initial and strictly terminal):

In[100]:=
category2["ZeroObjects"]
Out[100]=
In[101]:=
category2["ReducedZeroObjects"]
Out[101]=
In[102]:=
category2["StrictZeroObjects"]
Out[102]=
In[103]:=
category2["ReducedStrictZeroObjects"]
Out[103]=

Show, therefore, that the category is not pointed (i.e. it does not contain a zero object):

In[104]:=
category2["PointedCategoryQ"]
Out[104]=

Construct an abstract category consisting of a pair of parallel morphisms g1 and g2 and a third morphism f leading out from them:

In[105]:=
category = ResourceFunction[
  "AbstractCategory"][<|Subscript[g, 1] -> {Z, X}, Subscript[g, 2] -> {Z, X}, f -> {X, Y}|>]
Out[105]=

Show the full directed graph with labels on the morphisms:

In[106]:=
category["FullLabeledGraph"]
Out[106]=

Show the full directed graph without labels on the morphisms:

In[107]:=
category["FullUnlabeledGraph"]
Out[107]=

Show that f is not a constant morphism (i.e. does not yield the same result when composed on the right by either member of a parallel pair of morphisms):

In[108]:=
category["ConstantMorphisms"]
Out[108]=

Construct the same abstract category, but with an additional equivalence imposed between morphisms fg1 and fg2, thus forcing f to be constant:

In[109]:=
category2 = ResourceFunction[
  "AbstractCategory"][<|Subscript[g, 1] -> {Z, X}, Subscript[g, 2] -> {Z, X}, f -> {X, Y}|>, {}, {CircleDot[f, Subscript[g, 1]] == CircleDot[f, Subscript[g, 2]]}]
Out[109]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms:

In[110]:=
category2["ReducedLabeledGraph"]
Out[110]=

Show the reduced directed graph without labels on the morphisms:

In[111]:=
category2["ReducedUnlabeledGraph"]
Out[111]=

Show that f is now a constant morphism:

In[112]:=
category2["ConstantMorphisms"]
Out[112]=

Show the association of constant morphisms modulo all equivalences between objects and morphisms:

In[113]:=
category2["ReducedConstantMorphisms"]
Out[113]=

Every constant morphism is a coconstant morphism (i.e. a morphism that yields the same result when composed on the left by either member of a parallel pair of morphisms) in the dual category:

In[114]:=
category3 = category2["DualCategory"]
Out[114]=
In[115]:=
category3["ReducedCoconstantMorphisms"]
Out[115]=

Show the full directed graph with labels on the morphisms:

In[116]:=
category3["FullLabeledGraph"]
Out[116]=

Show the full directed graph without labels on the morphisms:

In[117]:=
category3["FullUnlabeledGraph"]
Out[117]=

Show the association of zero morphisms (i.e. morphisms that are both constant and coconstant), illustrating that f is also zero:

In[118]:=
category3["ZeroMorphisms"]
Out[118]=

Show the association of zero morphisms modulo all equivalences between objects and morphisms:

In[119]:=
category3["ReducedZeroMorphisms"]
Out[119]=

Scope (4) 

Abstract categories can be constructed directly from abstract quiver objects (by enforcing the composition and identity axioms on the arrows and objects of the underlying quiver):

In[120]:=
quiver = ResourceFunction["AbstractQuiver"][<|f -> {X, Y}, g -> {Y, Z}, h -> {Z, W}|>]
Out[120]=
In[121]:=
category = ResourceFunction["AbstractCategory"][quiver]
Out[121]=
In[122]:=
category["FullLabeledGraph"]
Out[122]=

Additional arguments can be used to specify the composition and identity symbols:

In[123]:=
category2 = ResourceFunction["AbstractCategory"][quiver, CircleTimes, OverBar]
Out[123]=
In[124]:=
category2["FullLabeledGraph"]
Out[124]=

Alternatively, additional arguments can be used to specify equivalences between objects and morphisms:

In[125]:=
category3 = ResourceFunction["AbstractCategory"][
  quiver, {W == Z}, {CircleDot[h, g] == g}]
Out[125]=
In[126]:=
category3["ReducedLabeledGraph"]
Out[126]=

All four properties (composition symbol, identity symbol, object equivalences and morphism equivalences) may be specified simultaneously:

In[127]:=
category4 = ResourceFunction["AbstractCategory"][quiver, CircleTimes, OverBar, {W == Z}, {CircleTimes[h, g] == g}]
Out[127]=
In[128]:=
category4["ReducedLabeledGraph"]
Out[128]=

Abstract categories can also be constructed directly from directed graph objects (with automatically selected arrow/morphism names):

In[129]:=
graph = Graph[{a -> b, b -> c, b -> d, c -> d}]
Out[129]=
In[130]:=
category = ResourceFunction["AbstractCategory"][graph]
Out[130]=
In[131]:=
category["FullLabeledGraph"]
Out[131]=

Similarly, additional arguments can be used to specify composition and identity symbols, as well as equivalences between the resulting objects and morphisms:

In[132]:=
category2 = ResourceFunction["AbstractCategory"][graph, CircleTimes, OverBar, {c == d}, {}]
Out[132]=
In[133]:=
category2["ReducedLabeledGraph"]
Out[133]=

Abstract categories can be constructed from lists of arrows (with automatically selected arrow/morphism names):

In[134]:=
category = ResourceFunction["AbstractCategory"][{X -> Y, Y -> Z, Y -> W}]
Out[134]=
In[135]:=
category["FullLabeledGraph"]
Out[135]=

From associations of arrows/morphisms (with explicitly provided arrow/morphism names):

In[136]:=
category2 = ResourceFunction[
  "AbstractCategory"][<|f -> {X, Y}, g -> {Y, Z}, h -> {Y, W}|>]
Out[136]=
In[137]:=
category2["FullLabeledGraph"]
Out[137]=

With explicit lists of objects specified:

In[138]:=
category3 = ResourceFunction[
  "AbstractCategory"][{X, Y, Z, W, U}, <|f -> {X, Y}, g -> {Y, Z}, h -> {Y, W}|>]
Out[138]=
In[139]:=
category3["FullLabeledGraph"]
Out[139]=

Composition and identity symbols can be specified for any abstract category:

In[140]:=
category4 = ResourceFunction[
  "AbstractCategory"][{X, Y, Z, W, U}, <|f -> {X, Y}, g -> {Y, Z}, h -> {Y, W}|>, CircleTimes, OverBar]
Out[140]=
In[141]:=
category4["ReducedLabeledGraph"]
Out[141]=

Likewise, lists of object equivalences and arrow equivalences can be specified for any abstract category:

In[142]:=
category5 = ResourceFunction[
  "AbstractCategory"][{X, Y, Z, W, U}, <|f -> {X, Y}, g -> {Y, Z}, h -> {Y, W}|>, {Y == Z}, {CircleTimes[g, f] == f}]
Out[142]=
In[143]:=
category5["ReducedLabeledGraph"]
Out[143]=

New composition and identity symbols can be specified for any existing abstract category:

In[144]:=
category6 = ResourceFunction["AbstractCategory"][category5, CircleTimes, OverBar]
Out[144]=
In[145]:=
category6["ReducedLabeledGraph"]
Out[145]=

Likewise for new object and morphism equivalences:

In[146]:=
category7 = ResourceFunction["AbstractCategory"][
  category6, {W == Y}, {CircleTimes[h, f] == f}]
Out[146]=
In[147]:=
category7["ReducedLabeledGraph"]
Out[147]=

From an explicit association:

In[148]:=
category8 = ResourceFunction[
  "AbstractCategory"][<|"CompositionSymbol" -> CircleDot, "IdentitySymbol" -> OverTilde, "ObjectEquivalences" -> {}, "MorphismEquivalences" -> {}, "Quiver" -> ResourceFunction["AbstractQuiver"][<|f -> {X, Y}, g -> {Y, Z}, h -> {Z, W}|>]|>]
Out[148]=
In[149]:=
category8["FullLabeledGraph"]
Out[149]=

Construct an abstract category from an association of arrows/morphisms with additional object and morphism equivalences:

In[150]:=
category = ResourceFunction[
  "AbstractCategory"][<|f -> {X, Y}, g -> {Y, Z}, h -> {Y, W}, i -> {Z, U}, j -> {Z, W}|>, {U == W}, {CircleDot[i, g] == h, CircleDot[j, g] == h}]
Out[150]=

Show the list of properties:

In[151]:=
category["Properties"]
Out[151]=

Show the list of objects in the abstract category:

In[152]:=
category["Objects"]
Out[152]=

Show the number of objects in the abstract category:

In[153]:=
category["ObjectCount"]
Out[153]=

Show the association of morphisms in the abstract category:

In[154]:=
category["MorphismAssociation"]
Out[154]=

Show the list of names of morphisms in the abstract category:

In[155]:=
category["MorphismNames"]
Out[155]=

Show the list of directed edges corresponding to morphisms in the abstract category:

In[156]:=
category["MorphismEdges"]
Out[156]=

Show the number of morphisms in the abstract category:

In[157]:=
category["MorphismCount"]
Out[157]=

Show the list of equivalences between objects in the abstract category:

In[158]:=
category["ObjectEquivalences"]
Out[158]=

Show the number of equivalences between objects in the abstract category:

In[159]:=
category["ObjectEquivalenceCount"]
Out[159]=

Show the list of equivalences between morphisms in the abstract category:

In[160]:=
category["MorphismEquivalences"]
Out[160]=

Show the number of equivalences between morphisms in the abstract category:

In[161]:=
category["MorphismEquivalenceCount"]
Out[161]=

Show the list of reduced objects (modded out by all object equivalences) in the abstract category:

In[162]:=
category["ReducedObjects"]
Out[162]=

Show the number of reduced objects (modded out by all object equivalences) in the abstract category:

In[163]:=
category["ReducedObjectCount"]
Out[163]=

Show the association of reduced morphisms (modded out by all object and morphism equivalences) in the abstract category:

In[164]:=
category["ReducedMorphismAssociation"]
Out[164]=

Show the list of names of reduced morphisms (modded out by all morphism equivalences) in the abstract category:

In[165]:=
category["ReducedMorphismNames"]
Out[165]=

Show the list of directed edges corresponding to reduced morphisms (modded out by all object and morphism equivalences) in the abstract category:

In[166]:=
category["ReducedMorphismEdges"]
Out[166]=

Show the number of reduced morphisms (modded out by all object and morphism equivalences) in the abstract category:

In[167]:=
category["ReducedMorphismCount"]
Out[167]=

Show the association of simple morphisms (with all self-loops and multiedges removed) in the abstract category:

In[168]:=
category["SimpleMorphismAssociation"]
Out[168]=

Show the list of names of simple morphisms (with all self-loops and multiedges removed) in the abstract category:

In[169]:=
category["SimpleMorphismNames"]
Out[169]=

Show the list of directed edges corresponding to simple morphisms (with all self-loops and multiedges removed) in the abstract category:

In[170]:=
category["SimpleMorphismEdges"]
Out[170]=

Show the number of simple morphisms (with all self-loops and multiedges removed) in the abstract category:

In[171]:=
category["SimpleMorphismCount"]
Out[171]=

Show the association of reduced simple morphisms (with all self-loops and multiedges removed, plus all object and morphism equivalences modded out) in the abstract category:

In[172]:=
category["ReducedSimpleMorphismAssociation"]
Out[172]=

Show the list of names of reduced simple morphisms (with all self-loops and multiedges removed, plus all object and morphism equivalences modded out) in the abstract category:

In[173]:=
category["ReducedSimpleMorphismNames"]
Out[173]=

Show the list of directed edges corresponding to reduced simple morphisms (with all self-loops and multiedges removed, plus all object and morphism equivalences modded out) in the abstract category:

In[174]:=
category["ReducedSimpleMorphismEdges"]
Out[174]=

Show the number of reduced simple morphisms (with all self-loops and multiedges removed, plus all object and morphism equivalences modded out) in the abstract category:

In[175]:=
category["ReducedSimpleMorphismCount"]
Out[175]=

Show the (binary) symbol used to denote morphism composition in the abstract category:

In[176]:=
category["CompositionSymbol"]
Out[176]=

Show the (unary) symbol used to denote identity morphisms on objects in the abstract category:

In[177]:=
category["IdentitySymbol"]
Out[177]=

Compute the dual category (obtained by swapping the source and target objects of each morphism and reversing the direction of morphism composition):

In[178]:=
category["DualCategory"]
Out[178]=

Show the abstract quiver forming the underlying structure of the abstract category:

In[179]:=
category["Quiver"]
Out[179]=

Show the list of equations imposed implicitly by the axiom that morphism composition in the abstract category must be associative:

In[180]:=
category["AssociativityEquations"]
Out[180]=

Show the list of equations imposed implicitly by the axiom that morphism composition in the abstract category must be associative, modulo all equivalences between objects and morphisms:

In[181]:=
category["ReducedAssociativityEquations"]
Out[181]=

Show the list of equations imposed implicitly by the axiom that every object in the abstract category must have an identity morphism:

In[182]:=
category["IdentityEquations"]
Out[182]=

Show the list of equations imposed implicitly by the axiom that every object in the abstract category must have an identity morphism, modulo all equivalences between objects and morphisms:

In[183]:=
category["ReducedIdentityEquations"]
Out[183]=

Determine whether the abstract category is a commutative diagram (i.e. all directed paths through the graph with the same source and target object yield the same morphism):

In[184]:=
category["CommutativeDiagramQ"]
Out[184]=

Show the list of equations between morphisms required to force the abstract category to be a commutative diagram:

In[185]:=
category["CommutativityEquations"]
Out[185]=

Show the list of equations between morphisms required to force the abstract category to be a commutative diagram, modulo all equivalences between objects and morphisms:

In[186]:=
category["ReducedCommutativityEquations"]
Out[186]=

Show the association of monomorphisms (i.e. left-cancellative/injective morphisms) in the abstract category:

In[187]:=
category["Monomorphisms"]
Out[187]=

Show the association of monomorphisms (i.e. left-cancellative/injective morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[188]:=
category["ReducedMonomorphisms"]
Out[188]=

Show the association of epimorphisms (i.e. right-cancellative/surjective morphisms) in the abstract category:

In[189]:=
category["Epimorphisms"]
Out[189]=

Show the association of epimorphisms (i.e. right-cancellative/surjective morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[190]:=
category["ReducedEpimorphisms"]
Out[190]=

Show the association of bimorphisms (i.e. left- and right-cancellative/bijective morphisms) in the abstract category:

In[191]:=
category["Bimorphisms"]
Out[191]=

Show the association of bimorphisms (i.e. left- and right-cancellative/bijective morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[192]:=
category["ReducedBimorphisms"]
Out[192]=

Show the association of retractions (i.e. left inverse morphisms) in the abstract category:

In[193]:=
category["Retractions"]
Out[193]=

Show the association of retractions (i.e. left inverse morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[194]:=
category["ReducedRetractions"]
Out[194]=

Show the association of left inverse morphisms (i.e. retractions) for each morphism in the abstract category:

In[195]:=
category["LeftInverses"]
Out[195]=

Show the association of left inverse morphisms (i.e. retractions) for each morphism in the abstract category, modulo all equivalences between objects and morphisms:

In[196]:=
category["ReducedLeftInverses"]
Out[196]=

Show the association of sections (i.e. right inverse morphisms) in the abstract category:

In[197]:=
category["Sections"]
Out[197]=

Show the association of sections (i.e. right inverse morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[198]:=
category["ReducedSections"]
Out[198]=

Show the association of right inverse morphisms (i.e. sections) for each morphism in the abstract category:

In[199]:=
category["RightInverses"]
Out[199]=

Show the association of right inverse morphisms (i.e. sections) for each morphism in the abstract category, modulo all equivalences between objects and morphisms:

In[200]:=
category["ReducedRightInverses"]
Out[200]=

Show the association of isomorphisms (i.e. left and right inverse morphisms) in the abstract category:

In[201]:=
category["Isomorphisms"]
Out[201]=

Show the association of isomorphisms (i.e. left and right inverse morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[202]:=
category["ReducedIsomorphisms"]
Out[202]=

Show the association of inverse morphisms (i.e. isomorphisms) for each morphism in the abstract category:

In[203]:=
category["Inverses"]
Out[203]=

Show the association of inverse morphisms (i.e. isomorphisms) for each morphism in the abstract category, modulo all equivalences between objects and morphisms:

In[204]:=
category["ReducedInverses"]
Out[204]=

Show the association of endomorphisms (i.e. morphisms from an object to itself) in the abstract category:

In[205]:=
category["Endomorphisms"]
Out[205]=

Show the association of endomorphisms (i.e. morphisms from an object to itself) in the abstract category, modulo all equivalences between objects and morphisms:

In[206]:=
category["ReducedEndomorphisms"]
Out[206]=

Show the association of automorphisms (i.e. isomorphisms from an object to itself) in the abstract category:

In[207]:=
category["Automorphisms"]
Out[207]=

Show the association of automorphisms (i.e. isomorphisms from an object to itself) in the abstract category, modulo all equivalences between objects and morphisms:

In[208]:=
category["ReducedAutomorphisms"]
Out[208]=

Show the association of initial objects (i.e. objects with exactly one outgoing morphism to each object) in the abstract category:

In[209]:=
category["InitialObjects"]
Out[209]=

Show the association of initial objects (i.e. objects with exactly one outgoing morphism to each object) in the abstract category, modulo all equivalences between objects and morphisms:

In[210]:=
category["ReducedInitialObjects"]
Out[210]=

Show the association of strict initial objects (i.e. initial objects whose incoming morphisms are all isomorphisms) in the abstract category:

In[211]:=
category["StrictInitialObjects"]
Out[211]=

Show the association of strict initial objects (i.e. initial objects whose incoming morphisms are all isomorphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[212]:=
category["ReducedStrictInitialObjects"]
Out[212]=

Show the association of terminal objects (i.e. objects with exactly one incoming morphism from each object) in the abstract category:

In[213]:=
category["TerminalObjects"]
Out[213]=

Show the association of terminal objects (i.e. objects with exactly one incoming morphism from each object) in the abstract category, modulo all equivalences between objects and morphisms:

In[214]:=
category["ReducedTerminalObjects"]
Out[214]=

Show the association of strict terminal objects (i.e. terminal objects whose outgoing morphisms are all isomorphisms) in the abstract category:

In[215]:=
category["StrictTerminalObjects"]
Out[215]=

Show the association of strict terminal objects (i.e. terminal objects whose outgoing morphisms are all isomorphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[216]:=
category["ReducedStrictTerminalObjects"]
Out[216]=

Show the association of zero objects (i.e. objects with exactly one outgoing morphism and one incoming morphism to/from each object) in the abstract category:

In[217]:=
category["ZeroObjects"]
Out[217]=

Show the association of zero objects (i.e. objects with exactly one outgoing morphism and one incoming morphism to/from each object) in the abstract category, modulo all equivalences between objects and morphisms:

In[218]:=
category["ReducedZeroObjects"]
Out[218]=

Show the association of strict zero objects (i.e. zero objects whose incoming and outgoing morphisms are all isomorphisms) in the abstract category:

In[219]:=
category["StrictZeroObjects"]
Out[219]=

Show the association of strict zero objects (i.e. zero objects whose incoming and outgoing morphisms are all isomorphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[220]:=
category["ReducedStrictZeroObjects"]
Out[220]=

Determine whether the abstract category is pointed (i.e. contains a zero object):

In[221]:=
category["PointedCategoryQ"]
Out[221]=

Show the association of constant morphisms (i.e. morphisms that yield the same result when composed on the right with either member of a parallel pair of morphisms) in the abstract category:

In[222]:=
category["ConstantMorphisms"]
Out[222]=

Show the association of constant morphisms (i.e. morphisms that yield the same result when composed on the right with either member of a parallel pair of morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[223]:=
category["ReducedConstantMorphisms"]
Out[223]=

Show the association of coconstant morphisms (i.e. morphisms that yield the same result when composed on the left with either member of a parallel pair of morphisms) in the abstract category:

In[224]:=
category["CoconstantMorphisms"]
Out[224]=

Show the association of coconstant morphisms (i.e. morphisms that yield the same result when composed on the left with either member of a parallel pair of morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[225]:=
category["ReducedCoconstantMorphisms"]
Out[225]=

Show the association of zero morphisms (i.e. morphisms that yield the same result when composed on the left or right with either member of a parallel pair of morphisms) in the abstract category:

In[226]:=
category["ZeroMorphisms"]
Out[226]=

Show the association of zero morphisms (i.e. morphisms that yield the same result when composed on the left or right with either member of a parallel pair of morphisms) in the abstract category, modulo all equivalences between objects and morphisms:

In[227]:=
category["ReducedZeroMorphisms"]
Out[227]=

Determine whether the abstract category is discrete (i.e. all morphisms are identity morphisms):

In[228]:=
category["DiscreteCategoryQ"]
Out[228]=

Determine whether the abstract category is indiscrete (i.e. there exists a unique morphism between every pair of objects):

In[229]:=
category["IndiscreteCategoryQ"]
Out[229]=

Determine whether the abstract category is balanced (i.e. every bimorphism is also an isomorphism):

In[230]:=
category["BalancedCategoryQ"]
Out[230]=

Determine whether the abstract category is a groupoid (i.e. all morphisms are isomorphisms):

In[231]:=
category["GroupoidQ"]
Out[231]=

Show the list of equations between morphisms required to force the abstract category to be a groupoid (may not necessarily exist):

In[232]:=
category["GroupoidEquations"]
Out[232]=

Show the list of equations between morphisms required to force the abstract category to be a groupoid, modulo all equivalences between objects and morphisms (may not necessarily exist):

In[233]:=
category["ReducedGroupoidEquations"]
Out[233]=

Show the full directed graph with labels on the morphisms of the abstract category:

In[234]:=
category["FullLabeledGraph"]
Out[234]=

Show the full directed graph without labels on the morphisms of the abstract category:

In[235]:=
category["FullUnlabeledGraph"]
Out[235]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and with labels on the morphisms of the abstract category:

In[236]:=
category["ReducedLabeledGraph"]
Out[236]=

Show the reduced directed graph, with all equivalences between objects and morphisms imposed and without labels on the morphisms of the abstract category:

In[237]:=
category["ReducedUnlabeledGraph"]
Out[237]=

Show the simple directed graph, with all self-loops and multiedges removed and with labels on the morphisms of the abstract category:

In[238]:=
category["SimpleLabeledGraph"]
Out[238]=

Show the simple directed graph, with all self-loops and multiedges removed and without labels on the morphisms of the abstract category:

In[239]:=
category["SimpleUnlabeledGraph"]
Out[239]=

Show the reduced simple directed graph, with all self-loops and multiedges removed, plus all object and morphism equivalences modded out and with labels on the morphisms of the abstract category:

In[240]:=
category["ReducedSimpleLabeledGraph"]
Out[240]=

Show the reduced simple directed graph, with all self-loops and multiedges removed, plus all object and morphism equivalences modded out and without labels on the morphisms of the abstract category:

In[241]:=
category["ReducedSimpleUnlabeledGraph"]
Out[241]=

Show the explicit association form of the category:

In[242]:=
category["AssociationForm"]
Out[242]=

Publisher

Jonathan Gorard

Version History

  • 1.1.0 – 18 April 2022
  • 1.0.0 – 06 April 2022

Source Metadata

Related Resources

License Information