From 5b68099c67bed93ba21252109d626cfaaae8c194 Mon Sep 17 00:00:00 2001 From: Mohamed Barakat Date: Mon, 12 Oct 2020 13:46:13 +0200 Subject: [PATCH] added Julia support and CategoryOfRepresentations.ipynb --- PackageInfo.g | 2 +- Project.toml | 6 + README.md | 4 +- examples/CategoryOfRepresentations.g | 55 +- examples/julia/notebooks/.gitignore | 2 + .../notebooks/CategoryOfRepresentations.ipynb | 1789 +++++++++++++++++ examples/julia/notebooks/Project.toml | 1 + examples/julia/notebooks/README.md | 8 + gap/Julia.gi | 15 + read.g | 4 + 10 files changed, 1861 insertions(+), 25 deletions(-) create mode 100644 Project.toml create mode 100644 examples/julia/notebooks/.gitignore create mode 100644 examples/julia/notebooks/CategoryOfRepresentations.ipynb create mode 120000 examples/julia/notebooks/Project.toml create mode 100644 examples/julia/notebooks/README.md create mode 100644 gap/Julia.gi 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;