Skip to content

Commit 0a4774e

Browse files
authored
fix delegations among IrreducibleModules methods (#5925)
* 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.)
1 parent 6729b6c commit 0a4774e

File tree

2 files changed

+46
-11
lines changed

2 files changed

+46
-11
lines changed

lib/grpreps.gi

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,39 @@ local modu, modus,gens,v,subs,sub,ser,i,j,a,si,dims,cf,mats,clos,bas,rad;
5555
a:=DerivedSubgroup(G);
5656
if Size(a)=Size(G) then
5757
return [gens,[TrivialModule(Length(gens),F)]];
58-
else
59-
a:=MaximalAbelianQuotient(G);
60-
si:=List(gens,x->ImagesRepresentative(a,x));
61-
sub:=IrreducibleModules(Group(si),F,1);
62-
if sub[1]=si then
63-
return [gens,sub[2]];
58+
elif IsAbelian(G) then
59+
if IsPrimeField(F) then
60+
if CanEasilyComputePcgs(G) then
61+
# call `IrreducibleMethods` again;
62+
# we assume that now another method is applicable
63+
return IrreducibleModules(G, F, 1);
64+
else
65+
# delegate to a pc group,
66+
# for which another method is available
67+
a:= IsomorphismPcGroup(G);
68+
fi;
6469
else
65-
modu:=[];
66-
for i in sub[2] do
70+
a:= IsomorphismPermGroup(G);
71+
fi;
72+
else
73+
# delegate to a proper factor group
74+
a:= MaximalAbelianQuotient(G);
75+
fi;
76+
si:=List(gens,x->ImagesRepresentative(a,x));
77+
sub:= Group(si);
78+
SetIsAbelian(sub, true);
79+
sub:= IrreducibleModules(sub,F,0);
80+
if sub[1]=si then
81+
return [gens, Filtered( sub[2], x -> x.dimension = 1 )];
82+
else
83+
modu:=[];
84+
for i in sub[2] do
85+
if i.dimension = 1 then
6786
v:=GroupHomomorphismByImages(Image(a),Group(i.generators),sub[1],i.generators);
6887
Add(modu,GModuleByMats(List(si,x->ImagesRepresentative(v,x)),F));
69-
od;
70-
return [gens,modu];
71-
fi;
88+
fi;
89+
od;
90+
return [gens,modu];
7291
fi;
7392

7493
fi;

tst/testinstall/grpreps.tst

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,21 @@ gap> res2:= AbsolutelyIrreducibleModules( G2, F, 10 );;
1616
gap> List( res2[2], r -> [ r.field, r.dimension ] );
1717
[ [ GF(2), 1 ] ]
1818

19+
# Test that the delegation between methods for 'IrreducibleModules' works.
20+
gap> Length( IrreducibleModules( AlternatingGroup(5), GF(3), 1 )[2] ) = 1;
21+
true
22+
gap> Length( IrreducibleModules( Group( (1,2), (1,2) ), GF(3), 1 )[2] ) = 2;
23+
true
24+
gap> Length( IrreducibleModules( Group( (1,2), (1,2) ), GF(4), 1 )[2] ) = 1;
25+
true
26+
gap> Length( IrreducibleModules( Group( (1,2,3,4,5) ), GF(4), 1 )[2] ) = 1;
27+
true
28+
gap> Length( IrreducibleModules( CyclicGroup( IsFpGroup, 2 ), GF(3), 1 )[2] ) = 2;
29+
true
30+
gap> Length( IrreducibleModules( CyclicGroup( IsFpGroup, 2 ), GF(4), 1 )[2] ) = 1;
31+
true
32+
gap> Length( IrreducibleModules( SymmetricGroup(5), GF(3), 1 )[2] ) = 2;
33+
true
34+
1935
#
2036
gap> STOP_TEST( "grpreps.tst" );

0 commit comments

Comments
 (0)