Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

2 Category of presheaves of a finitely presented (linear) category
 2.1 Constructors
 2.2 Attributes
 2.3 Operations
 2.4 GAP Categories
 2.5 Global variables
 2.6 Examples

2 Category of presheaves of a finitely presented (linear) category

2.1 Constructors

2.1-1 PreSheaves
‣ PreSheaves( B, k )( operation )

2.1-2 CreatePreSheaf
‣ CreatePreSheaf( F )( attribute )
‣ CreatePreSheaf( B, rec_images_of_objects, rec_images_of_morphisms )( operation )
‣ CreatePreSheaf( B, images_of_objects, images_of_morphisms )( operation )

Returns: a presheaf

Turn the functor F:B^op \(\to\) D into an object in the category of functors PSh := PreSheaves( B, D ). An alternative input is the source category B and two defining records rec_images_of_objects and rec_images_of_morphisms of F. Another alternative input is the source category B and two defining lists images_of_objects and images_of_morphisms of F. The order of their entries must correspond to that of the vertices and arrows of the underlying quiver.

For the convenience of the user the following input is also valid: If images_of_objects is a list of nonnegative integers, images_of_morphisms is a list of matrices, and \(k:=\) CommutativeRingOfLinearCategory( B ) is a field then the two lists are interpreted as objects and morphisms in a matrix category or a category of rows over \(k\), respectively.

2.1-3 CreatePreSheafMorphismByValues
‣ CreatePreSheafMorphismByValues( arg1, arg2, arg3, arg4 )( operation )
‣ CreatePreSheafMorphism( eta )( attribute )
‣ CreatePreSheafMorphism( U, e, V )( operation )
‣ CreatePreSheafMorphism( U, e, V )( operation )
‣ CreatePreSheafMorphismByFunction( arg1, arg2, arg3 )( operation )

Returns: a morphism in a CAP category

Turn the natrual transformation eta:\(F \to G\) into a morphism U := AsObjectInFunctorCategory( F ) \(\to\) V := AsObjectInFunctorCategory( G ) in the category of functors Hom := Hom( B, D ), where B := Source( F ) = Source( G ) and C := Target( F ) = Target( G ).

An alternative input is the triple (U, e, V), where e is a defining record of eta.

Another alternative input is the triple (U, e, V), where e is a defining list of eta.

2.1-4 CoYonedaLemmaOnObjects
‣ CoYonedaLemmaOnObjects( F )( attribute )

2.1-5 CoYonedaLemmaOnMorphisms
‣ CoYonedaLemmaOnMorphisms( phi )( attribute )

2.1-6 CoequalizerDataOfPreSheafUsingCoYonedaLemma
‣ CoequalizerDataOfPreSheafUsingCoYonedaLemma( F )( attribute )

2.1-7 CoYonedaLemmaCoequalizerPair
‣ CoYonedaLemmaCoequalizerPair( F )( attribute )

2.1-8 EmbeddingFunctorOfFiniteStrictCoproductCompletionIntoPreSheavesData
‣ EmbeddingFunctorOfFiniteStrictCoproductCompletionIntoPreSheavesData( PSh )( attribute )

2.1-9 EmbeddingFunctorOfFiniteStrictCoproductCompletionIntoPreSheaves
‣ EmbeddingFunctorOfFiniteStrictCoproductCompletionIntoPreSheaves( PSh )( attribute )

2.1-10 MorphismFromRepresentableByYonedaLemma
‣ MorphismFromRepresentableByYonedaLemma( PSh, objB, morC, F )( operation )

2.1-11 MorphismFromCoproductOfRepresentables
‣ MorphismFromCoproductOfRepresentables( PSh, list, F )( operation )

2.1-12 MaximalMorphismFromRepresentable
‣ MaximalMorphismFromRepresentable( F )( attribute )

2.1-13 CoveringListOfRepresentables
‣ CoveringListOfRepresentables( F )( attribute )

2.1-14 CoveringListOfRepresentablesUsingSplits
‣ CoveringListOfRepresentablesUsingSplits( F )( attribute )

2.1-15 EpimorphismFromSomeProjectiveObjectUsingSplits
‣ EpimorphismFromSomeProjectiveObjectUsingSplits( F )( attribute )

2.1-16 SectionAndComplementByCoveringListOfRepresentables
‣ SectionAndComplementByCoveringListOfRepresentables( F )( operation )

2.1-17 SectionFromOptimizedCoYonedaProjectiveObjectIntoCoYonedaProjectiveObject
‣ SectionFromOptimizedCoYonedaProjectiveObjectIntoCoYonedaProjectiveObject( F )( attribute )

2.1-18 RetractionByCoveringListOfRepresentables
‣ RetractionByCoveringListOfRepresentables( F )( operation )

2.1-19 RetractionFromCoYonedaProjectiveObjectOntoOptimizedCoYonedaProjectiveObject
‣ RetractionFromCoYonedaProjectiveObjectOntoOptimizedCoYonedaProjectiveObject( F )( attribute )

2.1-20 OptimizedCoYonedaLemmaOnObjects
‣ OptimizedCoYonedaLemmaOnObjects( F )( attribute )

2.1-21 OptimizedCoYonedaLemmaOnMorphisms
‣ OptimizedCoYonedaLemmaOnMorphisms( phi )( attribute )

2.1-22 CoequalizerDataOfPreSheafUsingOptimizedCoYonedaLemma
‣ CoequalizerDataOfPreSheafUsingOptimizedCoYonedaLemma( F )( attribute )

2.1-23 AssociatedCoequalizerPairInPreSheaves
‣ AssociatedCoequalizerPairInPreSheaves( F )( attribute )

2.1-24 AssociatedCoequalizerPairInPreSheaves
‣ AssociatedCoequalizerPairInPreSheaves( F )( attribute )

2.1-25 OptimizedCoYonedaLemmaCoequalizerPair
‣ OptimizedCoYonedaLemmaCoequalizerPair( F )( attribute )

2.1-26 ApplyPreSheafToObjectInFiniteStrictCoproductCompletion
‣ ApplyPreSheafToObjectInFiniteStrictCoproductCompletion( PSh, presheaf, obj )( operation )

2.1-27 ApplyPreSheafToMorphismInFiniteStrictCoproductCompletion
‣ ApplyPreSheafToMorphismInFiniteStrictCoproductCompletion( PSh, presheaf, mor )( operation )

2.1-28 CategoryOfInternalCategories
‣ CategoryOfInternalCategories( C )( attribute )

Construct the category of categories internal to the monoidal or cartesian category C. The output the full subcategory of the subcategory of functors from the SimplicialCategoryTruncatedInDegree(2) into C for which each such functor is the nerve truncated in degree \(2\) of a category internal to C.

2.2 Attributes

2.2-1 ValuesOnAllObjects
‣ ValuesOnAllObjects( eta )( attribute )

Returns: a list

Returns the values of the presheaf morphism eta on all objects of the source category of presheaf category PSh.

The 2-cell underlying the functor object F_or_eta.

2.2-2 UnderlyingCapTwoCategoryCell
‣ UnderlyingCapTwoCategoryCell( F_or_eta )( attribute )

Returns: a CAP functor or natural transformation

2.2-3 YonedaEmbedding
‣ YonedaEmbedding( B )( attribute )

Returns: a CAP functor

2.2-4 YonedaEmbeddingOfSourceCategory
‣ YonedaEmbeddingOfSourceCategory( PSh )( attribute )

