Function Repository Resource:

AbstractProduct

Source Notebook

Represent the abstract product of an arbitrary collection of objects in an abstract category

Contributed by: Jonathan Gorard

ResourceFunction["AbstractProduct"][ob,prod,proj,comp,id]

represents the abstract product of the collection of objects ob, with product symbol prod, projection morphism names proj, composition symbol comp and identity symbol id.

ResourceFunction["AbstractProduct"][,obuniv,morphuniv,morphuniq]

represents an abstract product with a universal property characterized by the universal object obuniv, universal morphisms morphuniv and unique morphism morphuniq.

ResourceFunction["AbstractProduct"][assoc]

represents an abstract product using the association of object list, product symbol, projection morphism list, composition symbol, identity symbol, universal object, universal morphism list and unique morphism assoc.

ResourceFunction["AbstractProduct"][][AbstractCategory[]]

embeds an abstract product into the specified abstract category.

ResourceFunction["AbstractProduct"][ResourceFunction["AbstractProduct"][],prod,comp,id]

makes a new abstract product from an old product by imposing new product symbol prod, new composition symbol comp and new identity symbol id.

Details and Options

The product of a collection of objects in an abstract category consists of a distinguished object (the product object) together with a family of outgoing morphisms from this object (the projection morphisms), one for each element of the collection, in such a way that a certain universal property is satisfied. The universal property essentially indicates that the product object is the "most general" such object that can exist, by asserting that any other object with projection morphisms to the elements of the collection must also have a unique morphism to the product object.
Abstract products are categorically dual to abstract coproducts.
Abstract products capture many familiar constructions from mathematics, such as Cartesian products (in the category of sets), product spaces (in the category of topological spaces), tensor products (in the category of graphs), direct products (in the category of groups or rings), etc., and generalize them to arbitrary categories.
An abstract product may be characterized formally as a limit taken over a discrete index category (i.e. an index category in which the only morphisms are identity morphisms on the objects).
An abstract presentation of a product can therefore be given in terms of a collection of objects, a product symbol, a composition symbol, an identity symbol and a collection of projection morphisms from the product object to the objects in the collection, together with symbols for a universal object, a collection of universal morphisms from the universal object to the objects in the collection, and a unique morphism from the universal object to the product object, in order to characterize the universal property.
ResourceFunction["AbstractProduct"] supports the specification of abstract products either by eight lists/symbols (a list of objects ob, a product symbol prod, a list of projection morphism names proj, a composition symbol comp, an identity symbol id, a universal object symbol obuniv, a list of universal morphism names morphuniv and a unique morphism name morphuniq) or by an explicit association of the form <|"Objects"ob,"ProductSymbol"prod,"ProjectionMorphismNames"proj,"CompositionSymbol"comp,"IdentitySymbol"id,"UniversalObjectName"obuniv,"UniversalMorphismNames"morphuniv,"UniqueMorphismName"morphuniq|>.
Where specified, the product symbol prod should be an operator of arbitrary arity, the composition symbol comp should be a binary operator and the identity symbol id should be a unary operator.
When specifying an abstract product by a collection of lists/symbols, ResourceFunction["AbstractProduct"] allows one to omit the product symbol, the list of projection morphism names, the composition symbol, the identity symbol, the universal object symbol, the list of universal morphism names or the unique morphism name (or certain combinations of the above). When the product symbol, composition symbol or identity symbol is omitted, Times (×), CircleDot () and OverTilde () are assumed by default. When the list of projection morphism names is omitted, the default naming convention of , , is assumed. When the universal object or unique morphism symbols are omitted, Y and f are assumed by default. When the list of universal morphism names is omitted, the default naming convention of f1, f2, is assumed.
If the function succeeds in constructing the specified abstract product, it will return a ResourceFunction["AbstractProduct"] expression.
Objects and morphisms that form part of the defining universal property of the abstract product are indicated using ForAll () and Exists () quantifiers as appropriate. Unique morphisms are designated using the special-purpose ∃! quantifier, and are indicated in all directed graph representations using dashed (rather than solid) lines.
ResourceFunction["AbstractProduct"] expressions can be applied to AbstractCategory expressions in order to embed the corresponding product within the specified category (in such a way that the universal property is satisfied).
In ResourceFunction["AbstractProduct"], the following properties are supported:
"Objects"list of objects in the abstract product
"ObjectCount"number of objects in the abstract product
"MorphismAssociation"association of morphism names/edges in the abstract product
"MorphismNames"list of names of morphisms in the abstract product
"MorphismEdges"list of directed edges associated to morphisms in the abstract product
"MorphismCount"number of morphisms in the abstract product
"SimpleMorphismAssociation"association of morphism names/edges in the abstract product with self-loops removed
"SimpleMorphismNames"list of names of morphisms in the abstract product with self-loops removed
"SimpleMorphismEdges"list of directed edges associated to morphisms in the abstract product with self-loops removed
"SimpleMorphismCount"number of morphisms in the abstract product with self-loops removed
"UniversalObjects"list of objects in the abstract product characterizing the universal property
"UniversalObjectCount"number of objects in the abstract product characterizing the universal property
"UniversalMorphismAssociation"association of morphism names/edges in the abstract product characterizing the universal property
"UniversalMorphismNames"list of names of morphisms in the abstract product characterizing the universal property
"UniversalMorphismEdges"list of directed edges associated to morphisms in the abstract product characterizing the universal property
"UniversalMorphismCount"number of morphisms in the abstract product characterizing the universal property
"UniversalReducedMorphismAssociation"association of morphism names/edges in the abstract product characterizing the universal property, modulo morphism equivalences
"UniversalReducedMorphismNames"list of names of morphisms in the abstract product characterizing the universal property, modulo morphism equivalences
"UniversalReducedMorphismEdges"list of directed edges associated to morphisms in the abstract product characterizing the universal property, modulo morphism equivalences
"UniversalReducedMorphismCount"number of morphisms in the abstract product characterizing the universal property, modulo morphism equivalences
"UniversalSimpleMorphismAssociation"association of morphism names/edges in the abstract product characterizing the universal property, with self-loops and multiedges removed
"UniversalSimpleMorphismNames"list of names of morphisms in the abstract product characterizing the universal property, with self-loops and multiedges removed
"UniversalSimpleMorphismEdges"list of directed edges associated to morphisms in the abstract product characterizing the universal property, with self-loops and multiedges removed
"UniversalSimpleMorphismCount"number of morphisms in the abstract product characterizing the universal property, with self-loops and multiedges removed
"UniversalReducedSimpleMorphismAssociation"association of morphism names/edges in the abstract product characterizing the universal property, with self-loops and multiedges removed, and modulo morphism equivalences
"UniversalReducedSimpleMorphismNames"list of names of morphisms in the abstract product characterizing the universal property, with self-loops and multiedges removed, and modulo morphism equivalences
"UniversalReducedSimpleMorphismEdges"list of directed edges associated to morphisms in the abstract product characterizing the universal property, with self-loops and multiedges removed, and modulo morphism equivalences
"UniversalReducedSimpleMorphismCount"number of morphisms in the abstract product characterizing the universal property, with self-loops and multiedges removed, and modulo morphism equivalences
"ProductSymbol"symbol used to denote products of objects (should be an operator of arbitrary arity)
"CompositionSymbol"symbol used to denote morphism composition (should be a binary operator)
"IdentitySymbol"symbol used to denote identity morphisms (should be a unary operator)
"ProductCategory"abstract category with morphisms representing the abstract product
"UniversalProductCategory"abstract category with morphisms characterizing the universal property of the abstract product
"UniversalProductEquations"list of equations implicitly imposed by the requirement that the universal property of the abstract product is satisfied
"FullLabeledGraph"directed graph form of the abstract product with labels on the morphisms
"FullUnlabeledGraph"directed graph form of the abstract product with no labels on the morphisms
"SimpleLabeledGraph"directed graph form of the abstract product, with self-loops removed, with labels on the morphisms
"SimpleUnlabeledGraph"directed graph form of the abstract product, with self-loops removed, with no labels on the morphisms
"UniversalFullLabeledGraph"directed graph form characterizing the universal property of the abstract product, with labels on the morphisms
"UniversalFullUnlabeledGraph"directed graph form characterizing the universal property of the abstract product, with no labels on the morphisms
"UniversalReducedLabeledGraph"directed graph form characterizing the universal property of the abstract product, modulo morphism equivalences, with labels on the morphisms
"UniversalReducedUnlabeledGraph"directed graph form characterizing the universal property of the abstract product, modulo morphism equivalences, with no labels on the morphisms
"UniversalSimpleLabeledGraph"directed graph form characterizing the universal property of the abstract product, with self-loops and multiedges removed, with labels on the morphisms
"UniversalSimpleUnlabeledGraph"directed graph form characterizing the universal property of the abstract product, with self-loops and multiedges removed, with no labels on the morphisms
"UniversalReducedSimpleLabeledGraph"directed graph form characterizing the universal property of the abstract product, with self-loops and multiedges removed, modulo morphism equivalences, with labels on the morphisms
"UniversalReducedSimpleUnlabeledGraph"directed graph form characterizing the universal property of the abstract product, with self-loops and multiedges removed, modulo morphism equivalences, with no labels on the morphisms
"AssociationForm"abstract product represented as an association of a list of objects, a product symbol, a list of projection morphism names, a composition symbol, an identity symbol, a universal object name, a list of universal morphism names and a unique morphism name
"Properties"list of properties

