Skip to content

Commit

Permalink
fixed ConstituentsOfCharacter for Brauer character
Browse files Browse the repository at this point in the history
- The variant of `ConstituentsOfCharacter` with only argument a Brauer character
  was wrong, it regarded the character as an ordinary character.

  (This bug has been reported by Gabriel Navarro.)

- Also the case of a virtual Brauer character was not handled correctly.

The two bugs are now fixed,
some tests for the variants of arguments are available,
and the documentation states which cases are admissible:
ordinary or modular characters,
ordinary of modular virtual characters.

Also, the documentation
  • Loading branch information
ThomasBreuer committed Nov 13, 2019
1 parent 71194d3 commit 22eebc7
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 13 deletions.
9 changes: 7 additions & 2 deletions lib/ctblfuns.gd
Original file line number Diff line number Diff line change
Expand Up @@ -1393,8 +1393,13 @@ DeclareAttribute( "ClassPositionsOfCentre", IsHomogeneousList );
## <Attr Name="ConstituentsOfCharacter" Arg='[tbl, ]chi'/>
##
## <Description>
## is the set of irreducible characters that occur in the decomposition of
## the (virtual) character <A>chi</A> with nonzero coefficient.
## Let <A>chi</A> be an ordinary or modular (virtual) character.
## If an ordinary or modular character table <A>tbl</A> is given then
## <A>chi</A> may also be a list of character values.
## <P/>
## <Ref Attr="ConstituentsOfCharacter"/> returns
## the set of those irreducible characters that occur in the decomposition
## of <A>chi</A> with nonzero coefficient.
## <P/>
## <Example><![CDATA[
## gap> nat:= NaturalCharacter( S4 );
Expand Down
24 changes: 13 additions & 11 deletions lib/ctblfuns.gi
Original file line number Diff line number Diff line change
Expand Up @@ -1832,11 +1832,10 @@ InstallMethod( ConstituentsOfCharacter,
chi -> ConstituentsOfCharacter( UnderlyingCharacterTable( chi ), chi ) );

InstallMethod( ConstituentsOfCharacter,
"for a character",
[ IsClassFunction and IsCharacter ],
function( chi )
local tbl, # underlying table of `chi'
irr, # irreducible characters of `tbl'
"for an ordinary table, and a character",
[ IsOrdinaryTable, IsClassFunction and IsCharacter ],
function( tbl, chi )
local irr, # irreducible characters of `tbl'
values, # character values
deg, # degree of `chi'
const, # list of constituents, result
Expand Down Expand Up @@ -1881,7 +1880,7 @@ InstallMethod( ConstituentsOfCharacter,
scpr:= ScalarProduct( tbl, chi, i );
if scpr <> 0 then
Add( const, i );
proper:= proper and IsInt( scpr ) and ( 0 < scpr );
proper:= proper and IsPosInt( scpr );
fi;
od;

Expand All @@ -1897,15 +1896,18 @@ InstallMethod( ConstituentsOfCharacter,
"for a Brauer table, and a homogeneous list",
[ IsBrauerTable, IsHomogeneousList ],
function( tbl, chi )
local irr, # irreducible characters of `tbl'
dec;
local irr, intA, intB, dec;

irr:= Irr( tbl );
dec:= Decomposition( irr, [ chi ], "nonnegative" )[1];
intA:= IntegralizedMat( irr );
intB:= IntegralizedMat( [ chi ], intA.inforec );
dec:= SolutionIntMat( intA.mat, intB.mat[1] );
if dec = fail then
TryNextMethod();
Error( "<chi> is not a virtual character of <tbl>" );
fi;
return irr{ Filtered( [ 1 .. Length( dec ) ], i -> dec[i] <> 0 ) };

return SortedList( irr{ Filtered( [ 1 .. Length( dec ) ],
i -> dec[i] <> 0 ) } );
end );


Expand Down
37 changes: 37 additions & 0 deletions tst/teststandard/ctblfuns.tst
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#@local ordtbl, modtbl, irr, chi, const, ibr, phi
gap> START_TEST( "ctblfuns.tst" );

#
gap> ordtbl:= CharacterTable( GL(2,3) );;
gap> modtbl:= ordtbl mod 2;;
gap> irr:= Irr( ordtbl );;
gap> chi:= irr[5] * irr[5];;
gap> const:= ConstituentsOfCharacter( chi );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1, 1, 1, 1, -1, -1, -1 ], [ 3, 0, 3, 0, -1, -1, -1, 1 ] ]
gap> const:= ConstituentsOfCharacter( -chi );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1, 1, 1, 1, -1, -1, -1 ], [ 3, 0, 3, 0, -1, -1, -1, 1 ] ]
gap> const:= ConstituentsOfCharacter( ordtbl, chi );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1, 1, 1, 1, -1, -1, -1 ], [ 3, 0, 3, 0, -1, -1, -1, 1 ] ]
gap> const:= ConstituentsOfCharacter( ordtbl, ValuesOfClassFunction( chi ) );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1, 1, 1, 1, -1, -1, -1 ], [ 3, 0, 3, 0, -1, -1, -1, 1 ] ]
gap> ibr:= Irr( modtbl );;
gap> phi:= ibr[2] * ibr[2];;
gap> const:= ConstituentsOfCharacter( phi );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1 ], [ 2, -1 ] ]
gap> const:= ConstituentsOfCharacter( -phi );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1 ], [ 2, -1 ] ]
gap> const:= ConstituentsOfCharacter( modtbl, phi );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1 ], [ 2, -1 ] ]
gap> const:= ConstituentsOfCharacter( modtbl, ValuesOfClassFunction( phi ) );;
gap> List( const, ValuesOfClassFunction );
[ [ 1, 1 ], [ 2, -1 ] ]

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

0 comments on commit 22eebc7

Please sign in to comment.