**Tutorial on the category functions of the GAP package 'reps' for handling representations of groups and categories.
**

March 2020

In March 2020 there is major new release of the packages reps and catreps in which they are combined as one. Commands common to both groups and categories have been written in objected oriented form by Moriah Elkin. This has been done as a response to the need to interface between the two contexts.

The package has been designed and is maintained by

Peter Webb

School of Mathematics

University of Minnesota

Minneapolis MN 55455

webb@math.umn.edu

http://www.math.umn.edu/~webb

The GAP code is available at: http://www.math.umn.edu/~webb/

The code has been written by Peter Webb, Dan Christensen, Fan Zhang, and Moriah Elkin.

Read P.J. Webb,

In this package a category is stored as a concrete category (i.e. a category where the objects are sets and morphisms are maps of sets) in the same way as for the package 'categories' which computes the homology of nerves of categories. A category is stored as a record (cat, say) with fields cat.objects, cat.generators, cat.domain, cat.codomain. Each object in the list cat.objects is a set, and each morphism in the list of generator morphisms cat.generators is stored as a mapping of sets, which we notate as the list of its values. The numbers of the objects which are the domain and codomain of each generator morphism are listed in cat.domain and cat.codomain.

A representation of a category is stored as a record with a name such as rep, and fields which include rep.category, rep.genimages, rep.field and rep.dimension. The first of these is the category being represented. The second is a list of matrices over rep.field which represent the action of the generator morphisms in the list rep.category.generators.

We need to work with elements of the 'representation space' of the representation, which we take to be the direct sum of the vector spaces associated to the objects of the category, taken in the fixed order in which the objects are always listed. Some of the commands below take as arguments or return a list of lists of vectors. In such a list the nth entry is a list of vectors in the vector space associated to object n and it is frequently a basis for the space it spans.

Commands currently available

gap> Read("catreps");

gap> c3c3:=ConcreteCategory([[2,3,1],[4,5,6],[,,,5,6,4]]);

rec( generators := [ [ 2, 3, 1 ], [ 4, 5, 6 ], [ ,,, 5, 6, 4 ] ],

operations := rec( ), objects := [ [ 1, 2, 3 ], [ 4, 5, 6 ] ],

domain := [ 1, 1, 2 ], codomain := [ 1, 2, 2 ] )

gap> one:=One(GF(3));;

gap> 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]]*one;;

gap> e:=[[0,1,0,0],[0,0,1,0],[0,0,0,0],[0,1,0,1],[0,0,1,0]]*one;;

gap> f:=[[1,1,0,0],[0,1,1,0],[0,0,1,0],[0,0,0,1]]*one;;

gap> nine:=CatRep(c3c3,[d,e,f],GF(3));

rec(

category := rec( generators := [ [ 2, 3, 1 ], [ 4, 5, 6 ], [ ,,, 5, 6, 4 ] ]

, operations := rec( ), objects := [ [ 1, 2, 3 ], [ 4, 5, 6 ] ],

domain := [ 1, 1, 2 ], codomain := [ 1, 2, 2 ] ),

genimages := [ [ [ Z(3)^0, Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ],

[ 0*Z(3), Z(3)^0, Z(3)^0, 0*Z(3), 0*Z(3) ],

[ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ],

[ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0, Z(3)^0 ],

[ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ],

[ [ 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3) ]

, [ 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ],

[ 0*Z(3), Z(3)^0, 0*Z(3), Z(3)^0 ],

[ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3) ] ],

[ [ Z(3)^0, Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, Z(3)^0, 0*Z(3) ]

, [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3) ],

[ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ] ], field := GF(3),

dimension := [ 5, 4 ] )

gap> Length(Decompose(nine));

1

gap> fortyone:=TensorProductRep(nine,nine);;

gap> d:=Decompose(fortyone);;

gap> List(d,x->List(x,Length));

[ [ 3, 0 ], [ 3, 1 ], [ 3, 3 ], [ 3, 3 ], [ 0, 3 ], [ 3, 0 ], [ 3, 0 ],

[ 3, 0 ], [ 1, 3 ], [ 3, 3 ] ]

gap> six:=SubmoduleRep(fortyone,d[3]);