Examples

Basic Examples (3) 

Construct a simple abstract product of objects A and B:

In[1]:=
product = ResourceFunction["AbstractProduct"][{A, B}]
Out[1]=

Show the full directed graph with labels on the morphisms:

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

Show the full directed graph without labels on the morphisms:

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

Show the full directed graph characterizing the universal property with labels on the morphisms:

In[4]:=
product["UniversalFullLabeledGraph"]
Out[4]=

Show the full directed graph characterizing the universal property without labels on the morphisms:

In[5]:=
product["UniversalFullUnlabeledGraph"]
Out[5]=

Show the Association of morphisms:

In[6]:=
product["MorphismAssociation"]
Out[6]=

Show the Association of (quantified) morphisms characterizing the universal property:

In[7]:=
product["UniversalMorphismAssociation"]
Out[7]=

Show the list of directed edges characterizing the universal property:

In[8]:=
product["UniversalMorphismEdges"]
Out[8]=

Show the list of equations characterizing the universal property:

In[9]:=
product["UniversalProductEquations"]
Out[9]=

Construct an abstract product of objects U, V and W, but with product symbol ; projection morphisms p1, p2 and p3; and composition and identity symbols and ─ and with a universal property characterized by universal object Q; universal morphisms m1, m2 and m3; and unique morphism u:

In[10]:=
product = ResourceFunction["AbstractProduct"][{U, V, W}, CircleTimes, {p1, p2, p3}, CirclePlus, OverBar, Q, {m1, m2, m3}, u]
Out[10]=

Show the full directed graph characterizing the universal property with labels on the morphisms:

In[11]:=
product["UniversalFullLabeledGraph"]
Out[11]=

Show the full directed graph characterizing the universal property without labels on the morphisms:

In[12]:=
product["UniversalFullUnlabeledGraph"]
Out[12]=

Show the reduced directed graph characterizing the universal property with all equivalences between morphisms imposed and with labels on the morphisms:

In[13]:=
product["UniversalReducedLabeledGraph"]
Out[13]=

Show the reduced directed graph characterizing the universal property without labels on the morphisms:

In[14]:=
product["UniversalReducedUnlabeledGraph"]
Out[14]=

Show the Association of morphisms characterizing the universal property with all equivalences between morphisms imposed:

In[15]:=
product["UniversalReducedMorphismAssociation"]
Out[15]=

Show the list of equations characterizing the universal property:

In[16]:=
product["UniversalProductEquations"]
Out[16]=

Show the association form of the abstract product:

In[17]:=
product["AssociationForm"]
Out[17]=

Construct an abstract product of objects X and Y:

In[18]:=
product = ResourceFunction["AbstractProduct"][{X, Y}]
Out[18]=

Construct an abstract category consisting of morphisms to X and Y from some common object Z:

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

Embed the abstract product into the abstract category (in such a way that the universal property is satisfied):

In[20]:=
newCategory = product[category]
Out[20]=
In[21]:=
newCategory["FullLabeledGraph"]
Out[21]=

Validate that the universal property is indeed satisfied:

In[22]:=
newCategory["ReducedLabeledGraph"]
Out[22]=
In[23]:=
newCategory["MorphismEquivalences"]
Out[23]=

Construct a more complicated abstract category consisting of additional morphisms to X and Y from a further common object W:

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

Embed the abstract product into the more complicated abstract category and validate that the universal property is still satisfied:

In[25]:=
newCategory2 = product[category2]
Out[25]=
In[26]:=
newCategory2["FullLabeledGraph"]
Out[26]=
In[27]:=
newCategory2["ReducedLabeledGraph"]
Out[27]=
In[28]:=
newCategory2["MorphismEquivalences"]
Out[28]=

Compute minimal abstract category representations of the abstract product and its defining universal property, respectively:

In[29]:=
product["ProductCategory"]
Out[29]=
In[30]:=
product["UniversalProductCategory"]
Out[30]=

Scope (2) 

Abstract products can be constructed from a list of objects, a product symbol, a list of names of projection morphisms, a composition symbol and an identity symbol:

In[31]:=
product = ResourceFunction["AbstractProduct"][{X, Y, Z}, CircleTimes, {p1, p2, p3}, CirclePlus, OverBar]
Out[31]=
In[32]:=
product["UniversalFullLabeledGraph"]
Out[32]=

A universal object symbol, a list of names of universal morphisms and a unique morphism symbol can also be specified in order to characterize the universal property fully:

In[33]:=
product2 = ResourceFunction["AbstractProduct"][{X, Y, Z}, CircleTimes, {p1, p2, p3}, CirclePlus, OverBar, Q, {m1, m2, m3}, u]
Out[33]=
In[34]:=
product2["UniversalFullLabeledGraph"]
Out[34]=

Abstract products can also be constructed directly from a list of objects and a list of names of projection morphisms (plus composition and identity symbols):

In[35]:=
product3 = ResourceFunction["AbstractProduct"][{X, Y}, {g1, g2}, CircleTimes, OverBar]
Out[35]=
In[36]:=
product3["UniversalFullLabeledGraph"]
Out[36]=

Or from an object list with product, composition and identity symbols alone:

In[37]:=
product4 = ResourceFunction["AbstractProduct"][{X, Y}, CircleTimes, CirclePlus, OverBar]
Out[37]=
In[38]:=
product4["UniversalFullLabeledGraph"]
Out[38]=

If any of these arguments is not explicitly specified, the appropriate defaults are assumed automatically:

In[39]:=
product5 = ResourceFunction["AbstractProduct"][{U, V, W}]
Out[39]=
In[40]:=
product5["UniversalFullLabeledGraph"]
Out[40]=

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

In[41]:=
product6 = ResourceFunction["AbstractProduct"][product5, CircleTimes, CirclePlus, OverBar]
Out[41]=
In[42]:=
product6["UniversalFullLabeledGraph"]
Out[42]=

From an explicit association:

In[43]:=
ResourceFunction[
 "AbstractProduct"][<|"Objects" -> {A, B}, "ProductSymbol" -> CircleTimes, "ProjectionMorphismNames" -> {p1, p2}, "CompositionSymbol" -> CirclePlus, "IdentitySymbol" -> OverBar, "UniversalObjectName" -> Q, "UniversalMorphismNames" -> {f1, f2}, "UniqueMorphismName" -> u|>]
Out[43]=

Construct an abstract product of objects X, Y, Z and W:

In[44]:=
product = ResourceFunction["AbstractProduct"][{X, Y, Z, W}]
Out[44]=

Show the list of properties:

In[45]:=
product["Properties"]
Out[45]=

Show the list of objects in the abstract product:

In[46]:=
product["Objects"]
Out[46]=

Show the number of objects in the abstract product:

In[47]:=
product["ObjectCount"]
Out[47]=

Show the association of morphisms in the abstract product:

In[48]:=
product["MorphismAssociation"]
Out[48]=

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

In[49]:=
product["MorphismNames"]
Out[49]=

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

In[50]:=
product["MorphismEdges"]
Out[50]=

Show the number of morphisms in the abstract product:

In[51]:=
product["MorphismCount"]
Out[51]=

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

In[52]:=
product["SimpleMorphismAssociation"]
Out[52]=

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

In[53]:=
product["SimpleMorphismNames"]
Out[53]=

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

In[54]:=
product["SimpleMorphismEdges"]
Out[54]=

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

In[55]:=
product["SimpleMorphismCount"]
Out[55]=

Show the list of objects characterizing the universal property of the abstract product:

In[56]:=
product["UniversalObjects"]
Out[56]=

Show the number of objects characterizing the universal property of the abstract product:

In[57]:=
product["UniversalObjectCount"]
Out[57]=

Show the association of morphisms characterizing the universal property of the abstract product:

In[58]:=
product["UniversalMorphismAssociation"]
Out[58]=

Show the list of names of morphisms characterizing the universal property of the abstract product:

In[59]:=
product["UniversalMorphismNames"]
Out[59]=

Show the list of directed edges corresponding to morphisms characterizing the universal property of the abstract product:

In[60]:=
product["UniversalMorphismEdges"]
Out[60]=

Show the number of morphisms characterizing the universal property of the abstract product:

In[61]:=
product["UniversalMorphismCount"]
Out[61]=

Show the association of reduced morphisms (modded out by all morphism equivalences) characterizing the universal property of the abstract product:

In[62]:=
product["UniversalReducedMorphismAssociation"]
Out[62]=

Show the list of names of reduced morphisms (modded out by all morphism equivalences) characterizing the universal property of the abstract product:

In[63]:=
product["UniversalReducedMorphismNames"]
Out[63]=

Show the list of directed edges corresponding to reduced morphisms (modded out by all morphism equivalences) characterizing the universal property of the abstract product:

In[64]:=
product["UniversalReducedMorphismEdges"]
Out[64]=

Show the number of reduced morphisms (modded out by all morphism equivalences) characterizing the universal property of the abstract product:

In[65]:=
product["UniversalReducedMorphismCount"]
Out[65]=

Show the association of simple morphisms (with all self-loops and multiedges removed) characterizing the universal property of the abstract product:

In[66]:=
product["UniversalSimpleMorphismAssociation"]
Out[66]=

Show the list of names of simple morphisms (with all self-loops and multiedges removed) characterizing the universal property of the abstract product:

In[67]:=
product["UniversalSimpleMorphismNames"]
Out[67]=

Show the list of directed edges corresponding to simple morphisms (with all self-loops and multiedges removed) characterizing the universal property of the abstract product:

In[68]:=
product["UniversalSimpleMorphismEdges"]
Out[68]=

Show the number of simple morphisms (with all self-loops and multiedges removed) characterizing the universal property of the abstract product:

In[69]:=
product["UniversalSimpleMorphismCount"]
Out[69]=

Show the association of reduced simple morphisms (with all self-loops and multiedges removed, plus all morphism equivalences modded out) characterizing the universal property of the abstract product:

In[70]:=
product["UniversalReducedSimpleMorphismAssociation"]
Out[70]=

Show the list of names of reduced simple morphisms (with all self-loops and multiedges removed, plus all morphism equivalences modded out) characterizing the universal property of the abstract product:

In[71]:=
product["UniversalReducedSimpleMorphismNames"]
Out[71]=

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

In[72]:=
product["UniversalReducedSimpleMorphismEdges"]
Out[72]=

Show the number of reduced simple morphisms (with all self-loops and multiedges removed, plus all morphism equivalences modded out) characterizing the universal property of the abstract product:

In[73]:=
product["UniversalReducedSimpleMorphismCount"]
Out[73]=

Show the (arbitrary arity) symbol used to denote the abstract product operation:

In[74]:=
product["ProductSymbol"]
Out[74]=

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

In[75]:=
product["CompositionSymbol"]
Out[75]=

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

In[76]:=
product["IdentitySymbol"]
Out[76]=

Compute the abstract category whose morphisms represent the abstract product:

In[77]:=
product["ProductCategory"]
Out[77]=

Compute the abstract category whose morphisms characterize the universal property of the abstract product:

In[78]:=
product["UniversalProductCategory"]
Out[78]=

Show the list of equations imposed implicitly by the requirement that the universal property of the abstract product is satisfied:

In[79]:=
product["UniversalProductEquations"]
Out[79]=

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

In[80]:=
product["FullLabeledGraph"]
Out[80]=

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

In[81]:=
product["FullUnlabeledGraph"]
Out[81]=

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

In[82]:=
product["SimpleLabeledGraph"]
Out[82]=

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

In[83]:=
product["SimpleUnlabeledGraph"]
Out[83]=

Show the full directed graph characterizing the universal property of the abstract product with labels on the morphisms:

In[84]:=
product["UniversalFullLabeledGraph"]
Out[84]=

Show the full directed graph characterizing the universal property of the abstract product without labels on the morphisms:

In[85]:=
product["UniversalFullUnlabeledGraph"]
Out[85]=

Show the reduced directed graph characterizing the universal property of the abstract product with all equivalences between morphisms imposed and with labels on the morphisms:

In[86]:=
product["UniversalReducedLabeledGraph"]
Out[86]=

Show the reduced directed graph characterizing the universal property of the abstract product with all equivalences between morphisms imposed and without labels on the morphisms:

In[87]:=
product["UniversalReducedUnlabeledGraph"]
Out[87]=

Show the simple directed graph characterizing the universal property of the abstract product with all self-loops and multiedges removed and with labels on the morphisms:

In[88]:=
product["UniversalSimpleLabeledGraph"]
Out[88]=

Show the simple directed graph characterizing the universal property of the abstract product with all self-loops and multiedges removed and without labels on the morphisms:

In[89]:=
product["UniversalSimpleUnlabeledGraph"]
Out[89]=

Show the reduced simple directed graph characterizing the universal property of the abstract coproduct, with all self-loops and multiedges removed plus all equivalences between morphisms modded out and with labels on the morphisms:

In[90]:=
product["UniversalReducedSimpleLabeledGraph"]
Out[90]=

Show the reduced simple directed graph characterizing the universal property of the abstract coproduct, with all self-loops and multiedges removed plus all equivalences between morphisms modded out and without labels on the morphisms:

In[91]:=
product["UniversalReducedSimpleUnlabeledGraph"]
Out[91]=

Show the explicit association form of the product:

In[92]:=
product["AssociationForm"]
Out[92]=

Publisher

Jonathan Gorard

Version History

  • 1.0.0 – 22 April 2022

Source Metadata

Related Resources

License Information