Returns: a CAP functor

2.2-5 ImageOfYonedaEmbeddingOfSource
‣ ImageOfYonedaEmbeddingOfSource( PSh )( attribute )

Returns: a CAP category

Returns the full subcategory of PSh generated by the values of the Yoneda embedding on the objects of Source(PSh).

2.2-6 SimpleObjects
‣ SimpleObjects( PSh )( attribute )

Returns: a list of objects

The input is a category of presheaves PSh of an admissible \(k\)-algebroid for some field \(k\). The output is the list of simple objects in PSh.

gap> q := RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]" );
q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]
gap> F := FreeCategory( q );
FreeCategory( RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,
y:4->4]" ) )
gap> k := HomalgFieldOfRationals( );
Q
gap> kF := k[F];
Algebroid( Q, FreeCategory( RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,
c:1->3,d:3->4,y:4->4]" ) ) )
gap> A := kF / [ kF.x^3, kF.y^2 ];
Algebroid( Q, FreeCategory( RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,
c:1->3,d:3->4,y:4->4]" ) ) ) / relations
gap> PSh := PreSheaves( A );
PreSheaves( Algebroid( Q, FreeCategory( RightQuiver( "q(4)[x:1->1,
a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]" ) ) ) / relations, Rows( Q ) )
gap> P := PSh.4;
<(1)->12, (2)->2, (3)->2, (4)->2; (x)->12x12, (a)->2x12, (b)->2x2,
(c)->2x12, (d)->2x2, (y)->2x2>
gap> IsProjective( P );
true
gap> Display( P );
Image of <(1)>:
A row module over Q of rank 12

Image of <(2)>:
A row module over Q of rank 2

Image of <(3)>:
A row module over Q of rank 2

Image of <(4)>:
A row module over Q of rank 2

Image of (1)-[{ 1*(x) }]->(1):
Source:
A row module over Q of rank 12

Matrix:
[ [  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 12

A morphism in Rows( Q )

Image of (1)-[{ 1*(a) }]->(2):
Source:
A row module over Q of rank 2

Matrix:
[ [  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 12

A morphism in Rows( Q )

Image of (2)-[{ 1*(b) }]->(4):
Source:
A row module over Q of rank 2

Matrix:
[ [  1,  0 ],
  [  0,  1 ] ]

Range:
A row module over Q of rank 2

A morphism in Rows( Q )

Image of (1)-[{ 1*(c) }]->(3):
Source:
A row module over Q of rank 2

Matrix:
[ [  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 12

A morphism in Rows( Q )

Image of (3)-[{ 1*(d) }]->(4):
Source:
A row module over Q of rank 2

Matrix:
[ [  1,  0 ],
  [  0,  1 ] ]

Range:
A row module over Q of rank 2

A morphism in Rows( Q )

Image of (4)-[{ 1*(y) }]->(4):
Source:
A row module over Q of rank 2

Matrix:
[ [  0,  1 ],
  [  0,  0 ] ]

Range:
A row module over Q of rank 2

A morphism in Rows( Q )

An object in PreSheaves( Algebroid( Q, FreeCategory( RightQuiver( "q(4)[x:1->1,
a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]" ) ) ) / relations, Rows( Q ) ) given by
the above data
gap> IsWellDefined( MonomorphismIntoSomeInjectiveObject( P ) );
true
gap> q := RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]" );
q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]
gap> F := FreeCategory( q );
FreeCategory( RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,y:4->4]" ) )
gap> k := HomalgFieldOfRationals( );
Q
gap> kF := k[F];
Algebroid( Q, FreeCategory( RightQuiver( "q(4)[x:1->1,a:1->2,b:2->4,c:1->3,d:3->4,
y:4->4]" ) ) )
gap> A := AlgebroidFromDataTables( kF / [ kF.x^3, kF.y^2 ] );
Q-algebroid( {1,2,3,4}[x:1-≻1,a:1-≻2,b:2-≻4,c:1-≻3,d:3-≻4,y:4-≻4] ) defined by 4 objects
and 6 generating morphisms
gap> SetIsAdmissibleAlgebroid( A, true );
gap> PSh := PreSheaves( A );
PreSheaves( Q-algebroid( {1,2,3,4}[x:1-≻1,a:1-≻2,b:2-≻4,c:1-≻3,d:3-≻4,y:4-≻4] ) defined
by 4 objects and 6 generating morphisms, Rows( Q ) )
gap> P := PSh.4;
<(1)->12, (2)->2, (3)->2, (4)->2; (x)->12x12, (a)->2x12, (b)->2x2,
(c)->2x12, (d)->2x2, (y)->2x2>
gap> IsProjective( P );
true
gap> Display( P );
Image of <(1)>:
A row module over Q of rank 12

Image of <(2)>:
A row module over Q of rank 2

Image of <(3)>:
A row module over Q of rank 2

Image of <(4)>:
A row module over Q of rank 2

Image of <1*x:(1) -≻ (1)>:
Source:
A row module over Q of rank 12

Matrix:
[ [  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 12

A morphism in Rows( Q )

Image of <1*a:(1) -≻ (2)>:
Source:
A row module over Q of rank 2

Matrix:
[ [  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 12

A morphism in Rows( Q )

Image of <1*b:(2) -≻ (4)>:
Source:
A row module over Q of rank 2

Matrix:
[ [  1,  0 ],
  [  0,  1 ] ]

Range:
A row module over Q of rank 2

A morphism in Rows( Q )

Image of <1*c:(1) -≻ (3)>:
Source:
A row module over Q of rank 2

Matrix:
[ [  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 12

A morphism in Rows( Q )

Image of <1*d:(3) -≻ (4)>:
Source:
A row module over Q of rank 2

Matrix:
[ [  1,  0 ],
  [  0,  1 ] ]

Range:
A row module over Q of rank 2

A morphism in Rows( Q )

Image of <1*y:(4) -≻ (4)>:
Source:
A row module over Q of rank 2

Matrix:
[ [  0,  1 ],
  [  0,  0 ] ]

Range:
A row module over Q of rank 2

A morphism in Rows( Q )

An object in PreSheaves( Q-algebroid( {1,2,3,4}[x:1-≻1,a:1-≻2,b:2-≻4,c:1-≻3,d:3-≻4,
y:4-≻4] ) defined by 4 objects and 6 generating morphisms, Rows( Q ) ) given by
the above data
gap> IsWellDefined( MonomorphismIntoSomeInjectiveObject( P ) );
true

2.2-7 NerveTruncatedInDegree2
‣ NerveTruncatedInDegree2( B )( attribute )

Returns: a presheaf

The input is a category B with finitely many objects equipped with a homomorphism structure with values in a finite complete and finite cocomplete category H. The output is the nerve of B truncated in degree \(2\), as an object in the category of presheaves on SimplicialCategoryTruncatedInDegree(\(2\)) with values in H.

We compute the nerve of the full subcategory of the simplicial category \(\Delta\) on the objects \([0], [1], [2]\).

gap> Delta2 := SimplicialCategoryTruncatedInDegree( 2 );
FreeCategory( RightQuiver(
  "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,
                   is:C2->C1,it:C2->C1,
                   ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) ) / relations
gap> RelationsOfFpCategory( Delta2 );
[ [ (s*id), (C0) ], [ (t*id), (C0) ],
  [ (ps*is), (C1) ], [ (pt*it), (C1) ],
  [ (is*id), (it*id) ], [ (pt*is), (id*t) ],
  [ (ps*it), (id*s) ], [ (s*pt), (t*ps) ],
  [ (s*mu), (s*ps) ], [ (t*mu), (t*pt) ],
  [ (mu*is), (C1) ], [ (mu*it), (C1) ] ]
gap> Size( Delta2 );
31
gap> N := NerveTruncatedInDegree2( Delta2 );
<An object in PreSheaves( FreeCategory( RightQuiver(
  "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,
                   is:C2->C1,it:C2->C1,
                   ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) ) / relations,
 SkeletalFinSets )>
gap> IsWellDefined( N );
true
gap> N.C0;
|3|
gap> Display( N.C0 );
{ 0, 1, 2 }
gap> N.C1;
|31|
gap> Display( N.C1 );
{ 0,..., 30 }
gap> N.C2;
|393|
gap> Display( N.C2 );
{ 0,..., 392 }
gap> N.id;
|3| → |31|
gap> Display( N.id );
{ 0, 1, 2 } ⱶ[ 0, 5, 21 ]→ { 0,..., 30 }
gap> IntCat := CategoryOfInternalCategories(
>                   RangeCategoryOfHomomorphismStructure( Delta2 ) );
FullSubcategoryByObjectMembershipFunction(
PreSheaves( FreeCategory( RightQuiver(
  "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,
                   is:C2->C1,it:C2->C1,
                   ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) ) / relations,
SkeletalFinSets ), ObjectMembershipFunction )
gap> IsWellDefined( N / IntCat );
true

We compute the nerve of the full subcategory of the simplicial category \(\Delta\) on the objects \([0], [1], [2]\).

gap> Delta2 := CategoryFromNerveData( SimplicialCategoryTruncatedInDegree( 2 ) );
FreeCategory( RightQuiver(
  "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,
                   is:C2->C1,it:C2->C1,
                   ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) ) / relations
gap> N := NerveTruncatedInDegree2( Delta2 );
<An object in PreSheaves( FreeCategory( RightQuiver(
  "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,
                   is:C2->C1,it:C2->C1,
                   ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) ) / relations,
 SkeletalFinSets )>
gap> IsWellDefined( N );
true
gap> N.C0;
|3|
gap> Display( N.C0 );
{ 0, 1, 2 }
gap> N.C1;
|31|
gap> Display( N.C1 );
{ 0,..., 30 }
gap> N.C2;
|393|
gap> Display( N.C2 );
{ 0,..., 392 }
gap> N.id;
|3| → |31|
gap> Display( N.id );
{ 0, 1, 2 } ⱶ[ 0, 5, 21 ]→ { 0,..., 30 }

We compute the nerve of the full subcategory of the simplicial category \(\Delta\) on the objects \([0], [1]\).

gap> LoadPackage( "FunctorCategories", false );
true
gap> Delta1 := UnderlyingCategory( FinReflexiveQuivers );
FreeCategory( RightQuiver( "Delta(C0,C1)[id:C1->C0,s:C0->C1,t:C0->C1]" ) )
/ [ s*id = C0, t*id = C0 ]
gap> N := NerveTruncatedInDegree2( Delta1 );
<An object in PreSheaves( FreeCategory( RightQuiver(
  "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,
                   is:C2->C1,it:C2->C1,
                   ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) ) / relations,
 SkeletalFinSets )>
gap> IsWellDefined( N );
true
gap> N.C0;
|2|
gap> Display( N.C0 );
{ 0, 1 }
gap> N.C1;
|7|
gap> Display( N.C1 );
{ 0,..., 6 }
gap> N.C2;
|26|
gap> Display( N.C2 );
{ 0,..., 25 }
gap> N.id;
|2| → |7|
gap> Display( N.id );
{ 0, 1 } ⱶ[ 0, 4 ]→ { 0,..., 6 }
gap> Display( N.is );
{ 0,..., 6 } ⱶ[ 0, 1, 11, 12, 17, 18, 19 ]→ { 0,..., 25 }
gap> Display( N.it );
{ 0,..., 6 } ⱶ[ 0, 4, 7, 8, 17, 20, 23 ]→ { 0,..., 25 }
gap> Delta2 := Source( N );
FreeCategory( RightQuiver(
  "Delta(C0,C1,C2)[id:C1->C0,s:C0->C1,t:C0->C1,
                   is:C2->C1,it:C2->C1,
                   ps:C1->C2,pt:C1->C2,mu:C1->C2]" ) ) / relations
gap> N( Delta2.it ) = N.it;
true
gap> L := [ Delta2.it, Delta2.id, Delta2.t ];
[ (C2)-[(it)]->(C1), (C1)-[(id)]->(C0), (C0)-[(t)]->(C1) ]
gap> mor := PreComposeList( L );
(C2)-[(is*id*t)]->(C1)
gap> DecompositionOfMorphismInCategory( mor );
[ (C2)-[(is)]->(C1), (C1)-[(id)]->(C0), (C0)-[(t)]->(C1) ]
gap> NL := N( mor );
|7| → |26|
gap> Display( NL );
{ 0,..., 6 } ⱶ[ 0, 0, 17, 17, 17, 17, 17 ]→ { 0,..., 25 }
gap> LN := PostComposeList( List( L, N ) );
|7| → |26|
gap> Display( LN );
{ 0,..., 6 } ⱶ[ 0, 0, 17, 17, 17, 17, 17 ]→ { 0,..., 25 }
gap> NL = LN;
true

2.2-8 SievesOfPathsToTruth
‣ SievesOfPathsToTruth( iota )( attribute )

Returns: a monomorphisms in a Hom-category of functors

The input is a monomorphism iota:\(Q \to P\) in the category of presheaves with values in RangeCategoryOfHomomorphismStructure(\(C\)) on the finitely presented category \(C:=\)(Source(\(P\))) with finite \(\mathrm{Hom}\)-sets. The output is the morphism from \(P\) to the SieveFunctor(\(C\)) mapping for each \(c \in C\) the element \(x \in P(c)\) to its paths to truth \(f: a \to c\) translating \(x\) into \(f(x) \in Q(a) \subseteq P(a)\).

2.2-9 FiniteStrictCoproductCompletionOfSourceCategory
‣ FiniteStrictCoproductCompletionOfSourceCategory( PSh )( attribute )

Returns: a CAP category

Given the presheaf category PSh=PreSheaves( \(C\), \(V\) ), return the "sub"category EnrichmentSpecificFiniteStrictCoproductCompletion( \(C\) ).

2.2-10 FiniteColimitCompletionWithStrictCoproductsOfSourceCategory
‣ FiniteColimitCompletionWithStrictCoproductsOfSourceCategory( PSh )( attribute )

Returns: a CAP category

Given the presheaf category PSh=PreSheaves( \(C\), \(V\) ), return the ambient category CoequalizerCompletion( FiniteStrictCoproductCompletionOfSourceCategory( PSh ) ).

2.2-11 CategoryOfColimitQuiversOfSourceCategory
‣ CategoryOfColimitQuiversOfSourceCategory( PSh )( attribute )

Returns: a CAP category

Given the presheaf category PSh=PreSheaves( \(C\), \(V\) ) return the ambient category CategoryOfColimitQuivers( \(C\) ), provided \(C\) is enriched over SkeletalFinSets or over IntervalCategory.

2.3 Operations

2.3-1 ApplyObjectInPreSheafCategoryOfFpEnrichedCategoryToObject
‣ ApplyObjectInPreSheafCategoryOfFpEnrichedCategoryToObject( F, obj )( operation )

Returns: a CAP object

Apply the presheaf F to the object obj. The shorthand is F(obj).

2.3-2 ApplyObjectInPreSheafCategoryOfFpEnrichedCategoryToMorphism
‣ ApplyObjectInPreSheafCategoryOfFpEnrichedCategoryToMorphism( F, mor )( operation )

Returns: a CAP morphism

Apply the presheaf F to the morphism mor. The shorthand is F(mor).

2.3-3 ApplyObjectInPreSheafCategoryOfFpEnrichedCategoryToGeneratingMorphismOrIdentity
‣ ApplyObjectInPreSheafCategoryOfFpEnrichedCategoryToGeneratingMorphismOrIdentity( F, mor )( operation )

Returns: a CAP morphism

Apply the presheaf F to the morphism mor which is either a generating morphism or an identity morphism.

2.3-4 ApplyMorphismInPreSheafCategoryOfFpEnrichedCategoryToObject
‣ ApplyMorphismInPreSheafCategoryOfFpEnrichedCategoryToObject( eta, obj )( operation )

Returns: a CAP morphism

Apply the presheaf morphism eta to the object obj. The shorthand is eta(o).

2.4 GAP Categories

2.4-1 IsPreSheafCategoryOfFpEnrichedCategory
‣ IsPreSheafCategoryOfFpEnrichedCategory( category )( filter )

Returns: true or false

The GAP category of a presheaf category of a finitely presented enriched category.

2.4-2 IsCellInPreSheafCategoryOfFpEnrichedCategory
‣ IsCellInPreSheafCategoryOfFpEnrichedCategory( cell )( filter )

Returns: true or false

The GAP category of cells in a presheaf category of a finitely presented enriched category.

2.4-3 IsObjectInPreSheafCategoryOfFpEnrichedCategory
‣ IsObjectInPreSheafCategoryOfFpEnrichedCategory( obj )( filter )

Returns: true or false

The GAP category of objects in a presheaf category of a finitely presented enriched category.

2.4-4 IsMorphismInPreSheafCategoryOfFpEnrichedCategory
‣ IsMorphismInPreSheafCategoryOfFpEnrichedCategory( mor )( filter )

Returns: true or false

The GAP category of morphisms in a presheaf category of a finitely presented enriched category.

2.5 Global variables

2.6 Examples

2.6-1 The subobject classifier

The subobject classifier of the PreSheaves\((C, H)\), where \(H\):=RangeCategoryOfHomomorphismStructure(\(C\)) is the functor of sieves, mapping each object \(c \in C^\mathrm{op}\) to the set of subobjects of the representable functor \(\mathrm{Hom}_C(-,c)\).

gap> LoadPackage( "FunctorCategories", false );
true
gap> q := RightQuiver( "q(1)[a:1->1]" );
q(1)[a:1->1]
gap> Fq := FreeCategory( q );
FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
gap> M0 := Fq / [ [ Fq.a^3, Fq.1 ] ];
FreeCategory( RightQuiver( "q(1)[a:1->1]" ) ) / [ a*a*a = 1 ]
gap> PShM0 := PreSheaves( M0 );
PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = 1 ], SkeletalFinSets )
gap> Omega0 := SubobjectClassifier( PShM0 );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = 1 ], SkeletalFinSets )>
gap> Display( Omega0 );
Image of <(1)>:
{ 0, 1 }

Image of (1)-[(a)]->(1):
{ 0, 1 } ⱶ[ 0, 1 ]→ { 0, 1 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = 1 ], SkeletalFinSets )
given by the above data
gap> IsProjective( Omega0 );
false
gap> IsReflexive( Omega0 );
false
gap> e := Exponential( Omega0, Omega0 );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = 1 ], SkeletalFinSets )>
gap> Display( e );
Image of <(1)>:
{ 0,..., 3 }

Image of (1)-[(a)]->(1):
{ 0,..., 3 } ⱶ[ 0, 1, 2, 3 ]→ { 0,..., 3 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = 1 ], SkeletalFinSets )
given by the above data
gap> ev0 := CartesianLeftEvaluationMorphism( Omega0, Omega0 );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = 1 ], SkeletalFinSets )>
gap> Display( ev0 );
Image of <(1)>:
{ 0,..., 7 } ⱶ[ 0, 1, 0, 1, 0, 0, 1, 1 ]→ { 0, 1 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = 1 ], SkeletalFinSets )
given by the above data
gap> M1 := Fq / [ [ Fq.a^3, Fq.a ] ];
FreeCategory( RightQuiver( "q(1)[a:1->1]" ) ) / [ a*a*a = a ]
gap> PShM1 := PreSheaves( M1 );
PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a ], SkeletalFinSets )
gap> Omega1 := SubobjectClassifier( PShM1 );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = a ], SkeletalFinSets )>
gap> Display( Omega1 );
Image of <(1)>:
{ 0, 1, 2 }

Image of (1)-[(a)]->(1):
{ 0, 1, 2 } ⱶ[ 0, 2, 2 ]→ { 0, 1, 2 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a ], SkeletalFinSets )
given by the above data
gap> IsProjective( Omega1 );
false
gap> IsReflexive( Omega1 );
false
gap> M2 := Fq / [ [ Fq.a^3, Fq.a^2 ] ];
FreeCategory( RightQuiver( "q(1)[a:1->1]" ) ) / [ a*a*a = a*a ]
gap> PShM2 := PreSheaves( M2 );
PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
gap> Omega2 := SubobjectClassifier( PShM2 );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = a*a ], SkeletalFinSets )>
gap> Display( Omega2 );
Image of <(1)>:
{ 0,..., 3 }

Image of (1)-[(a)]->(1):
{ 0,..., 3 } ⱶ[ 0, 2, 3, 3 ]→ { 0,..., 3 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data
gap> IsProjective( Omega2 );
true
gap> IsReflexive( Omega2 );
false
gap> true2 := TruthMorphismOfTrue( PShM2 );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = a*a ], SkeletalFinSets )>
gap> Display( true2 );
Image of <(1)>:
{ 0 } ⱶ[ 3 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data
gap> false2 := TruthMorphismOfFalse( PShM2 );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = a*a ], SkeletalFinSets )>
gap> Display( false2 );
Image of <(1)>:
{ 0 } ⱶ[ 0 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data
gap> iota := CreatePreSheafMorphism( EmbeddingOfSieveFunctor( M2 ) );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = a*a ], SkeletalFinSets )>
gap> Display( iota );
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 0, 4, 6, 7 ]→ { 0,..., 7 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data
gap> Target( iota );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
 / [ a*a*a = a*a ], SkeletalFinSets )>
