1010# #
1111# ###################################
1212
13- if IsPackageMarkedForLoading( " FinSetsForCAP" , " >= 2023.07-03" ) then
14-
15- BindGlobal( " GROUPS_AS_CATEGORIES_SkeletalFinSets" , SkeletalCategoryOfFiniteSets( : overhead := false ) );
16-
17- fi ;
18-
1913# #
2014InstallMethod( GroupAsCategory,
2115 [ IsGroup ] ,
2216
2317 function ( group )
2418 local category, is_finite;
2519
26- category := CreateCapCategory( Concatenation( " Group as category( " , String( group )," )" ), IsGroupAsCategory, IsGroupAsCategoryObject, IsGroupAsCategoryMorphism, IsCapCategoryTwoCell : overhead := false );
20+ category := CreateCapCategory( Concatenation( " Group as category( " , String( group )," )" ),
21+ IsGroupAsCategory,
22+ IsGroupAsCategoryObject,
23+ IsGroupAsCategoryMorphism,
24+ IsCapCategoryTwoCell
25+ : overhead := false );
2726
2827 category!. compiler_hints := rec (
2928 category_attribute_names := [
@@ -43,8 +42,7 @@ InstallMethod( GroupAsCategory,
4342
4443 if IsPackageMarkedForLoading( " FinSetsForCAP" , " >= 2023.07-03" ) then
4544
46- SetRangeCategoryOfHomomorphismStructure( category, GROUPS_AS_CATEGORIES_SkeletalFinSets );
47- SetIsEquippedWithHomomorphismStructure( category, true );
45+ SET_HOMOMORPHISM_STRUCTURE_ATTRIBUTES_FOR_GROUP_AS_CATEGORY( category );
4846
4947 fi ;
5048
@@ -270,103 +268,10 @@ InstallGlobalFunction( INSTALL_FUNCTIONS_FOR_GROUP_AS_CATEGORY,
270268
271269 if IsPackageMarkedForLoading( " FinSetsForCAP" , " >= 2023.07-03" ) then
272270
273- sets := RangeCategoryOfHomomorphismStructure( category );
274-
275- t_obj := TerminalObject( sets );
276-
277- size := Length( elements );
278-
279- RG := FinSet( GROUPS_AS_CATEGORIES_SkeletalFinSets, size );
280-
281- # # Homomorphism structure
282- # #
283- # # Warning: the hom structure is costly for big finite groups.
284- # # TODO: Only do a preprocessing for small groups
285- AddHomomorphismStructureOnObjects( category,
286- function ( cat, a, b )
287-
288- return RG;
289-
290- end );
291-
292- # # Precomputatation of the multiplication maps
293- # # [g,h] -> List encoding the multiplication map (x -> G[g] * x * G[h])
294-
295- # # take Size( SymmetricGroup( 5 ) ) as a first guess
296- if size <= 120 then
297-
298- # # heavy precomputation, only do for reasonable sizes
299-
300- HOM_PERMUTATION_ARRAY :=
301- List( [ 1 .. size ] , g ->
302- List( [ 1 .. size ] , h ->
303- List( elements, x -> - 1 + Position( elements, elements[ g] * x * elements[ h] ) )
304- )
305- );
306-
307- # # Should this function have a cache?
308- # #
309- AddHomomorphismStructureOnMorphisms( category,
310- function ( cat, alpha, beta )
311-
312- return MapOfFinSets(
313- GROUPS_AS_CATEGORIES_SkeletalFinSets,
314- RG,
315- HOM_PERMUTATION_ARRAY[ PositionWithinElements( alpha ) ][ PositionWithinElements( beta ) ] ,
316- RG
317- );
318-
319- end );
320-
321- else
322-
323- # # Should this function have a cache?
324- # #
325- AddHomomorphismStructureOnMorphisms( category,
326- function ( cat, alpha, beta )
327-
328- return MapOfFinSets(
329- GROUPS_AS_CATEGORIES_SkeletalFinSets,
330- RG,
331- List( elements, x -> - 1 + Position( elements, elements[ PositionWithinElements( alpha )] * x * elements[ PositionWithinElements( beta )] ) ),
332- RG
333- );
334-
335- end );
336-
337- fi ;
338-
339-
340-
341- # #
342- AddDistinguishedObjectOfHomomorphismStructure( category,
343- function ( cat )
344-
345- return t_obj;
346-
347- end );
348-
349- # #
350- AddInterpretMorphismAsMorphismFromDistinguishedObjectToHomomorphismStructure( category,
351- function ( cat, alpha )
352- return MapOfFinSets(
353- GROUPS_AS_CATEGORIES_SkeletalFinSets,
354- t_obj,
355- [ - 1 + PositionWithinElements( alpha ) ] ,
356- RG
357- );
358- end );
359-
360- # #
361- AddInterpretMorphismFromDistinguishedObjectToHomomorphismStructureAsMorphism( category,
362- function ( cat, a, b, mor )
363- return GroupAsCategoryMorphism(
364- category,
365- elements[ 1 + AsList( mor )[ 1 ] ]
366- );
367- end );
271+ INSTALL_HOMOMORPHISM_STRUCTURE_FOR_GROUP_AS_CATEGORY( category );
368272
369273 fi ;
274+
370275 fi ;
371276
372277end );
0 commit comments