Let * G* be a connected reductive group defined over the algebraic closure
of a finite field

If * T* is an

The **unipotent characters** of * G^{F}* are the irreducible constituents of
the

A subset of the unipotent characters, the **principal series** unipotent
characters, can be described in an elementary way. They are the
constituents of *R _{1}*, or equivalently the characters of the virtual module
defined by the cohomology of

The commuting algebra of * G^{F}*-endomorphisms of

To understand the decomposition of Deligne-Lusztig characters, and thus
unipotent characters, is is useful to introduce another set of class
functions which are parameterized by irreducible characters of the coset
*Wφ*. If *χ* is such a character, we define the associated **almost
character** by: *R _{χ}=|W|^{-1}∑_{w∈ W}χ(wφ) R_{w}*. The reason
to the name is that these class function are close to irreducible
characters: they satisfy

We now describe the parameterization of unipotent characters when
*W ^{φ}=W*, thus when the coset

For the characters of *W* a family * F* corresponds to a block of the
Hecke algebra over a ring called the Rouquier ring. To * F* Lusztig
associates a small group *Γ* (not bigger than *(ℤ/2) ^{n}*, or

A second parameterization of unipotent character is via **Harish-Chandra
series**. A character is called **cuspidal** if all its proper Harish-Chandra
restrictions vanish. There are few cuspidal unipotent characters (none in
linear groups, and at most one in other classical groups). The
* G^{F}*-endomorphism algebra of an Harish-Chandra induced

A final piece of information attached to unipotent characters is the
**eigenvalues of Frobenius**. Let *F ^{δ}* be the smallest power of the
isogeny

**CHEVIE** contains table of all this information, and can compute
Harish-Chandra and Lusztig induction of unipotent characters and almost
characters. We illustrate the information on some examples:

gap> W:=CoxeterGroup("G",2); CoxeterGroup("G",2) gap> uc:=UnipotentCharacters(W); UnipotentCharacters( G2 ) gap> Display(uc); Unipotent characters for G2 Name | Degree FakeDegree Eigenvalue Label _________________________________________________________ phi{1,0} | 1 1 1 phi{1,6} | q^6 q^6 1 phi{1,3}' | 1/3qP3P6 q^3 1 (1,r) phi{1,3}'' | 1/3qP3P6 q^3 1 (g3,1) phi{2,1} | 1/6qP2^2P3 qP8 1 (1,1) phi{2,2} | 1/2qP2^2P6 q^2P4 1 (g2,1) G2[-1] | 1/2qP1^2P3 0 -1 (g2,eps) G2[1] | 1/6qP1^2P6 0 1 (1,eps) G2[E3] |1/3qP1^2P2^2 0 E3 (g3,E3) G2[E3^2] |1/3qP1^2P2^2 0 E3^2 (g3,E3^2)

The first column gives the name of the unipotent character; the first 6 are
in the principal series so are named according to the corresponding
characters of *W*. The last 4 are cuspidal, and named by the corresponding
eigenvalue of Frobenius, which is displayed in the fourth column. In
general the names of the unipotent characters come from their
parameterization by Harish-Chandra series; in addition, for classical
groups, they are associated to **symbols**.

The first two characters are each in a family by themselves. The last eight
are in a family associated to the group *Γ= S_{3}*: the last column
shows the parameters

One can get more information on the Lusztig Fourier matrix of the big family by asking

gap> Display(uc.families[1]); D(S3) label |eigen ________________________________________________________ (1,1) | 1 1/6 1/2 1/3 1/3 1/6 1/2 1/3 1/3 (g2,1) | 1 1/2 1/2 0 0 -1/2 -1/2 0 0 (g3,1) | 1 1/3 0 2/3 -1/3 1/3 0 -1/3 -1/3 (1,r) | 1 1/3 0 -1/3 2/3 1/3 0 -1/3 -1/3 (1,eps) | 1 1/6 -1/2 1/3 1/3 1/6 -1/2 1/3 1/3 (g2,eps) | -1 1/2 -1/2 0 0 -1/2 1/2 0 0 (g3,E3) | E3 1/3 0 -1/3 -1/3 1/3 0 2/3 -1/3 (g3,E3^2) | E3^2 1/3 0 -1/3 -1/3 1/3 0 -1/3 2/3

One can do computations with individual unipotent characters. Here we construct the Coxeter torus, and then the identity character of this torus as a unipotent character.

gap> W:=CoxeterGroup("G",2); CoxeterGroup("G",2) gap> T:=ReflectionCoset(ReflectionSubgroup(W,[]),EltWord(W,[1,2])); (q^2-q+1) gap> u:=UnipotentCharacter(T,1); [(q^2-q+1)]=<>

Then here are two ways to construct the Deligne-Lusztig character associated to the Coxeter torus:

gap> LusztigInduction(W,u); [G2]=<phi{1,0}>+<phi{1,6}>-<phi{2,1}>+<G2[-1]>+<G2[E3]>+<G2[E3^2]> gap> v:=DeligneLusztigCharacter(W,[1,2]); [G2]=<phi{1,0}>+<phi{1,6}>-<phi{2,1}>+<G2[-1]>+<G2[E3]>+<G2[E3^2]> gap> Degree(v); q^6 + q^5 - q^4 - 2*q^3 - q^2 + q + 1 gap> v*v; 6

The last two lines ask for the degree of *v*, then for the scalar product of
*v* with itself.

Finally we mention that **CHEVIE** can also provide unipotent characters of
Spetses, as defined in BMM14. An example:

gap> Display(UnipotentCharacters(ComplexReflectionGroup(4))); Unipotent characters for G4 Name | Degree FakeDegree Eigenvalue Label _______________________________________________________________ phi{1,0} | 1 1 1 phi{1,4} | -ER(-3)/6q^4P"3P4P"6 q^4 1 1.-E3^2 phi{1,8} | ER(-3)/6q^4P'3P4P'6 q^8 1 -1.E3^2 phi{2,5} | 1/2q^4P2^2P6 q^5P4 1 1.E3^2 phi{2,3} |(3+ER(-3))/6qP"3P4P'6 q^3P4 1 1.E3^2 phi{2,1} |(3-ER(-3))/6qP'3P4P"6 qP4 1 1.E3 phi{3,2} | q^2P3P6 q^2P3P6 1 Z3:2 | -ER(-3)/3qP1P2P4 0 E3^2 E3.E3^2 Z3:11 | -ER(-3)/3q^4P1P2P4 0 E3^2 E3.-E3 G4 | -1/2q^4P1^2P3 0 -1 -E3^2.-1

- UnipotentCharacters
- Operations for UnipotentCharacters
- UnipotentCharacter
- Operations for Unipotent Characters
- UnipotentDegrees
- CycPolUnipotentDegrees
- DeligneLusztigCharacter
- AlmostCharacter
- LusztigInduction
- LusztigRestriction
- LusztigInductionTable
- DeligneLusztigLefschetz
- Families of unipotent characters
- Family
- Operations for families
- IsFamily
- OnFamily
- FamiliesClassical
- FamilyImprimitive
- DrinfeldDouble
- NrDrinfeldDouble
- FusionAlgebra

`UnipotentCharacters(`

`W`)