gap> Display( Target( iota ) );
Image of <(1)>:
{ 0,..., 7 }

Image of (1)-[(a)]->(1):
{ 0,..., 7 } ⱶ[ 0, 0, 1, 1, 6, 6, 7, 7 ]→ { 0,..., 7 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data
gap> t2 := SubobjectOfClassifyingMorphism( true2 );
<A monomorphism in PreSheaves( FreeCategory(
 RightQuiver( "q(1)[a:1->1]" ) ) / [ a*a*a = a*a ], SkeletalFinSets )>
gap> Display( t2 );
Image of <(1)>:
{ 0 } ⱶ[ 0 ]→ { 0 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data
gap> f2 := SubobjectOfClassifyingMorphism( false2 );
<A monomorphism in PreSheaves( FreeCategory(
 RightQuiver( "q(1)[a:1->1]" ) ) / [ a*a*a = a*a ], SkeletalFinSets )>
gap> Display( f2 );
Image of <(1)>:
∅ ⱶ[  ]→ { 0 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data
gap> H := HomStructure( Omega2, Omega2 );
|8|
gap> Display( H );
{ 0,..., 7 }
gap> T2 := DistinguishedObjectOfHomomorphismStructure( PShM2 );
|1|
gap> L := List( H, i ->
>        InterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism(
>                Omega2, Omega2, MapOfFinSets( T2, [ i ], H ) ) );;
gap> Length( L );
8
gap> Perform( L, Display );
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 0, 0, 0, 0 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets ) given by the above data
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 3, 0, 0, 0 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets ) given by the above data
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 0, 1, 2, 3 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets ) given by the above data
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 3, 1, 2, 3 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets ) given by the above data
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 0, 2, 3, 3 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets ) given by the above data
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 3, 2, 3, 3 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets ) given by the above data
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 0, 3, 3, 3 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets ) given by the above data
Image of <(1)>:
{ 0,..., 3 } ⱶ[ 3, 3, 3, 3 ]→ { 0,..., 3 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(1)[a:1->1]" ) )
/ [ a*a*a = a*a ], SkeletalFinSets )
given by the above data

