Skip to content

Commit

Permalink
fix delegations among IrreducibleModules methods (#5925)
Browse files Browse the repository at this point in the history
* fix delegations among `IrreducibleModules` methods

There were infinite recursions in the case of abelian groups.

Apparently there is code for computing the irreducible representations
of abelian groups over finite fields only for the case of prime fields.

The infinite recursions do not catch the case of non-prime fields
anymore after the current changes; the generic code now runs into
errors.

* hack in order to make more cases work

Once we know that our group is abelian,
call `IrreducibleModules` without restricting the dimension to 1,
and later filter the result in order to take just the 1-dim. modules.
(This is not a good solution, but at least more tests are working now.)
  • Loading branch information
ThomasBreuer authored Feb 3, 2025
1 parent 6729b6c commit 0a4774e
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 11 deletions.
41 changes: 30 additions & 11 deletions lib/grpreps.gi
Original file line number Diff line number Diff line change
Expand Up @@ -55,20 +55,39 @@ local modu, modus,gens,v,subs,sub,ser,i,j,a,si,dims,cf,mats,clos,bas,rad;
a:=DerivedSubgroup(G);
if Size(a)=Size(G) then
return [gens,[TrivialModule(Length(gens),F)]];
else
a:=MaximalAbelianQuotient(G);
si:=List(gens,x->ImagesRepresentative(a,x));
sub:=IrreducibleModules(Group(si),F,1);
if sub[1]=si then
return [gens,sub[2]];
elif IsAbelian(G) then
if IsPrimeField(F) then
if CanEasilyComputePcgs(G) then
# call `IrreducibleMethods` again;
# we assume that now another method is applicable
return IrreducibleModules(G, F, 1);
else
# delegate to a pc group,
# for which another method is available
a:= IsomorphismPcGroup(G);
fi;
else
modu:=[];
for i in sub[2] do
a:= IsomorphismPermGroup(G);
fi;
else
# delegate to a proper factor group
a:= MaximalAbelianQuotient(G);
fi;
si:=List(gens,x->ImagesRepresentative(a,x));
sub:= Group(si);
SetIsAbelian(sub, true);
sub:= IrreducibleModules(sub,F,0);
if sub[1]=si then
return [gens, Filtered( sub[2], x -> x.dimension = 1 )];
else
modu:=[];
for i in sub[2] do
if i.dimension = 1 then
v:=GroupHomomorphismByImages(Image(a),Group(i.generators),sub[1],i.generators);
Add(modu,GModuleByMats(List(si,x->ImagesRepresentative(v,x)),F));
od;
return [gens,modu];
fi;
fi;
od;
return [gens,modu];
fi;

fi;
Expand Down
16 changes: 16 additions & 0 deletions tst/testinstall/grpreps.tst
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,21 @@ gap> res2:= AbsolutelyIrreducibleModules( G2, F, 10 );;
gap> List( res2[2], r -> [ r.field, r.dimension ] );
[ [ GF(2), 1 ] ]

# Test that the delegation between methods for 'IrreducibleModules' works.
gap> Length( IrreducibleModules( AlternatingGroup(5), GF(3), 1 )[2] ) = 1;
true
gap> Length( IrreducibleModules( Group( (1,2), (1,2) ), GF(3), 1 )[2] ) = 2;
true
gap> Length( IrreducibleModules( Group( (1,2), (1,2) ), GF(4), 1 )[2] ) = 1;
true
gap> Length( IrreducibleModules( Group( (1,2,3,4,5) ), GF(4), 1 )[2] ) = 1;
true
gap> Length( IrreducibleModules( CyclicGroup( IsFpGroup, 2 ), GF(3), 1 )[2] ) = 2;
true
gap> Length( IrreducibleModules( CyclicGroup( IsFpGroup, 2 ), GF(4), 1 )[2] ) = 1;
true
gap> Length( IrreducibleModules( SymmetricGroup(5), GF(3), 1 )[2] ) = 2;
true

#
gap> STOP_TEST( "grpreps.tst" );

0 comments on commit 0a4774e

Please sign in to comment.