`W` should be a Coxeter group, a Coxeter Coset or a Spetses. The function
gives back a record containing information about the unipotent characters
of the associated algebraic group (or Spetses). This contains the following
fields:

`group`

:

a pointer to`W`

`charNames`

:

the list of names of the unipotent characters.

`charSymbols`

:

the list of symbols associated to unipotent characters, for classical groups.

`harishChandra`

:

information about Harish-Chandra series of unipotent characters. This is itself a list of records, one for each pair*(*of a Levi of an**L**,λ)*F*-stable parabolic subgroup and a cuspidal unipotent character of. These records themselves have the following fields:**L**^{F}

`levi`

:

a list`l`

such thatcorresponds to**L**`ReflectionSubgroup(W,l)`

.

`cuspidalName`

:

the name of the unipotent cuspidal character*lambda*.

`eigenvalue`

:

the eigenvalue of Frobenius for*λ*.

`relativeType`

:

the reflection type of*W*;_{G}(**L**)

`parameterExponents`

:

the-endomorphism algebra of**G**^{F}*R*is a Hecke algebra for_{L}^{G}(λ)*W*with some parameters of the form_{G}(**L**)*q*. This holds the list of exponents^{as}*a*._{s}

`charNumbers`

:

the indices of the unipotent characters indexed by the irreducible characters of*W*._{G}(**L**)

`families`

:

information about Lusztig families of unipotent characters. This is itself a list of records, one for each family. These records are described in the section about families below.

gap> W:=CoxeterGroup("Bsym",2); CoxeterGroup("Bsym",2) gap> WF:=CoxeterCoset(W,(1,2)); 2Bsym2 gap> uc:=UnipotentCharacters(W); UnipotentCharacters( Bsym2 ) gap> Display(uc); Unipotent characters for Bsym2 Name | Degree FakeDegree Eigenvalue Label ___________________________________________ 11. | 1/2qP4 q^2 1 +,- 1.1 |1/2qP2^2 qP4 1 +,+ .11 | q^4 q^4 1 2. | 1 1 1 .2 | 1/2qP4 q^2 1 -,+ B2 |1/2qP1^2 0 -1 -,- gap> uc.harishChandra[1]; rec( levi := [ ], relativeType := [ rec(series := "B", indices := [ 1, 2 ], rank := 2) ], eigenvalue := 1, parameterExponents := [ 1, 1 ], charNumbers := [ 1, 2, 3, 4, 5 ], cuspidalName := [ ] ) gap> uc.families[2]; Family("012",[1,2,5,6]) gap> Display(uc.families[2]); label |eigen +,- +,+ -,+ -,- ________________________________ +,- | 1 1/2 1/2 -1/2 -1/2 +,+ | 1 1/2 1/2 1/2 1/2 -,+ | 1 -1/2 1/2 1/2 -1/2 -,- | -1 -1/2 1/2 -1/2 1/2

