From e39c8ea995e4b2b43b57d95cb7700b5b95890b8c Mon Sep 17 00:00:00 2001 From: ThomasBreuer Date: Sun, 13 Feb 2022 19:22:26 +0100 Subject: [PATCH] admit `g^chi` and `chi^g` for Brauer characters --- lib/ctblfuns.gi | 53 ++++++++++++++++++++++++++++-------- tst/testinstall/ctblfuns.tst | 20 +++++++++++++- 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/lib/ctblfuns.gi b/lib/ctblfuns.gi index 3b4e45a3f4..4ff7e9ba51 100644 --- a/lib/ctblfuns.gi +++ b/lib/ctblfuns.gi @@ -521,15 +521,32 @@ InstallMethod( \^, "for class function and group element", [ IsClassFunction, IsMultiplicativeElementWithInverse ], function( chi, g ) - local tbl, G; + local tbl, G, mtbl, pi, fus, inv, imgs; + tbl:= UnderlyingCharacterTable( chi ); if HasUnderlyingGroup( tbl ) then + # 'chi' is an ordinary character. G:= UnderlyingGroup( tbl ); if IsElmsColls( FamilyObj( g ), FamilyObj( G ) ) then return ClassFunctionSameType( tbl, chi, Permuted( ValuesOfClassFunction( chi ), CorrespondingPermutations( tbl, chi, [ g ] )[1] ) ); fi; + elif HasOrdinaryCharacterTable( tbl ) then + # 'chi' is a Brauer character. + mtbl:= tbl; + tbl:= OrdinaryCharacterTable( mtbl ); + if HasUnderlyingGroup( tbl ) then + G:= UnderlyingGroup( tbl ); + if IsElmsColls( FamilyObj( g ), FamilyObj( G ) ) then + pi:= CorrespondingPermutations( tbl, [ g ] )[1]^-1; + fus:= GetFusionMap( mtbl, tbl ); + inv:= InverseMap( fus ); + imgs:= List( [ 1 .. Length( fus ) ], i -> inv[ fus[i]^pi ] ); + return ClassFunctionSameType( mtbl, chi, + ValuesOfClassFunction( chi ){ imgs } ); + fi; + fi; fi; TryNextMethod(); end ); @@ -579,20 +596,34 @@ InstallOtherMethod( \^, InstallOtherMethod( \^, [ IsMultiplicativeElementWithInverse, IsClassFunction ], function( g, chi ) - local tbl, ccl, i; + local tbl, mtbl, ccl, i; + tbl:= UnderlyingCharacterTable( chi ); - if not HasUnderlyingGroup( tbl ) then + if HasOrdinaryCharacterTable( tbl ) then + # 'chi' is a Brauer character. + mtbl:= tbl; + tbl:= OrdinaryCharacterTable( mtbl ); + if not HasUnderlyingGroup( tbl ) then + Error( "table of does not store its group" ); + elif not g in UnderlyingGroup( tbl ) + or Order( g ) mod UnderlyingCharacteristic( mtbl ) = 0 then + Error( " must be p-regular and lie in the underlying group of " ); + else + ccl:= ConjugacyClasses( tbl ){ GetFusionMap( mtbl, tbl ) }; + fi; + elif not HasUnderlyingGroup( tbl ) then Error( "table of does not store its group" ); - elif g in UnderlyingGroup( tbl ) then - ccl:= ConjugacyClasses( tbl ); - for i in [ 1 .. Length( ccl ) ] do - if g in ccl[i] then - return ValuesOfClassFunction( chi )[i]; - fi; - od; - else + elif not g in UnderlyingGroup( tbl ) then Error( " must lie in the underlying group of " ); + else + ccl:= ConjugacyClasses( tbl ); fi; + + for i in [ 1 .. Length( ccl ) ] do + if g in ccl[i] then + return ValuesOfClassFunction( chi )[i]; + fi; + od; end ); diff --git a/tst/testinstall/ctblfuns.tst b/tst/testinstall/ctblfuns.tst index 375db47446..2f64bd89fa 100644 --- a/tst/testinstall/ctblfuns.tst +++ b/tst/testinstall/ctblfuns.tst @@ -1,4 +1,4 @@ -#@local S4,V4,irr,l, tbl, v +#@local S4,V4,irr,l, tbl, v, g, h, t, chi, t5, irr5 gap> START_TEST("ctblfuns.tst"); gap> S4:= SymmetricGroup( 4 ); Sym( [ 1 .. 4 ] ) @@ -67,5 +67,23 @@ fail gap> SizeOfFieldOfDefinition( Z(25), 5 ); Error, must be a cyclotomic or a list of cyclotomics +# +gap> S4:= SymmetricGroup( 4 );; +gap> V4:= PCore( S4, 2 );; +gap> t:= CharacterTable( V4 );; +gap> irr:= Irr( t );; +gap> List( irr, chi -> Position( irr, chi^S4.1 ) ); +[ 1, 3, 2, 4 ] +gap> chi:= irr[2];; +gap> chi = List( ConjugacyClasses( V4 ), x -> Representative(x)^chi ); +true +gap> t5:= t mod 5;; +gap> irr5:= Irr( t5 );; +gap> List( irr5, chi -> Position( irr5, chi^S4.1 ) ); +[ 1, 3, 2, 4 ] +gap> chi:= irr5[2];; +gap> chi = List( ConjugacyClasses( V4 ), x -> Representative(x)^chi ); +true + # gap> STOP_TEST( "ctblfuns.tst", 1);