2.6-2 PreSheaves of non-f.p. categories (experimental)

2.6-3 The colimit completion of a cyclic monoid

Stream-vortex-system: Study the colimit completion of a cyclic monoid

gap> LoadPackage( "FunctorCategories", false );
true
gap> q := RightQuiver( "q(o)[x:o->o]" );
q(o)[x:o->o]
gap> F := FreeCategory( q );
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
gap> C := F / [ [ F.x^(3+4), F.x^3 ] ];
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ]
gap> C := CategoryFromDataTables( C );
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ]
gap> x := C.x;
(o)-[(x)]->(o)
gap> IsMonomorphism( x );
false
gap> IsEpimorphism( x );
false
gap> PSh := PreSheaves( C );
PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets )
gap> Fo := FinSet( 8 );
|8|
gap> Display( Fo );
{ 0,..., 7 }
gap> Fx := [ 5, 0, 3, 1, 1, 4, 3, 2 ];;
gap> Fx := MapOfFinSets( Fo, Fx, Fo );
|8| → |8|
gap> G :=  CreatePreSheafByValues( PSh, Pair( [ Fo ], [ Fx ] ) );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets )>
gap> IsWellDefined( G );
true
gap> Display( G );
Image of <(o)>:
{ 0,..., 7 }

Image of (o)-[(x)]->(o):
{ 0,..., 7 } ⱶ[ 5, 0, 3, 1, 1, 4, 3, 2 ]→ { 0,..., 7 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets ) given by the above data
gap> pi := EpimorphismFromSomeProjectiveObject( G );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets )>
gap> im := ImageObject( pi );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets )>
gap> Display( im );
Image of <(o)>:
{ 0,..., 7 }