On can control the display of unipotent characters in various ways.
In the record controlling `Display`

, a field `items`

will specify
which columns are displayed. The possible values are

`"n0"`

:

The index of the character in the list of unipotent characters.

`"Name"`

:

The name of the unipotent character.

`"Degree"`

:

The degree of the unipotent character.

`"FakeDegree"`

:

The degree of the corresponding almost character.

`"Eigenvalue"`

:

The eigenvalue of Frobenius attached to the unipotent character.

`"Symbol"`

:

for classical groups, the symbol attached to the unipotent character.

`"Family"`

:

The parameter the character has in its Lusztig family.

`"Signs"`

:

The signs attached to the character in the Fourier transform.

The default value is
`items:=["Name","Degree","FakeDegree","Eigenvalue","Family"]`

This can be changed by setting the variable `UnipotentCharactersOps.items`

which holds this default value. In addition if the field `byFamily`

is set,
the characters are displayed family by family instead of in index order.
Finally, the field `chars`

can be set, indicating which characters are to be
displayed in which order.

gap> W:=CoxeterGroup("B",2); CoxeterGroup("B",2) gap> uc:=UnipotentCharacters(W); UnipotentCharacters( B2 ) gap> Display(uc); Unipotent characters for B2 Name | Degree FakeDegree Eigenvalue Label ___________________________________________ 11. | 1/2qP4 q^2 1 +,- 1.1 |1/2qP2^2 qP4 1 +,+ .11 | q^4 q^4 1 2. | 1 1 1 .2 | 1/2qP4 q^2 1 -,+ B2 |1/2qP1^2 0 -1 -,- gap> Display(uc,rec(byFamily:=true)); Unipotent characters for B2 Name | Degree FakeDegree Eigenvalue Label ___________________________________________ *.11 | q^4 q^4 1 ___________________________________________ 11. | 1/2qP4 q^2 1 +,- *1.1 |1/2qP2^2 qP4 1 +,+ .2 | 1/2qP4 q^2 1 -,+ B2 |1/2qP1^2 0 -1 -,- ___________________________________________ *2. | 1 1 1 gap> Display(uc,rec(items:=["n0","Name","Symbol"])); Unipotent characters for B2 n0 |Name Symbol __________________ 1 | 11. (12,0) 2 | 1.1 (02,1) 3 | .11 (012,12) 4 | 2. (2,) 5 | .2 (01,2) 6 | B2 (012,)

`UnipotentCharacter(`

`W`,l)

Constructs an object representing the unipotent character of the algebraic
group associated to the Coxeter group or Coxeter coset `W` which is
specified by `l`. There are 3 possibilities for `l`: if it is an integer,
the `l`-th unipotent character of `W` is returned. If it is a string, the
unipotent character of `W` whose name is `l` is returned. Finally, `l` can
be a list of length the number of unipotent characters of `W`, which
specifies the coefficient to give to each.

gap> W:=CoxeterGroup("G",2); CoxeterGroup("G",2) gap> u:=UnipotentCharacter(W,7); [G2]=<G2[-1]> gap> v:=UnipotentCharacter(W,"G2[E3]"); [G2]=<G2[E3]> gap> w:=UnipotentCharacter(W,[1,0,0,-1,0,0,2,0,0,1]); [G2]=<phi{1,0}>-<phi{1,3}''>+2<G2[-1]>+<G2[E3^2]>

`+`

:- Adds the specified characters.

`-`

:- Subtracts the specified characters

`*`

:- Multiplies a character by a scalar, or if given two unipotent characters returns their scalar product.

We go on from examples of the previous section:

gap> u+v; [G2]=<G2[-1]>+<G2[E3]> gap> w-2*u; [G2]=<phi{1,0}>-<phi{1,3}''>+<G2[E3^2]> gap> w*w; 7

`Degree`

:

returns the degree of the unipotent character.

gap> Degree(w); q^5 - q^4 - q^3 - q^2 + q + 1 gap> Degree(u+v); (5/6)*q^5 + (-1/2)*q^4 + (-2/3)*q^3 + (-1/2)*q^2 + (5/6)*q

`String`

and`Print`

:

the formatting of unipotent characters is affected by the variable`CHEVIE.PrintUniChars`

. It is a record; if the field`short`

is bound (the default) they are printed in a compact form. If the field`long`

is bound, they are printed one character per line:

gap> CHEVIE.PrintUniChars:=rec(long:=true); rec( long := true ) gap> w; [G2]= <phi{1,0}> 1 <phi{1,6}> 0 <phi{1,3}'> 0 <phi{1,3}''> -1 <phi{2,1}> 0 <phi{2,2}> 0 <G2[-1]> 2 <G2[1]> 0 <G2[E3]> 0 <G2[E3^2]> 1 gap> CHEVIE.PrintUniChars:=rec(short:=true);;

`Frobenius(`

:`WF`)

If`WF`

is a Coxeter coset associated to the Coxeter group*W*, the function`Frobenius(WF)`

returns a function which does the corresponding automorphism on the unipotent characters

gap> W:=CoxeterGroup("D",4);WF:=CoxeterCoset(W,(1,2,4)); CoxeterGroup("D",4) 3D4 gap> u:=UnipotentCharacter(W,2); [D4]=<11-> gap> Frobenius(WF)(u); [D4]=<.211> gap> Frobenius(WF)(u,-1); [D4]=<11+>

`UnipotentDegrees(`

`W`,`q`)

Returns the list of degrees of the unipotent characters of the finite
reductive group (or Spetses) with Weyl group (or Spetsial reflection group)
`W`, evaluated at `q`.

gap> W:=CoxeterGroup("G",2); CoxeterGroup("G",2) gap> q:=Indeterminate(Rationals);;q.name:="q";; gap> UnipotentDegrees(W,q); [ q^0, q^6, (1/3)*q^5 + (1/3)*q^3 + (1/3)*q, (1/3)*q^5 + (1/3)*q^3 + (1/3)*q, (1/6)*q^5 + (1/2)*q^4 + (2/3)*q^ 3 + (1/2)*q^2 + (1/6)*q, (1/2)*q^5 + (1/2)*q^4 + (1/2)*q^2 + (1/ 2)*q, (1/2)*q^5 + (-1/2)*q^4 + (-1/2)*q^2 + (1/2)*q, (1/6)*q^5 + (-1/2)*q^4 + (2/3)*q^3 + (-1/2)*q^2 + (1/6)*q, (1/3)*q^5 + (-2/3)*q^3 + (1/3)*q, (1/3)*q^5 + (-2/3)*q^3 + (1/3)*q ]

For a non-rational Spetses, `Indeterminate(Cyclotomics)`

would be more
appropriate.

`CycPolUnipotentDegrees(`

`W`)

Taking advantage that the degrees of unipotent characters of the finite
reductive group (or Spetses) with Weyl group (or Spetsial reflection group)
`W` are products of cyclotomic polynomials, this function returns these
degrees as a list of `CycPol`

s (see Cyclotomic polynomials).

gap> W:=CoxeterGroup("G",2); CoxeterGroup("G",2) gap> CycPolUnipotentDegrees(W); [ 1, q^6, 1/3qP3P6, 1/3qP3P6, 1/6qP2^2P3, 1/2qP2^2P6, 1/2qP1^2P3, 1/6qP1^2P6, 1/3qP1^2P2^2, 1/3qP1^2P2^2 ]

`DeligneLusztigCharacter(`

`W`,`w`)

This function returns the Deligne-Lusztig character *R _{T}^{G}(1)* of the
algebraic group

gap> W:=CoxeterGroup("G",2); CoxeterGroup("G",2) gap> DeligneLusztigCharacter(W,3); [G2]=<phi{1,0}>-<phi{1,6}>-<phi{1,3}'>+<phi{1,3}''> gap> DeligneLusztigCharacter(W,W.1); [G2]=<phi{1,0}>-<phi{1,6}>-<phi{1,3}'>+<phi{1,3}''> gap> DeligneLusztigCharacter(W,[1]); [G2]=<phi{1,0}>-<phi{1,6}>-<phi{1,3}'>+<phi{1,3}''> gap> DeligneLusztigCharacter(W,[1,2]); [G2]=<phi{1,0}>+<phi{1,6}>-<phi{2,1}>+<G2[-1]>+<G2[E3]>+<G2[E3^2]>

`AlmostCharacter(`

`W`,`i`)

This function returns the `i`-th almost unipotent character of the
algebraic group * G* associated to the Coxeter group or Coxeter coset

`W`

gap> W:=CoxeterGroup("B",2); gap> W:=CoxeterGroup("B",2); CoxeterGroup("B",2) gap> AlmostCharacter(W,3); [B2]=<.11> gap> AlmostCharacter(W,1); [B2]=1/2<11.>+1/2<1.1>-1/2<.2>-1/2<B2>

`LusztigInduction(`

`W`,`u`)

`u` should be a unipotent character of a parabolic subcoset of the Coxeter
coset `W`. It represents a unipotent character *λ* of a Levi * L* of
the algebraic group

