CreateHeckeBasis(basis, ops)
creates a new basis for Hecke algebras in which to do computations. (The
design of this function has benefited from conversation with Andrew
Mathas, the author of the package Specht
).
The first argument basis must be a unique (different from that used for
other bases) character string. The second argument ops is a record
which should contain at least two fields, ops.T
and ops.(basis)
which should contain :
ops.T
:T
basis.
ops.(basis)
:T
basis
and converts it to the basis basis.
After the call to CreateHeckeBasis
, a new field (basis)
is added to
HeckeAlgebraOps
which contains a function to create elements of the
basis basis. These elements will have the standard operations for
Hecke elements: +
, -
, *
, ^
, =
, Print
, Coefficient
, plus
all extra operations that the user may have specified in ops. It is
thus possible to create a new basis which has extra operations. In
addition, for any already created basis y of the algebra, the function
(y)
will have the added capability to convert elements from the
basis basis to the y basis. If the user has provided a field
ops.(y)
, the function found there will be used. Otherwise, the
function ops.T
will be used to convert our basis element to the T
basis, followed by calling the function (y)
which was given in ops
at the time the y basis was created, to convert to the y basis. The
following forms of the Basis function will be accepted (as for the T
basis):
Basis( H, basis )( perm )
Basis( H, basis )( perms, coeffs)
Basis( H, basis )( list )
Basis( H, basis )( s1, .. , sn )
One should note, however that for the last two forms only reduced expressions will be accepted in general.
Below is an example where the basis t_w=q^{l(x)/2}T_w is created and
used. Here we have set v=q^{1/2}. As an example of an extra operation
in ops, we have given a method for BetaInvolution
. If methods for
one of BetaInvolution
, AltInvolution
are given they will be
automatically called by the generic functions with the same name. Here
we have set BetaInvolution
to use the same method as used by T
basis
elements.
In order to understand the following code, one has to recall that an
arbitrary Hecke element is a record; the basis elements are labeled by
the Coxeter group elements in the component elm
and the corresponding
coefficients in the component coeff
. For efficiency reasons, it is
necessary to describe the conversion functions on such arbitrary Hecke
elements and not just for one basis element T_w or t_w.
gap> CreateHeckeBasis( "t", rec( > T := h->Basis( Hecke(h), "T" )( h.elm, List( [1 .. Length( h.elm )], > i->Hecke(h).sqrtParameter[1]^CoxeterLength( > CoxeterGroup( Hecke(h) ), h.elm[i] ) * h.coeff[i] ) ), > > t := h->Basis( Hecke(h), "t" )( h.elm, List( [1 .. Length( h.elm )], > i->Hecke(h).sqrtParameter[1]^-CoxeterLength( > CoxeterGroup( Hecke(h) ), h.elm[i] ) * h.coeff[i] ) ), > > BetaInvolution := h->Basis( Hecke( h ),"t")( > HeckeAlgebraOps.T.BetaInvolution( > Basis( Hecke( h ), "T" )( h ) ) ) ) ); gap> v := X( Rationals );; v.name := "v";; gap> H := Hecke( CoxeterGroup( "A", 3 ), v ^ 2, v );; gap> h := Basis( H, "t" )( 3, 1, 2 ); t(1,3,2) gap> h1 := Basis( H, "T")( h ); v^3T(1,3,2) gap> h2 := Basis( H, "t" )( h1 ); t(1,3,2) gap> BetaInvolution( h2 ); v^-12t(2,1,3)
This function requires the package "chevie" (see RequirePackage).
GAP 3.4.4