Image of (o)-[(x)]->(o):
{ 0,..., 7 } ⱶ[ 5, 0, 3, 1, 1, 4, 3, 2 ]→ { 0,..., 7 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets ) given by the above data
gap> im = G;
true
gap> coim := CoimageObject( pi );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets )>
gap> Display( coim );
Image of <(o)>:
{ 0,..., 7 }

Image of (o)-[(x)]->(o):
{ 0,..., 7 } ⱶ[ 1, 2, 3, 4, 5, 6, 3, 2 ]→ { 0,..., 7 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets ) given by the above data
gap> coim = im;
false
gap> iso := MorphismFromCoimageToImage( pi );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets )>
gap> IsWellDefined( iso );
true
gap> IsIsomorphism( iso );
true
gap> Display( iso );
Image of <(o)>:
{ 0,..., 7 } ⱶ[ 7, 2, 3, 1, 0, 5, 4, 6 ]→ { 0,..., 7 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets ) given by the above data
gap> inv := InverseOfMorphismFromCoimageToImage( pi );
<An isomorphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets )>
gap> Display( inv );
Image of <(o)>:
{ 0,..., 7 } ⱶ[ 4, 3, 1, 2, 6, 5, 7, 0 ]→ { 0,..., 7 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ], SkeletalFinSets ) given by the above data
gap> IsOne( PreCompose( iso, inv ) );
true
gap> IsOne( PreCompose( inv, iso ) );
true
gap> coYoG := CoYonedaLemmaOnObjects( G );
<An object in FiniteColimitCompletionWithStrictCoproducts(
 FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ] )>
gap> sec := SectionFromOptimizedCoYonedaProjectiveObjectIntoCoYonedaProjectiveObject( G );
<A split monomorphism in FiniteStrictCoproductCompletion(
 FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x = x*x*x ] )>
gap> IsWellDefined( sec );
true
gap> Display( sec );
{ 0, 1 } ⱶ[ 7, 6 ]→ { 0,..., 7 }

[ (o)-[(o)]->(o), (o)-[(o)]->(o) ]

A morphism in FiniteStrictCoproductCompletion(
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ] ) given by the above data

Stream-vortex-system: Study the colimit completion of a cyclic monoid

gap> LoadPackage( "FunctorCategories", false );
true
gap> q := RightQuiver( "q(o)[x:o->o]" );
q(o)[x:o->o]
gap> F := FreeCategory( q );
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
gap> C := F / [ [ F.x^(4+12), F.x^4 ] ];
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ]
gap> x := C.x;
(o)-[(x)]->(o)
gap> IsMonomorphism( x );
false
gap> IsEpimorphism( x );
false
gap> PSh := PreSheaves( C );
PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )
gap> Fo := FinSet( 18 );
|18|
gap> Display( Fo );
{ 0,..., 17 }
gap> Fx := [ 5, 0, 1, 2, 3, 4, 0, 2, 5, 6, 6, 7, 7, 8, 8, 9, 9, 16 ];;
gap> Fx := MapOfFinSets( Fo, Fx, Fo );
|18| → |18|
gap> G :=  CreatePreSheafByValues( PSh, Pair( [ Fo ], [ Fx ] ) );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )>
gap> IsWellDefined( G );
true
gap> Display( G );
Image of <(o)>:
{ 0,..., 17 }

Image of (o)-[(x)]->(o):
{ 0,..., 17 } ⱶ[ 5, 0, 1, 2, 3, 4, 0, 2, 5,
                 6, 6, 7, 7, 8, 8, 9, 9, 16 ]→ { 0,..., 17 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )
given by the above data
gap> pi := EpimorphismFromSomeProjectiveObject( G );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )>
gap> im := ImageObject( pi );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )>
gap> im = G;
true
gap> coim := CoimageObject( pi );
<An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )>
gap> Display( coim );
Image of <(o)>:
{ 0,..., 17 }

Image of (o)-[(x)]->(o):
{ 0,..., 17 } ⱶ[ 1, 2, 3, 4, 5, 6, 7, 8, 9,
                 4, 2, 3, 13, 8, 13, 16, 5, 16 ]→ { 0,..., 17 }