gap> W:=CoxeterGroup("G",2);; gap> T:=CoxeterSubCoset(CoxeterCoset(W),[],W.1); (q-1)(q+1) gap> u:=UnipotentCharacter(T,1); [(q-1)(q+1)]=<> gap> LusztigInduction(CoxeterCoset(W),u); [G2]=<phi{1,0}>-<phi{1,6}>-<phi{1,3}'>+<phi{1,3}''> gap> DeligneLusztigCharacter(W,W.1); [G2]=<phi{1,0}>-<phi{1,6}>-<phi{1,3}'>+<phi{1,3}''>

`LusztigRestriction(`

`R`,`u`)

`u` should be a unipotent character of a parent Coxeter coset `W` of which
`R` is a parabolic subcoset. It represents a unipotent character *γ*
of the algebraic group * G* attached to

gap> W:=CoxeterGroup("G",2);; gap> T:=CoxeterSubCoset(CoxeterCoset(W),[],W.1); (q-1)(q+1) gap> u:=DeligneLusztigCharacter(W,W.1); [G2]=<phi{1,0}>-<phi{1,6}>-<phi{1,3}'>+<phi{1,3}''> gap> LusztigRestriction(T,u); [(q-1)(q+1)]=4<> gap> T:=CoxeterSubCoset(CoxeterCoset(W),[],W.2); (q-1)(q+1) gap> LusztigRestriction(T,u); [(q-1)(q+1)]=0

`LusztigInductionTable(`

`R`,`W`)

`R` should be a parabolic subgroup of the Coxeter group `W` or a parabolic
subcoset of the Coxeter coset `W`, in each case representing a Levi
subgroup * L* of the algebraic group

`InductionTable`

, see InductionTable)
representing the Lusztig induction

gap> W:=CoxeterGroup("B",3);; gap> t:=Twistings(W,[1,3]); [ ~A1xA1<3>.(q-1), ~A1xA1<3>.(q+1) ] gap> Display(LusztigInductionTable(t[2],W)); Lusztig Induction from ~A1xA1<3>.(q+1) to B3 |11,11 11,2 2,11 2,2 ___________________________ 111. | 1 -1 -1 . 11.1 | -1 . 1 -1 1.11 | . . -1 . .111 | -1 . . . 21. | . . . . 1.2 | 1 -1 . 1 2.1 | . 1 . . .21 | . . . . 3. | . . . 1 .3 | . 1 1 -1 B2:2 | . . 1 -1 B2:11 | 1 -1 . .

`DeligneLusztigLefschetz(`

`h`)

Here `h` is an element of a Hecke algebra associated to a Coxeter group `W`
which itself is associated to an algebraic group * G*. By results of
Digne-Michel, for

The function `DeligneLusztigLefschetz`

takes as argument a Hecke element
and returns the corresponding Lefschetz character. This is defined on the
whole of the Hecke algebra by linearity. The Lefschetz character of various
varieties related to Deligne-Lusztig varieties, like their completions or
desingularisation, can be obtained by taking the Lefschetz character at
various elements of the Hecke algebra.

gap> W:=CoxeterGroup("A",2);; gap> q:=X(Rationals);;q.name:="q";; gap> H:=Hecke(W,q); Hecke(A2,q) gap> T:=Basis(H,"T"); function ( arg ) ... end gap> DeligneLusztigLefschetz(T(1,2)); [A2]=<111>-q<21>+q^2<3> gap> DeligneLusztigLefschetz((T(1)+T())*(T(2)+T())); [A2]=q<21>+(q^2+2q+1)<3>

The last line shows the Lefschetz character of the Samelson-Bott desingularisation of the Coxeter element Deligne-Lusztig variety.

We now show an example with a coset (corresponding to the unitary group).

gap> H:=Hecke(CoxeterCoset(W,(1,2)),q^2); Hecke(2A2,q^2) gap> T:=Basis(H,"T"); function ( arg ) ... end gap> DeligneLusztigLefschetz(T(1)); [2A2]=-<11>-q<2A2>+q^2<2>

The blocks of the (rectangular) matrix *⟨ R _{χ},ρ⟩_{GF}*
when

The `UnipotentCharacters`

record in **CHEVIE** contains a field `.families`

,
a list of family records containing information on each family, including
the Fourier matrix. Here is an example.

