diff --git a/PackageInfo.g b/PackageInfo.g
index 6931305..d169a7d 100644
--- a/PackageInfo.g
+++ b/PackageInfo.g
@@ -11,7 +11,7 @@ SetPackageInfo( rec(
PackageName := "CatReps",
Subtitle := "Representations and cohomology of finite categories",
Version := Maximum( [
- "2020.07.05", ## Mohamed's version
+ "2020.09.02", ## Mohamed's version
## this line prevents merge conflicts
"2020.07.04", ## Tibor's version
## this line prevents merge conflicts
diff --git a/Project.toml b/Project.toml
new file mode 100644
index 0000000..9fc094f
--- /dev/null
+++ b/Project.toml
@@ -0,0 +1,6 @@
+[deps]
+HomalgProject = "50bd374c-87b5-11e9-015a-2febe71398bd"
+IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a"
+
+[compat]
+julia = "1.3"
diff --git a/README.md b/README.md
index 4d33601..d891d87 100644
--- a/README.md
+++ b/README.md
@@ -67,9 +67,9 @@ Q
### History of this package
-`CatReps` was originally meant to wrap [Peter Webb](https://www-users.math.umn.edu/~webb/)'s pre-package [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) into the categorical framework offered by [`CAP`](https://homalg-project.github.io/CAP_project/). The only dependency left can be found in the file [gap/catreps.g](https://codecov.io/gh/homalg-project/CatReps/src/master/gap/catreps.g). The entire functionality of [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) is now available through [`FunctorCategories`](https://github.com/homalg-project/FunctorCategories).
+`CatReps` was originally meant to wrap [Peter Webb](https://www-users.math.umn.edu/~webb/)'s pre-package [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) into the categorical framework offered by [`CAP`](https://homalg-project.github.io/docs/CAP_project/). The only dependency left can be found in the file [gap/catreps.g](https://codecov.io/gh/homalg-project/CatReps/src/master/gap/catreps.g). The entire functionality of [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) is now available through [`FunctorCategories`](https://homalg-project.github.io/pkg/FunctorCategories).
-In March 2020 [Peter Webb](https://www-users.math.umn.edu/~webb/)' and his coauthors made a major new release of the former packages `reps` and `catreps` in which they are combined as one. The code of these former packages is still available at [`groupreps`](https://www-users.math.umn.edu/~webb/GAPfiles/groupreps) ([manual](https://www-users.math.umn.edu/~webb/GAPfiles/grouprepstutorial.html)) (the new name for the former reps) and [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) ([manual](https://www-users.math.umn.edu/~webb/GAPfiles/catrepstutorial.html)), but it will no longer be supported. The new package [`reps`](https://www-users.math.umn.edu/~webb/GAPfiles/reps) combines the functionality of both former packages.
+In March 2020 [Peter Webb](https://www-users.math.umn.edu/~webb/)' and his coauthors made a major new release of the former packages `reps` and `catreps` in which they are combined as one. The code of these former packages is still available at [`groupreps`](https://www-users.math.umn.edu/~webb/GAPfiles/groupreps) ([tutorial](https://www-users.math.umn.edu/~webb/GAPfiles/grouprepstutorial.html)) (the new name for the former reps) and [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) ([tutorial](https://www-users.math.umn.edu/~webb/GAPfiles/catrepstutorial.html)), but it will no longer be supported. The new package [`reps`](https://www-users.math.umn.edu/~webb/GAPfiles/reps) combines the functionality of both former packages.
[docs-img]: https://img.shields.io/badge/docs-stable-blue.svg
diff --git a/examples/CategoryOfRepresentations.g b/examples/CategoryOfRepresentations.g
index 6ad7b63..ca1b9a2 100644
--- a/examples/CategoryOfRepresentations.g
+++ b/examples/CategoryOfRepresentations.g
@@ -18,7 +18,7 @@ SetIsLinearClosureOfACategory( kq, true );
#! A representation of the category c3c3 is another way to encode
#! a module homomorphism between two modules over the cyclic group $C_3$ of order $3$:
#! The vector space underlying the first module is the given by the value of (1).
-#! The action of C3 on the first module is given by the value of (a).
+#! The action of $C_3$ on the first module is given by the value of (a).
#! The vector space underlying the second module is the given by the value of (2).
#! The action on the second module is given by the value of (c).
#! The above relation of the quiver states that the value of (b) is
@@ -65,9 +65,9 @@ Display( zero );
#! (an empty 0 x 0 matrix)
#!
#! A zero, identity morphism in Category of matrices over GF(3)
-const := TensorUnit( CatReps );
+unit := TensorUnit( CatReps );
#! <(1)->1, (2)->1; (a)->1x1, (b)->1x1, (c)->1x1>
-Display( const );
+Display( unit );
#! An object in The category of functors: Algebroid generated by the
#! right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices
#! over GF(3) defined by the following data:
@@ -139,13 +139,13 @@ Display( nine );
#! . . . 1
#!
#! A morphism in Category of matrices over GF(3)
-nine(kq.1);
+nine( kq.1 );
#!
-nine(kq.2);
+nine( kq.2 );
#!
-nine(kq.b);
+nine( kq.b );
#!
-Display( nine(kq.b) );
+Display( nine( kq.b ) );
#! . 1 . .
#! . . 1 .
#! . . . .
@@ -165,11 +165,11 @@ fortyone( kq.1 );
#!
fortyone( kq.2 );
#!
-fortyone(kq.a) = TensorProductOnMorphisms( nine(kq.a), nine(kq.a) );
+fortyone( kq.a ) = TensorProductOnMorphisms( nine( kq.a ), nine( kq.a ) );
#! true
-fortyone(kq.b) = TensorProductOnMorphisms( nine(kq.b), nine(kq.b) );
+fortyone( kq.b ) = TensorProductOnMorphisms( nine( kq.b ), nine( kq.b ) );
#! true
-fortyone(kq.c) = TensorProductOnMorphisms( nine(kq.c), nine(kq.c) );
+fortyone( kq.c ) = TensorProductOnMorphisms( nine( kq.c ), nine( kq.c ) );
#! true
Display( fortyone );
#! An object in The category of functors: Algebroid generated by the
@@ -271,8 +271,6 @@ iso := UniversalMorphismFromDirectSum( etas );
#! <(1)->25x25, (2)->16x16>
IsIsomorphism( iso );
#! true
-iso;
-#! <(1)->25x25, (2)->16x16>
Display( Source( iso ) );
#! An object in The category of functors: Algebroid generated by the
#! right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices
@@ -459,7 +457,7 @@ Display( six );
#! . . 1
#!
#! A morphism in Category of matrices over GF(3)
-emb := EmbeddingOfSumOfImagesOfAllMorphisms( const, six );
+emb := EmbeddingOfSumOfImagesOfAllMorphisms( unit, six );
#! <(1)->1x3, (2)->0x3>
Display( emb );
#! A morphism in The category of functors: Algebroid generated by the
@@ -509,9 +507,9 @@ Display( s1 );
#! A zero, isomorphism in Category of matrices over GF(3)
kqop := AlgebroidOverOppositeAlgebra( kq );
#! Algebroid generated by the right quiver q_op(2)[a:1->1,b:2->1,c:2->2]
-Y := YonedaEmbedding( kqop );
+Yop := YonedaEmbedding( kqop );
#! Yoneda embedding functor
-Display( Y );
+Display( Yop );
#! Yoneda embedding functor:
#!
#! Algebroid generated by the right quiver q_op(2)[a:1->1,b:2->1,c:2->2]
@@ -519,7 +517,7 @@ Display( Y );
#! V
#! The category of functors: Algebroid generated by the right quiver
#! q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3)
-proj1 := Y( kqop.1 );
+proj1 := Yop( kqop.1 );
#! <(1)->3, (2)->3; (a)->3x3, (b)->3x3, (c)->3x3>
IsProjective( proj1 );
#! true
@@ -557,7 +555,7 @@ Display( proj1 );
#! 1 . .
#!
#! A morphism in Category of matrices over GF(3)
-e1 := EmbeddingOfSumOfImagesOfAllMorphisms( const, proj1 );
+e1 := EmbeddingOfSumOfImagesOfAllMorphisms( unit, proj1 );
#! <(1)->1x3, (2)->1x3>
Source( e1 );
#! <(1)->1, (2)->1; (a)->1x1, (b)->1x1, (c)->1x1>
@@ -597,17 +595,30 @@ Display( five );
#! . . 1
#!
#! A morphism in Category of matrices over GF(3)
+#! @EndExample
+#! The next calculation shows that the $3$-dimensional representation of $C_3$
+#! associated to object $1$ is a single copy of the regular representation of $C_3$.
+#! @Example
SumOfImagesOfAllMorphisms( s1, six );
#! <(1)->1, (2)->0; (a)->1x1, (b)->1x0, (c)->0x0>
+#! @EndExample
+#! The next calculation shows that the quotient representation five maps
+#! its module at object $1$ monomorphically to the module at object $2$,
+#! which must either be indecomposable of dimension $3$, or else the
+#! direct sum of indecomposables of dimension $2$ and $1$.
+#! @Example
SumOfImagesOfAllMorphisms( s1, five );
#! <(1)->0, (2)->0; (a)->0x0, (b)->0x0, (c)->0x0>
-SumOfImagesOfAllMorphisms( const, five );
+SumOfImagesOfAllMorphisms( unit, five );
#! <(1)->1, (2)->1; (a)->1x1, (b)->1x1, (c)->1x1>
-SumOfImagesOfAllMorphisms( five, const );
-#! <(1)->0, (2)->1; (a)->0x0, (b)->0x1, (c)->1x1>
-SumOfImagesOfAllMorphisms( six, const );
+#! @EndExample
+#! The next calculation shows that the module at object $2$ for six
+#! is indecomposable of dimension $3$.
+#! We now have sufficient information to describe six completely.
+#! @Example
+SumOfImagesOfAllMorphisms( six, unit );
#! <(1)->0, (2)->1; (a)->0x0, (b)->0x1, (c)->1x1>
-proj2 := Y( kqop.2 );
+proj2 := Yop( kqop.2 );
#! <(1)->0, (2)->3; (a)->0x0, (b)->0x3, (c)->3x3>
IsProjective( proj2 );
#! true
diff --git a/examples/julia/notebooks/.gitignore b/examples/julia/notebooks/.gitignore
new file mode 100644
index 0000000..ae0069c
--- /dev/null
+++ b/examples/julia/notebooks/.gitignore
@@ -0,0 +1,2 @@
+/.ipynb_checkpoints/
+/Manifest.toml
diff --git a/examples/julia/notebooks/CategoryOfRepresentations.ipynb b/examples/julia/notebooks/CategoryOfRepresentations.ipynb
new file mode 100644
index 0000000..5c6a70e
--- /dev/null
+++ b/examples/julia/notebooks/CategoryOfRepresentations.ipynb
@@ -0,0 +1,1789 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`CatReps` was originally meant to wrap [Peter Webb](https://www-users.math.umn.edu/~webb/)'s pre-package [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) into the categorical framework offered by [`CAP`](https://homalg-project.github.io/docs/CAP_project/). The only dependency left can be found in the file [gap/catreps.g](https://codecov.io/gh/homalg-project/CatReps/src/master/gap/catreps.g). The entire functionality of [`catreps`](https://www-users.math.umn.edu/~webb/GAPfiles/catreps) is now available through [`FunctorCategories`](https://homalg-project.github.io/pkg/FunctorCategories).\n",
+ "\n",
+ "This notebook is a reproduction of the [catreps tutorial](https://www-users.math.umn.edu/~webb/GAPfiles/catrepstutorial.html)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Singular.jl, based on\n",
+ " SINGULAR / \n",
+ " A Computer Algebra System for Polynomial Computations / Singular.jl: 0.4.1 \n",
+ " 0< Singular : 2.3.1-4\n",
+ " by: W. Decker, G.-M. Greuel, G. Pfister, H. Schoenemann \\ \n",
+ "FB Mathematik der Universitaet, D-67653 Kaiserslautern \\\n",
+ " \n",
+ "HomalgProject v\u001b[32m0.5.6-dev\u001b[39m\n",
+ "Imported OSCAR's components GAP, Nemo, and Singular\n",
+ "Type: ?HomalgProject for more information\n"
+ ]
+ }
+ ],
+ "source": [
+ "using HomalgProject"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "LoadPackage( \"CatReps\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: A finite concrete category"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "c3c3 = ConcreteCategoryForCAP( \"[ [2,3,1], [4,5,6], [,,,5,6,4] ]\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: [ A morphism in subcategory given by: , A morphism in subcategory given by: , A morphism in subcategory given by: ]"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mors = SetOfGeneratingMorphisms( c3c3 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "A morphism in subcategory given by: [ [ 1, 2, 3 ], [ [ 1, 2 ], [ 2, 3 ], [ 3, 1 ] ], [ 1, 2, 3 ] ]\n",
+ "A morphism in subcategory given by: [ [ 1, 2, 3 ], [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ], [ 4, 5, 6 ] ]\n",
+ "A morphism in subcategory given by: [ [ 4, 5, 6 ], [ [ 4, 5 ], [ 5, 6 ], [ 6, 4 ] ], [ 4, 5, 6 ] ]\n"
+ ]
+ }
+ ],
+ "source": [
+ "Perform( mors, Display )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: GF(3)"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "GF3 = HomalgRingOfIntegers( 3 )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Using the procedure Algebroid one can then construct a finite presentation of the $\\mathrm{GF}(3)$-linear closure of the given concrete category. The current preliminary implementation only works when the endomorphism monoids of the concrete category are explicitly cyclic:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kq = Algebroid( GF3, c3c3 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: (GF(3) * q) / [ Z(3)^0*(a*a*a) + Z(3)*(1), Z(3)^0*(c*c*c) + Z(3)*(2), Z(3)*(b*c) + Z(3)^0*(a*b) ]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "UnderlyingQuiverAlgebra( kq )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "SetIsLinearClosureOfACategory( kq, true )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A representation of the category c3c3 is another way to encode a module homomorphism between two modules over the cyclic group $C_3$ of order $3$:\n",
+ "The vector space underlying the first module is the given by the value of (1).\n",
+ "The action of $C_3$ on the first module is given by the value of (a).\n",
+ "The vector space underlying the second module is the given by the value of (2).\n",
+ "The action on the second module is given by the value of (c).\n",
+ "The above relation of the quiver states that the value of (b) is a module homomorphism from the first to the second $C_3$-module."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3)"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "CatReps = Hom( kq, GF3 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "106 primitive operations were used to derive 236 operations for this category which\n",
+ "* IsLinearCategoryOverCommutativeRing\n",
+ "* IsSymmetricMonoidalCategory\n",
+ "* IsAbelianCategory\n"
+ ]
+ }
+ ],
+ "source": [
+ "InfoOfInstalledOperationsOfCategory( CatReps )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: GF(3)"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "CommutativeRingOfLinearCategory( CatReps )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->0, (2)->0; (a)->0x0, (b)->0x0, (c)->0x0>"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "zero = ZeroObject( CatReps )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->1, (2)->1; (a)->1x1, (b)->1x1, (c)->1x1>"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "unit = TensorUnit( CatReps )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 1\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 1\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " 1\n",
+ "\n",
+ "An identity morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ " 1\n",
+ "\n",
+ "An identity morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " 1\n",
+ "\n",
+ "An identity morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( unit )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->5, (2)->4; (a)->5x5, (b)->5x4, (c)->4x4>"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "d = [[1,1,0,0,0],[0,1,1,0,0],[0,0,1,0,0],[0,0,0,1,1],[0,0,0,0,1]];;\n",
+ "e = [[0,1,0,0],[0,0,1,0],[0,0,0,0],[0,1,0,1],[0,0,1,0]];;\n",
+ "f = [[1,1,0,0],[0,1,1,0],[0,0,1,0],[0,0,0,1]];;\n",
+ "nine = AsObjectInHomCategory( kq, [ 5, 4 ], [ d, e, f ] )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 5\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 4\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " 1 1 . . .\n",
+ " . 1 1 . .\n",
+ " . . 1 . .\n",
+ " . . . 1 1\n",
+ " . . . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ " . 1 . .\n",
+ " . . 1 .\n",
+ " . . . .\n",
+ " . 1 . 1\n",
+ " . . 1 .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " 1 1 . .\n",
+ " . 1 1 .\n",
+ " . . 1 .\n",
+ " . . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( nine )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: "
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "nine( kq.\"1\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: "
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "nine( kq.\"2\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: "
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "nine( kq.\"b\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " . 1 . .\n",
+ " . . 1 .\n",
+ " . . . .\n",
+ " . 1 . 1\n",
+ " . . 1 .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( nine( kq.b ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "IsWellDefined( nine )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "1"
+ ],
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Length( WeakDirectSumDecomposition( nine ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->25, (2)->16; (a)->25x25, (b)->25x16, (c)->16x16>"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fortyone = TensorProductOnObjects( nine, nine )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "IsWellDefined( fortyone )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: "
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fortyone( kq.\"1\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: "
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fortyone( kq.\"2\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fortyone( kq.a ) == TensorProductOnMorphisms( nine( kq.a ), nine( kq.a ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fortyone( kq.b ) == TensorProductOnMorphisms( nine( kq.b ), nine( kq.b ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fortyone( kq.c ) == TensorProductOnMorphisms( nine( kq.c ), nine( kq.c ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 25\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 16\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " 1 1 . . . 1 1 . . . . . . . . . . . . . . . . . .\n",
+ " . 1 1 . . . 1 1 . . . . . . . . . . . . . . . . .\n",
+ " . . 1 . . . . 1 . . . . . . . . . . . . . . . . .\n",
+ " . . . 1 1 . . . 1 1 . . . . . . . . . . . . . . .\n",
+ " . . . . 1 . . . . 1 . . . . . . . . . . . . . . .\n",
+ " . . . . . 1 1 . . . 1 1 . . . . . . . . . . . . .\n",
+ " . . . . . . 1 1 . . . 1 1 . . . . . . . . . . . .\n",
+ " . . . . . . . 1 . . . . 1 . . . . . . . . . . . .\n",
+ " . . . . . . . . 1 1 . . . 1 1 . . . . . . . . . .\n",
+ " . . . . . . . . . 1 . . . . 1 . . . . . . . . . .\n",
+ " . . . . . . . . . . 1 1 . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . 1 1 . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . 1 . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . 1 1 . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . 1 . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . 1 1 . . . 1 1 . . .\n",
+ " . . . . . . . . . . . . . . . . 1 1 . . . 1 1 . .\n",
+ " . . . . . . . . . . . . . . . . . 1 . . . . 1 . .\n",
+ " . . . . . . . . . . . . . . . . . . 1 1 . . . 1 1\n",
+ " . . . . . . . . . . . . . . . . . . . 1 . . . . 1\n",
+ " . . . . . . . . . . . . . . . . . . . . 1 1 . . .\n",
+ " . . . . . . . . . . . . . . . . . . . . . 1 1 . .\n",
+ " . . . . . . . . . . . . . . . . . . . . . . 1 . .\n",
+ " . . . . . . . . . . . . . . . . . . . . . . . 1 1\n",
+ " . . . . . . . . . . . . . . . . . . . . . . . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ " . . . . . 1 . . . . . . . . . .\n",
+ " . . . . . . 1 . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . 1 . 1 . . . . . . . .\n",
+ " . . . . . . 1 . . . . . . . . .\n",
+ " . . . . . . . . . 1 . . . . . .\n",
+ " . . . . . . . . . . 1 . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . 1 . 1 . . . .\n",
+ " . . . . . . . . . . 1 . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . 1 . . . . . . . 1 . .\n",
+ " . . . . . . 1 . . . . . . . 1 .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . 1 . 1 . . . . . 1 . 1\n",
+ " . . . . . . 1 . . . . . . . 1 .\n",
+ " . . . . . . . . . 1 . . . . . .\n",
+ " . . . . . . . . . . 1 . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . 1 . 1 . . . .\n",
+ " . . . . . . . . . . 1 . . . . .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " 1 1 . . 1 1 . . . . . . . . . .\n",
+ " . 1 1 . . 1 1 . . . . . . . . .\n",
+ " . . 1 . . . 1 . . . . . . . . .\n",
+ " . . . 1 . . . 1 . . . . . . . .\n",
+ " . . . . 1 1 . . 1 1 . . . . . .\n",
+ " . . . . . 1 1 . . 1 1 . . . . .\n",
+ " . . . . . . 1 . . . 1 . . . . .\n",
+ " . . . . . . . 1 . . . 1 . . . .\n",
+ " . . . . . . . . 1 1 . . . . . .\n",
+ " . . . . . . . . . 1 1 . . . . .\n",
+ " . . . . . . . . . . 1 . . . . .\n",
+ " . . . . . . . . . . . 1 . . . .\n",
+ " . . . . . . . . . . . . 1 1 . .\n",
+ " . . . . . . . . . . . . . 1 1 .\n",
+ " . . . . . . . . . . . . . . 1 .\n",
+ " . . . . . . . . . . . . . . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( fortyone )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "etas = WeakDirectSumDecomposition( fortyone, random = false );"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: [ [ 3, 0 ], [ 3, 0 ], [ 3, 0 ], [ 3, 0 ], [ 0, 3 ], [ 1, 3 ], [ 3, 3 ], [ 3, 3 ], [ 3, 3 ], [ 3, 1 ] ]"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dec = List( etas, eta -> List( SetOfObjects( kq ),\n",
+ " o -> Dimension( Source( UnderlyingCapTwoCategoryCell( eta )( o ) ) ) ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->25x25, (2)->16x16>"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "iso = UniversalMorphismFromDirectSum( etas )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "IsIsomorphism( iso )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 25\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 16\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " 1 1 . . . . . . . . . . . . . . . . . . . . . . .\n",
+ " . 1 . . . . . . . . . . . . . . . . . . . . . . .\n",
+ " 1 1 1 . . . . . . . . . . . . . . . . . . . . . .\n",
+ " . . . 1 2 . . . . . . . . . . . . . . . . . . . .\n",
+ " . . . . 1 . . . . . . . . . . . . . . . . . . . .\n",
+ " . . . 1 1 1 . . . . . . . . . . . . . . . . . . .\n",
+ " . . . . . . 1 2 . . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . 1 . . . . . . . . . . . . . . . . .\n",
+ " . . . . . . 1 1 1 . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . 1 2 . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . 1 . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . 1 1 1 . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . 1 . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . 1 2 . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . 1 . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . 2 . 1 . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . . 2 2 . . . . . . .\n",
+ " . . . . . . . . . . . . . . . . 1 . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . . 2 . 1 . . . . . .\n",
+ " . . . . . . . . . . . . . . . . . . . 1 2 . . . .\n",
+ " . . . . . . . . . . . . . . . . . . . . 1 . . . .\n",
+ " . . . . . . . . . . . . . . . . . . . 2 . 1 . . .\n",
+ " . . . . . . . . . . . . . . . . . . . . . . . 2 .\n",
+ " . . . . . . . . . . . . . . . . . . . . . . 1 2 2\n",
+ " . . . . . . . . . . . . . . . . . . . . . . . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . 2 . . . . . . . . . .\n",
+ " . . . . . . . . 1 . . . . . . .\n",
+ " . . . . . . 1 . . . . . . . . .\n",
+ " . . . . . . 1 2 . . . . . . . .\n",
+ " . . . . . . . . . . . 2 . . . .\n",
+ " . . . . . . . . . . . 2 . . . .\n",
+ " . . . . . . . . . . 1 . . . . .\n",
+ " . . . . . . . . . . . . . . 1 .\n",
+ " . . . . . . . . . . . . . . . .\n",
+ " . . . . . . . . . . . . . 2 . .\n",
+ " . . . . . . . . . . . . . . . 2\n",
+ " . . . . . . . . . . . . . . . 1\n",
+ " . . . . . . . . . . . . . . . .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " 1 . . . . . . . . . . . . . . .\n",
+ " . 1 1 . . . . . . . . . . . . .\n",
+ " 1 . 1 . . . . . . . . . . . . .\n",
+ " . . . 1 1 . . . . . . . . . . .\n",
+ " . . . . 1 1 . . . . . . . . . .\n",
+ " . . . . . 1 . . . . . . . . . .\n",
+ " . . . . . . 1 . . . . . . . . .\n",
+ " . . . . . . . 1 1 . . . . . . .\n",
+ " . . . . . . 2 . 1 . . . . . . .\n",
+ " . . . . . . . . . 1 1 . . . . .\n",
+ " . . . . . . . . . . 1 1 . . . .\n",
+ " . . . . . . . . . . . 1 . . . .\n",
+ " . . . . . . . . . . . . 1 1 . .\n",
+ " . . . . . . . . . . . . . 1 1 .\n",
+ " . . . . . . . . . . . . . . 1 .\n",
+ " . . . . . . . . . . . . . . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( Source( iso ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "A morphism in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ " . . 1 . . . 2 1 . 1 1 . . 2 . . . 1 . . . . . . .\n",
+ " . . . . . . . . . . . . . . . . . . . . . . 1 . .\n",
+ " . 1 2 . 2 1 1 2 2 2 1 . . 2 . . 1 . . 2 2 . . 1 .\n",
+ " . . 1 . . . 1 . . 1 . . 1 2 . . . 1 . . . 1 . . .\n",
+ " . . . . . . . 1 . . . 2 2 . . . . . . . . . 1 . .\n",
+ " . 1 2 . 2 . 1 2 2 2 1 . . 2 . . 1 . . 2 . . . 1 .\n",
+ " . . 1 . . . 1 . . 1 . 1 1 2 . . . 1 . . . 1 . . .\n",
+ " . . . . . . . 1 . . . 2 1 . . . . . . . . . 1 . .\n",
+ " . 1 1 . 2 . 2 . 2 1 1 . . . . . 1 . . 2 . . . 1 .\n",
+ " . . . . . . . . . 2 . 1 1 2 . . . 1 . . . 1 . . .\n",
+ " . . . . . . . . . . . . 2 . 2 . . . . . . . 1 . .\n",
+ " . . . . . . . . 2 . 1 . . . . . 1 . . 2 . . . 1 .\n",
+ " . . 1 . . . 2 1 . 1 1 . . 2 . . . 1 . 2 . 2 . 1 .\n",
+ " . 2 . . 1 2 . . 1 . 1 . . 2 . . 1 2 . . 1 . . . .\n",
+ " . . 1 . . . 2 1 . 1 1 . . 2 . . . 2 . . . 1 . . .\n",
+ " 1 . . 2 . 2 . . 1 1 1 . . 1 . 2 1 2 . 2 . . . 1 .\n",
+ " . 1 1 . 2 1 2 1 2 1 . . . . . . . . . . . . . . .\n",
+ " . 1 . . 2 1 . . 2 . 2 . . 1 . . . . . . . . . . .\n",
+ " 2 2 1 1 1 . 2 1 . . 1 . . . . . . 2 . . . 1 . . .\n",
+ " . 2 2 . . 2 1 2 . 2 . . . 1 . . 1 2 . . 1 . . . .\n",
+ " . . 1 . . . 2 1 . . 1 . . . . . . 2 . . . 1 . . .\n",
+ " 1 1 1 . 2 . 2 1 2 1 1 . . . . 2 1 2 . 2 . . . 1 .\n",
+ " 2 2 . 1 1 . . . . . . . . . . 1 2 1 2 1 . . . . .\n",
+ " 1 2 1 2 1 1 2 1 2 1 . . . . . 2 . . 1 . 2 . . 1 .\n",
+ " . . 2 . . . 1 2 . 2 2 . . 1 . . . 1 . . . 2 . . 1\n",
+ "\n",
+ "An isomorphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of <(2)>:\n",
+ " . . 2 . . 1 . . 2 2 1 . . . . .\n",
+ " 2 1 . . . . . . . . . . . 1 . .\n",
+ " . 2 1 . 2 . 1 . . . . . . . 1 .\n",
+ " . 2 2 2 . 2 . . . . . . 1 . . .\n",
+ " . . 2 . . 2 . 2 . 2 2 . . 1 . .\n",
+ " . . . . . . 1 . . 2 1 2 . . 1 .\n",
+ " . . . . . . . . . . 1 . . . . .\n",
+ " . . . . . 1 . 1 . 2 . 1 . 1 . .\n",
+ " . . . . . . 1 . . 1 . 1 . . 1 .\n",
+ " . . . 1 . . . . . . . . . . . .\n",
+ " . . . . . . . 1 . . . . . . . .\n",
+ " . . . . . . . . . . . 1 . . . .\n",
+ " . . . . . . . . . . . . 1 . . .\n",
+ " . . . . . . . . . . . . . 1 . .\n",
+ " . . . . . . . . . . . . . . 1 .\n",
+ " . . . . . . . . . . . . . . . 1\n",
+ "\n",
+ "An isomorphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( iso )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->3x25, (2)->3x16>"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "eta = etas[9]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->9x625, (2)->9x256>"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "TensorProductOnMorphisms( eta, eta )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->3, (2)->3; (a)->3x3, (b)->3x3, (c)->3x3>"
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "six = Source( eta )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 3\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 3\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " 1 2 .\n",
+ " . 1 .\n",
+ " 2 . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ " . . 1\n",
+ " . . .\n",
+ " . 2 .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " 1 1 .\n",
+ " . 1 1\n",
+ " . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( six )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->1x3, (2)->0x3>"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "emb = EmbeddingOfSumOfImagesOfAllMorphisms( unit, six )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "A morphism in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ " . 1 .\n",
+ "\n",
+ "A split monomorphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "(an empty 0 x 3 matrix)\n",
+ "\n",
+ "A zero, split monomorphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( emb )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->1, (2)->0; (a)->1x1, (b)->1x0, (c)->0x0>"
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s1 = Source( emb )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 1\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 0\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ "(an empty 1 x 0 matrix)\n",
+ "\n",
+ "A zero, split epimorphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ "(an empty 0 x 0 matrix)\n",
+ "\n",
+ "A zero, isomorphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( s1 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: Algebroid generated by the right quiver q_op(2)[a:1->1,b:2->1,c:2->2]"
+ ]
+ },
+ "execution_count": 55,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "kqop = AlgebroidOverOppositeAlgebra( kq )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: Yoneda embedding functor"
+ ]
+ },
+ "execution_count": 56,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Yop = YonedaEmbedding( kqop )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 57,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Yoneda embedding functor:\n",
+ "\n",
+ "Algebroid generated by the right quiver q_op(2)[a:1->1,b:2->1,c:2->2]\n",
+ " |\n",
+ " V\n",
+ "The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( Yop )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "We compute the Yoneda projective associated to object $1$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->3, (2)->3; (a)->3x3, (b)->3x3, (c)->3x3>"
+ ]
+ },
+ "execution_count": 59,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "proj1 = Yop( kqop.\"1\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 60,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "IsProjective( proj1 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 3\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 3\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " . 1 .\n",
+ " . . 1\n",
+ " 1 . .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ " 1 . .\n",
+ " . 1 .\n",
+ " . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " . 1 .\n",
+ " . . 1\n",
+ " 1 . .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( proj1 )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "Comparing `emb` and `e1` in the following line gives a first proof that `six` and `proj1` are nonisomorphic:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->1x3, (2)->1x3>"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "e1 = EmbeddingOfSumOfImagesOfAllMorphisms( unit, proj1 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->1, (2)->1; (a)->1x1, (b)->1x1, (c)->1x1>"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Source( e1 )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "This is a second proof that `six` and `proj1` are nonisomorphic:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "false"
+ ],
+ "text/plain": [
+ "false"
+ ]
+ },
+ "execution_count": 64,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "IsEpimorphism( EmbeddingOfSumOfImagesOfAllMorphisms( proj1, six ) )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->2, (2)->3; (a)->2x2, (b)->2x3, (c)->3x3>"
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "five = CokernelObject( emb )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 2\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 3\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ " 1 .\n",
+ " 2 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ " . . 1\n",
+ " . 2 .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " 1 1 .\n",
+ " . 1 1\n",
+ " . . 1\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( five )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "The next calculation shows that the $3$-dimensional representation of $C_3$ associated to object $1$ is a single copy of the regular representation of $C_3$."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->1, (2)->0; (a)->1x1, (b)->1x0, (c)->0x0>"
+ ]
+ },
+ "execution_count": 75,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "SumOfImagesOfAllMorphisms( s1, six )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "The next calculation shows that the quotient representation `five` maps its module at object $1$ monomorphically to the module at object $2$, which must either be indecomposable of dimension $3$, or else the direct sum of indecomposables of dimension $2$ and $1$."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 76,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->0, (2)->0; (a)->0x0, (b)->0x0, (c)->0x0>"
+ ]
+ },
+ "execution_count": 76,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "SumOfImagesOfAllMorphisms( s1, five )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->1, (2)->1; (a)->1x1, (b)->1x1, (c)->1x1>"
+ ]
+ },
+ "execution_count": 78,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "SumOfImagesOfAllMorphisms( unit, five )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "The final calculation shows that the module at object $2$ for `six`.\n",
+ "We now have sufficient information to describe `six` completely."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->0, (2)->1; (a)->0x0, (b)->0x1, (c)->1x1>"
+ ]
+ },
+ "execution_count": 79,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "SumOfImagesOfAllMorphisms( six, unit )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "We compute the Yoneda projective associated to object $2$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 72,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GAP: <(1)->0, (2)->3; (a)->0x0, (b)->0x3, (c)->3x3>"
+ ]
+ },
+ "execution_count": 72,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "proj2 = Yop( kqop.\"2\" )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "true"
+ ],
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 73,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "IsProjective( proj2 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "An object in The category of functors: Algebroid generated by the right quiver q(2)[a:1->1,b:1->2,c:2->2] -> Category of matrices over GF(3) defined by the following data:\n",
+ "\n",
+ "\n",
+ "Image of <(1)>:\n",
+ "A vector space object over GF(3) of dimension 0\n",
+ "\n",
+ "Image of <(2)>:\n",
+ "A vector space object over GF(3) of dimension 3\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(a) }]->(1):\n",
+ "(an empty 0 x 0 matrix)\n",
+ "\n",
+ "A zero, isomorphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (1)-[{ Z(3)^0*(b) }]->(2):\n",
+ "(an empty 0 x 3 matrix)\n",
+ "\n",
+ "A zero, split monomorphism in Category of matrices over GF(3)\n",
+ "\n",
+ "\n",
+ "Image of (2)-[{ Z(3)^0*(c) }]->(2):\n",
+ " . 1 .\n",
+ " . . 1\n",
+ " 1 . .\n",
+ "\n",
+ "A morphism in Category of matrices over GF(3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "Display( proj2 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "@webio": {
+ "lastCommId": null,
+ "lastKernelId": null
+ },
+ "kernelspec": {
+ "display_name": "Julia 1.5.1",
+ "language": "julia",
+ "name": "julia-1.5"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "1.5.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/julia/notebooks/Project.toml b/examples/julia/notebooks/Project.toml
new file mode 120000
index 0000000..50557f1
--- /dev/null
+++ b/examples/julia/notebooks/Project.toml
@@ -0,0 +1 @@
+../../../Project.toml
\ No newline at end of file
diff --git a/examples/julia/notebooks/README.md b/examples/julia/notebooks/README.md
new file mode 100644
index 0000000..9b35311
--- /dev/null
+++ b/examples/julia/notebooks/README.md
@@ -0,0 +1,8 @@
+## CatReps
+
+This directory contains a collection of [Jupyter](https://jupyter.org/) notebooks demonstrating the functionality the [GAP](https://www.gap-system.org/) package [CatReps](https://github.com/homalg-project/CatReps), which is based on the
+
+* [homalg project](https://github.com/homalg-project/homalg_project/),
+* [CAP project](https://github.com/homalg-project/CAP_project/).
+
+These notebooks use the [Julia](https://julialang.org/) package [HomalgProject](https://github.com/homalg-project/HomalgProject.jl).
diff --git a/gap/Julia.gi b/gap/Julia.gi
new file mode 100644
index 0000000..84ac0a3
--- /dev/null
+++ b/gap/Julia.gi
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# CatReps: Representations and cohomology of finite categories
+#
+# Implementations
+#
+
+##
+InstallOtherMethod( ConcreteCategoryForCAP,
+ [ IsJuliaObject ],
+
+ function( str )
+
+ return ConcreteCategoryForCAP( EvalString( JuliaToGAP( IsString, str ) ) );
+
+end );
diff --git a/read.g b/read.g
index ba6fecb..13da767 100644
--- a/read.g
+++ b/read.g
@@ -6,3 +6,7 @@
ReadPackage( "CatReps", "gap/catreps.g");
ReadPackage( "CatReps", "gap/CatRepsWithCAP.gi");
+
+if IsPackageMarkedForLoading( "JuliaInterface", ">= 0.2" ) then
+ ReadPackage( "CatReps", "gap/Julia.gi" );
+fi;