An object in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )
given by the above data
gap> coim = im;
false
gap> iso := MorphismFromCoimageToImage( pi );
<A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )>
gap> IsWellDefined( iso );
true
gap> IsIsomorphism( iso );
true
gap> Display( iso );
Image of <(o)>:
{ 0,..., 17 } ⱶ[ 17, 16, 9, 6, 0, 5, 4, 3, 2,
                 1, 15, 10, 11, 7, 12, 13, 8, 14 ]→ { 0,..., 17 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )
given by the above data
gap> inv := InverseOfMorphismFromCoimageToImage( pi );
<An isomorphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )>
gap> Display( inv );
Image of <(o)>:
{ 0,..., 17 } ⱶ[ 4, 9, 8, 7, 6, 5, 3, 13, 16,
                 2, 11, 12, 14, 15, 17, 10, 1, 0 ]→ { 0,..., 17 }

A morphism in PreSheaves( FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ], SkeletalFinSets )
given by the above data
gap> IsOne( PreCompose( iso, inv ) );
true
gap> IsOne( PreCompose( inv, iso ) );
true
gap> coYoG := CoYonedaLemmaOnObjects( G );
<An object in FiniteColimitCompletionWithStrictCoproducts(
 FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ] )>
gap> sec := SectionFromOptimizedCoYonedaProjectiveObjectIntoCoYonedaProjectiveObject( G );
<A split monomorphism in FiniteStrictCoproductCompletion(
 FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
 / [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ] )>
gap> IsWellDefined( sec );
true
gap> Display( sec );
{ 0,..., 6 } ⱶ[ 17, 15, 10, 11, 12, 13, 14 ]→ { 0,..., 17 }

[ (o)-[(o)]->(o), (o)-[(o)]->(o), (o)-[(o)]->(o), (o)-[(o)]->(o),
  (o)-[(o)]->(o), (o)-[(o)]->(o), (o)-[(o)]->(o) ]

A morphism in FiniteStrictCoproductCompletion(
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x = x*x*x*x ] ) given by the above data

2.6-4 The linearization of the colimit completion of a cyclic monoid

Stream-vortex-system: Study the linearization of the colimit completion of a cyclic monoid

gap> LoadPackage( "FunctorCategories", false );
true
gap> q := RightQuiver( "q(o)[x:o->o]" );
q(o)[x:o->o]
gap> F := FreeCategory( q );
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
gap> C := F / [ [ F.x^(3+4), F.x^3 ] ];
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
/ [ x*x*x*x*x*x*x = x*x*x ]
gap> Q := HomalgFieldOfRationals( );
Q
gap> QC := Q[C];
Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) ) / relations
gap> QC := AlgebroidFromDataTables( QC );
Q-algebroid( {o}[x:o-≻o] ) defined by 1 object and 1 generating morphism
gap> x := QC.x;
<1*x:(o) -≻ (o)>
gap> IsMonomorphism( x );
false
gap> IsEpimorphism( x );
false
gap> PSh := PreSheaves( QC );
PreSheaves( Q-algebroid( {o}[x:o-≻o] )
defined by 1 object and 1 generating morphism, Rows( Q ) )
gap> H := Target( PSh );
Rows( Q )
gap> Fo := 8 / H;
<A row module over Q of rank 8>
gap> Fx := [ 5, 0, 3, 1, 1, 4, 3, 2 ];;
gap> Fx := IdentityMat( 8 ){1 + Fx};;
gap> Fx := HomalgMatrix( Fx, 8, 8, Q );;
gap> Fx := MorphismConstructor( Fo, Fx, Fo );
<A morphism in Rows( Q )>
gap> Display( Fx );
Source:
A row module over Q of rank 8