gap> W:=CoxeterGroup("G",2);; gap> uc:=UnipotentCharacters(W); UnipotentCharacters( G2 ) gap> uc.families; [ Family("D(S3)",[5,6,4,3,8,7,9,10]), Family("C1",[1]), Family("C1",[2]) ] gap> f:=last[1]; Family("D(S3)",[5,6,4,3,8,7,9,10]) gap> Display(f); D(S3) label |eigen ________________________________________________________ (1,1) | 1 1/6 1/2 1/3 1/3 1/6 1/2 1/3 1/3 (g2,1) | 1 1/2 1/2 0 0 -1/2 -1/2 0 0 (g3,1) | 1 1/3 0 2/3 -1/3 1/3 0 -1/3 -1/3 (1,r) | 1 1/3 0 -1/3 2/3 1/3 0 -1/3 -1/3 (1,eps) | 1 1/6 -1/2 1/3 1/3 1/6 -1/2 1/3 1/3 (g2,eps) | -1 1/2 -1/2 0 0 -1/2 1/2 0 0 (g3,E3) | E3 1/3 0 -1/3 -1/3 1/3 0 2/3 -1/3 (g3,E3^2) | E3^2 1/3 0 -1/3 -1/3 1/3 0 -1/3 2/3 gap> f.charNumbers; [ 5, 6, 4, 3, 8, 7, 9, 10 ] gap> CharNames(uc){f.charNumbers}; [ "phi{2,1}", "phi{2,2}", "phi{1,3}''", "phi{1,3}'", "G2[1]", "G2[-1]", "G2[E3]", "G2[E3^2]" ]

The Fourier matrix is obtained by `Fourier(f)`

; the field `f.charNumbers`

holds the indices of the unipotent characters which are in the family. We
obtain the list of eigenvalues of Frobenius for these unipotent characters
by `Eigenvalues(f)`

. The Fourier matrix and vector of eigenvalues satisfy
the properties of **fusion data**, see below. The field `f.charLabels`

is
what is displayed in the column `labels`

when displaying the family. It
contains labels naturally attached to lines of the Fourier matrix. In the
case of reductive groups, the family is always attached to the
DrinfeldDouble of a small finite group and the `.charLabels`

come from
this construction.

`Family(`

`f` [, `charNumbers` [, `opt`]])

This function creates a new family in two possible ways.

In the first case `f` is a string which denotes a family known to **CHEVIE**.
Examples are `"S3"`

, `"S4"`

, `"S5"`

which denote the family obtained as the
Drinfeld double of the symmetric group on 3,4,5 elements, or `"C2"`

which
denotes the Drinfeld double of the cyclic group of order 2.

In the second case `f` is already a family record.

The other (optional) arguments add information to the family record defined
by the first argument. If given, the second argument becomes the field
`.charNumbers`

. If given, the third argument `opt` is a record whose fields
are added to the resulting family record.

If `opt` has a field `signs`

, this field should be a list of `1`

and `-1`

,
and then the Fourier matrix is conjugated by the diagonal matrix of those
signs. This is used in Spetses to adjust the matrix to the choice of signs
of unipotent degrees.

gap> Display(Family("C2")); C2 label |eigen ___________________________________ (1,1) | 1 1/2 1/2 1/2 1/2 (g2,1) | 1 1/2 1/2 -1/2 -1/2 (1,eps) | 1 1/2 -1/2 1/2 -1/2 (g2,eps) | -1 1/2 -1/2 -1/2 1/2 gap> Display(Family("C2",[4..7],rec(signs:=[1,-1,1,-1]))); C2 label |eigen signs _________________________________________ (1,1) | 1 1 1/2 -1/2 1/2 -1/2 (g2,1) | 1 -1 -1/2 1/2 1/2 -1/2 (1,eps) | 1 1 1/2 1/2 1/2 1/2 (g2,eps) | -1 -1 -1/2 -1/2 1/2 1/2

`Fourier(`

:`f`)

returns the Fourier matrix for the family`f`.

`Eigenvalues(`

:`f`)

returns the list of eigenvalues of Frobenius associated to`f`.

`String(`

,`f`)`Print(`

:`f`)

give a short description of the family.

`Display(`

:`f`)

displays the labels, eigenvalues and Fourier matrix for the family.

`Size(`

:`f`)

how many characters are in the family.

:`f`*`g`

returns the tensor product of two families`f`and`g`; the Fourier matrix is the Kronecker product of the matrices for`f`and`g`, and the eigenvalues of Frobenius are the pairwise products.

`ComplexConjugate(`

:`f`)

is a synonym for`OnFamily(`

.`f`,-1)

`IsFamily(`

`obj`)

returns `true`

if `obj` is a family, and `false`

otherwise.

gap> List(UnipotentCharacters(ComplexReflectionGroup(4)).families,IsFamily); [ true, true, true, true ]

`OnFamily(`

`f`,`p`)

`f` should be a family. This function has two forms.

In the first form, `p` is a permutation, and the function returns a copy of
the family `f` with the Fourier matrix, eigenvalues of Frobenius,
`.charLabels`

, etc*...* permuted by `p`.

In the second form, `p` is an integer and `x->GaloisCyc(x,`

is applied
to the Fourier matrix and eigenvalues of Frobenius of the family.
`p`)