rec(

category := rec( generators := [ [ 2, 3, 1 ], [ 4, 5, 6 ], [ ,,, 5, 6, 4 ] ]

, operations := rec( ), objects := [ [ 1, 2, 3 ], [ 4, 5, 6 ] ],

domain := [ 1, 1, 2 ], codomain := [ 1, 2, 2 ] ),

genimages := [ [ [ Z(3)^0, Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(3)^0, Z(3)^0 ],

[ 0*Z(3), 0*Z(3), Z(3)^0 ] ],

[ [ 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3) ],

[ 0*Z(3), 0*Z(3), 0*Z(3) ] ],

[ [ Z(3)^0, Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(3)^0, Z(3)^0 ],

[ 0*Z(3), 0*Z(3), Z(3)^0 ] ] ], field := GF(3),

dimension := [ 3, 3 ], isRepresentation := true )

gap> SumOfImages(ConstantRep(c3c3,GF(3)),six);

[ [ [ 0*Z(3), 0*Z(3), Z(3)^0 ] ], [ ] ]

gap> y:=YonedaRep(c3c3,1,GF(3));;

gap> SumOfImages(ConstantRep(c3c3,GF(3)),y);

[ [ [ Z(3)^0, Z(3)^0, Z(3)^0 ] ], [ [ Z(3)^0, Z(3)^0, Z(3)^0 ] ] ]

gap> s1:=SubmoduleRep(six,[ [ [ 0*Z(3), 0*Z(3), Z(3)^0 ] ], [ ] ]);

rec(

category := rec( generators := [ [ 2, 3, 1 ], [ 4, 5, 6 ], [ ,,, 5, 6, 4 ] ]

, operations := rec( ), objects := [ [ 1, 2, 3 ], [ 4, 5, 6 ] ],

domain := [ 1, 1, 2 ], codomain := [ 1, 2, 2 ],

morphisms := [ [ [ [ 1, 2, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ] ],

[ [ 4, 5, 6 ], [ 5, 6, 4 ], [ 6, 4, 5 ] ] ],

[ [ ], [ [ ,,, 4, 5, 6 ], [ ,,, 5, 6, 4 ], [ ,,, 6, 4, 5 ] ] ] ] ),

genimages := [ [ [ Z(3)^0 ] ], [ [ ] ], [ ] ], field := GF(3),

dimension := [ 1, 0 ], isRepresentation := true )

gap> five:=QuotientRep(six,[ [ [ 0*Z(3), 0*Z(3), Z(3)^0 ] ], [ ] ]);

rec(

category := rec( generators := [ [ 2, 3, 1 ], [ 4, 5, 6 ], [ ,,, 5, 6, 4 ] ]

, operations := rec( ), objects := [ [ 1, 2, 3 ], [ 4, 5, 6 ] ],

domain := [ 1, 1, 2 ], codomain := [ 1, 2, 2 ],

morphisms := [ [ [ [ 1, 2, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ] ],

[ [ 4, 5, 6 ], [ 5, 6, 4 ], [ 6, 4, 5 ] ] ],

[ [ ], [ [ ,,, 4, 5, 6 ], [ ,,, 5, 6, 4 ], [ ,,, 6, 4, 5 ] ] ] ] ),

genimages := [ [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ],

[ [ 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3) ] ],

[ [ Z(3)^0, Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(3)^0, Z(3)^0 ],

[ 0*Z(3), 0*Z(3), Z(3)^0 ] ] ], field := GF(3),

dimension := [ 2, 3 ], isRepresentation := true )

gap> SumOfImages(s1,six);

[ [ [ 0*Z(3), 0*Z(3), Z(3)^0 ] ], [ ] ]

gap> SumOfImages(s1,five);

[ [ ], [ ] ]

gap> SumOfImages(ConstantRep(c3c3,GF(3)),five);

[ [ [ 0*Z(3), Z(3)^0 ] ], [ [ 0*Z(3), 0*Z(3), Z(3)^0 ] ] ]

The final calculation shows that the module at object 2 for six is indecomposable of dimension 3. We now have sufficient information to describe six completely.

gap> SumOfImages(six,ConstantRep(c3c3,GF(3)));

[ [ ], [ [ Z(3)^0 ] ] ]