Matrix:
[ [  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  1,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  1,  0,  0,  0,  0,  0,  0 ],
  [  0,  1,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  1,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  1,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 8

A morphism in Rows( Q )
gap> G :=  CreatePreSheafByValues( PSh, Pair( [ Fo ], [ Fx ] ) );
<(o)->8; (x)->8x8>
gap> IsWellDefined( G );
true
gap> cy := ProjectionOntoCoequalizer( CoYonedaLemmaCoequalizerPair( G )[2] );
<(o)->56x8>
gap> pi := EpimorphismFromSomeProjectiveObject( G );
<(o)->14x8>
gap> CoimageObject( cy ) = CoimageObject( pi );
false
gap> Display( CoimageObject( cy ) );
Image of <(o)>:
A row module over Q of rank 8

Image of <1*x:(o) -≻ (o)>:
Source:
A row module over Q of rank 8

Matrix:
[ [  0,  1,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  1,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  1,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  0,  1,  0,  0,  0 ] ]

Range:
A row module over Q of rank 8

A morphism in Rows( Q )

An object in PreSheaves( Q-algebroid( {o}[x:o-≻o] )
defined by 1 object and 1 generating morphism, Rows( Q ) )
given by the above data
gap> Display( CoimageObject( pi ) );
Image of <(o)>:
A row module over Q of rank 8

Image of <1*x:(o) -≻ (o)>:
Source:
A row module over Q of rank 8

Matrix:
[ [  0,  1,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  1,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  1,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  1,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  1,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 8

A morphism in Rows( Q )

An object in PreSheaves( Q-algebroid( {o}[x:o-≻o] )
defined by 1 object and 1 generating morphism, Rows( Q ) )
given by the above data
gap> ps := EpimorphismFromSomeProjectiveObjectUsingSplits( G );
<(o)->14x8>
gap> nf := CoimageObject( ps );
<(o)->8; (x)->8x8>
gap> nf = CoimageObject( cy );
false
gap> Display( nf );
Image of <(o)>:
A row module over Q of rank 8

Image of <1*x:(o) -≻ (o)>:
Source:
A row module over Q of rank 8

Matrix:
[ [  0,  1,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  1,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  1,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  1,  0 ],
  [  0,  0,  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0 ] ]

Range:
A row module over Q of rank 8

A morphism in Rows( Q )

An object in PreSheaves( Q-algebroid( {o}[x:o-≻o] )
defined by 1 object and 1 generating morphism, Rows( Q ) )
given by the above data
gap> section := SectionFromOptimizedCoYonedaProjectiveObjectIntoCoYonedaProjectiveObject( G );
<A morphism in AdditiveClosure( Q-algebroid( {o}[x:o-≻o] )
 defined by 1 object and 1 generating morphism )
 defined by a 2 x 8 matrix of underlying morphisms>
gap> IsWellDefined( section );
true
gap> Display( section );
A 2 x 8 matrix with entries in Q-algebroid( {o}[x:o-≻o] )
defined by 1 object and 1 generating morphism

[1,1]: <0:(o) -≻ (o)>
[1,2]: <0:(o) -≻ (o)>
[1,3]: <0:(o) -≻ (o)>
[1,4]: <0:(o) -≻ (o)>
[1,5]: <0:(o) -≻ (o)>
[1,6]: <0:(o) -≻ (o)>
[1,7]: <0:(o) -≻ (o)>
[1,8]: <1*id(o):(o) -≻ (o)>
[2,1]: <0:(o) -≻ (o)>
[2,2]: <0:(o) -≻ (o)>
[2,3]: <0:(o) -≻ (o)>
[2,4]: <0:(o) -≻ (o)>
[2,5]: <0:(o) -≻ (o)>
[2,6]: <0:(o) -≻ (o)>
[2,7]: <1*id(o):(o) -≻ (o)>
[2,8]: <0:(o) -≻ (o)>
gap> Emb := EmbeddingFunctorOfFiniteStrictCoproductCompletionIntoPreSheaves( PSh );
The embedding functor of the finite coproduct completion into f.p. presheaves
gap> ip := PreCompose( Emb( section ), cy );
<(o)->14x8>
gap> IsEqualAsFactorobjects( pi, ip );
true
gap> pi = ip;
false
gap> CoimageObject( ip ) = CoimageObject( pi );
true
gap> retraction := RetractionFromCoYonedaProjectiveObjectOntoOptimizedCoYonedaProjectiveObject( G );
<A morphism in AdditiveClosure( Q-algebroid( {o}[x:o-≻o] )
 defined by 1 object and 1 generating morphism )
 defined by a 8 x 2 matrix of underlying morphisms>
gap> IsWellDefined( retraction );
true
gap> Display( retraction );
A 8 x 2 matrix with entries in Q-algebroid( {o}[x:o-≻o] )
defined by 1 object and 1 generating morphism

[1,1]: <0:(o) -≻ (o)>
[1,2]: <1*x^3:(o) -≻ (o)>
[2,1]: <0:(o) -≻ (o)>
[2,2]: <1*x^2:(o) -≻ (o)>
[3,1]: <1*x:(o) -≻ (o)>
[3,2]: <0:(o) -≻ (o)>
[4,1]: <0:(o) -≻ (o)>
[4,2]: <1*x:(o) -≻ (o)>
[5,1]: <0:(o) -≻ (o)>
[5,2]: <1*x^5:(o) -≻ (o)>
[6,1]: <0:(o) -≻ (o)>
[6,2]: <1*x^4:(o) -≻ (o)>
[7,1]: <0:(o) -≻ (o)>
[7,2]: <1*id(o):(o) -≻ (o)>
[8,1]: <1*id(o):(o) -≻ (o)>
[8,2]: <0:(o) -≻ (o)>
gap> IsOne( PreCompose( section, retraction ) );
true
gap> co := ProjectionOntoCoequalizer( OptimizedCoYonedaLemmaCoequalizerPair( G )[2] );
<(o)->14x8>
gap> IsEqualAsFactorobjects( pi, co );
true
gap> pi = co;
false
gap> CoimageObject( pi ) = CoimageObject( co );
true

2.6-5 The Weierstrass normal form
gap> LoadPackage( "FunctorCategories", ">= 2023.10-06", false );
true
gap> Q := HomalgFieldOfRationals( );
Q
gap> R := Q["x"];
Q[x]
gap> x := Indeterminates( R )[1];
x
gap> p := x^2-x-1;
x^2-x-1
gap> d := Degree( p );
2
gap> cmat3 := HomalgMatrix( CompanionMat( p^3 ), 3 * d, 3 * d, Q );
<A 6 x 6 matrix over an internal ring>
gap> cmat2 := HomalgMatrix( CompanionMat( p^2 ), 2 * d, 2 * d, Q );
<A 4 x 4 matrix over an internal ring>
gap> cmat1 := HomalgMatrix( CompanionMat( p^1 ), 1 * d, 1 * d, Q );
<A 2 x 2 matrix over an internal ring>
gap> Display( cmat3 );
[ [   0,   0,   0,   0,   0,   1 ],
  [   1,   0,   0,   0,   0,   3 ],
  [   0,   1,   0,   0,   0,   0 ],
  [   0,   0,   1,   0,   0,  -5 ],
  [   0,   0,   0,   1,   0,   0 ],
  [   0,   0,   0,   0,   1,   3 ] ]
gap> cmat := Q * DiagMat( [ cmat1, cmat1, cmat3 ] );
<An unevaluated 10 x 10 matrix over an internal ring>
gap> n := NrRows( cmat );
10
gap> inv := HomalgMatrix( RandomUnimodularMat( n ), n, n, Q );
<A 10 x 10 matrix over an internal ring>
gap> mat := LeftInverse( inv ) * cmat * inv;
<An unevaluated 10 x 10 matrix over an internal ring>
gap> mat :=
>   [ [     0,     0,     3,     0,    -1,     3,    -8,     6,     0,    -3 ],
>     [    39,    15,   -25,     2,     0,    -9,    10,   -15,     2,     1 ],
>     [    21,     5,    -5,     3,    -1,     2,   -16,     5,     0,    -7 ],
>     [    30,    10,    -4,     3,    -5,    10,   -44,    22,    -2,   -18 ],
>     [    40,     0,   -66,     9,    27,   -70,   170,  -140,     9,    62 ],
>     [  -204,     0,    82,   -57,   -36,    50,    29,   100,     5,    13 ],
>     [   -52,   -15,    18,    -6,     2,    -1,    30,    -5,     0,    14 ],
>     [   105,     0,   -51,    29,    22,   -36,    14,   -72,    -1,     4 ],
>     [     6,     1,   -11,     1,     3,    -9,    19,   -18,     0,     7 ],
>     [   152,    45,   -52,    17,    -7,     5,   -93,    19,     0,   -43 ] ];;
gap> mat := HomalgMatrix( mat, 10, 10 , Q );
<A 10 x 10 matrix over an internal ring>
gap> q := RightQuiver( "q(o)[x:o->o]" );
q(o)[x:o->o]
gap> F := FreeCategory( q );
FreeCategory( RightQuiver( "q(o)[x:o->o]" ) )
gap> QF := Q[F];
Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) )
gap> A := QF / [ QF.xxxxxx - 3 * QF.xxxxx + 5 * QF.xxx - 3 * QF.x - IdentityMorphism( QF.o ) ];
Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) ) / relations
gap> o := A.o;
<(o)>
gap> x := A.x;
(o)-[{ 1*(x) }]->(o)
gap> IsMonomorphism( A.x );
true
gap> IsEpimorphism( A.x );
true
gap> IsIsomorphism( A.x );
true
gap> Qmat := RangeCategoryOfHomomorphismStructure( A );
Rows( Q )
gap> U := n / Qmat;
<A row module over Q of rank 10>
gap> phi := mat / Qmat;
<A morphism in Rows( Q )>
gap> PSh := PreSheaves( A );
PreSheaves( Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) )
/ relations, Rows( Q ) )
gap> G := CreatePreSheafByValues( PSh, Pair( [ U ], [ phi ] ) );
<(o)->10; (x)->10x10>
gap> IsWellDefined( G );
true
gap> Display( G );
Image of <(o)>:
A row module over Q of rank 10

Image of (o)-[{ 1*(x) }]->(o):
Source:
A row module over Q of rank 10

Matrix:
[ [     0,     0,     3,     0,    -1,     3,    -8,     6,     0,    -3 ],
  [    39,    15,   -25,     2,     0,    -9,    10,   -15,     2,     1 ],
  [    21,     5,    -5,     3,    -1,     2,   -16,     5,     0,    -7 ],
  [    30,    10,    -4,     3,    -5,    10,   -44,    22,    -2,   -18 ],
  [    40,     0,   -66,     9,    27,   -70,   170,  -140,     9,    62 ],
  [  -204,     0,    82,   -57,   -36,    50,    29,   100,     5,    13 ],
  [   -52,   -15,    18,    -6,     2,    -1,    30,    -5,     0,    14 ],
  [   105,     0,   -51,    29,    22,   -36,    14,   -72,    -1,     4 ],
  [     6,     1,   -11,     1,     3,    -9,    19,   -18,     0,     7 ],
  [   152,    45,   -52,    17,    -7,     5,   -93,    19,     0,   -43 ] ]