gap> f:=UnipotentCharacters(ComplexReflectionGroup(3,1,1)).families[2]; Family("0011",[4,3,2]) gap> Display(f); 0011 label |eigen 1 2 3 _________________________________________________ 1 | E3^2 ER(-3)/3 ER(-3)/3 -ER(-3)/3 2 | 1 ER(-3)/3 (3-ER(-3))/6 (3+ER(-3))/6 3 | 1 -ER(-3)/3 (3+ER(-3))/6 (3-ER(-3))/6 gap> Display(OnFamily(f,(1,2,3))); 0011 label |eigen 3 1 2 _________________________________________________ 3 | 1 (3-ER(-3))/6 -ER(-3)/3 (3+ER(-3))/6 1 | E3^2 -ER(-3)/3 ER(-3)/3 ER(-3)/3 2 | 1 (3+ER(-3))/6 ER(-3)/3 (3-ER(-3))/6 gap> Display(OnFamily(f,-1)); '0011 label |eigen 1 2 3 _________________________________________________ 1 | E3 -ER(-3)/3 -ER(-3)/3 ER(-3)/3 2 | 1 -ER(-3)/3 (3+ER(-3))/6 (3-ER(-3))/6 3 | 1 ER(-3)/3 (3-ER(-3))/6 (3+ER(-3))/6

`FamiliesClassical(`

`l`)

The list `l` should be a list of symbols as returned by the function
`Symbols`

, which classify the unipotent characters of groups of type `"B"`

,
`"C"`

or `"D"`

. `FamiliesClassical`

returns the list of families determined
by these symbols.

gap> FamiliesClassical(Symbols(3,1)); [ Family("0112233",[4]), Family("01123",[1,3,8]), Family("013",[5,7,10]), Family("022",[6]), Family("112",[2]), Family("3",[9]) ]

The above example shows the families of unipotent characters for the group
*B _{3}*.

`FamilyImprimitive(`

`S`)

`S` should be a symbol for a unipotent characters of an imprimitive complex
reflection group `G(e,1,n)`

or `G(e,e,n)`

. The function returns the family
of unipotent characters to which the character with symbol `S` belongs.

gap> FamilyImprimitive([[0,1],[1],[0]]); Family("0011") gap> Display(last); 0011 label |eigen 1 2 3 _________________________________________________ 1 | E3^2 ER(-3)/3 -ER(-3)/3 ER(-3)/3 2 | 1 -ER(-3)/3 (3-ER(-3))/6 (3+ER(-3))/6 3 | 1 ER(-3)/3 (3+ER(-3))/6 (3-ER(-3))/6

`DrinfeldDouble(`

`g`[,`opt`])

Given a (usually small) finite group *Γ*, Lusztig has associated a
family (a Fourier matrix, a list of eigenvalues of Frobenius) which
describes the representation ring of the Drinfeld double of the group
algebra of *Γ*, and for some appropriate small groups describes a
family of unipotent characters. We do not explain the details of this
construction, but explain how its final result building Lusztig's Fourier
matrix, and a variant of it that we use in Spetses, from *Γ*.

The elements of the family are in bijection with the set * M(Γ)*
of pairs *(x,χ)* taken up to *Γ*-conjugacy, where *x∈Γ* and
*χ* is an irreducible complex-valued character of *C _{Γ}(x)*. To such
a pair

T_{ρ,ρ'}:=#C_{Γ}(x)^{-1}
∑_{ρ1=(x1,χ1)}χ_{1}(x)χ(y_{1}) |

where the sum is over all pairs *ρ _{1}∈ M(Γ)* which are

A way to understand the formula for *T _{ρ,ρ'}* better is to
consider another basis of the complex vector space with basis

(x,y)=∑_{χ∈ Irr(CΓ(x))}χ(y)(x,χ) |

In the basis of Mellin transforms, the linear map *T* is given by
*(x,y)→(x ^{-1},y^{-1})* and the linear transformation which sends

a | b |

c | d |

acts by *(x,y)→(x ^{a}y^{b},x^{c}y^{d})*.

Fourier matrices in finite reductive groups are given by the above matrix
*T*. But for non-rational Spetses, we use a different matrix *S* which in
the basis of Mellin transforms is given by *(x,y)→(y ^{-1},x)*.
Equivalently, the formula

Thus there are two variants of `DrinfeldDouble`

:

`DrinfeldDouble(`

`g`,rec(lusztig:=true))

returns a family containing Lusztig's Fourier matrix *T*, and an extra
field `.perm`

containing the permutation of the indices induced by
*(x,χ)→(x,χ)*, which allows to recover *S*, as well as
an extra field `.lusztig`

, set to `true`

.

`DrinfeldDouble(`

`g`)

returns a family with the matrix *S*, which does not have fields `.lusztig`

or `.perm`

.

The family record `f`

returned also has the fields:

`.group`

:

the group*Γ*.

`.charLabels`

:

a list of labels describing the pairs*(x,χ)*, and thus also specifying in which order they are taken.

`.fourierMat`

:

the Fourier matrix (the matrix*S*or*T*depending on the call).

`.eigenvalues`

:

the eigenvalues of Frobenius.

`.xy`

:

a list of pairs`[x,y]`

which are representatives of the*Γ*-orbits of pairs of commuting elements.

`.mellinLabels`

:

a list of labels describing the pairs`[x,y]`

.

`.mellin`

:

the base change matrix between the basis*(x,χ)*and the basis of Mellin transforms, so that`f.fourierMat^(f.mellin^-1)`

is the permutation matrix (for*(x,y)→(y*or^{-1},x)*(x,y)→(y*depending on the call).^{-1},x^{-1})

`.special`

:

the index of the special element, which is*(x,χ)=(1,1)*.

gap> f:=DrinfeldDouble(SymmetricGroup(3)); Family("D(Group((1,3),(2,3)))") gap> Display(f); D(Group((1,3),(2,3))) label |eigen _______________________________________________________ (1,1) | 1 1/6 1/6 1/3 1/2 1/2 1/3 1/3 1/3 (1,X.2) | 1 1/6 1/6 1/3 -1/2 -1/2 1/3 1/3 1/3 (1,X.3) | 1 1/3 1/3 2/3 0 0 -1/3 -1/3 -1/3 (2a,1) | 1 1/2 -1/2 0 1/2 -1/2 0 0 0 (2a,X.2) | -1 1/2 -1/2 0 -1/2 1/2 0 0 0 (3a,1) | 1 1/3 1/3 -1/3 0 0 2/3 -1/3 -1/3 (3a,X.2) | E3 1/3 1/3 -1/3 0 0 -1/3 -1/3 2/3 (3a,X.3) | E3^2 1/3 1/3 -1/3 0 0 -1/3 2/3 -1/3 gap> f:=DrinfeldDouble(SymmetricGroup(3),rec(lusztig:=true)); Family("LD(Group((1,3),(2,3)))") gap> Display(f); LD(Group((1,3),(2,3))) label |eigen _______________________________________________________ (1,1) | 1 1/6 1/6 1/3 1/2 1/2 1/3 1/3 1/3 (1,X.2) | 1 1/6 1/6 1/3 -1/2 -1/2 1/3 1/3 1/3 (1,X.3) | 1 1/3 1/3 2/3 0 0 -1/3 -1/3 -1/3 (2a,1) | 1 1/2 -1/2 0 1/2 -1/2 0 0 0 (2a,X.2) | -1 1/2 -1/2 0 -1/2 1/2 0 0 0 (3a,1) | 1 1/3 1/3 -1/3 0 0 2/3 -1/3 -1/3 (3a,X.2) | E3 1/3 1/3 -1/3 0 0 -1/3 2/3 -1/3 (3a,X.3) | E3^2 1/3 1/3 -1/3 0 0 -1/3 -1/3 2/3

`NrDrinfeldDouble(`

`g`)

This function returns the number of elements that the family associated to the
Drinfeld double of the group `g` would have, without computing it. The evident
advantage is the speed.

gap> NrDrinfeldDouble(ComplexReflectionGroup(5)); 378

`FusionAlgebra(`

`f`)

The argument `f` should be a family, or the Fourier matrix of a family. All
the Fourier matrices *S* in **CHEVIE** are unitary, that is
*S ^{-1}=^{t}S*, and have a

`f`.special

for a family
It follows that we can define a *ℤ*-algebra *A* as follows: it has a basis
*b _{i}* indexed by the lines of

*A* is commutative, and has as unit the element *b _{s}*; the basis

gap> W:=ComplexReflectionGroup(4);;uc:=UnipotentCharacters(W); UnipotentCharacters( G4 ) gap> f:=uc.families[4]; Family("RZ/6^2[1,3]",[2,4,10,9,3]) gap> A:=FusionAlgebra(f); Fusion algebra dim.5 gap> b:=A.basis; [ T(1), T(2), T(3), T(4), T(5) ] gap> List(b,x->x*b); [ [ T(1), T(2), T(3), T(4), T(5) ], [ T(2), -T(4)+T(5), T(1)+T(4), T(2)-T(3), T(3) ], [ T(3), T(1)+T(4), -T(4)+T(5), -T(2)+T(3), T(2) ], [ T(4), T(2)-T(3), -T(2)+T(3), T(1)+T(4)-T(5), -T(4) ], [ T(5), T(3), T(2), -T(4), T(1) ] ] gap> CharTable(A); 1 2 3 4 5 1 1 -ER(-3) ER(-3) 2 -1 2 1 1 1 . 1 3 1 -1 -1 . 1 4 1 . . -1 -1 5 1 ER(-3) -ER(-3) 2 -1

gap3-jm

19 Feb 2018