Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

extend the default BrauerTableOp method #3129

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions lib/ctbl.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3102,10 +3102,33 @@ DeclareOperation( "CharacterTable", [ IsString ] );
## returns its <A>p</A>-modular
## character table if &GAP; can compute this table, and <K>fail</K>
## otherwise.
## The <A>p</A>-modular table can be computed for <A>p</A>-solvable groups
## (using the Fong-Swan Theorem) and in the case that <A>ordtbl</A> is a
## table from the &GAP; character table library for which also the
## <A>p</A>-modular table is contained in the table library.
## <P/>
## The <A>p</A>-modular table can be computed in the following cases.
## <P/>
## <List>
## <Item>
## The group is <A>p</A>-solvable (see <Ref Oper="IsPSolvable"/>,
## apply the Fong-Swan Theorem);
## </Item>
## <Item>
## the Sylow <A>p</A>-subgroup of <A>G</A> is cyclic,
## and all <A>p</A>-modular Brauer characters of <A>G</A>
## lift to ordinary characters
## (note that this situation can be detected from the ordinary
## character table of <A>G</A>);
## </Item>
## <Item>
## the table <A>ordtbl</A> stores information how it was constructed from
## other tables (as a direct product or as an isoclinic variant,
## for example),
## and the Brauer tables of the source tables can be computed;
## </Item>
## <Item>
## <A>ordtbl</A> is a table from the &GAP; character table library
## for which also the <A>p</A>-modular table is contained in the table
## library.
## </Item>
## </List>
## <P/>
## The default method for a group and a prime delegates to
## <Ref Oper="BrauerTable" Label="for a group, and a prime integer"/>
Expand Down
49 changes: 48 additions & 1 deletion lib/ctbl.gi
Original file line number Diff line number Diff line change
Expand Up @@ -4167,7 +4167,8 @@ InstallMethod( BrauerTableOp,
"for ordinary character table, and positive integer",
[ IsOrdinaryTable, IsPosInt ],
function( tbl, p )
local result, modtbls, id, fusions, pos, source;
local result, modtbls, id, fusions, pos, source, ppart, n, bl, inv,
choice, fusion, rest, b, brest, brestset, l;

result:= fail;

Expand Down Expand Up @@ -4202,6 +4203,52 @@ InstallMethod( BrauerTableOp,
# (This function takes care of a class permutation in `tbl'.)
result:= CharacterTableIsoclinic( modtbls, tbl );
fi;
else
ppart:= 1;
n:= Size( tbl );
while n mod p = 0 do
ppart:= ppart * p;
n:= n / p;
od;
if ppart in OrdersClassRepresentatives( tbl ) then
# The Sylow 'p'-subgroup is cyclic.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest to remove quotes around p to ease reading.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ThomasBreuer just to explain why: I read that first as p'-subgroup, then reread to figure out what does that mean. The style you use here is not consistent with other styles used in the GAP library: for example we have

grp.gi:      # compute generators for the torsion Omega p-subgroups of the center
grpprmcs.gi:##  O_p(G), the p-core of G, is the maximal normal p-subgroup
grpprmcs.gi:                        # abelian normal p-subgroup of G
grpprmcs.gi:    # p-subgroup of G; taking commutator subgroups, find abelian normal
grpprmcs.gi:    # p-subgroup of G.
grpprmcs.gi:    # p-subgroup; kernel is abelian p-group. Take image at this action, and

and also one case of

ctblsolv.gi:    # Choose a normal elementary abelian `p'-subgroup `N',

result:= CharacterTableRegular( tbl, p );
bl:= PrimeBlocks( tbl, p );
inv:= InverseMap( bl.block );
choice:= [];
fusion:= GetFusionMap( result, tbl );
rest:= List( Irr( tbl ), x -> ValuesOfClassFunction( x ){ fusion } );
for b in [ 1 .. Length( bl.defect ) ] do
if bl.defect[b] = 0 then
Add( choice, inv[b] );
else
brest:= rest{ inv[b] };
brestset:= Set( brest );
l:= Length( brestset );
if l = 1 then
# There is only one irreducible Brauer character in the block.
Add( choice, inv[b][1] );
elif Sum( brestset{ [ 1 .. l-1 ] } ) = brestset[l] then
Append( choice,
inv[b]{ List( [ 1 .. l-1 ],
i -> Position( brest, brestset[i] ) ) } );
else
# Not all Brauer characters lift to characteristic zero.
result:= fail;
break;
fi;
fi;
od;
if result <> fail then
# The irreducibles shall be sorted as in the ordinary table.
Sort( choice );

# Set the attributes.
SetIrr( result, List( choice, i -> Character( result, rest[i] ) ) );
SetInfoText( result,
"computed using that all Brauer characters lift to char. zero" );
fi;
fi;
fi;

if HasClassParameters( tbl ) and result <> fail then
Expand Down
23 changes: 23 additions & 0 deletions tst/testinstall/ctbl.tst
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,28 @@ true
gap> ForAny( ComputedPrimeBlockss( t ), IsMutable );
false

# create certain Brauer tables ...
# ... of p-solvable groups
gap> t:= CharacterTable( SymmetricGroup( 4 ) );;
gap> IsCharacterTable( t mod 2 );
true
gap> IsCharacterTable( t mod 3 );
true

# ... where all Brauer characters lift to characteristic zero
gap> g:= PSL(2,5);;
gap> t:= CharacterTable( g );;
gap> IsCharacterTable( t mod 3 );
true
gap> IsCharacterTable( t mod 5 );
true

# ... where the Brauer tables of the factors of a product can be computed
gap> g:= AlternatingGroup( 5 );;
gap> t:= CharacterTable( g );;
gap> t:= CharacterTableDirectProduct( t, t );;
gap> IsCharacterTable( t mod 5 );
true

##
gap> STOP_TEST( "ctbl.tst", 1);