Range:
A row module over Q of rank 10

A morphism in Rows( Q )

An object in PreSheaves(
Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) ) / relations,
Rows( Q ) ) given by the above data
gap> cy := ProjectionOntoCoequalizer( CoYonedaLemmaCoequalizerPair( G )[2] );
<(o)->60x10>
gap> pi := EpimorphismFromSomeProjectiveObject( G );
<(o)->18x10>
gap> pmat := UnderlyingMatrix( CoimageObject( pi ).x );
<An unevaluated 10 x 10 matrix over an internal ring>
gap> range3 := [ 1 .. 3 * d ];
[ 1 .. 6 ]
gap> pmat3 := CertainColumns( CertainRows( pmat, range3 ), range3 );
<An unevaluated 6 x 6 matrix over an internal ring>
gap> Display( pmat3 );
[ [   0,   1,   0,   0,   0,   0 ],
  [   0,   0,   1,   0,   0,   0 ],
  [   0,   0,   0,   1,   0,   0 ],
  [   0,   0,   0,   0,   1,   0 ],
  [   0,   0,   0,   0,   0,   1 ],
  [   1,   3,   0,  -5,   0,   3 ] ]
gap> pmat3 = TransposedMatrix( cmat3 );
true
gap> range1 := [ 1 .. 1 * d ];
[ 1, 2 ]
gap> pmat1_1 := CertainColumns( CertainRows( pmat, 3 * d + range1 ), 3 * d + range1 );
<An unevaluated 2 x 2 matrix over an internal ring>
gap> Display( pmat1_1 );
[ [  0,  1 ],
  [  1,  1 ] ]
gap> pmat1_1 = TransposedMatrix( cmat1 );
true
gap> pmat1_2 := CertainColumns( CertainRows( pmat, 4 * d + range1 ), 4 * d + range1 );
<An unevaluated 2 x 2 matrix over an internal ring>
gap> Display( pmat1_2 );
[ [  0,  1 ],
  [  1,  1 ] ]
gap> pmat1_2 = TransposedMatrix( cmat1 );
true
gap> CoimageObject( cy ) = CoimageObject( pi );
false
gap> ps := EpimorphismFromSomeProjectiveObjectUsingSplits( G );
<(o)->18x10>
gap> nf := CoimageObject( ps );
<(o)->10; (x)->10x10>
gap> nf = CoimageObject( cy );
false
gap> Display( nf );
Image of <(o)>:
A row module over Q of rank 10

Image of (o)-[{ 1*(x) }]->(o):
Source:
A row module over Q of rank 10

Matrix:
[ [   0,   1,   0,   0,   0,   0,   0,   0,   0,   0 ],
  [   0,   0,   1,   0,   0,   0,   0,   0,   0,   0 ],
  [   0,   0,   0,   1,   0,   0,   0,   0,   0,   0 ],
  [   0,   0,   0,   0,   1,   0,   0,   0,   0,   0 ],
  [   0,   0,   0,   0,   0,   1,   0,   0,   0,   0 ],
  [   1,   3,   0,  -5,   0,   3,   0,   0,   0,   0 ],
  [   0,   0,   0,   0,   0,   0,   0,   1,   0,   0 ],
  [   0,   0,   0,   0,   0,   0,   1,   1,   0,   0 ],
  [   0,   0,   0,   0,   0,   0,   0,   0,   0,   1 ],
  [   0,   0,   0,   0,   0,   0,   0,   0,   1,   1 ] ]

Range:
A row module over Q of rank 10

A morphism in Rows( Q )

An object in PreSheaves(
Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) ) / relations,
Rows( Q ) ) given by the above data
gap> section := SectionFromOptimizedCoYonedaProjectiveObjectIntoCoYonedaProjectiveObject( G );
<A morphism in AdditiveClosure(
 Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) ) / relations )
 defined by a 3 x 10 matrix of underlying morphisms>
gap> IsWellDefined( section );
true
gap> Emb := EmbeddingFunctorOfFiniteStrictCoproductCompletionIntoPreSheaves( PSh );
The embedding functor of the finite coproduct completion into f.p. presheaves
gap> ip := PreCompose( Emb( section ), cy );
<(o)->18x10>
gap> IsEqualAsFactorobjects( pi, ip );
true
gap> pi = ip;
false
gap> CoimageObject( ip ) = CoimageObject( pi );
true
gap> retraction := RetractionFromCoYonedaProjectiveObjectOntoOptimizedCoYonedaProjectiveObject( G );
<A morphism in AdditiveClosure(
 Algebra( Q, FreeCategory( RightQuiver( "q(o)[x:o->o]" ) ) ) / relations )
 defined by a 10 x 3 matrix of underlying morphisms>
gap> IsWellDefined( retraction );
true
gap> IsOne( PreCompose( section, retraction ) );
true
gap> co := ProjectionOntoCoequalizer( OptimizedCoYonedaLemmaCoequalizerPair( G )[2] );
<(o)->18x10>
gap> IsEqualAsFactorobjects( pi, co );
true
gap> pi = co;
false
gap> CoimageObject( pi ) = CoimageObject( co );
true

2.6-6 Optimized co-Yoneda lemma for posets
gap> LoadPackage( "FunctorCategories", ">= 2024.03-13", false );
true
gap> q := FinQuiver( "q(a,l,r,i,c,b)[ac:a->c,lc:l->c,ri:r->i,ic:i->c,cb:c->b]" );
FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" )
gap> F := PathCategory( q );
PathCategory(
FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" ) )
gap> Size( F );
16
gap> P := PosetOfCategory( F );
PosetOfCategory( PathCategory(
FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" ) ) )
gap> Size( P );
16
gap> PSh := PreSheaves( P );
PreSheaves( PosetOfCategory( PathCategory(
FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" ) ) ),
IntervalCategory )
gap> c := PSh.c;
<A projective object in PreSheaves( PosetOfCategory( PathCategory(
 FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" ) ) ),
 IntervalCategory )>
gap> section :=
>   SectionFromOptimizedCoYonedaProjectiveObjectIntoCoYonedaProjectiveObject( c );
<A split monomorphism in FiniteStrictCoproductCompletion(
 PosetOfCategory( PathCategory(
 FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" ) ) ) )>
gap> IsWellDefined( section );
true
gap> IsIsomorphism( section );
true
gap> Display( Source( section ) );
[ 1, [ An object in the poset given by: (c) ] ]

An object in FiniteStrictCoproductCompletion( PosetOfCategory( PathCategory(
FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" ) ) ) )
given by the above data
gap> Display( Target( section ) );
[ 5, [ An object in the poset given by: (a),
       An object in the poset given by: (l),
       An object in the poset given by: (r),
       An object in the poset given by: (i),
       An object in the poset given by: (c) ] ]

An object in FiniteStrictCoproductCompletion( PosetOfCategory( PathCategory(
FinQuiver( "q(a,l,r,i,c,b)[ac:a-≻c,lc:l-≻c,ri:r-≻i,ic:i-≻c,cb:c-≻b]" ) ) ) )
given by the above data
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Ind

generated by GAPDoc2HTML