Skip to content

Commit

Permalink
Merge pull request #3129 from ThomasBreuer/TB_liftable_Brauer_characters
Browse files Browse the repository at this point in the history
extend the default `BrauerTableOp` method
  • Loading branch information
ThomasBreuer authored Dec 21, 2018
2 parents 8a5877e + cb36c5c commit 344ae6f
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 5 deletions.
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.
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);

0 comments on commit 344ae6f

Please sign in to comment.