Chevie.Uch
â ModuleLet $ð$ be a connected reductive group over the algebraic closure of a finite field $ðœ_q$, defined over $ðœ_q$ with corresponding Frobenius automorphism $F$. We want to study the irreducible characters of $ð ^F$. More generally we consider $ð ^F$ where $F$ is an isogeny of $ð$ such that a power is a Frobenius (this covers the Suzuki and Ree groups).
If $ð$ is an $F$-stable maximal torus of $ð$, and $ð$ is a (not necessarily $F$-stable) Borel subgroup containing $ð$, we define the Deligne-Lusztig variety $X_ð=\{gð â ð /ð ⣠gð â© F(gð )â â \}$. This variety affords a natural action of $ð ^F$ on the left, so the corresponding Deligne-Lusztig virtual module $H^*_c(X_ð):=âáµ¢ (-1)â± Hâ±_c(X_ð,âÌ _â)$ also. The (virtual) character of this module is the Deligne-Lusztig character $R_ð ^ð (1)$; the notation reflects the theorem that this character does not depend on the choice of $ð$. This character can be parameterized by an $F$-conjugacy class of $W$: if $ðââðâ$ is an $F$-stable pair, there is an unique $wâ W=N_ð (ðâ)/ðâ$ such that the triple $(ð,ð,F)$ is $ð$-conjugate to $(ðâ,ðâ,wF)$. We will thus denote $R_w$ for $R_ð^ð (1)$; this character depends only on the $F$-class of $w$.
The unipotent characters of $ð ^F$ are the irreducible constituents of the $R_w$. In a similar way that the Jordan decomposition shows that the unipotent classes are a building block for describing the conjugacy classes of a reductive group, Lusztig has defined a Jordan decomposition of characters where the unipotent characters are the building block. The unipotent characters are parameterized by combinatorial data that Lusztig has defined just from the coset $WÏ$, where Ï
is the finite order automorphism of $X(ðâ)$ such that $F=qÏ$. Thus, from our viewpoint, unipotent characters are objects combinatorially attached to a Coxeter coset.
A subset of the unipotent characters, the principal series unipotent characters, can be described in a more elementary way. They are the constituents of $Râ$, or equivalently the characters of the virtual module $H^*_c(X_{ð â})$, where $X_{ð â}$ is the discrete variety $(ð /ðâ)^F$; this virtual module reduces to the actual module $âÌ _â[(ð /ðâ) ^F]$. Thus the Deligne-Lusztig induction $R_{ðâ}^ð (1)$ reduces to Harish-Chandra induction, defined as follows: let $ð =ð â ð$ be an $F$-stable Levi decomposition of an $F$-stable parabolic subgroup of $ð$. Then the Harish-Chandra induced $R_ð^ð$ of a character $Ï$ of $ð^F$ is the character $Ind_{ð^F}^{ð ^F}ÏÌ$, where $ÏÌ$ is the lift to $ð^F$ of $Ï$ via the quotient $ð^F/ð ^F=ð^F$; Harish-Chandra induction is a particular case of Lusztig induction, which is defined when $ð$ is not $F$-stable using the variety $X_ð =\{ gð âð /ð ⣠gð â© F(gð )â â \}$, and gives for an $ð^F$-module a virtual $ð ^F$-module. Like ordinary induction, these functors have adjoint functors going from representations of $ð ^F$ to representations (resp. virtual representations) of $ð^F$ called Harish-Chandra restriction (resp. Lusztig restriction).
The commuting algebra of $ð^F$-endomorphisms of $Râ=R_{ðâ}^ð(1)$ is an Iwahori-Hecke algebra for $W^Ï$, with parameters some powers of q
; the parameters are all equal to q
when $W^Ï=W$. Thus principal series unipotent characters are parametrized by characters of $W^Ï$.
To understand the decomposition of more general $R_w$, and thus parameterize 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|â»Â¹â_{wâ W}Ï(wÏ) R_w$. The name reflects that these class function are close to irreducible characters. They satisfy $âšRᵪ, R_Ïâ©_{ð^F}=ÎŽ_{Ï,Ï}$; for the linear and unitary group they are actually unipotent characters (up to sign in the latter case). They are in general the sum (with rational coefficients) of a small number of unipotent characters in the same Lusztig family, see Families
. The degree of $Rᵪ$ is a polynomial in $q$ equal to the fake degree of the character $Ï$ of $WÏ$ (see fakedegree
).
We now describe the parameterization of unipotent characters when $W^Ï=W$, thus when the coset $WÏ$ identifies with $W$ (the situation is similar but a bit more difficult to describe in general). The (rectangular) matrix of scalar products $âšÏ, Rᵪâ©_{ð ^F}$, when characters of $W$ and unipotent characters are arranged in the right order, is block-diagonal with rather small blocks which are called Lusztig families.
For the characters of $W$ a family ð
corresponds to a block of the Hecke algebra over a ring called the Rouquier ring. To ð
Lusztig associates a small group $Î$ (not bigger than $(â€/2)â¿$, or $ðáµ¢$ for $iâ€5$) such that the unipotent characters in the family are parameterized by the pairs $(x,Ξ)$ taken up to $Î$-conjugacy, where $xâÎ$ and $Ξ$ is an irreducible character of $C_Î(x)$. Further, the elements of ð
themselves are parameterized by a subset of such pairs, and Lusztig defines a pairing between such pairs which computes the scalar product $âšÏ, Rᵪâ©_{ð^F}$, called the Lusztig Fourier matrix. For more details see drinfeld_double
.
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 $GLâ$ for $n>1$, and at most one in other classical groups). The $ð^F$-endomorphism algebra of an Harish-Chandra induced $R_{ð^F}^{ð^F}λ$, where $λ$ is a cuspidal unipotent character turns out to be a Hecke algebra associated to the group $W_{ð^F}(ð^F):=N_{ð^F}(ð)/ð$, which turns out to be a Coxeter group. Thus another parameterization is by triples $(ð,λ,Ï)$, where $λ$ is a cuspidal unipotent character of $ð^F$ and $Ï$ is an irreducible character of the relative group $W_{ð^F}(ð^F)$. Such characters are said to belong to the Harish-Chandra series determined by $(ð,λ)$.
A final piece of information attached to unipotent characters is the eigenvalues of Frobenius. Let $Fáµ$ be the smallest power of the isogeny $F$ which is a split Frobenius (that is, $Fáµ$ is a Frobenius and $Ïáµ=1$). Then $Fáµ$ acts naturally on Deligne-Lusztig varieties and thus on the corresponding virtual modules, and commutes to the action of $ð^F$; thus for a given unipotent character $Ï$, a submodule of the virtual module which affords $Ï$ affords a single eigenvalue $ÎŒ$ of $Fáµ$. Results of Lusztig and Digne-Michel show that this eigenvalue is of the form $qáµáµÎ»áµš$ where $2aââ€$ and $λᵚ$ is a root of unity which depends only on $Ï$ and not the considered module. This $λᵚ$ is called the eigenvalue of Frobenius attached to $Ï$. Unipotent characters in the Harish-Chandra series of a pair $(ð,λ)$ have the same eigenvalue of Frobenius as $λ$.
This package contains tables of all this information, and can compute Harish-Chandra and Lusztig induction of unipotent characters and almost characters. We illustrate this on some examples:
julia> W=coxgroup(:G,2)
Gâ
julia> uc=UnipotentCharacters(W)
UnipotentCharacters(Gâ)
âââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââ
âγ ânâ Deg(γ) Feg Symbol Fr(γ) labelâ
âââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââ€
âÏâââ â 1 1 1 (0,0,0,0,0,2) 1 â
âÏâââ â 2 qⶠqⶠ(01,01,01,01,01,12) 1 â
âÏâ²âââ â 3 qΊâΊâ/3 q³ (0,0,1+) 1 (1,Ï)â
âÏâ³âââ â 4 qΊâΊâ/3 q³ (0,0,1-) 1 (gâ,1)â
âÏâââ â 5 qΊâ²Ίâ/6 qΊâ (0,0,0,0,1,1) 1 (1,1)â
âÏâââ â 6 qΊâ²Ίâ/2 q²Ίâ (0,0,0,1,0,1) 1 (gâ,1)â
âGâ[-1] â 7 qΊâ²Ίâ/2 0 (01,0,01,,0,) -1 (gâ,ε)â
âGâ[1] â 8 qΊâ²Ίâ/6 0 (01,01,0,,,0) 1 (1,ε)â
âGâ[ζâ] â 9 qΊâ²Ίâ²/3 0 (01,0,0,01,,) ζâ (gâ,ζâ)â
âGâ[ζâ²]â10 qΊâ²Ίâ²/3 0 (01,01,,0,0,) ζâ² (gâ,ζâ²)â
âââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââ
The first column gives the name of the unipotent character, derived from its Harish-Chandra classification; the first 6 characters are in the principal series so are named by characters of W
. The last 4 are cuspidal, and named by the corresponding eigenvalue of Frobenius, which is displayed in the fourth column. For classical groups, the Harish-Chandra data can be synthesized combinatorially to give a symbol.
The first two characters are each in a Lusztig family by themselves. The last eight are in a family associated to the group Î=ðâ
: the last column shows the parameters (x,Ξ)
. The third column shows the degree of the unipotent characters, which is transformed by the Lusztig Fourier matrix of the third column, which gives the degree of the corresponding almost character, or equivalently the fake degree of the corresponding character of W
(extended by 0
outside the principal series).
One can get more information on the Lusztig Fourier matrix of the big family by asking
julia> uc.families[1]
Family(D(ð â),[5, 6, 4, 3, 8, 7, 9, 10])
Drinfeld double of ð â, Lusztigâ²s version
ââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââ
âlabel âeigen â
ââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â(1,1) â 1 1//6 1//2 1//3 1//3 1//6 1//2 1//3 1//3â
â(gâ,1) â 1 1//2 1//2 . . -1//2 -1//2 . .â
â(gâ,1) â 1 1//3 . 2//3 -1//3 1//3 . -1//3 -1//3â
â(1,Ï) â 1 1//3 . -1//3 2//3 1//3 . -1//3 -1//3â
â(1,ε) â 1 1//6 -1//2 1//3 1//3 1//6 -1//2 1//3 1//3â
â(gâ,ε) â -1 1//2 -1//2 . . -1//2 1//2 . .â
â(gâ,ζâ) â ζâ 1//3 . -1//3 -1//3 1//3 . 2//3 -1//3â
â(gâ,ζâ²)â ζâ² 1//3 . -1//3 -1//3 1//3 . -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.
julia> W=coxgroup(:G,2)
Gâ
julia> T=spets(reflection_subgroup(W,Int[]),W(1,2))
Gâââ=Ίâ
julia> u=unipotent_character(T,1)
[Gâââ=Ίâ]:<Id>
To construct T
one could equivalently do
julia> T=torus(W,position_class(W,W(1,2)))
Gâââ=Ίâ
Then here are two ways to construct the Deligne-Lusztig character associated to the Coxeter torus:
julia> lusztig_induce(W,u)
[Gâ]:<Ïâââ>+<Ïâââ>-<Ïâââ>+<Gâ[-1]>+<Gâ[ζâ]>+<Gâ[ζâ²]>
julia> v=deligne_lusztig_character(W,[1,2])
[Gâ]:<Ïâââ>+<Ïâââ>-<Ïâââ>+<Gâ[-1]>+<Gâ[ζâ]>+<Gâ[ζâ²]>
julia> degree(v)
Pol{Int64}: qâ¶+qâµ-qâŽ-2q³-q²+q+1
julia> 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 BroueMalleMichel2014. An example:
julia> UnipotentCharacters(complex_reflection_group(4))
UnipotentCharacters(Gâ)
âââââââ¬âââââââââââââââââââââââââââââââââââââââââ
âγ ânâ Deg(γ) Feg Fr(γ) labelâ
âââââââŒâââââââââââââââââââââââââââââââââââââââââ€
âÏâââ â 1 1 1 1 â
âÏâââ â 2 -â-3qâŽÎŠâ³âΊâΊâ³â/6 q⎠1 1â§Î¶ââ
âÏâââ â 3 â-3qâŽÎŠâ²âΊâΊâ²â/6 qâž 1 -1â§Î¶â²â
âÏâââ
â 4 qâŽÎŠâ²Ίâ/2 qâµÎŠâ 1 1â§Î¶â²â
âÏâââ â 5 -ζââ-3qΊâ³âΊâΊâ²â/3 q³Ίâ 1 1â§Î¶â²â
âÏâââ â 6 ζâ²â-3qΊâ²âΊâΊâ³â/3 qΊâ 1 1â§Î¶ââ
âÏâââ â 7 q²ΊâΊâ q²ΊâΊâ 1 â
âZâ:2 â 8 -â-3qΊâΊâΊâ/3 0 ζâ² ζââ§Î¶â²â
âZâ:11â 9 -â-3qâŽÎŠâΊâΊâ/3 0 ζâ² ζââ§Î¶ââµâ
âGâ â10 -qâŽÎŠâ²Ίâ/2 0 -1 ζââ§-1â
âââââââŽâââââââââââââââââââââââââââââââââââââââââ
Chevie.Uch.UnipotentCharacters
â MethodUnipotentCharacters(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:
.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 F
-stable parabolic subgroup and a cuspidal unipotent character of $ð^F$. These records themselves have the following fields:
:levi
: a list 'l' such that ð
corresponds to 'ReflectionSubgroup(W,l)'.
:cuspidalName
: the name of the unipotent cuspidal character lambda
.
:eigenvalue
: the eigenvalue of Frobenius for λ
.
:relativeType
: the reflection type of $W_ð (ð)$;
:parameterExponents
: the $ð ^F$-endomorphism algebra of $R_ð^ð (λ)$ is a Hecke algebra for $W_ð (ð)$ with some parameters of the form $q^{a_s}$. This holds the list of exponents $a_s$.
:charNumbers
: the indices of the unipotent characters indexed by the irreducible characters of $W_ð (ð)$.
.almostHarishChandra
: information about Harish-Chandra series of unipotent character sheaves. This is identical to ÌharishChandra` for a split reductive group, and reflects the situation for the corresponding split group for a nonsplit group.
.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.
the following information is computed on demand from uc=UnipotentCharacters(W)
:
spets(uc)
: the reductive group W
.
julia> W=coxgroup(:Bsym,2)
Bsymâ
julia> WF=spets(W,Perm(1,2))
²Bsymâ
julia> uc=UnipotentCharacters(WF)
UnipotentCharacters(²Bsymâ)
ââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âγ ânâ almostch Deg(γ) Feg Symbol Fr(γ) labelâ
ââââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â2 â 1 2. 1 1 (02,,0,0) 1 â
â11 â 2 .11 q⎠q⎠(012,1,01,01) 1 â
â²Bâ[1,3]â 3 1.1 â2qΊâΊâ/2 qΊâΊâ (01,,1,0) ζâ³ 1â
â²Bâ[1,5]â 4 Bâ â2qΊâΊâ/2 0 (01,,0,1) ζââµ 2â
ââââââââââŽââââââââââââââââââââââââââââââââââââââââââââââââââââââ
julia> uc.families
3-element Vector{Family}:
Family(Câ,[1])
Family(Câ,[2])
Family(?4,[3, 4])
julia> uc.families[3]
Family(?4,[3, 4])
âââââââ¬âââââââââââââââââ
âlabelâeigen 1 2â
âââââââŒâââââââââââââââââ€
â1 â ζâ³ â2/2 -â2/2â
â2 â -ζâ â2/2 â2/2â
âââââââŽâââââââââââââââââ
charnames(uc)
: the list of names of the unipotent characters. Using appropriate keywords, one can control the display in various ways.
julia> uc=UnipotentCharacters(coxgroup(:G,2));
julia> charnames(uc;limit=true)
10-element Vector{String}:
"Ïâââ"
"Ïâââ"
"Ïâ²âââ"
"Ïâ³âââ"
"Ïâââ"
"Ïâââ"
"Gâ[-1]"
"Gâ[1]"
"Gâ[ζâ]"
"Gâ[ζâ²]"
julia> charnames(uc;TeX=true)
10-element Vector{String}:
"\phi_{1,0}"
"\phi_{1,6}"
"\phi_{1,3}'"
"\phi_{1,3}''"
"\phi_{2,1}"
"\phi_{2,2}"
"G_2[-1]"
"G_2[1]"
"G_2[\zeta_3]"
"G_2[\zeta_3^2]"
One can control the display of unipotent characters in various ways by IOContext
properties. In the display, the row labels are the names of the unipotent characters. The possible columns are numbered as follows:
- The index of the character in the list of unipotent characters.
- The degree of the unipotent character.
- The degree of the corresponding almost character.
- for imprimitive groups, the symbol attached to the unipotent character.
- The eigenvalue of Frobenius attached to the unipotent character.
- The parameter the character has in its Lusztig family.
Which columns are displayed can be controlled by the property :cols
(default [2,3,5,6] and 4 when applicable).
In addition if ':byfamily=true', the characters are displayed family by family instead of in index order. Finally, the properties rows
and columnrepartition
of format
can be set, giving more tuning of the table.
julia> W=coxgroup(:B,2)
Bâ
julia> uc=UnipotentCharacters(W)
UnipotentCharacters(Bâ)
âââââ¬âââââââââââââââââââââââââââââââââââ
âγ ânâ Deg(γ) Feg Symbol Fr(γ) labelâ
âââââŒâââââââââââââââââââââââââââââââââââ€
â11.â 1 qΊâ/2 q² (12,0) 1 +,-â
â1.1â 2 qΊâ²/2 qΊâ (02,1) 1 +,+â
â.11â 3 q⎠q⎠(012,12) 1 â
â2. â 4 1 1 (2,) 1 â
â.2 â 5 qΊâ/2 q² (01,2) 1 -,+â
âBâ â 6 qΊâ²/2 0 (012,) -1 -,-â
âââââŽâââââââââââââââââââââââââââââââââââ
julia> xdisplay(uc;byfamily=true)
ââââââ¬âââââââââââââââââââââââââââââââââââ
âγ ânâ Deg(γ) Feg Symbol Fr(γ) labelâ
ââââââŒâââââââââââââââââââââââââââââââââââ€
â11. â 1 qΊâ/2 q² (12,0) 1 +,-â
â1.1Ë¢â 2 qΊâ²/2 qΊâ (02,1) 1 +,+â
â.2 â 5 qΊâ/2 q² (01,2) 1 -,+â
âBâ â 6 qΊâ²/2 0 (012,) -1 -,-â
ââââââŒâââââââââââââââââââââââââââââââââââ€
â2. â 4 1 1 (2,) 1 â
ââââââŒâââââââââââââââââââââââââââââââââââ€
â.11 â 3 q⎠q⎠(012,12) 1 â
ââââââŽâââââââââââââââââââââââââââââââââââ
julia> xdisplay(uc;cols=[1,4])
UnipotentCharacters(Bâ)
âââââ¬ââââââââââââ
âγ ânâ Symbolâ
âââââŒââââââââââââ€
â11.â 1 (12,0)â
â1.1â 2 (02,1)â
â.11â 3 (012,12)â
â2. â 4 (2,)â
â.2 â 5 (01,2)â
âBâ â 6 (012,)â
âââââŽââââââââââââ
Base.show
â MethodBase.show(io::IO,w::UniChar)
The formatting of unipotent characters is affected by IO property :compact . If true
(the default) they are printed in a compact form. Otherwise, they are printed one unipotent character per line:
julia> xdisplay(w;compact=false)
[Gâ]:
<Ïâââ> 1
<Ïâââ> 0
<Ïâ²âââ> 0
<Ïâ³âââ> -1
<Ïâââ> 0
<Ïâââ> 0
<Gâ[-1]> 2
<Gâ[1]> 0
<Gâ[ζâ]> 0
<Gâ[ζâ²]> 1
Chevie.Chars.charnames
â Methodcharnames(uc;options...) charnames(io::IO,uc)
returns the list of character names for the unipotent characters uc. The optional options are IOContext attributes which can give alternative names in certain cases, or a different formatting of names in general. They can be specified by giving an IO as argument.
Chevie.ComplexR.degrees
â Functiondegrees(uc::UnipotentCharacters,q=Pol())
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
.
julia> W=coxgroup(:G,2)
Gâ
julia> uc=UnipotentCharacters(W);
julia> degrees(uc)
10-element Vector{Pol{Rational{Int64}}}:
1
qâ¶
(1//3)qâµ+(1//3)q³+(1//3)q
(1//3)qâµ+(1//3)q³+(1//3)q
(1//6)qâµ+(1//2)qâŽ+(2//3)q³+(1//2)q²+(1//6)q
(1//2)qâµ+(1//2)qâŽ+(1//2)q²+(1//2)q
(1//2)qâµ+(-1//2)qâŽ+(-1//2)q²+(1//2)q
(1//6)qâµ+(-1//2)qâŽ+(2//3)q³+(-1//2)q²+(1//6)q
(1//3)qâµ+(-2//3)q³+(1//3)q
(1//3)qâµ+(-2//3)q³+(1//3)q
Chevie.Families.fourier
â Methodfourier(uc::UnipotentCharacters)
the Lusztig Fourier matrix for uc
.
Chevie.Uch.CycPoldegrees
â MethodCycPoldegrees(uc::UnipotentCharacters)
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. It is faster than CycPol.(degrees(uc))
.
julia> W=coxgroup(:G,2)
Gâ
julia> CycPoldegrees(UnipotentCharacters(W))
10-element Vector{CycPol{Rational{Int64}}}:
1
qâ¶
qΊâΊâ/3
qΊâΊâ/3
qΊâ²Ίâ/6
qΊâ²Ίâ/2
qΊâ²Ίâ/2
qΊâ²Ίâ/6
qΊâ²Ίâ²/3
qΊâ²Ίâ²/3
Chevie.Uch.FixRelativeType
â Methodfix illegal relativeTypes B1 and C2 which appear in HC or almost HC series of classical groups
Chevie.Uch.almost_character
â Functionalmost_character(W,i)
or almostchar(W,i)
This function returns the i
-th almost unipotent character of the algebraic group ð associated to the Coxeter group or Coxeter coset W
. If Ï
is the i
-th irreducible character of W
, the i
-th almost character is $R_Ï=Wâ»Â¹â_{wâ W} Ï(w) R_{ð_w}^ð (1)$ where $ð_w$ is the maximal torus associated to the conjugacy class (or Ï
-conjugacy class for a coset) of w
.
julia> W=coxgroup(:B,2)
Bâ
julia> almostchar(W,3)
[Bâ]:<.11>
julia> almostchar(W,1)
[Bâ]:1//2<11.>+1//2<1.1>-1//2<.2>-1//2<Bâ>
Chevie.Uch.cuspidal
â Functioncuspidal(uc::UnipotentCharacters[,e])
A unipotent character γ
of a finite reductive group ð
is e
-cuspidal if its Lusztig restriction to any proper e
-split Levi is zero. When e==1
(the default when e
is omitted) we recover the usual notion of cuspidal character. Equivalently the Ίâ
-part of the generic degree of γ
is equal to the Ίâ
-part of the generic order of the adjoint group of ð
. This makes sense for any Spetsial complex reflection group and is implemented for them.
The function returns the list of indices of unipotent characters which are e
-cuspidal.
julia> W=coxgroup(:D,4)
Dâ
julia> cuspidal(UnipotentCharacters(W))
1-element Vector{Int64}:
14
julia> cuspidal(UnipotentCharacters(W),6)
8-element Vector{Int64}:
1
2
6
7
8
9
10
12
julia> cuspidal(UnipotentCharacters(complex_reflection_group(4)),3)
4-element Vector{Int64}:
3
6
7
10
Chevie.Uch.cuspidal_data
â Methodcuspidal_data(W[,d[,ad]];proper=false,all=false)
returns named tuples (levi=LF,cuspidal=λ,d=d)
where LF
is a d
-split Levi (with d
-center of dimension ad
if ad
is given) and λ
is a d
-cuspidal character of LF
. If d=1
this returns ordinary cuspidal characters. The character λ
is given as its index in the list of unipotent characters. If d
was given as an integer, it is returned as a Root1
representing E(d)
.
If the keyword proper=true
is given, only the data where LF!=W
(or equivalently ad>0
) are returned.
If d
is omitted, data for all d
orders of eigenvalues of elements of W
is returned. If in addition the keyword argument all=true
is given, data for all eigenvalues of elements of W
is returned.
julia> cuspidal_data(coxgroup(:F,4),1)
9-element Vector{@NamedTuple{levi::Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}, cuspidal::Int64, d::Root1}}:
(levi = Fâ, cuspidal = 31, d = 1)
(levi = Fâ, cuspidal = 32, d = 1)
(levi = Fâ, cuspidal = 33, d = 1)
(levi = Fâ, cuspidal = 34, d = 1)
(levi = Fâ, cuspidal = 35, d = 1)
(levi = Fâ, cuspidal = 36, d = 1)
(levi = Fâ, cuspidal = 37, d = 1)
(levi = Fâââââ=BâââââΊâ², cuspidal = 6, d = 1)
(levi = Fâââ=ΊââŽ, cuspidal = 1, d = 1)
julia> cuspidal_data(complex_reflection_group(4),3)
5-element Vector{@NamedTuple{levi::Spets{PRSG{Cyc{Rational{Int64}}, Int16}}, cuspidal::Int64, d::Root1}}:
(levi = Gâ, cuspidal = 3, d = ζâ)
(levi = Gâ, cuspidal = 6, d = ζâ)
(levi = Gâ, cuspidal = 7, d = ζâ)
(levi = Gâ, cuspidal = 10, d = ζâ)
(levi = Gâââ=ΊâΊâ²â, cuspidal = 1, d = ζâ)
Chevie.Uch.deligne_lusztigCharTable
â Methoddeligne_lusztigCharTable(W)
or dlCharTable(W)
for each conjugacy class of W
, gives the decomposition of R_{T_w}^G
in unipotent characters.
julia> dlCharTable(W)
6Ã10 Matrix{Int64}:
1 1 1 1 2 2 0 0 0 0
1 -1 1 -1 0 0 0 0 0 0
1 -1 -1 1 0 0 0 0 0 0
1 1 0 0 -1 0 1 0 1 1
1 1 0 0 0 -1 0 1 -1 -1
1 1 -1 -1 0 0 -2 -2 0 0
Chevie.Uch.deligne_lusztig_character
â Methoddeligne_lusztig_character(W,w)
or dlchar(W,w)
This function returns the Deligne-Lusztig character $R_ð ^ð (1)$ of the algebraic group ð
associated to the Coxeter group or Coxeter coset W
. The torus ð
can be specified in 3 ways: if w
is an integer, it represents the w
-th conjugacy class (or phi
-conjugacy class for a coset WÏ
) of W
. Otherwise w
can be a word or an element of W
, and it represents the class (or Ï
-class) of w
.
julia> W=coxgroup(:G,2)
Gâ
julia> dlchar(W,3)
[Gâ]:<Ïâââ>-<Ïâââ>-<Ïâ²âââ>+<Ïâ³âââ>
julia> dlchar(W,W(1))
[Gâ]:<Ïâââ>-<Ïâââ>-<Ïâ²âââ>+<Ïâ³âââ>
julia> dlchar(W,[1])
[Gâ]:<Ïâââ>-<Ïâââ>-<Ïâ²âââ>+<Ïâ³âââ>
julia> dlchar(W,[1,2])
[Gâ]:<Ïâââ>+<Ïâââ>-<Ïâââ>+<Gâ[-1]>+<Gâ[ζâ]>+<Gâ[ζâ²]>
Chevie.Uch.deligne_lusztig_lefschetz
â Functiondeligne_lusztig_lefschetz(h,m=0)
or dllefschetz(h,m=0)
Here h
is an element of a Hecke algebra associated to a Coxeter group W
or Coxeter coset WÏ
which itself is associated to an algebraic group ð
. By DigneMichel1985, for $gâ ð^F$, the number of fixed points of Fáµ
on the Deligne-Lusztig variety associated to the element wÏâWÏ
, have for m
divisible by a sufficently large integer d
, the form $â_Ï Ï_{(qáµ)}(T_wÏ)R_Ï(g)$ where Ï
runs over the irreducible characters of $WÏ$, where $R_Ï$ is the corresponding almost character, and where $Ï_{(qáµ)}$ is a character value of the Hecke algebra $H(WÏ,qáµ)$ of $WÏ$ with parameter qáµ
. This expression is called the Lefschetz character of the Deligne-Lusztig variety. If we consider qáµ
as an indeterminate x
, it can be seen as a sum of unipotent characters with coefficients character values of the generic Hecke algebra $H(WÏ,x)$. A more complicated formula involving the eigenvalues of Frobenius attached to unipotent characters applies for m
not prime to d
. The function returns this formula when a second parameter mâ 0
is given.
The function 'dllefschetz' 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.
julia> W=coxgroup(:A,2)
Aâ
julia> H=hecke(W,Pol(:q))
hecke(Aâ,q)
julia> T=Tbasis(H);
julia> dllefschetz(T(1,2))
[Aâ]:<111>-q<21>+q²<3>
julia> dllefschetz((T(1)+T())*(T(2)+T()))
[Aâ]:q<21>+(q²+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).
julia> H=hecke(spets(W,Perm(1,2)),Pol(:q)^2)
hecke(²Aâ,q²)
julia> T=Tbasis(H);dllefschetz(T(1))
[²Aâ]:-<11>-q<²Aâ>+q²<2>
Finally, there is a second form dllefschetz(H::HeckeAlgebra,w,i=0)
where the arguments are a Hecke algebra and an element of w
. This may be used for Spetses where we know the column of the CharTable
of H
for w
but not other columns of the spetsial Hecke algebra charcater table.
Chevie.Uch.lusztig_induce
â Methodlusztig_induce(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 ð
of the algebraic group ð
attached to W
. The program returns the Lusztig induced $R_ð^ð(λ)$.
julia> W=coxgroup(:G,2)
Gâ
julia> WF=spets(W)
Gâ
julia> T=subspets(WF,Int[],W(1))
Gâââ=ΊâΊâ
julia> u=unichar(T,1)
[Gâââ=ΊâΊâ]:<Id>
julia> lusztig_induce(WF,u)
[Gâ]:<Ïâââ>-<Ïâââ>-<Ïâ²âââ>+<Ïâ³âââ>
julia> dlchar(W,W(1))
[Gâ]:<Ïâââ>-<Ïâââ>-<Ïâ²âââ>+<Ïâ³âââ>
Chevie.Uch.lusztig_restrict
â Methodlusztig_restrict(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 ð
attached to W
, while R
represents a Levi subgroup L
. The program returns the Lusztig restriction $*R_ð^ð(γ)$.
julia> W=coxgroup(:G,2)
Gâ
julia> WF=spets(W)
Gâ
julia> T=subspets(WF,Int[],W(1))
Gâââ=ΊâΊâ
julia> u=dlchar(W,W(1))
[Gâ]:<Ïâââ>-<Ïâââ>-<Ïâ²âââ>+<Ïâ³âââ>
julia> lusztig_restrict(T,u)
[Gâââ=ΊâΊâ]:4<Id>
julia> T=subspets(WF,Int[],W(2))
Gâââ=ΊâΊâ
julia> lusztig_restrict(T,u)
[Gâââ=ΊâΊâ]:0
Chevie.Uch.on_unipotents
â Methodon_unipotents(W,aut)
W
is a reflection group or reflection coset representing a finite reductive group $ð ^F$, and aut
is an automorphism of $ð ^F$ (for W
a permutation group, this can be given as a permutation of the roots). The function returns the permutation of the unipotent characters of $ð ^F$ induced by aut
. This makes sense for Spetsial complex reflection groups and is implemented for them.
julia> WF=rootdatum("3D4")
³Dâ
julia> on_unipotents(Group(WF),WF.phi)
(1,7,2)(8,12,9)
Chevie.Uch.unipotent_character
â Methodunipotent_character(W,l)
or unichar(W,l)
Constructs an object representing the unipotent character specified by l
of the algebraic group associated to the Coxeter group or Coxeter coset specified by W
. 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 (where the names are as given by charnames(UnipotentCharacters(W))
). Finally, l
can be a list of length the number of unipotent characters of W
, which specifies the coefficient to give to each unipotent character.
julia> W=coxgroup(:G,2)
Gâ
julia> u=unichar(W,7)
[Gâ]:<Gâ[-1]>
julia> v=unichar(W,"G2[E3]")
[Gâ]:<Gâ[ζâ]>
julia> w=unichar(W,[1,0,0,-1,0,0,2,0,0,1])
[Gâ]:<Ïâââ>-<Ïâ³âââ>+2<Gâ[-1]>+<Gâ[ζâ²]>
julia> unichar(W,fourier(UnipotentCharacters(W))[3,:])
[Gâ]:2//3<Ïâ²âââ>-1//3<Ïâ³âââ>+1//3<Ïâââ>+1//3<Gâ[1]>-1//3<Gâ[ζâ]>-1//3<Gâ[ζâ²]>
The last line shows the almost character associated to the 3rd unipotent character of W
.
some limited arithmetic is available on unipotent characters:
julia> coefficients(u) # so that u==unichar(W,coefficients(u))
10-element Vector{Int64}:
0
0
0
0
0
0
1
0
0
0
julia> w-2u
[Gâ]:<Ïâââ>-<Ïâ³âââ>+<Gâ[ζâ²]>
julia> w*w # scalar product
7
julia> degree(w)
Pol{Int64}: qâµ-qâŽ-q³-q²+q+1
CycPols.CycPol
â MethodCycPol(x::Mvp)
converts univariate Mvp
x
to a CycPol
Chevie.Tools2.eigmat
â Methodeigmat(m::Matrix)
eigenvalues of finite order of m
, as a Vector{Root1}
Combinat.blocks
â Methodblocks(G::Group,p::Integer)
Let p
be a prime. This function returns the partition of the irreducible characters of G
in p
-blocks, represented by the list of indices of irreducibles characters in each block.
julia> W=coxsym(5)
ð â
julia> blocks(W,2)
2-element Vector{Vector{Int64}}:
[1, 3, 4, 5, 7]
[2, 6]
julia> blocks(W,3)
3-element Vector{Vector{Int64}}:
[1, 5, 6]
[2, 3, 7]
[4]
julia> blocks(W,7)
7-element Vector{Vector{Int64}}:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
Primes.factor
â Methodfactor(p::Mvp)
p
should be of degree <=2 thus represent a quadratic form. The function returns a list of two linear forms of which p
is the product if such forms exist, otherwise it returns [p].
julia> @Mvp x,y
julia> factor(x^2-y^2+x+3y-2)
2-element Vector{Mvp{Int64, Int64}}:
x-y+2
x+y-1
julia> factor(x^2+x+1)
2-element Vector{Mvp{Cyc{Int64}, Int64}}:
x-릉
x-ζâ²
julia> factor(x*y-1)
1-element Vector{Mvp{Int64, Int64}}:
xy-1
Chevie.Lusztig.FindSeriesInParent
â MethodFindSeriesInParent(h,HF,WF,ww)
find series h
of levi HF
in WF
(ww
is uw.harish
or uw.almostHarish
) returns a namedtuple with 2 fields: ser= series found op: an element of W
conjugating h.levi to ser.levi (not needed for Coxeter groups and standard levis H)
Chevie.Lusztig.lusztig_induction_table
â Methodlusztig_induction_table(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 ð
of the algebraic group ð
associated to W
. The function returns an InductionTable
representing the Lusztig induction $R_ð^ð$ between unipotent characters.
julia> W=coxgroup(:B,3)
Bâ
julia> t=twistings(W,[1,3])
2-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Bâââââ=AÌâÃAâΊâ
Bâââââ=AÌâÃAâΊâ
julia> lusztig_induction_table(t[2],W)
Lusztig induction from Bâââââ=AÌâÃAâΊâ to Bâ
âââââââ¬ââââââââââââââââââââââââ
â â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â
âBâ:2 â . . 1 -1â
âBâ:11â 1 -1 . .â
âââââââŽââââââââââââââââââââââââ
Chevie.GAPENV
â ModuleThe module GAPENV creates a GAP3-like environment by extending locally the base functions *, +, -, ^, isless, copy, //, inv, length
to their GAP3 semantics and defining quite a few other GAP3 functions, then loads the Chevie database in that environment.
CycPols.CycPol
â MethodCycPol(v::AbstractVector)
This form is an compact way unsed in the Chevie library of specifying a CycPol
with only positive multiplicities: v
should be a vector. The first element is taken as the .coeff
of the CycPol
, the second as the .valuation
. Subsequent elements are rationals i//d
representing (q-E(d)^i)
or are integers d
representing Ί_d(q)
.
julia>Pol(:q);
julia> CycPol([3,-5,6,3//7])
3qâ»âµÎŠâ(q-ζâ³)
Chevie.Algebras
â ModuleThis is a port of the GAP3 package Algebras by Cédric Bonnafé.
Chevie.Algebras.GroupAlgebra
â TypeGroupAlgebra(G,T=Int)
group algebra of G
with coefficients T
Chevie.Algebras.SolomonAlgebra
â Type'SolomonAlgebra(W,K)'
Let (W,S)
be a finite Coxeter group. If w
is an element of W
, let R(w)={s â S | l(ws) > l(w)}
. If I
is a subset of S
, we set Y_I={w â W | R(w)=I}
, X_I={w â W | R(w) â I}
.
Note that X_I
is the set of minimal length left coset representatives of W/W_I
. Now, let y_I=â_{w â Y_I} w
, x_I=â_{w â X_I} w
.
They are elements of the group algebra †W
of W
over Z
. Now, let $Σ(W) = â_{I â S} †y_I = â_{I â S} †x_I$. This is a sub-â€
-module of â€W
. In fact, Solomon proved that it is a sub-algebra of â€W
. Now, let K(W)
be the Grothendieck ring of W
and let Ξ:Σ(W)â K(W)
be the map defined by Ξ(x_I) = Ind_{W_I}^W 1
. Solomon proved that this is an homomorphism of algebras. We call it the Solomon homomorphism.
returns the Solomon descent algebra of the finite Coxeter group (W,S)
over K
. If S=[sâ,âŠ,sáµ£]
, the element x_I
corresponding to the subset I=[sâ,sâ,sâ]
of S
is printed as |X(124)|. Note that 'A:=SolomonAlgebra(W,K)' is endowed with the following fields:
'A.W': the group W
'A.basis': the basis (x_I)_{I â S}
.
'A.xbasis': the function sending the subset I
(written as a number: for instance 124
for [s_1,s_2,s_4]
) to x_I
.
'A.ybasis': the function sending the subset I
to y_I
.
'A.injection': the injection of A
in the group algebra of W
, obtained by calling 'SolomonAlgebraOps.injection(A)'.
Note that 'SolomonAlgebra(W,K)' endows W
with the field W.solomon
which is a record containing the following fields:
'W.solomon_subsets': the set of subsets of S
'W.solomonconjugacy': conjugacy classes of parabolic subgroups of W
(a conjugacy class is represented by the list of the positions, in 'W.solomon.subsets', of the subsets I
of S
such that `WI` lies in this conjugacy class).
'W.solomon_mackey': essentially the structure constants of the Solomon algebra over the rationals.
julia> W=coxgroup(:B,4)
Bâ
julia> A=SolomonAlgebra(W)
SolomonAlgebra(Bâ,Int64)
julia> X=A.xbasis; X(1,2,3)*X(2,4)
2Xâ+2Xâ
julia> W.solomon_subsets
16-element Vector{Vector{Int64}}:
[1, 2, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]
[1, 2]
[1, 3]
[1, 4]
[2, 3]
[2, 4]
[3, 4]
[1]
[2]
[3]
[4]
[]
julia> W.solomon_conjugacy
12-element Vector{Vector{Int64}}:
[1]
[2]
[3]
[4]
[5]
[6]
[7, 8]
[9, 11]
[10]
[12]
[13, 14, 15]
[16]
julia> Algebras.injection(A)(X(1,2,3))
e_+eâ+eââ+eâââ+eââââ+eâââââ+eââââââ+eâââââââ
Chevie.Algebras.ppart
â Methodppart(g,p)
Given an element g
of a group and an integer p
we can uniquely write g=gâgâ
where the order of gâ
is prime to p
and the order of gâ
is a product of primes which divide p
. this function returns gâ
.
Chevie.Algebras.pprimesections
â Methodpprimesections(G::Group,p::Integer)
This function returns a partition of the indices of the conjugacy classes of G
. Indices i,j
are in the same part if the elements x/ppart(x,p)
for x
in classreps(G)[i],classreps(G)[j]
are in the same class.
julia> G=symmetric_group(5)
Group((1,2),(2,3),(3,4),(4,5))
julia> Algebras.pprimesections(G,2)
3-element Vector{Vector{Int64}}:
[1, 2, 4, 5]
[3, 6]
[7]
julia> Algebras.pprimesections(G,3)
5-element Vector{Vector{Int64}}:
[1, 3]
[2, 6]
[4]
[5]
[7]
PermGroups.Groups.isabelian
â Methodisabelian(A::FiniteDimAlgebra)
whether A
is commutative
Chevie.Fact
â ModuleFactoring polynomials over the rationals
Chevie.Fact.LogInt
â MethodLogInt(n::Integer,base::Integer)
returns floor(Int,log(base,n)) but very accurately. Assumes n>0 and base>1.
julia> Fact.LogInt(1024,2)
10
julia> Fact.LogInt(1,10)
0
Primes.factor
â Methodfactor(f::Pol{<:Union{Integer,Rational{<:Integer}}})
Factor f
over the rationals. The result is a Primes.Factorization{typeof(f)}
.
julia> factor(Pol(:q)^24-1)
(q-1) * (q²-q+1) * (qâŽ-q²+1) * (qâž-qâŽ+1) * (qâŽ+1) * (q²+1) * (q+1) * (q²+q+1)
Chevie.Format
â ModuleChevie contains some extended formatting facilities for printing, displaying, formatting objects in various ways. For that Chevie
uses extensively IO
properties. We have sevral convenience functions which make using IO
properties easier.
rio(;d...)
makes an IO
stream which always has the property :limit=>true
, to mimic the REPL default printing, and has also the extra properties given by the d...
keywords. Using this, for instance
IOContext(stdout,:limit=>true,:compact=>true)
becomes rio(compact=true)
.
We have versions of display functions which use implicitely rio
:
xprint(x...;p...)
is the same as print(rio(;p...),x...)
. Similarly for println
, display
we have xprintln
, xdisplay
.
xrepr(x;p...)
is the same as repr(x;context=IOContext(stdout,p...))
. xrepr(io,x)
is the same as repr(x;context=io)
.
julia> @Pol q;p=(q^5+1)^2
Pol{Int64}: q¹â°+2qâµ+1
julia> print(p)
Pol([1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1])
julia> xprint(p)
q¹â°+2qâµ+1
julia> xprint(p;varname=:x)
x¹â°+2xâµ+1
julia> repr(2E(5,2)+2E(5,3))
"Cyc{Int64}(-1-root(5))"
julia> xrepr(2E(5,2)+2E(5,3);quadratic=false)
"Cyc{Int64}(2E(5,2)+2E(5,3))"
Most objects in Chevie use TeX for printing when given the IO
property :TeX=true
. This is used as the default display in IJulia
and Pluto
by giving the property :TeX
when defining Base.show(io::IO, ::MIME"text/html", ...)
for these objects. Continuing the above example:
julia> xprint(p;TeX=true)
q^{10}+2q^5+1
A model we often adopt for displaying nicely complex objects is to first write a nice display using TeX
output. This can be used directly in IJulia
and Pluto
. For other environments, we can compute from the TeX
representation a suitable one using the following function:
fromTeX(io::IO,s)
takes a TeX
source and tries to give the best possible rendering on a given IO
. This uses unicode characters at the REPL (if get(io,:limit,false)==true
). In the worse case (stdout
) all TeX
special characters are stripped.
julia> s="E_6[\zeta_3]:\phi_{1,6}"
"E_6[\zeta_3]:\phi_{1,6}"
julia> fromTeX(rio(),s)
"Eâ[ζâ]:Ïâââ"
julia> fromTeX(stdout,s)
"E6[E3]:phi1,6"
printTeX(io,s)
is the same as print(io,fromTeX(io,s))
.
Other functions to ease formatting are described below: see showtable
, joindigits
, ordinal
, cut
.
Chevie.Format.cut
â Methodcut(io::IO=stdout,string;width=displaysize(io)[2]-2,after=",",before="")
This function prints to io
the string argument cut across several lines for improved display. It can take the following keyword arguments:
- width: the cutting width
- after: cut after these chars
- before: cut before these chars
julia> cut(string(collect(1:50)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
Chevie.Format.fromTeX
â MethodfromTeX to document
Chevie.Format.joindigits
â Functionjoindigits(l::AbstractVector{Int},delim="()";sep=",")
print a list l
of (usually small) numbers as compactly as possible: no separators if all numbers are smaller than 10.
julia> joindigits([1,9,3,5])
"1935"
julia> joindigits([1,10,3,5])
"(1,10,3,5)"
julia> joindigits([1,10,3,5],"[]";sep="-")
"[1-10-3-5]"
Chevie.Format.ordinal
â Methodordinal(n::Integer)
string for an ordinal number respecting english syntax.
julia> ordinal(201)
"201st"
julia> ordinal(202)
"202nd"
julia> ordinal(203)
"203rd"
julia> ordinal(204)
"204th"
Chevie.Format.printTeX
â MethodprintTeX(io,s)
is print(io,fromTeX(io,s))
Chevie.Format.rio
â Functionrio(io::IO=stdout;p...)
enriches io
with the attributes in p
. It always enriches with limit=true
to mimic display at the REPL.
Thus print(rio(),x...)
is like printing x...
at the REPL.
Chevie.Format.showtable
â Methodshowtable(io::IO=stdout, table::AbstractMatrix; keywords)
General routine to format a table at the REPL, or in IJulia
or Pluto
. The elements of table
and any of the labels in the keywords can be of any type and are formatted in the context of io
, excepted that a string s
is formatted by fromTeX(io,s)
. The following options can be passed as properties of the io
or as keywords.
row_labels
: labels for rows. AVector{Any}
(can be strings), defaultaxes(table,1)
rows_label
: label for first column of row labels (default none)col_labels
: labels for other columns (default none)align
: a character in "lcr": alignment of columns (default 'r'); then all columns will be aligned as given except therows_labels
which will always be aligned left. Or ifalign
is a string it should be of length1+size(table,2)
where the first character is the alignment of therow_labels
.row_seps
: line numbers after which to put a separator. A number ofi
means beforei
-th line of the table. So0
is at the top of the table,-1
is before thecol_labels
. The default is[-1,0,size(table,1)]
.col_seps
: column numbers after which to put a separator. A number ofi
means beforei
-th column of the table. So0
is at the left of the table,-1
is before therow_labels
. The default is[-1,0,size(table,2)]
. Alternately thecol_seps
can be given using analign
string in LaTeX style|r|llll|
. They should be given by only one of the two ways.rows
: show only these rows. Default all rows:axes(table,1)
cols
: show only these columns. Default all columns:axes(table,1)
TeX
: defaultfalse
. If true, give LaTeX output (useful to give nicer output in Jupyter or Pluto)column_repartition
: aVector{<:Integer}
. Display in vertical pieces of sizes indicated (useful forTeX
: otherwise the column_repartition is automatically computed taking in accountdisplaysize(io,2)
).dotzero
: iftrue
replace a '0' by '.' in the table (default false).
julia> m=reshape(1:10:120,3,4)
3Ã4 reshape(::StepRange{Int64, Int64}, 3, 4) with eltype Int64:
1 31 61 91
11 41 71 101
21 51 81 111
julia> showtable(m)
âââ¬âââââââââââââ
â1â 1 31 61 91â
â2â11 41 71 101â
â3â21 51 81 111â
âââŽâââââââââââââ
julia> labels=["x","y","z","t"];
julia> showtable(m;cols=2:4,col_labels=labels,row_seps=[0,2,3])
y z t
âââ¬ââââââââââ
â1â31 61 91â
â2â41 71 101â
âââŒââââââââââ€
â3â51 81 111â
âââŽââââââââââ
julia> showtable(m;col_labels=labels,rows_label="N",align="|r|ll|ll|")
âââ¬ââââââ¬âââââââ
âNâ x yâ z tâ
âââŒââââââŒâââââââ€
â1â1 31â61 91 â
â2â11 41â71 101â
â3â21 51â81 111â
âââŽââââââŽâââââââ
Chevie.Format.xdisplay
â Methodxdisplay(x...;p...)
is like display
but uses the enriched io rio(;p...)
Chevie.Format.xprint
â Methodxprint(x...;p...)
is like print
but uses the enriched io rio(;p...)
Chevie.Format.xprintln
â Methodxprintln(x...;p...)
is like println
but uses the enriched io rio(;p...)
Chevie.Format.xrepr
â Methodxrepr(x;p...)
is repr
using as context stdout
enriched by p...
Chevie.Format.xrepr
â Methodxrepr(io,x;p...)
is repr
using as context io
enriched by p...
Chevie.Semisimple
â ModuleAlgebraic groups and semi-simple elements
Let us fix an algebraically closed field K
and let ð
be a connected reductive algebraic group over K
. Let ð
be a maximal torus of ð
, let X(ð)
be the character group of ð
(resp. Y(ð)
the dual lattice of one-parameter subgroups of ð
) and Ί
(resp Ί^
) the roots (resp. coroots) of ð
with respect to ð
.
Then ð
is determined up to isomorphism by the root datum (X(ð),Ί, Y(ð),Ί^)
. In algebraic terms, this consists in giving a free â€
-lattice X=X(ð)
of dimension the rank of ð
(which is also called the rank of ð
), and a root system Ί â X
, and similarly giving the dual roots Ί^â Y=Y(ð)
.
This is obtained by a slight generalisation of our setup for a Coxeter group W
. This time we assume that the canonical basis of the vector space V
on which W
acts is a â€
-basis of X
, and Ί
is specified by a matrix simpleroots(W)
whose rows are the simple roots expressed in this basis of X
. Similarly Ί^
is described by a matrix simplecoroots(W)
whose rows are the simple coroots in the basis of Y
dual to the chosen basis of X
. The duality pairing between X
and Y
is the canonical one, that is the pairing between vectors xâ X
and yâ Y
is given by transpose(x)*y
. Thus, we must have the relation simplecoroots(W)*permutedims(simpleroots(W))=cartan(W)
.
We get this by using the function rootdatum
, whose arguments are the two matrices simpleroots(W)
and simplecoroots(W)
described above. The roots need not generate V
, so the matrices need not be square. For example, the root datum of the linear group of rank 3 can be obtained as:
julia> W=rootdatum([-1 1 0;0 -1 1],[-1 1 0;0 -1 1])
AâΊâ
julia> reflrep(W,W(1))
3Ã3 Matrix{Int64}:
0 1 0
1 0 0
0 0 1
here the Weyl group is the symmetric group on 3 letters acting by permutation of the basis of X
. The dimension of X
, size(simpleroots(W),2)
, is the rank and the dimension of the subspace generated by the roots, size(simpleroots(W),1)
, is called the semi-simple rank. In the example the rank is 3 and the semisimple rank is
The default form W=coxgroup(:A,2)
defines the adjoint algebraic group (the group in its isogeny class with a trivial centre). In this case Ί
is a basis of X
, so simpleroots(W)
is the identity matrix and simplecoroots(W)
is the Cartan matrix cartan(W)
of the root system.
The form coxgroup(:A,2,sc=true)
constructs the semisimple simply connected algebraic group, where simpleroots(W)
is the transposed of cartan(W)
and simplecoroots(W)
is the identity matrix.
An extreme form of root data can be specified more conveniently: when W
is the trivial coxgroup()
(in this case ð
is a torus), the root datum has no roots, thus is entirely determined by the rank r
. The function torus(r)
constructs such a root datum (it could be also obtained by giving two 0Ãr
matrices to rootdatum
).
Finally, the rootdatum
function also understands some familiar names for the algebraic groups for which it gives the results that could be obtained by giving the appropriate simpleroots(W)
and simplecoroots(W)
matrices:
julia> rootdatum(:gl,3) # same as the previous example
glâ
The types of root data which are understood are :gl, :pgl, :sl, :slmod, :tgl :sp, :csp, :psp, :so, :pso, :cso, :halfspin, :gpin, :spin, :E6, :E6sc, :CE6, :E7, :E7sc, :CE7, :E8, :F4, :G2
.
Semisimple elements
We construct semi-simple elements in two ways. The first way is for finite order elements of ð
, which over an algebraically closed field K
are in bijection with elements of Yâ â /â€
whose denominator is prime to the characteristic of K
. These are represented as a vector of Rational
s r
such that 0â€r<1
. The function ss
constructs such a semisimple element from a vector of Rational
s.
More generally a torus ð
over a field K
is isomorphic to (KË£)^n
where n
is the dimension of ð
, so a vector of elements of KË£
is a more general representation which is produced by the function SemisimpleElement
; in this setting the result of ss
is naturally interpreted as a Vector{Root1}
, so it can also be obtained by calling SemisimpleElement
which such a vector.
julia> G=rootdatum(:sl,4)
slâ
julia> ss(G,[1//3,1//4,3//4,2//3])
SemisimpleElement{Root1}: <ζâ,ζâ,ζâ³,ζâ²>
julia> SemisimpleElement(G,[E(3),E(4),E(4,3),E(3,2)])
SemisimpleElement{Root1}: <ζâ,ζâ,ζâ³,ζâ²>
julia> L=reflection_subgroup(G,[1,3])
Aâââââ=AâÃAâΊâ
julia> C=algebraic_center(L)
(Z0 = SubTorus(Aâââââ=AâÃAâΊâ,[1 2 1]), AZ = Group(SemisimpleElement{Root1}[<1,1,-1>]), descAZ = [[1, 2]], ZD = Group(SemisimpleElement{Root1}[<-1,1,1>, <1,1,-1>]))
julia> T=torsion_subgroup(C.Z0,3)
Group(SemisimpleElement{Root1}[<ζâ,ζâ²,ζâ>])
julia> e=sort(elements(T))
3-element Vector{SemisimpleElement{Root1}}:
<1,1,1>
<ζâ,ζâ²,ζâ>
<ζâ²,ζâ,ζâ²>
In the above, the Levi subgroup L
of SLâ
consisting of block-diagonal matrices of shape 2Ã2
is constructed. The function algebraic_center
returns a named tuple with : the neutral component Zâ°
of the center Z
of L
, represented by a basis of Y(Zâ°)
, a complement subtorus S
of ð
to Zâ°
represented similarly by a basis of Y(S)
, and semi-simple elements representing the classes of Z
modulo Zâ°
, chosen in S
. The classes Z/Zâ°
also biject to the fundamental group as given by the field .descAZ
, see algebraic_center
for an explanation. Finally the semi-simple elements of order 3 in Zâ°
are computed.
julia> e[3]^G(2)
SemisimpleElement{Root1}: <ζâ²,1,ζâ²>
julia> orbit(G,e[3])
6-element Vector{SemisimpleElement{Root1}}:
<ζâ²,ζâ,ζâ²>
<ζâ²,1,ζâ²>
<ζâ,1,ζâ²>
<ζâ²,1,ζâ>
<릉,1,릉>
<ζâ,ζâ²,ζâ>
Here is the same computation as above performed with semisimple elements whose coefficients are in the finite field FF(4)
, representing elements of slâ(ðœâ)
.
julia> G=rootdatum(:sl,4)
slâ
julia> s=SemisimpleElement(G,Z(4).^[1,2,1])
SemisimpleElement{FFE{2}}: <Zâ,Zâ²,Zâ>
julia> s^G(2)
SemisimpleElement{FFE{2}}: <Zâ,1,Zâ>
julia> orbit(G,s)
6-element Vector{SemisimpleElement{FFE{2}}}:
<Zâ,Zâ²,Zâ>
<Zâ,1,Zâ>
<Zâ²,1,Zâ>
<Zâ,1,Zâ²>
<Zâ²,1,Zâ²>
<Zâ²,Zâ,Zâ²>
We can compute the centralizer $C_ð (s)$ of a semisimple element in ð
:
julia> G=coxgroup(:A,3)
Aâ
julia> s=ss(G,[0,1//2,0])
SemisimpleElement{Root1}: <1,-1,1>
julia> centralizer(G,s)
Aâââââ=(AâAâ)Ίâ
The result is an ExtendedReflectionGroup
; the reflection group part is the Weyl group of $C_ð â°(s)$ and the extended part are representatives of $C_ð (s)$ modulo $C_ðâ°(s)$ taken as diagram automorphisms of the reflection part. Here it is printed as a coset $C_ð â°(s)Ï$ which generates $C_ð (s)$.
Chevie.Semisimple.SubTorus
â TypeSubTorus(W,Y::Matrix{<:Integer})
The function returns the subtorus ð of the maximal torus ð
of the reductive group represented by the Weyl group W
such that Y(ð)
is the (pure) sublattice of Y(ð)
generated by the (integral) vectors Y
. A basis of Y(ð)
in Hermite normal form (for easy memebership testing) is computed and stored in the field S.gens
of the returned SubTorus struct. A basis of Y(ð)
adapted to Y(ð)
is also computed. This means a set of integral vectors, stored in S.complement
, is computed such that M=vcat(S.gens,S.complement)
is a basis of Y(ð)
(equivalently MâGL(Z^{rank(W)})
. An error is raised if Y
does not define a pure sublattice.
julia> W=coxgroup(:A,4)
Aâ
julia> SubTorus(W,[1 2 3 4;2 3 4 1;3 4 1 1])
SubTorus(Aâ,[1 0 3 -13; 0 1 2 7; 0 0 4 -3])
julia> SubTorus(W,[1 2 3 4;2 3 4 1;3 4 1 2])
ERROR: not a pure sublattice
Stacktrace:
[1] error(::String) at ./error.jl:33
[2] Chevie.Weyl.SubTorus(::FiniteCoxeterGroup{Perm{Int16},Int64}, ::Matrix{Int64}) at /home/jmichel/julia/Chevie.jl/src/Weyl.jl:1082
[3] top-level scope at REPL[25]:1
Chevie.Semisimple.affine
â MethodA generalized Cartan matrix C
is a square integer matrix of size n
such that cᵢᵢ=2
, cᵢⱌâ€0
if iâ j
, and cᵢⱌ==0
if and only if cⱌᵢ==0
. We say that C
is indecomposable if it does not admit any block decomposition.
Let C
be a generalized Cartan matrix. For I
a subset of {1,âŠ,n}
we denote by C_I
the square submatrix with indices i,j
taken in I
. If v
is a real vector of length n
, we write v>0
if for all iâ {1,âŠ,n}
we have váµ¢>0
. It can be shown that C
is a Cartan matrix if and only if for all sets I
, we have det C_I>0
; or equivalently, if and only if there exists v>0
such that C.v>0
. C
is called an affine Cartan matrix if for all proper subsets I
we have det C_I>0
, but det C==0
; or equivalently if there exists v>0
such that C.v==0
.
Given an irreducible Weyl group W
with Cartan matrix C
, we can construct a generalized Cartan matrix CÌ
as follows. Let 뱉
be the opposed of the highest root. Then the matrix $\left(\begin{array}{cc}C&C.뱉\\ 뱉.C&2\end{array}\right)$ is an affine Cartan matrix. The affine Cartan matrices which can be obtained in this way are those we are interested in, which give rise to affine Weyl groups.
Let d=n-rank(C)
. A realization of a generalized Cartan matrix is a pair V,Váµ
of vector spaces of dimension n+d
together with vectors αâ,âŠ,αââ V
(the simple roots), αáµâ,âŠ,αáµââ Váµ
(the simple coroots), such that (αáµáµ¢, αⱌ)=c_{i,j}
. Up to isomorphism, a realization is obtained as follows: write $C=\left(\begin{array}{c}C_1\\C_2\end{array}\right)$ where Câ
is of same rank as C
. Then take αᵢ
to be the first n
vectors in a basis of V
, and take αáµâ±Œ
to be given in the dual basis by the rows of the matrix $\left(\begin{array}{cc}Câ&0\\ C_2&\hbox{Id}_d\\ \end{array}\right).$ To C
we associate a reflection group in the space V
, generated by the fundamental reflections ráµ¢
given by ráµ¢(v)=v-(αáµáµ¢,v)αᵢ
. This is a Coxeter group, called the affine Weyl group ilde W
associated to W
when we start with the affine Cartan matrix associated to a Weyl group W
.
The affine Weyl group is infinite; it has one additional generator sâ
(the reflection with respect to 뱉
) compared to W
. We can not use 0
as a label by default for a generator of a Coxeter group (because the default labels are used as indices, and indices start at 1 in Julia) so we label it as n+1
where n
is the numbers of generators of W
.
julia> W=affine(coxgroup(:A,4))
AÌâ
julia> diagram(W)
ââââ5ââââ
/ \
AÌâ 1âââ2âââ3âââ4
Chevie.Semisimple.algebraic_center
â Methodalgebraic_center(W)
W
should be a Weyl group, or an extended Weyl group. This function returns a description of the center Z
of the algebraic group ð
defined by W
as a named tuple with the following fields:
Z0
: the neutral component Zâ°
of Z
as a subtorus of ð
.
AZ
: representatives in Z
of A(Z):=Z/Zâ°
given as a group of semisimple elements.
ZD
: center of the derived subgroup of ð
given as a group of semisimple elements.
descAZ
: if W
is not an extended Weyl group, describes A(Z)
as a quotient of the center pi
of the simply connected covering of ð
(an incarnation of the fundamental group). It contains a list of elements given as words in the generators of pi
which generate the kernel of the quotient map.
julia> G=rootdatum(:sl,4)
slâ
julia> L=reflection_subgroup(G,[1,3])
Aâââââ=AâÃAâ
ulia> C=algebraic_center(L)
(Z0 = SubTorus(Aâââââ=AâÃAâΊâ,[1 2 1]), AZ = Group(SemisimpleElement{Root1}[<1,1,-1>]), descAZ = [[1, 2]], ZD = Group(SemisimpleElement{Root1}[<-1,1,1>, <1,1,-1>]))
julia> G=coxgroup(:A,3)
Aâ
julia> s=ss(G,[0,1//2,0])
SemisimpleElement{Root1}: <1,-1,1>
julia> C=centralizer(G,s)
Aâââââ=(AâAâ)Ίâ
julia> algebraic_center(C)
(Z0 = SubTorus(Aâââââ=AâÃAâΊâ,Matrix{Int64}(undef, 0, 3)), AZ = Group(SemisimpleElement{Root1}[<1,-1,1>]))
Chevie.Semisimple.coweights
â Methodcoweights(W)
simple coweights in the basis of Y(T)
Chevie.Semisimple.fundamental_group
â Methodfundamental_group(W)
This function returns the fundamental group of the algebraic group defined by the Coxeter group struct W
. This group is returned as a group of diagram automorphisms of the corresponding affine Weyl group, which is represented as a group of permutations of the set of simple roots enriched by the lowest root of each irreducible component. The definition we take of the fundamental group of a (not necessarily semisimple) reductive group is (Pâ© Y(ð))/Q where P is the coweight lattice (the dual lattice in Y(ð)â â of the root lattice) and Q is the coroot latice. The bijection between elements of P/Q and diagram automorphisms is explained in the context of non-irreducible groups for example in §3.B Bonnafé2005.
julia> W=coxgroup(:A,3) # the adjoint group
Aâ
julia> fundamental_group(W) # the 12th root is the lowest one
Group((1,12,3,2))
julia> W=rootdatum(:sl,4) # the semisimple simply connected group
slâ
julia> fundamental_group(W)
Group(Perm{Int16}[])
Chevie.Semisimple.intermediate_group
â Methodintermediate_group(W, indices)
This computes a rootdatum
representing a semisimple algebraic group intermediate between the adjoint group â- obtained by a call like rootdatum(:pgl,4)
â- and the simply connected semi-simple group â- obtained by a call like rootdatum(:sl,4)
. The group is specified by specifying a subset of the minuscule weights, which are weights whose scalar product with every coroot is in -1,0,1
(the weights are the elements of the weight lattice, the lattice in X(ð)â â
dual to the coroot lattice). The non-trivial characters of the (algebraic) center of a semi-simple simply connected algebraic group are in bijection with the minuscule weights; this set is also in bijection with P/Q
where P
is the weight lattice and Q
is the root lattice. If W
is irreducible, the minuscule weights are part of the basis of the weight lattice given by the fundamental weights, which is the dual basis of the simple coroots. They can thus be specified by an index
in the Dynkin diagram. The constructed group has lattice X(ð)
generated by the sum of the root lattice and the weights with the given indices
. If W
is not irreducible, a minuscule weight is a sum of minuscule weights in different components. An element of indices
is thus itself a list, interpreted as representing the sum of the corresponding weights.
julia> W=coxgroup(:A,3)
Aâ
julia> fundamental_group(intermediate_group(W,Int[])) # adjoint
Group((1,12,3,2))
julia> fundamental_group(intermediate_group(W,Int[2])) # intermediate
Group((1,3)(2,12))
Chevie.Semisimple.quasi_isolated_reps
â Functionquasi_isolated_reps(W,p=0)
W
should be a Weyl group corresponding to an algebraic group ð over an algebraically closed field of characteristic 0. This function returns a list of semisimple elements for ð, which are representatives of the ð-orbits of quasi-isolated semisimple elements. It follows the algorithm given in Bonnafe2005. If a second argument p
is given, it gives representatives of those quasi-isolated elements which exist in characteristic p
.
julia> W=coxgroup(:E,6);l=quasi_isolated_reps(W)
5-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<1,-1,1,1,1,1>
<1,1,1,릉,1,1>
<릉,1,1,1,1,릉>
<1,릉,릉,1,릉,1>
julia> map(s->isisolated(W,s),l)
5-element Vector{Bool}:
1
1
1
0
0
julia> W=rootdatum(:E6sc);l=quasi_isolated_reps(W)
7-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<-1,1,1,-1,1,-1>
<ζâ,1,ζâ²,1,ζâ,ζâ²>
<ζâ²,1,ζâ,1,ζâ,ζâ²>
<ζâ²,1,ζâ,1,ζâ²,ζâ>
<ζââµ,1,ζâ²,1,ζâ,ζâ²>
<ζâ²,1,ζâ,1,ζâ²,ζââµ>
julia> map(s->isisolated(W,s),l)
7-element Vector{Bool}:
1
1
1
1
1
1
1
julia> Semisimple.quasi_isolated_reps(W,3)
2-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<-1,1,1,-1,1,-1>
Chevie.Semisimple.semisimple_centralizer_representatives
â Functionsemisimple_centralizer_representatives(W [,p])
or sscentralizer_reps
W
should be a Weyl group corresponding to an algebraic group ð
. This function returns a list describing representatives ð
of ð
-orbits of reductive subgroups of ð
which are the identity component of the centralizer of a semisimple element. Each group ð
is specified by a list h
of reflection indices in W
such that ð
corresponds to reflection_subgroup(W,h)
. If a second argument p
is given, only the list of the centralizers which occur in characteristic p
is returned.
julia> W=coxgroup(:G,2)
Gâ
julia> sscentralizer_reps(W)
6-element Vector{Vector{Int64}}:
[]
[1]
[2]
[1, 2]
[1, 5]
[2, 6]
julia> reflection_subgroup.(Ref(W),sscentralizer_reps(W))
6-element Vector{FiniteCoxeterSubGroup{Perm{Int16},Int64}}:
Gâââ=Ίâ²
Gââââ=AâΊâ
Gââââ=AÌâΊâ
Gâ
Gââââ
â=Aâ
Gâââââ=AÌâÃAâ
julia> sscentralizer_reps(W,2)
5-element Vector{Vector{Int64}}:
[]
[1]
[2]
[1, 2]
[1, 5]
Chevie.Semisimple.structure_rational_points_connected_centre
â Methodstructure_rational_points_connected_centre(W,q)
W
should be a Coxeter group or a Coxeter coset representing a finite reductive group $ð ^F$, and q
should be the prime power associated to the isogeny F
. The function returns the abelian invariants of the finite abelian group $Zâ°ð ^F$ where Zâ°ð
is the connected center of ð
.
In the following example one determines the structure of ð(ðœâ)
where ð
runs over all the maximal tori of SL
â.
julia> l=twistings(rootdatum(:sl,4),Int[])
5-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Aâââ=Ίâ³
Aâââ=Ίâ²Ίâ
Aâââ=ΊâΊâ²
Aâââ=ΊâΊâ
Aâââ=ΊâΊâ
julia> structure_rational_points_connected_centre.(l,3)
5-element Vector{Vector{Int64}}:
[2, 2, 2]
[2, 8]
[4, 8]
[26]
[40]
Chevie.Semisimple.torsion_subgroup
â Methodtorsion_subgroup(S::SubTorus,n)
This function returns the subgroup of semi-simple elements of order dividing n
in the subtorus S
.
julia> G=rootdatum(:sl,4)
slâ
julia> L=reflection_subgroup(G,[1,3])
Aâââââ=AâÃAâΊâ
julia> C=algebraic_center(L)
(Z0 = SubTorus(Aâââââ=AâÃAâΊâ,[1 2 1]), AZ = Group(SemisimpleElement{Root1}[<1,1,-1>]), descAZ = [[1, 2]], ZD = Group(SemisimpleElement{Root1}[<-1,1,1>, <1,1,-1>]))
julia> T=torsion_subgroup(C.Z0,3)
Group(SemisimpleElement{Root1}[<ζâ,ζâ²,ζâ>])
julia> sort(elements(T))
3-element Vector{SemisimpleElement{Root1}}:
<1,1,1>
<ζâ,ζâ²,ζâ>
<ζâ²,ζâ,ζâ²>
Chevie.Semisimple.weightinfo
â Methodweightinfo(W)
W
is a Coxeter group record describing an algebraic group ð
, or a IypeIrred
. The function is independent of the isogeny type of ð
(so just depends on refltype(W)
, that is on the root system). It returns a dict with the following keys:
:minusculeWeights
the minuscule weights, described as their position in the list of fundamental weights. For non-irreducible groups, a weight is the sum of at most one weight in each irreducible component. It is represented as the list of its components. For consistency, in the case of an irreducible system, a weight is represented as a one-element list.:minusculeCoweights
the minuscule coweights, represented in the same manner as the minuscule weights:decompositions
for each coweight, its decomposition in terms of the generators of the adjoint fundamental group (given by the list of the exponents of the generators). Together with the next field it enables to work out the group structure of the adjoint fundamental group.:moduli
the list of orders of the generators of the fundamental group.:AdjointFundamentalGroup
the list of generators of the adjoint fundamental group, given as permutations of the extended root basis.:CenterSimplyConnected
A list of semisimple elements generating the center of the universal covering of ð:chosenAdaptedBasis
A basis of the weight lattice adapted to the root lattice. In the basis of the fundamental weights, the root lattice is given byC=transpose(cartan(W))
. The property specifying the:chosenAdaptedBasis
is that the Hermite normal form ofC*chosenAdaptedBasis
is almost in Smith normal form (it is diagonal but the diagonal entries may be permuted compared to the Smith normal form; the non-trivial entries are in the positions corresponding to the generators of the fundamental group as indicated by:decompositions
).
julia> weightinfo(coxgroup(:A,2)*coxgroup(:B,2))
Dict{Symbol, Array} with 8 entries:
:moduli => [3, 2]
:minusculeWeights => [[1, 3], [1], [2, 3], [2], [3]]
:decompositions => [[2, 1], [2, 0], [1, 1], [1, 0], [0, 1]]
:highestroot => [5, 7]
:chosenAdaptedBasis => [1 -1 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]
:minusculeCoweights => [[1, 4], [1], [2, 4], [2], [4]]
:CenterSimplyConnected => Vector{Rational{Int64}}[[1//3, 2//3, 0, 0], [0, 0âŠ
:AdjointFundamentalGroup => [(1,12,2), (4,14)]
Chevie.Semisimple.weights
â Methodweights(W)
simple weights in the basis of X(T)
PermGroups.Groups.centralizer
â Methodcentralizer(W,s::SemisimpleElement)
W
should be a Weyl group or an extended reflection group and s
a semisimple element of the algebraic group G
corresponding to W
. This function returns the Weyl group of $C_G(s)$, which describes it. The stabilizer is an extended reflection group, with the reflection group part equal to the Weyl group of $C_{Gâ°}(s)$, and the diagram automorphism part being those induced by $C_G(s)$.
julia> G=coxgroup(:A,3)
Aâ
julia> s=ss(G,[0,1//2,0])
SemisimpleElement{Root1}: <1,-1,1>
julia> centralizer(G,s)
Aâââââ=(AâAâ)Ίâ
Chevie.ComplexR.Reflection
â TypeReflection
is a struct
representing a reflection in a reflection group.
julia> W=crg(8);
julia> r=reflections(W)[7] # shows (r.W,r.rootno,r.eigen)
Reflection(Gâ,1,-1)
julia> r.rootno # r is a reflection for the first root
1
julia> r.eigen # the non-trival eigenvalue, as a Root1
Root1: -1
julia> r.W # the group of which r is a reflection
Gâ
julia> r==Reflection(W,1,-1) # specify r with .rootno and .eigen
true
julia> Reflection(W,1) # specify with .rootno gets the distinguished reflection
Reflection(Gâ,1,ζâ)
julia> root(r)
2-element Vector{Cyc{Rational{Int64}}}:
0
릉
julia> coroot(r)
2-element Vector{Cyc{Int64}}:
0
-2릉
julia> Matrix(r)
2Ã2 Matrix{Cyc{Rational{Int64}}}:
1 0
0 -1
julia> hyperplane(r) # the fixed hyperplane, as a rowspace
1Ã2 Matrix{Cyc{Rational{Int64}}}:
1 0
julia> hyperplane(r)*Matrix(r)==hyperplane(r)
true
julia> isdistinguished(r) # r is not distinguished
false
julia> exponent(r) # which power of a distinguished reflection it is
2
julia> Perm(r)
(1,8)(2,9)(3,16)(4,15)(5,17)(6,18)(7,19)(10,22)(11,21)(12,23)
julia> hyperplane_orbit(r) # r is in the first hyperplane orbit
1
julia> position_class(r) # the index of the conjugacy class of r in W
15
julia> simple_rep(r) # smallest root index affording a conjugate reflection
1
julia> word(r) # a word in the generators of r.W for r
2-element Vector{Int64}:
1
1
Chevie.ComplexR.codegrees
â Methodcodegrees(W::ComplexReflectionGroup)
returns the vector of codegrees of W
as a reflection group on the space V
of reflrep(W)
. These are one less than the degrees of the basic derivations of W
on SVâ V^vee
.
julia> W=complex_reflection_group(4)
Gâ
julia> codegrees(W)
2-element Vector{Int64}:
0
2
Chevie.ComplexR.complex_reflection_group
â Methodcomplex_reflection_group(STnumber)
or crg(STnumber)
complex_reflection_group(p,q,r)
or crg(p,q,r)
The first form of complex_reflection_group
returns the complex reflection group which has Shephard-Todd number STnumber
, see Shephard-Todd1954. The second form returns the imprimitive complex reflection group G(p,q,r)
.
julia> G=complex_reflection_group(4)
Gâ
julia> degrees(G)
2-element Vector{Int64}:
4
6
julia> length(G)
24
julia> W*coxgroup(:A,2) # how to make a non-irreducible group
GâÃAâ
julia> complex_reflection_group(1,1,3) # another way to enter Aâ
glâ
julia> crg(4) # there is also a short alias
Gâ
Chevie.ComplexR.degrees
â Methoddegrees(WF::Spets)
Let W
be the group of the reflection coset WF
, and let V
be the vector space of dimension rank(W)
on which W
acts as a reflection group. Let fâ,âŠ,fâ
be the basic invariants of W
on the symmetric algebra SV
of V
; they can be chosen so they are eigenvectors of the matrix WF.F
. The corresponding eigenvalues are called the factors of F
acting on V
; they characterize the coset â- they are equal to 1 only for the trivial coset. The generalized degrees of WF
are the pairs formed of the reflection degrees and the corresponding factor.
julia> W=coxgroup(:E,6)
Eâ
julia> WF=spets(W)
Eâ
julia> phi=W(6,5,4,2,3,1,4,3,5,4,2,6,5,4,3,1);
julia> HF=subspets(WF,2:5,phi)
Eââââââ
â=³DâΊâ
julia> diagram(HF)
Ï acts as (1,2,4) on the component below
O 2
ï¿š
OâOâO Dâ
1 3 4
julia> degrees(HF)
6-element Vector{Tuple{Int64, Cyc{Int64}}}:
(1, 릉)
(1, ζâ²)
(2, 1)
(4, 릉)
(6, 1)
(4, ζâ²)
Chevie.ComplexR.degrees
â Methoddegrees(W::ComplexReflectionGroup)
returns a list holding the degrees of W
as a reflection group on the vector space V
on which it acts. These are the degrees dâ,âŠ,dâ
where n
is the dimension of V
of the basic invariants of W
in SV
. They reflect various properties of W
; in particular, their product is the cardinality of W
.
julia> W=complex_reflection_group(30)
Hâ
julia> degrees(W)
4-element Vector{Int64}:
2
12
20
30
julia> length(W)
14400
Chevie.ComplexR.hyperplane_orbits
â Methodhyperplane_orbits(W::ComplexReflectionGroup)
returns a list of named tuples, one for each hyperplane orbit of the reflection group W
. If o
is the named tuple for such an orbit, and s
is the first element of gens(W)
whose hyperplane is in the orbit, it contains the following fields
.s
: index of s
in gens(W)
.order
: order of s
.cl_s
: for i in 1:order-1
, position_class(W,W(s)^i)
.N_s
: size of hyperplane orbit
.det_s
: for i in 1:order-1
, position in CharTable(W)
of detââ±
, where detâ
is the linear character taking the value det(reflrep(W,s))
on s
and 1
on non-conjugate reflections.
julia> W=coxgroup(:B,2)
Bâ
julia> hyperplane_orbits(W)
2-element Vector{@NamedTuple{s::Int64, cl_s::Vector{Int64}, order::Int64, N_s::Int64, det_s::Vector{Int64}}}:
(s = 1, cl_s = [2], order = 2, N_s = 2, det_s = [5])
(s = 2, cl_s = [4], order = 2, N_s = 2, det_s = [1])
Chevie.ComplexR.reflections
â Methodreflections(W)
a Vector{Reflection}
of all reflections of the reflection group W
(including the non-distinguished ones; see Reflection
). reflections(W)[1:nhyp(W)]
are the distinguished reflections.
julia> W=crg(4)
Gâ
julia> reflections(W)
8-element Vector{Reflection{PRG{Cyc{Rational{Int64}}, Int16}}}:
Reflection(Gâ,1,ζâ)
Reflection(Gâ,2,ζâ)
Reflection(Gâ,4,ζâ)
Reflection(Gâ,5,ζâ)
Reflection(Gâ,1,ζâ²)
Reflection(Gâ,2,ζâ²)
Reflection(Gâ,4,ζâ²)
Reflection(Gâ,5,ζâ²)
Chevie.KL
â ModuleThis module defines Kazhdan-Lusztig polynomials and bases, and computes W-graphs and asymptotic algebras.
Let â
be the Iwahori-Hecke algebra of a Coxeter system (W,S)
, with quadratic relations (Tâ-uââ)(Tâ-uââ)=0
for sâ S
. If -uââuââ
has a square root wâ
, we can scale the basis Tâ
to get a new basis tâ=-Tâ/wâ
with quadratic relations (tâ-vâ)(tâ+vââ»Â¹)=0
where vâ=wâ/uââ
. The most general case when Kazhdan-Lusztig bases and polynomials can be defined is when the parameters vâ
belong to a totally ordered abelian group Î
for multiplication, see Lusztig1983. We set Îâº= {γâ Îâ£Î³>0}
and Îâ»={γâ»Â¹â£Î³â Îâº}={γâ Îâ£Î³<0}
.
Thus we assume â
defined over the ring â€[Î]
, the group algebra of Î
over â€
, and the quadratic relations of â
associate to each sâ S
a vââ Îâº
such that (tâ-vâ)(tâ+vââ»Â¹)=0
. We also set qâ=vâ²
and define the basis Tâ=vâtâ
with quadratic relations (Tâ-qâ)(Tâ+1)=0
; for wâ W
with reduced expression w=sââŠsâ
we define $q_wâ Îâº$ by $q_w^Âœ=v_{sâ}âŠv_{sâ}$ and let $q_w=(q_w^Âœ)²$; we have $T_w=q_w^Âœt_w$.
We define the bar involution on â
by linearity: on â€[Î]
we define it by $\overline{â_{γâ Î}a_γγ}= â_{γâ Î} a_γ γâ»Â¹$ and we extend it to â
by $\overline T_s=T_s^{-1}$ (equivalently $\overline t_s=t_s^{-1}$). Then the Kazhdan-Lusztig basis $C^â²_w$ is defined as the only basis of â
stable by the bar involution and congruent to $t_w$ modulo $â_{wâ W}Îâ».t_w$.
The basis $C^â²_w$ can be computed as follows. We define elements $R_{x,y}$ of â€[Î]
by $T_yâ»Â¹=â_x \overline{R_{x,yâ»Â¹}} q_xâ»Â¹T_x$. We then define inductively the Kazhdan-Lusztig polynomials (in this general context we should say the Kazhdan-Lusztig elements of â€[Î]
, which belong to the subalgebra of â€[Î]
generated by the qâ
) by $P_{x,w}=Ï_{â€(q_w/q_x)^Âœ} (â_{x<yâ€w}R_{x,y}P_{y,w})$ where Ï
is the truncation: $Ï_â€\nu â_{γâ Î} a_γγ= â_{γâ€\nu}a_γγ$; the induction is thus on decreasing x
for the Bruhat order and starts at $P_{w,w}=1$. We have then $C^â²_w=â_y q_w^{-1/2} P_{y,w}T_y$.
The Chevie code for the Kazhdan-Lusztig bases C
, D
, C'
, D'
, was originally written by Andrew Mathas around 1994, who also contributed to the design of bases of Iwahori-Hecke algebras and implemented some other bases, such as the Murphy basis. Our code evolved from that code. The code for the case of unequal parameters was written around 1999 by F.Digne and J.Michel. The Kazhdan-Lusztig bases are computed starting from the Câ²
basis.
When the â€[Î]
is a Laurent polynomial ring the bar operation is taking the inverse of the variables, and truncation is keeping terms of degree smaller or equal to that of Μ
. It is possible to use arbitrary groups Î
as long as methods bar
:$â_{γâ Î} a_γγ⊠â_{γâ Î} a_γγâ»Â¹$, positive_part
: $â_{γâ Î} a_γγ⊠â_{γ⥠1} a_γγ$ and negative_part
: $â_{γâ Î} a_γγ ⊠â_{γ†1} a_γγ$ have been defined on â€[Î]
. These operations will be used internally by the programs to compute Kazhdan-Lusztig bases.
We provide also functionality to study the Kazhdan-Lusztig left cells (for the equal-parameter Hecke algebra).
julia> W=coxgroup(:H,3)
Hâ
julia> c=left_cells(W)
22-element Vector{LeftCell{FiniteCoxeterGroup{Perm{Int16},Cyc{Int64}}}}:
LeftCell<Hâ: duflo= character=Ïâââ>
LeftCell<Hâ: duflo=123 character=Ïââââ
>
LeftCell<Hâ: duflo=(15) character=Ïâ
ââ
>
LeftCell<Hâ: duflo=(10) character=Ïâ
ââ
>
LeftCell<Hâ: duflo=(14) character=Ïâ
ââ
>
LeftCell<Hâ: duflo=7 character=Ïâ
ââ
>
LeftCell<Hâ: duflo=(12) character=Ïâ
ââ
>
LeftCell<Hâ: duflo=(9,12) character=Ïâ
ââ>
LeftCell<Hâ: duflo=(5,11) character=Ïâ
ââ>
LeftCell<Hâ: duflo=13 character=Ïâ
ââ>
â®
LeftCell<Hâ: duflo=(8,13) character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=(1,15) character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=3 character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=2 character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=1 character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=6 character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=(13) character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=(11) character=Ïâââ+Ïâââ>
LeftCell<Hâ: duflo=9 character=Ïâââ+Ïâââ>
see also the functions elements
, character
, representation
and Wgraph
for left cells. The operations length
, in
(which refer to elements
) and ==
(which compares Duflo involutions) are also defined for left cells. When character(c)
has been computed, then c.a
also has been bound which holds the common value of Lusztig's a
-function for the elements of c
and the irreducible constituents of character(c)
.
finally, benchmarks
julia> function test_kl(W)
q=Pol(); H=hecke(W,q^2,rootpara=q)
C=Cpbasis(H); T=Tbasis(H)
[T(C(w)) for w in elements(W)]
end
test_kl (generic function with 1 method)
julia> @btime test_kl(coxgroup(:F,4)); #julia 1.8
1.332 s (13934392 allocations: 2.27 GiB)
in GAP3 the following function takes 11s for W=F4
test_kl:=function(W)local q,H,T,C;
q:=X(Rationals);H:=Hecke(W,q^2,q);
T:=Basis(H,"T");C:=Basis(H,"C'");
List(Elements(W),e->T(C(e)));
end;
Another benchmark:
function test_kl2(W)
el=elements(W)
[KLPol(W,x,y) for x in el, y in el]
end
test_kl2 (generic function with 1 method)
julia>@btime test_kl2(coxgroup(:F,4)); # julia 1.9
4.307 s (42294917 allocations: 5.24 GiB)
in GAP3 the following function takes 42s for F4
test_kl2:=function(W)local el;
el:=Elements(W);
List(el,x->List(el,y->KazhdanLusztigPolynomial(W,x,y)));
end;
Chevie.KL.AsymptoticAlgebra
â MethodAsymptoticAlgebra(W,i)
The asymptotic algebra A
associated to the algebra H=Hecke(W,q)
is an algebra with basis $\{tâ\}_{xâ W}$ and structure constants $t_xt_y=\sum_z γ_{x,y,z} t_z$ given by: let $h_{x,y,z}$ be the coefficient of $C_x C_y$ on $C_z$. Then $h_{x,y,z}=γ_{x,y,z^{-1}} q^{a(z)/2}+$lower terms, where $q^{a(z)/2}$ is the maximum over x,y
of the degree of $h_{x,y,z}$.
The algebra A
is the direct product of the subalgebras $A_{\mathcal C}$ generated by the elements $\{t_x\}_{xâ{\mathcal C}}$, where $\mathcal C$ runs over the two-sided cells of W
. If $\mathcal C$ is the i
-th two-sided cell of W
, the command AsymptoticAlgebra(W,i)
returns the algebra $A_{\mathcal C}$. Note that the function a(z)
is constant over a two-sided cell, equal to the common value of the a
-function attached to the characters of the two-sided cell (see Character
for left cells).
julia> W=coxgroup(:G,2)
Gâ
julia> A=AsymptoticAlgebra(W,1)
AsymptoticAlgebra(Gâ,1) dim.10
julia> b=basis(A)
10-element Vector{AlgebraElt{AsymptoticAlgebra, Int64}}:
tâ
tââ
tâââ
tââââ
tâââââ
tâ
tââ
tâââ
tââââ
tâââââ
julia> b*permutedims(b)
10Ã10 Matrix{AlgebraElt{AsymptoticAlgebra, Int64}}:
tâ 0 tâââ ⊠0 tââââ 0
tââ 0 tââ+tââââ 0 tâââ+tâââââ 0
tâââ 0 tâ+tâââ+tâââââ 0 tââ+tââââ 0
tââââ 0 tââ+tââââ 0 tâ+tâââ 0
tâââââ 0 tâââ 0 tââ 0
0 tââ 0 ⊠tâââ 0 tâââââ
0 tâ+tâââ 0 tââ+tââââ 0 tââââ
0 tââ+tââââ 0 tâ+tâââ+tâââââ 0 tâââ
0 tâââ+tâââââ 0 tââ+tââââ 0 tââ
0 tââââ 0 tâââ 0 tâ
julia> CharTable(A)
CharTable(AsymptoticAlgebra(Gâ,1) dim.10)
âââââââ¬ââââââââââââââââââââââââââââââââââââââââ
â â2 12 212 1212 21212 1 21 121 2121 12121â
âââââââŒââââââââââââââââââââââââââââââââââââââââ€
âÏâ²ââââ. . . . . 1 . -1 . 1â
âÏâââ â1 . 2 . 1 1 . 2 . 1â
âÏâââ â1 . . . -1 1 . . . -1â
âÏâ³ââââ1 . -1 . 1 . . . . .â
âââââââŽââââââââââââââââââââââââââââââââââââââââ
Chevie.KL.LeftCell
â MethodLeftCell(W,w)
returns a record describing the left cell of W
for hecke(W,q)
containing element w
.
julia> W=coxgroup(:E,8)
Eâ
julia> LeftCell(W,W((1:8)...))
LeftCell<Eâ: duflo=(42,43) character=Ïââ
ââ>
Chevie.Chars.representation
â Methodrepresentation(c::LeftCell,H)
returns matrices giving the representation of the Iwahori-Hecke algebra H
on the left cell c
.
julia> W=coxgroup(:H,3)
Hâ
julia> c=left_cells(W)[3]
LeftCell<Hâ: duflo=(15) character=Ïâ
ââ
>
julia> @Mvp q;H=hecke(W,q)
hecke(Hâ,q)
julia> representation(c,H)
3-element Vector{Matrix{Mvp{Int64, Rational{Int64}}}}:
[-1 0 ⊠0 0; 0 -1 ⊠0 -qœ; ⊠; 0 0 ⊠q 0; 0 0 ⊠0 q]
[-1 -qœ ⊠0 0; 0 q ⊠0 0; ⊠; 0 0 ⊠-1 0; 0 -qœ ⊠0 -1]
[q 0 ⊠0 0; -qœ -1 ⊠0 0; ⊠; 0 0 ⊠q 0; 0 0 ⊠0 -1]
Chevie.HeckeAlgebras.Tbasis
â MethodTbasis(h::HeckeCpElt)
converts the element h
of the C'
basis to the T
basis.
For one-parameter Hecke algebras, we use the formulae: $C'_w=Σ_{yâ€w}P_{y,w}(q)q^{-l(w)/2}T_y$ and if $sw<w$ then
$C'â C'_{sw}=C'_w+Σ_{y<sw}ÎŒ(y,sw)C'_y=Σ_{vâ€w}Όᵥ Táµ¥$
where
$Όᵥ=P_{v,w}(q)q^{-l(w)/2}+Σ_{vâ€yâ€sw}ÎŒ(y,sw)P_{v,y}(q)q^{-l(y)/2}$
It follows that if $deg(Όᵥ)>=-l(v)$ then $deg(Όᵥ)=-l(v)$ with leading coefficient $Ό(v,sw)$ (this happens exactly for $y=v$ in the sum which occurs in the formula for $Όᵥ$).
julia> W=coxgroup(:B,3)
Bâ
julia> @Pol v;H=hecke(W,v^2,rootpara=v)
hecke(Bâ,v²,rootpara=v)
julia> C=Cpbasis(H); Tbasis(C(1,2))
vâ»Â²T.+vâ»Â²Tâ+vâ»Â²Tâ+vâ»Â²Tââ
For general Hecke algebras, we follow formula 2.2 in Lusztig1983
$\overline{P_{x,w}}-P_{x,w}=â_{x<yâ€w} R_{x,y} P_{y,w}$
where $R_{x,y}=\overline{(t_{y^{-1}}^{-1}|t_x)}$ where t
is the basis with parameters $q_s,-q_s^{-1}$. It follows that $P_{x,w}$ is the negative part of $â_{x<yâ€w} R_{x,y} P_{y,w}$ which allows to compute it by induction on l(w)-l(x)
. The code is based on GAP3/Chevie code of Jean Michel and François Digne (1999).
Chevie.KL.Cbasis
â MethodCbasis(H::HeckeAlgebra)
returns a function which gives the C
-basis of the Iwahori-Hecke algebra H
. The algebra H
should have the functon rootpara
defined. This basis is defined as follows (see e.g. (5.1)Lusztig1985). Let W
be the underlying Coxeter group. For x,y â W
let $P_{x,y}$ be the corresponding KazhdanâLusztig polynomial. If $\{T_w ⣠wâ W\}$ denotes the usual T-basis, then $C_x=\sum_{y\le x}(-1)^{l(x)-l(y)}P_{y,x}(q^{-1})q_x^{1/2}q_y^{-1} T_y$ for x â W
. For example, we have Câ=qââ»ÂœTâ-qâÂœTâ
for s â S
. Thus, the transformation matrix between the T
-basis and the C
-basis is lower unitriangular, with monomials in qâ
along the diagonal. In the one-parameter case (all qâ
are equal to v²
) the multiplication rules for the C
basis are given by:
Cââ
Câ =-(v+vâ»Â¹)Câ
, if sx<x
, and Cââ+ââ ÎŒ(t,x)Câ
if sx>x
.
where the sum is over all t
such that t<x
, l(t)
and l(x)
have different parity and st<t
. The coefficient Ό(t,x)
is the coefficient of degree (l(x)-l(t)-1)/2
in the KazhdanâLusztig polynomial $P_{x,t}$.
The returned function can take as argument a list of integers (as a vector or as a list of arguments), representing a Coxeter word, an element of the Coxeter group, or a Hecke element (converted then to the C'
basis).
julia> W=coxgroup(:B,3);H=hecke(W,Pol(:v)^2)
hecke(Bâ,v²)
julia> T=Tbasis(H);C=Cbasis(H);T(C(1))
-vT.+vâ»Â¹Tâ
julia> C(T(1))
v²C.+vCâ
We can also compute character values on elements in the C
-basis as follows:
julia> ref=reflrep(H)
3-element Vector{Matrix{Pol{Int64}}}:
[-1 0 0; -v² v² 0; 0 0 v²]
[v² -2 0; 0 -1 0; 0 -v² v²]
[v² 0 0; 0 v² -1; 0 0 -1]
julia> c=CharTable(H).irr[charinfo(W).extRefl[[2]],:]
1Ã10 Matrix{Pol{Int64}}:
3 2v²-1 vâž-2v⎠-3v¹² 2v²-1 v⎠vâŽ-2v² -vⶠvâŽ-v² 0
julia> hcat(char_values.(C.(classreps(W)),Ref(c))...)
1Ã10 Matrix{Pol{Int64}}:
3 -v-vâ»Â¹ 0 0 -v-vâ»Â¹ 2 0 0 1 0
Chevie.KL.Cpbasis
â MethodCpbasis(H)
returns a function which gives the C'
-basis of the Iwahori-Hecke algebra H
(see (5.1)Lusztig1985). This basis is defined by $C'_x= â_{yâ€x}P_{y,x}q_x^{-1/2} T_y$ for x â W
. We have $C'_x=(-1)^{l(x)}alt(C_x)$ for all x â W
(see alt
). The returned function can take as argument a list of integers (as a vector or as a list of arguments), representing a Coxeter word, an element of the Coxeter group, or a Hecke element (converted then to the C'
basis).
julia> W=coxgroup(:B,2);@Pol v;H=hecke(W,[v^4,v^2])
hecke(Bâ,Pol{Int64}[vâŽ, v²])
julia> Cp=Cpbasis(H);h=Cp(1)^2
(v²+vâ»Â²)Câ²â
julia> k=Tbasis(h)
(1+vâ»âŽ)T.+(1+vâ»âŽ)Tâ
julia> Cp(k)
(v²+vâ»Â²)Câ²â
Chevie.KL.KLPol
â MethodKLPol(W,y,w)
returns the Kazhdan-Lusztig polynomial P_{y,w}
of W
.
To compute Kazhdan-Lusztig polynomials in the one-parameter case it still seems best to use the recursion formula in the original paper KL79. We first perform a series of checks on the pair (y,w)
to see if the computation of the corresponding polynomial can be reduced to a similar calculation for elements of smaller length. In particular, we reduce to the case of critical pairs (see KL.critical_pair
), and whenever the polynomial corresponding to such a pair is computed, the value is stored in a Dict
W.klpol
in the underlying Coxeter group.
julia> W=coxgroup(:B,3)
Bâ
julia> map(i->map(x->KLPol(W,one(W),x),elements(W,i)),1:nref(W))
9-element Vector{Vector{Pol{Int64}}}:
[1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, x+1, 1, 1]
[x+1, 1, x+1, x+1, 1, 1, x+1, 1]
[x²+1, 1, x+1, x+1, x+1, 1, 1]
[1, 1, x²+x+1, x+1, x+1]
[1, x+1, x²+1]
[1]
Our code is based on Meinolf Geck's code for GAP3/Chevie.
Chevie.KL.LusztigAw
â MethodLusztigAw( <W>, <w>)
For <w> an element of the Coxeter groups <W>, this function returns the coefficients on the irreducible characters of the virtual Character cA_w defined in 5.11.6 Lusztig1985. This character has the property that the corresponding almost character is integral and positive.
julia> W=coxgroup(:G,2)
Gâ
julia> l=LusztigAw(W,W(1))
6-element Vector{Int64}:
0
0
0
1
1
1
julia> sum(l.*map(i->almostchar(W,i),eachindex(l)))
[Gâ]:<Ïâ³âââ>+<Ïâââ>+<Ïâââ>
Chevie.KL.Lusztigaw
â MethodLusztigaw(W,w)
For w
an element of the Coxeter groups W
, this function returns the coefficients on the irreducible characters of the virtual Character ca_w
defined in 5.10.2 Lusztig1985. This character has the property that the corresponding almost character is integral and positive.
julia> W=coxgroup(:G,2)
Gâ
julia> l=Lusztigaw(W,W(1))
6-element Vector{Int64}:
0
0
1
0
1
1
julia> sum(l.*map(i->almostchar(W,i),eachindex(l)))
[Gâ]:<Ïâ²âââ>+<Ïâââ>+<Ïâââ>
Chevie.KL.Wgraph
â MethodWgraph(W::CoxeterGroup,i)
return the W-graph for the i
-th irreducible representation of W
(or of the 1-parameter Hecke algebra of W
).
Only implemented for irreducible groups of type E
, F
or H
.
Chevie.KL.Wgraph
â MethodWgraph(c::LeftCell)
return the W-graph for a left cell for the one-parameter Hecke algebra of a finite Coxeter group.
Chevie.KL.character
â Methodcharacter(c)
Returns a list l
such that the character of c.group
afforded by the left cell c
is sum(CharTable(c.group).irr[l])
.
julia> c=left_cells(coxgroup(:G,2))[3]
LeftCell<Gâ: duflo=2 character=Ïâââ+Ïâ²âââ+Ïâââ>
julia> character(c)
3-element Vector{Int64}:
3
5
6
Chevie.KL.critical_pair
â Methodcritical_pair(W, y, w)
returns the critical pair zâ€w associated to yâ€w (see Alvis1987).
Let â
(resp. â
) be the left (resp. right) descent set. A pair of elements yâ€w of W is called critical if â(y)â â(w)
and â (y)â â (w)
. If yâ€w is not critical, y can be multiplied from the left (resp. the right) by an element of â(w)
(resp. â (w)
) which is not in â (y)
(resp. â (y)
) until we get a critical pair zâ€w. The function returns z. If yâ€w then yâ€zâ€w.
The significance of this construction is that KLPol(W,y,w)==KLPol(W,z,w)
julia> W=coxgroup(:F,4)
Fâ
julia> w=longest(W)*gens(W)[1];length(W,w)
23
julia> y=W(1:4...);length(W,y)
4
julia> cr=KL.critical_pair(W,y,w);length(W,cr)
16
julia> Pol(:x);KLPol(W,y,w)
Pol{Int64}: x³+1
julia> KLPol(W,cr,w)
Pol{Int64}: x³+1
Chevie.KL.left_cells
â Functionleft_cells(W[,i])
left cells of W
[in i
-th 2-sided cell] for the 1-parameter Hecke algebra hecke(W,q)
The program uses precomputed data(see Geck-Halls 2014) for exceptional types and for type :A
, so is quite fast for these types (it takes 13 seconds to compute the 101796 left cells for type Eâ
). For other types, left cells are computed from first principles, thus computing many Kazhdan-Lusztig polynomials. It takes 30 seconds to compute the left cells of Dâ
, for example.
julia> W=coxgroup(:G,2)
Gâ
julia> left_cells(W)
4-element Vector{LeftCell{FiniteCoxeterGroup{Perm{Int16},Int64}}}:
LeftCell<Gâ: duflo= character=Ïâââ>
LeftCell<Gâ: duflo=12 character=Ïâââ>
LeftCell<Gâ: duflo=2 character=Ïâââ+Ïâ²âââ+Ïâââ>
LeftCell<Gâ: duflo=1 character=Ïâââ+Ïâ³âââ+Ïâââ>
Printing such a record displays the character afforded by the left cell and its Duflo involution; the Duflo involution r
is printed as a subset I
of 1:nref(W)
such that r=longest(reflection_subgroup(W,I))
, see describe_involution
.
If a second argument i
is given, the program returns only the left cells which are in the i
-th two-sided cell, that is whose character is in the i
-th family of W
(see Families
).
julia> W=coxgroup(:G,2);
julia> left_cells(W,1)
2-element Vector{LeftCell{FiniteCoxeterGroup{Perm{Int16},Int64}}}:
LeftCell<Gâ: duflo=2 character=Ïâââ+Ïâ²âââ+Ïâââ>
LeftCell<Gâ: duflo=1 character=Ïâââ+Ïâ³âââ+Ïâââ>
Chevie.KL.minimal_word
â Methodminimal_word(cond::Function,gens::Vector,e;action::Function=^)
returns minimal word w
such that composition(gens[w]) applied to e
satifies cond
Chevie.KL.Ό
â MethodÎŒ(W, y, w)
highest coefficient of KLPol(W,y,w)
LΌ
returns the coefficient of highest possible degree (l(w)-l(y)-1)/2
of KLPol(W,y,w)
. It is 0
unless yâ€w
for the Bruhat order.
Chevie.Nf
â ModuleNumber fields are the finite extensions of â
. The only ones that we can handle at the moment are subfields of cyclotomic fields, that is whose elements are Cyc
s; they are also characterized as the number fields K
such that Gal(K/â)
is abelian. For example, â (â5)
is a number field that is not cyclotomic but contained in the cyclotomic field â (ζâ
)
.
The default constructor for a number field takes some numbers as arguments and constructs the smallest number field containing its arguments.
julia> F=NF(E(5)) # the full cyclotomic field prints as CF
CF(5)
julia> K=NF(root(5)) # a subfield
NF(5,-1â
)
julia> conductor(K) # smallest n such that K is a subfield of CF(n)
5
julia> E(5)+E(5,-1) in NF(root(5)) # test if an element is in the subfield
true
A number field K
is printed by given the conductor of the smallest cyclotomic field F
containing it, and generators of the stabilizer of K
in the galois group of F
. Above NF(5,-1â
)
represents the subfield of CF(5)
stable by complex conjugacy.
julia> elements(galois(F))
4-element Vector{Chevie.Nf.NFAut}:
Aut(CF(5),1â
)
Aut(CF(5),2â
)
Aut(CF(5),-1â
)
Aut(CF(5),-2â
)
The element of the galois group of CF(5)
printed -2â
acts by raising the fifth roots of unity to the power -2. Thus -1â
represents complex conjugacy.
julia> NF(root(3),root(5)) # here the stabilizer needs 2 generators
NF(60,-11ââ,-1ââ)
Chevie.Nf.Aut
â MethodAut(F::NumberField,k::Union{Integer,Mod})
The Galois automorphism Ïâ
of the cyclotomic field CF(n)
raises n
-th roots of unity to the power k
; it exists for k
prime to n
. If F
is a subfield of CF(n)
, the elements of the orbit of Ïâ
modulo the stabilizer of F
in the Galois group galois(CF(n))
have same restriction to F
. An automorphism of F
is represented by a canonical representative Ïâ
of this orbit. This is the result of Aut(F,k)
. The number k
can be given as an integer or as Mod(k,n)
.
julia> F=NF(root(5))
NF(5,-1â
)
julia> s=Aut(F,3)
Aut(NF(5,-1â
),2â
)
julia> root(5)^s # action of s on a Cyc
Cyc{Int64}: -â5
Chevie.Nf.CF
â MethodCF(N::Integer)
the cyclotomic field generated by the N
-th roots of unity.
Chevie.Nf.LenstraBase
â MethodLenstraBase(n,stab,supergroup)
returns a list [bâ,âŠ,bâ]
of Mod(-,n)
lists, each báµ¢
describing the cyclotomic βᵢ=â_{jâ báµ¢} ζâʲ
such that the βᵢ
form a base of the integer ring of the number field NF(n,stab)
.
supergroup
is a group containing stab
; the base is chosen such that the group of supergroup
acts on it, as far as this is possible.
Note: the báµ¢
are in general not sorted, since báµ¢[1]
is often an element of zumbroich_basis(n)
.
stab
must not contain the stabilizer of a proper cyclotomic subfield of CF(n)
.
julia> Nf.LenstraBase(24,Group([Mod(19,24)]),Group([Mod(19,24)]))
4-element Vector{Vector{Mod{UInt64}}}:
[1ââ, -5ââ]
[8ââ]
[11ââ, -7ââ]
[-8ââ]
julia> Nf.LenstraBase(24,Group([Mod(19,24)]),Group([Mod(19,24),Mod(5,24)]))
4-element Vector{Vector{Mod{UInt64}}}:
[1ââ, -5ââ]
[5ââ, -1ââ]
[8ââ]
[-8ââ]
julia> Nf.LenstraBase(15,Group([Mod(4,15)]),Group(Mod.(prime_residues(15),15)))
4-element Vector{Vector{Mod{UInt64}}}:
[1ââ
, 4ââ
]
[2ââ
, -7ââ
]
[7ââ
, -2ââ
]
[-4ââ
, -1ââ
]
Chevie.Nf.NF
â MethodNF(gens...)
or NF(gens::AbstractVector)
returns the smallest number field containing the elements gens
, which may be Cyc
, Root1
, Integer
or Rational{<:Integer}
.
julia> NF(E(3),root(5))
NF(15,4ââ
)
julia> NF([E(3),root(5)])
NF(15,4ââ
)
Chevie.Nf.NF
â MethodNF(N::Integer, stab::Group{<:Mod})
fixed field of the subgroup stab
of galois(CF(N))
in CF(N)
. stab
should not inject in the multiplicative group of a proper divisor of N
.
Chevie.Nf.gens_prime_residues
â Methodgens_prime_residues(n::Integer)
generators of multiplicative group (†/n)ˣ
For each odd prime p
there is one generator, corresponding to a primitive root of the subgroup (†/nâ)Ë£
of the multiplicative group (†/n)ˣ
, where nâ
is the highest power of p
dividing n
. For p=2
, we have one generator unless nâ
is a multiple of 8, in which case there are two generators 5 and nâ-1
. The function returns a Dict
recording for each p
, the list of generators of (â€/nâ)Ë£
.
julia> Nf.gens_prime_residues( 24 )
Dict{Int64, Vector{Int64}} with 2 entries:
2 => [7, 13]
3 => [17]
CyclotomicNumbers.galois
â Methodgalois(F::NumberField)
Galois group of F
over â
the Galois group of F
, a number field of conductor n
, is the quotient of the Galois group of CF(n)
, isomorphic to the multiplicative group (â€/n)Ë£
, by the stabilizer of F
. It is given as a group of Galois automorphisms (see Aut
).
julia> K=CF(5)
CF(5)
julia> F=NF(root(5))
NF(5,-1â
)
julia> galois(K)
Group(Chevie.Nf.NFAut[Aut(CF(5),2â
)])
julia> elements(galois(K))
4-element Vector{Chevie.Nf.NFAut}:
Aut(CF(5),1â
)
Aut(CF(5),2â
)
Aut(CF(5),-1â
)
Aut(CF(5),-2â
)
julia> elements(galois(F))
2-element Vector{Chevie.Nf.NFAut}:
Aut(NF(5,-1â
),1â
)
Aut(NF(5,-1â
),2â
)
Chevie.Cosets
â ModuleLet R
be a root system in the real vector space V
. We say that Fââ GL(V)
is an automorphism of R
if it permutes R
and is of finite order (finite order is automatic if R
generates V
). It follows by chap. VI, §1.1, lemme 1 Bourbaki1968 that the dual Fâ*â GL(V*)
permutes the coroots R*â V*
; thus Fâ
normalizes the reflection group W
associated to R
, that is w⊠FâwFââ»Â¹
is an automorphism of W
. Thus we get a reflection coset WFâ
, which we call a Coxeter coset.
The motivation for introducing Coxeter cosets comes from automorphisms of algebraic reductive groups, giving rise to non-split reductive groups over finite fields. Let ð
be a connected reductive algebraic group ð
over an algebraic closure ðœÌ_q
of a finite field ðœ_q
, defined over ðœ_q
; this corresponds to a Frobenius endomorphism F
so that the finite group of rational points ð(ðœ_q)
identifies to the subgroup ð^F
of fixed points under F
.
Let ð
be a maximal torus of ð
, and Ί
(resp. Ί*
) be the roots (resp. coroots) of ð
with respect to ð
in the character group X(ð)
(resp. the group of one-parameter subgroups Y(ð)
). Then ð
is determined up to isomorphism by (X(ð),Ί,Y(ð),Ί*)
; this corresponds to give a root system in the vector space V=â â X(ð)
and a rational reflection group W=N_ð(ð)/ð
acting on it.
If ð
is F
-stable the Frobenius endomorphism F
acts also naturally on X(T)
and defines thus an endomorphism of V
, which is of the form q Fâ
, where Fââ GL(V)
is of finite order and normalizes W
. We get thus a Coxeter coset WFââGL(V)
. The data (X(ð), Ί, Y(ð), Ί*, Fâ)
, and the integer q
completely determine up to isomorphism the associated reductive finite group ð^F
. Thus these data is a way of representing in the essential information which determines a finite reductive group. Indeed, all properties of Chevalley groups can be computed from that datum: symbols representing characters, conjugacy classes, and finally the whole character table of ð^F
.
It turns out that many interesting objects attached to this datum depend only on (V,W, Fâ)
: the order of the maximal tori, the fake degrees, the order of ð^F
, symbols representing unipotent characters, Deligne-Lusztig induction in terms of almost characters, the Fourier matrix relating characters and almost characters, etc⊠(see, e.g., Broue-Malle-Michel1993). It is thus possible to extend their construction to non-crystallographic groups (or even to more general complex reflection groups, see spets
); this is why we did not include a root system in the definition of a reflection coset. However, unipotent conjugacy classes for instance depend on the root system.
We assume now that ð
is contained in an F
-stable Borel subgroup of ð
. This defines an order on the roots, and there is a unique element Ïâ W Fâ
, the reduced element of the coset, which preserves the set of positive roots. It thus defines a diagram automorphism, that is an automorphism of the Coxeter system (W,S)
. This element is stored in the component .phi
of the coset record. It may be defined without mentioning the roots, as follows: (W,Fâ(S))
is another Coxeter system, thus conjugate to S
by a unique element of W
, thus there is a unique element Ïâ WFâ
which stabilizes S
(a proof follows from Theoreme 1, chap. V, §3 Bourbaki1968). We consider thus cosets of the form WÏ
where Ï
stabilizes S
. The coset W Ï
is completely defined by the permutation .phi
when ð
is semi-simple â- equivalently when Ί
generates V
; in this case we just need to specify phi
to define the coset.
There is a slight generalisation of the above setup, covering in particular the case of the Ree and Suzuki groups. We consider ð^F
where F
not a Frobenius endomorphism, but an isogeny such that some power F^n
is a Frobenius endomorphism. Then F
still defines an endomorphism of V
which normalizes W
; we define a real number q
such that F^n
is attached to an ðœ_{qâ¿}
-structure. Then we still have F=q Fâ
where Fâ
is of finite order but q
is no more an integer. Thus Fââ GL(Vâ â)
but Fââ GL(V)
. For instance, for the Ree and Suzuki groups, Fâ
is an automorphism of order 2
of W
, which is of type Gâ
, Bâ
or Fâ
, and q=â2
for Bâ
and Fâ
and q=â3
for Gâ
This can be constructed starting from root systems for Gâ
, Bâ
or Fâ
where all the roots have the same length. This kind of root system is not crystallographic. Such non-crystallographic root systems exist for all finite Coxeter groups such as the dihedral groups, Hâ
and Hâ
. We will call here Weyl cosets the cosets corresponding to rational forms of algebraic groups, which include thus some non-rational roots systems for Bâ
, Gâ
and Fâ
.
Spets
We now extend the above notions to general complex reflection groups. Let Wâ GL(V)
be a complex reflection group on the vector space V
. Let Ï
be an element of GL(V)
which normalizes W
. Then the coset WÏ
is called a reflection coset.
A reference for these cosets is Broue-Malle-Michel 1999. When W
is a so-called Spetsial group, they are the basic object for the construction of a Spetses, which is an object attached to a complex reflection group from which one can derive combinatorially some attributes shared with finite reductive groups, like unipotent degrees, etcâŠ.
We say that a reflection coset is irreducible if W
is irreducible. A general coset is a direct product of descents of scalars, which is the case where Ï
is transitive on the irreducible components of W
. The irreducible cosets have been classified in Broue-Malle-Michel 1999: up to multiplication of Ï
by a scalar, there is usually only one or two possible cosets for a given irreducible group.
We deal only with finite order cosets, that is, we assume there is a (minimal) integer ÎŽ
such that (WÏ)^ÎŽ=W
. Then the group generated by W
and Ï
is finite, of order ÎŽ|W|
.
A subset C
of a WÏ
is called a conjugacy class if one of the following equivalent conditions is fulfilled:
C
is the orbit of an element inWÏ
under the conjugation action ofW
.C
is a conjugacy class ofâšW,Ïâ©
contained inWÏ
.The set
{wâ W|wÏâ C}
is aÏ
-conjugacy class ofW
(two elements
v,wâ W
are called Ï
-conjugate, if and only if there exists xâ W
with v=xwÏ(xâ»Â¹)
).
An irreducible character of âšW,Ïâ©
has some non-zero values on WÏ
if and only if its restriction to W
is irreducible. Further, two characters Ïâ
and Ïâ
which have same irreducible restriction to W
differ by a character of the cyclic group âšÏâ©
(which identifies to the quotient âšW,Ïâ©/W
). A set containing one extension to âšW,Ïâ©
of each Ï
-invariant character of W
is called a set of irreducible characters of WÏ
. Two such characters are orthogonal for the scalar product on the class functions on WÏ
given by $âšÏ,Ïâ©:=|W|¹â_{wâ W}Ï(wÏ)\overline{Ï(wÏ)}.$ For rational groups (Weyl groups), Lusztig has defined a choice of a set of irreducible characters for WÏ
(called the preferred extensions), but for more general reflection cosets we have made some rather arbitrary choices, which however have the property that their values lie in the smallest possible field.
The character table of WÏ
is the table of values of a set of irreducible characters on the conjugacy classes.
A subcoset LwÏ
of WÏ
is given by a reflection subgroup L
of W
and an element w
of W
such that wÏ
normalizes L
.
We then have a natural notion of restriction of class functions on WÏ
to class functions on LwÏ
as well as of induction in the other direction. These maps are adjoint with respect to the scalar product defined above (see Broue-Malle-Michel 1999).
In this package the most general construction of a reflection coset is by starting from a reflection datum, and giving in addition the matrix F
of the map Ï:Vâ V
(see the command spets
). However, at present, general cosets are only implemented for groups represented as permutation groups on a set of roots, and it is required that the automorphism given preserves this set up to a scalar (it is allowed that these scalars depend on the pair of an irreducible component and its image). It is also allowed to specify Ï
by the permutation it induces on the roots; in this case it is assumed that Ï
acts trivially on the orthogonal of the roots, but the roots could be those of a parent group, generating a larger space. Thus in any case we have a permutation representation of âšW,Ïâ©
and we consider the coset to be a set of permutations.
Reflection cosets are implemented in by a struct
which points to a reflection group record and has additional fields holding F
and the corresponding permutation phi
. In the general case, on each component of W
which is a descent of scalars, F
will permute the components and differ by a scalar on each component from an automorphism which preserves the roots. In this case, we have a permutation phi
and a scalar
which is stored for that component.
The most common situation where cosets with non-trivial phi
arise is as sub-cosets of reflection groups. Here is an "exotic" example, see the next chapter for more classical examples involving Coxeter groups.
julia> W=complex_reflection_group(14)
Gââ
julia> R=reflection_subgroup(W,[2,4])
Gââââââ=Gâ
julia> RF=spets(R,W(1)) # should be ²Gâ
(â6)
Gââââââ=²Gâ
julia> diagram(RF)
Ï acts as (1,2) on the component below
⢠ââ⢠Gâ
1 2
julia> degrees(RF)
2-element Vector{Tuple{Int64, Cyc{Int64}}}:
(6, 1)
(12, -1)
The last line shows for each reflection degree the corresponding factor of the coset, which is the scalar by which Ï
acts on the corresponding fundamental reflection invariant. The factors characterize the coset.
A spets by default is printed in an abbreviated form which describes its type, as above (Gâ
twisted by 2, with a Cartan matrix which differs from the standard one by a factor of â6
). The function repr
gives a form which could be input back in Julia. With the same data as above we have:
julia> print(RF)
spets(reflection_subgroup(complex_reflection_group(14),[2, 4]),perm"(1,3)(2,4)(5,9)(6,10)(7,11)(8,12)(13,21)(14,22)(15,23)(16,24)(17,25)(18,26)(19,27)(20,28)(29,41)(30,42)(31,43)(32,44)(33,45)(34,46)(35,47)(36,48)(37,49)(38,50)(39,51)(40,52)(53,71)(54,72)(55,73)(56,74)(57,75)(58,76)(59,77)(60,78)(62,79)(64,80)(65,81)(66,82)(67,69)(68,70)(83,100)(84,101)(85,102)(87,103)(89,99)(90,97)(91,98)(92,96)(93,104)(94,95)(105,113)(106,114)(109,111)(110,112)(115,118)(116,117)(119,120)")
Conjugacy classes and irreducible characters of Coxeter cosets are defined as for general reflection cosets. For irreducible characters of Weyl cosets, we choose (following Lusztig) for each Ï
-stable character of W
a particular extension to a character of Wâ âšÏâ©
, which we will call the preferred extension. The character table of the coset WÏ
is the table of the restrictions to WÏ
of the preferred extensions. The question of finding the conjugacy classes and character table of a Coxeter coset can be reduced to the case of irreducible root systems R
.
The automorphism
Ï
permutes the irreducible components ofW
, andWÏ
is a direct product of cosets whereÏ
permutes cyclically the irreducible components ofW
. The preferred extension is defined to be the direct product of the preferred extension in each of these situations.Assume now that
WÏ
is a descent of scalars, that is the decomposition in irreducible componentsW=Wâà ⯠à Wâ
is cyclically permuted byÏ
. Then there are natural bijections from theÏ
-conjugacy classes ofW
to theÏáµ
-conjugacy classes ofWâ
as well as from theÏ
-stable characters ofW
to theÏáµ
-stable characters ofWâ
, which reduce the definition of preferred extensions onWÏ
to the definition forWâÏáµ
.Assume now that
W
is the Coxeter group of an irreducible root system.Ï
permutes the simple roots, hence induces a graph automorphism on the corresponding Dynkin diagram. IfÏ=1
then conjugacy classes and characters coincide with those of the Coxeter groupW
.
The nontrivial cases for crystallographic roots systems are (the order of Ï
is written as left exponent to the type): ²Aâ
, ²Dâ
, ³Dâ
, ²Eâ
. For non-crystallographic root systems where all the roots have the same length the additional cases ²Bâ
, ²Gâ
, ²Fâ
and ²Iâ(k)
arise.
In case
³Dâ
the groupWâ âšÏâ©
can be embedded into the Coxeter group of typeFâ
, which induces a labeling for the conjugacy classes of the coset. The preferred extension is chosen as the (single) extension with rational values.In case
²Dâ
the groupWâ âšÏâ©
is isomorphic to a Coxeter group of typeBâ
. This induces a canonical labeling for the conjugacy classes of the coset and allows to define the preferred extension in a combinatorial way using the labels (pairs of partitions) for the characters of the Coxeter group of typeBâ
.In the remaining crystallographic cases
Ï
identifies to-wâ
wherewâ
is the longest element ofW
. So, there is a canonical labeling of the conjugacy classes and characters of the coset by those ofW
. The preferred extensions are defined by describing the signs of the character values on-wâ
.
The most general construction of a Coxeter coset is by starting from a Coxeter datum specified by the matrices of simpleRoots
and simplecoroots
, and giving in addition the matrix F0Mat
of the map Fâ:Vâ V
(see the commands CoxeterCoset
and CoxeterSubCoset
). As for Coxeter groups, the elements of WÏ
are uniquely determined by the permutation they induce on the set of roots R
. We consider these permutations as elements
of the Coxeter coset.
Coxeter cosets are implemented by a struct which points to a Coxeter datum record and has additional fields holding F0Mat
and the corresponding element phi
. Functions on the coset (for example, classinfo
) are about properties of the group coset W Ï
; however, most definitions for elements of untwisted Coxeter groups apply without change to elements in W Ï
: e.g., if we define the length of an element wÏâ WÏ
as the number of positive roots it sends to negative ones, it is the same as the length of w
, i.e., Ï
is of length 0
, since Ï
has been chosen to preserve the set of positive roots. Similarly, the Coxeter word
describing wÏ
is the same as the one for w
, etcâŠ
We associate to a Coxeter coset WÏ
a twisted Dynkin diagram, consisting of the Dynkin diagram of W
and the graph automorphism induced by Ï
on this diagram (this specifies the group Wâ âšFâ©
, mentioned above, up to isomorphism). See the functions ReflectionType
, ReflectionName
and diagram
for Coxeter cosets.
Below is an example showing first how to not define, then how to define, the Weyl coset for a Suzuki group:
julia> W=coxgroup(:B,2)
Bâ
julia> spets(W,Perm(1,2))
ERROR: matrix F must preserve the roots
Stacktrace:
[1] error(::String) at ./error.jl:33
[2] spets(::Chevie.Weyl.FCG{Int16,Int64,PRG{Int64,Int16}}, ::Matrix{Int64}) at /home/jmichel/julia/Chevie/src/Cosets.jl:241 (repeats 2 times)
[3] top-level scope at REPL[19]:1
julia> W=coxgroup(:Bsym,2)
Bsymâ
julia> WF=spets(W,Perm(1,2))
²Bsymâ
julia> CharTable(WF)
CharTable(²Bsymâ)
âââââ¬ââââââââââ
â â 1 121â
âââââŒââââââââââ€
â2. â1 1 1â
â.11â1 -1 -1â
â1.1â. -â2 â2â
âââââŽââââââââââ
A subcoset HwÏ
of WÏ
is given by a reflection subgroup H
of W
and an element w
of W
such that wÏ
induces an automorphism of the root system of H
. For algebraic groups, this corresponds to a rational form of a reductive subgroup of maximal rank. For example, if WÏ
corresponds to the algebraic group ð
and H
is the trivial subgroup, the coset HwÏ
corresponds to a maximal torus ð_w
of type w
.
julia> W=coxgroup(:Bsym,2)
Bsymâ
julia> WF=spets(W,Perm(1,2))
²Bsymâ
julia> subspets(WF,Int[],W(1))
²Bsymâââ=ΊâŽâ
A subgroup H
which is a parabolic subgroup corresponds to a rational form of a Levi subgroup of ð
. The command twistings
gives all rational forms of such a Levi.
julia> W=coxgroup(:B,2)
Bâ
julia> twistings(W,[1])
2-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Bââââ=AÌâΊâ
Bââââ=AÌâΊâ
julia> twistings(W,[2])
2-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Bââââ=AâΊâ
Bââââ=AâΊâ
Notice how we distinguish between subgroups generated by short roots and by long roots. A general H
corresponds to a reductive subgroup of maximal rank. Here we consider the subgroup generated by the long roots in Bâ
, which corresponds to a subgroup of type SLâà SLâ
in SPâ
, and show its possible rational forms.
julia> W=coxgroup(:B,2)
Bâ
julia> twistings(W,[2,4])
2-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Bâââââ=AâÃAâ
Bâââââ=(AâAâ)
Chevie.Cosets.Frobenius
â MethodFrobenius(WF)(x,i=1)
If WF
is a Coxeter coset associated to the Coxeter group W
, Frobenius(WF)
returns a function F
such that x⊠F(x,i=1)
does the automorphism induced by WF.phi^i
on the object x
.
julia> W=coxgroup(:D,4)
Dâ
julia> WF=spets(W,Perm(1,2,4))
³Dâ
julia> u=unichar(W,2)
[Dâ]:<11->
julia> F=Frobenius(WF);F(u)
[Dâ]:<.211>
julia> F(u,-1)
[Dâ]:<11+>
julia> F(1)
4
Chevie.Cosets.graph_automorphisms
â Methodgraph_automorphisms(t::Vector{TypeIrred})
Given the refltype
of a finite Coxeter group, returns the group of all Graph automorphisms of t
as a group of permutations of indices(t)
.
julia> W=coxgroup(:D,4)
Dâ
julia> graph_automorphisms(refltype(W*W))
Group((1,5)(2,6)(3,7)(4,8),(1,2),(1,4))
Chevie.Cosets.spets
â Methodspets(s::String) builds a few of the exceptional spets
julia> spets("3G422")
³Gâââââ
julia> spets("2G5")
²Gâ
julia> spets("3G333")
Gâââââââââââââââ=³Gâââââââââââââââ
julia> spets("3pG333")
Gâââââââââââââââ=³Gâââââââââââââââ
julia> spets("4G333")
Gââââââââââââââââââ
âââââââââââ=âŽGâââââââââââââââââââââââââââ
Chevie.Cosets.spets
â Methodspets(W::ComplexReflectionGroup, F::Matrix=I(rank(W)))
This function returns a or a CoxeterCoset
or a Spets
. F
must be an invertible matrix, representing an automorphism of the vector space V
of dimension of dimension rank(W)
which for a finite Coxeter group induces an automorphism of the root system of parent(W)
, or for a more general complex reflection group just stabilizes W
.
The returned struct has in particular the following fields:
.W
: the group W
.F
: the matrix acting on V
which represents the unique element phi
in WF
which preserves the positive roots (for finite Coxeter groups) or some "canonical" representative of the coset for more general complex reflection groups.
.phi
: a Perm
, the permutation of the roots of W
induced by .F
(for general complex reflection groups this may be a permutation up to scalars) (also for Coxeter groups the element of smallest length in the NormalCoset W .phi
).
In the first example we create a Coxeter coset corresponding to the general unitary group GU_3(q)
over the finite field FF(q)
.
julia> W=rootdatum(:gl,3)
glâ
julia> gu3=spets(W,-reflrep(W,W()))
²AâΊâ
julia> F4=coxgroup(:F,4);D4=reflection_subgroup(F4,[1,2,16,48])
Fâââââââââââ=Dâââââââ
julia> spets(D4,[1 0 0 0;0 1 2 0;0 0 0 1;0 0 -1 -1])
Fâââââââââââ=³Dâââââââ
spets(W::ComplexReflectionGroup,p::Perm)
In this version F
is defined by the permutation of the simple roots it does.
julia> W=coxgroup(:A,3)
Aâ
julia> spets(W,Perm(1,3))
²Aâ
Chevie.Cosets.subspets
â Functionsubspets(WF,I,w=one(Group(WF)))
Returns the reflection subcoset of the coset WF
with group reflection_subgroup(Group(WF),I)
and torsion w*WF.phi
. w
must be an element of Group(WF)
such that w*WF.phi
normalizes the subroot system generated by I
.
julia> WF=spets(coxgroup(:F,4))
Fâ
julia> w=transporting_elt(Group(WF),[1,2,9,16],[1,9,16,2],ontuples);
julia> LF=subspets(WF,[1,2,9,16],w)
Fâââââââââââ=³Dâââââââ
julia> diagram(LF)
Ï acts as (2,3,4) on the component below
O 4
ï¿š
OâOâO Dâ
3 1 2
Chevie.Cosets.twistings
â Methodtwistings(W,I)
W
should be a complex reflection group.
The function returns the list, up to W
-conjugacy, of subspets of W
whose group is reflection_subgroup(W,I)
â- In the case of Weyl groups, it corresponds to representatives of the possible twisted forms of the reductive subgroup of maximal rank L
defined by reflection_subgroup(W,I)
.
W
could also be a coset WÏ
; then the subgroup L
must be conjugate to Ï(L)
for a rational form to exist. If Ï
normalizes L
, then the rational forms are classified by the the Ï
-classes of N_W(L)/L
.
julia> W=coxgroup(:E,6)
Eâ
julia> WF=spets(W,Perm(1,6)*Perm(3,5))
²Eâ
julia> twistings(W,2:5)
3-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Eââââââ
â=DâΊâ²
Eââââââ
â=³DâΊâ
Eââââââ
â=²DâΊâΊâ
julia> twistings(WF,2:5)
3-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
²Eââââ
âââ=²DâââââââΊâΊâ
²Eââââ
âââ=³DâââââââΊâ
²Eââââââ
â=DâΊâ²
Chevie.Cosets.twistings
â Methodtwistings(W)
W
should be a Coxeter group which is not a proper reflection subgroup of another reflection group (so that inclusion(W)==eachindex(roots(W))
). The function returns all spets
representing twisted forms of algebraic groups of type W
.
julia> twistings(coxgroup(:A,3)*coxgroup(:A,3))
8-element Vector{Spets{FiniteCoxeterGroup{Perm{Int16},Int64}}}:
AâÃAâ
AâòAâ
²AâÃAâ
²AâòAâ
(AâAâ)
²(AâAâ)
²(AâAâ)ââââââ
ââ
(AâAâ)ââââââ
ââ
julia> twistings(coxgroup(:D,4))
6-element Vector{Spets{FiniteCoxeterGroup{Perm{Int16},Int64}}}:
Dâ
²Dâââââââ
²Dâ
³Dâ
²Dâââââââ
³Dâââââââ
julia> W=rootdatum(:so,8)
soâ
julia> twistings(W)
2-element Vector{Spets{FiniteCoxeterGroup{Perm{Int16},Int64}}}:
Dâ
²Dâ
Chevie.Weyl.rootdatum
â Methodrootdatum(type::String or Symbol[,dimension or bond::Integer])
root datum from type. The known types are
2B2, 2E6, 2E6sc, 2F4, 2G2, 2I2, 3D4, 3D4sc, 3gpin8, CE6, CE7, E6, E6sc, E7, E7sc, E8, F4, G2, cso, csp, gl, gpin, gpin-, halfspin, pgl, pso, pso-, psp, psu, ree, sl, slmod, so, so-, sp, spin, spin-, su, suzuki, tgl, triality, u
Chevie.Weyl.torus
â Methodtorus(m::AbstractMatrix)
m
should be a matrix of finite order. The function returns the coset T
of the trivial group such that T.F==m
. When m
is integral his corresponds to an algebraic torus ð
of rank size(m,1)
, with an isogeny which acts by m
on X(ð)
.
julia> torus([0 -1;1 -1])
Ίâ
Chevie.Weyl.torus
â Methodtorus(W,i)
where W
is a Spets
or a ComplexReflectionGroup
. This returns the torus twisted by a representative of the i
-th conjugacy class of W
. This is the same as twistings(W,Int[])[i]
.
julia> W=coxgroup(:A,3)
Aâ
julia> twistings(W,Int[])
5-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Aâââ=Ίâ³
Aâââ=Ίâ²Ίâ
Aâââ=ΊâΊâ²
Aâââ=ΊâΊâ
Aâââ=ΊâΊâ
julia> torus(W,2)
Aâââ=Ίâ²Ίâ
julia> WF=spets(W,Perm(1,3))
²Aâ
julia> twistings(WF,Int[])
5-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
²Aâââ=Ίâ³
²Aâââ=ΊâΊâ²
²Aâââ=Ίâ²Ίâ
²Aâââ=ΊâΊâ
²Aâââ=ΊâΊâ
julia> torus(WF,2)
²Aâââ=ΊâΊâ²
Chevie.CoxGroups
â ModuleA suitable reference for the general theory of Coxeter groups is, for example, Bourbaki "Lie Groups and Lie Algebras" chapter 4.
A Coxeter group is a group which has the presentation $W=âšS|(st)^{m(s,t)}=1\text{ for }s,tâ Sâ©$ for some symmetric integer matrix m(s,t)
called the Coxeter matrix, where m(s,t)>1
for sâ t
and m(s,s)=1
; m(s,t)=â
is allowed meaning there is no relation between s
and t
. It is true (but a non-trivial theorem) that in a Coxeter group the order of st
is exactly m(s,t)
, thus a Coxeter group is the same as a Coxeter system, that is a pair (W,S)
of a group W
and a set SâW
of involutions, such that the group is presented by generators S
and relations describing the order of the product of two elements of S
.
A Coxeter group has a natural representation, its reflection representation, on a real vector space V
of dimension length(S)
(which is the Coxeter rank of W), where each element of S
acts as a reflection; the faithfulness of this representation (a theorem of Tits) is the main argument to prove that the order of st
is exactly m(s,t)
. This representation is defined as follows on a space V
with basis {eâ}
for sâ S
. The cartan matrix associated to the Coxeter matrix m(s,t)
is the matrix C
with entries C(s,t)=-2cos(Ï/m(s,t))
; we set C(s,t)=-2
if m(s,t)=â
. Then the action of sâ S
on V
is given by s(eâ)=eâ-C(s,t)eâ
.
Thus, Coxeter groups are real reflection groups. The converse need not be true if the set of reflecting hyperplanes has bad topological properties, but it turns out that finite Coxeter groups are the same as finite real reflection groups. The possible Coxeter matrices for finite Coxeter groups have been completely classified, see Weyl
; the corresponding finite groups play a deep role in several areas of mathematics.
Coxeter groups have a nice solution to the word problem. The length l(w)
of an element wâ W
is the minimum number of elements of S
of which it is a product (since the elements of S
are involutions, we do not need inverses). An expression of w
of minimum length is called a reduced word for w
. The main property of reduced words is the exchange lemma which states that if sââŠsâ
is a reduced word for w
(thus k=l(w)
) and sâ S
is such that l(sw)â€l(w)
then one of the sáµ¢
in the word for w
can be deleted to obtain a reduced word for sw
. Thus given sâ S
and wâ W
, either l(sw)=l(w)+1
or l(sw)=l(w)-1
and in the latter case we say that s
belongs to the left descent set of w
. Computing a reduced word for an element, and other word problems, are easy if we know how to multiply elements and know left descent sets. In each of the Coxeter groups that we implement, the left descent set is easy to compute (see for example coxeter_symmetric_group
below), so this suggests how to deal with Coxeter groups generically:
The type CoxeterGroup
is an abstract type; an actual struct which implements it must define a function
isleftdescent(W,w,i)
which tells whether the i
-th element of S
is in the left descent set of w
.
the other functions needed in an instance of a Coxeter group are
gens(W)
which returns the setS
(the list of Coxeter generators)nref(W)
which returns the number of reflections ofW
, ifW
is finite ornothing
ifW
is infinite.
It should be noted that a Coxeter group can be any kind of group implementing the above functions.
Because of the easy solution of the word problem in Coxeter groups, a convenient way to represent their elements is as words in the Coxeter generators, that is lists of integers in 1:length(S)
. The functions 'word' and 'W(...)' do the conversion between Coxeter words and elements of the group.
Examples
julia> W=coxsym(4)
ð â
julia> p=W(1,3,2,1,3)
(1,4)
julia> word(W,p)
5-element Vector{Int64}:
1
2
3
2
1
We notice that the word we started with and the one that we ended up with, are not the same, even though they represent the same element of W
. The reason is that there are several reduced words for an element of W
. The function 'word' calculates a lexicographically smallest word for w
. Below are some other possible computations using the same Coxeter group:
julia> word(W,longest(W)) # the (unique) longest element in W
6-element Vector{Int64}:
1
2
1
3
2
1
julia> w0=longest(W)
(1,4)(2,3)
julia> length(W,w0)
6
julia> map(w->word(W,w),refls(W,1:nref(W)))
6-element Vector{Vector{Int64}}:
[1]
[2]
[3]
[1, 2, 1]
[2, 3, 2]
[1, 2, 3, 2, 1]
julia> [length(elements(W,i)) for i in 0:nref(W)]
7-element Vector{Int64}:
1
3
5
6
5
3
1
The last list tells us that there is 1 element of length 0, there are 6 of length 3, âŠ
For most basic functions the convention is that the input is an element of the group, rather than a Coxeter word. The reason for this is that for a Coxeter group which is a permutation group, using the low level functions for permutations is usually much faster than manipulating lists representing reduced expressions.
The only Coxeter group constructors implemented in this module are coxsym
and coxgroup
; the last constructor takes a Cartan matrix and builds the corresponding Coxeter group as a matrix group. The module Weyl
defines other methods for coxgroup
building a finite Coxeter group as a permutation group, given its type.
FinitePosets.Poset
â TypePoset(W::CoxeterGroup,w=longest(W))
returns as a poset the Bruhat interval [1,w]
of W
. If w
is not given, the whole Bruhat Poset of W
is returned (W
must then be finite).
julia> W=coxsym(3)
ð â
julia> Poset(W)
.<1,2<21,12<121
The above poset is constructed efficiently by constructing the Hasse diagram, but it could be constructed naively as follows:
julia> p=Poset((x,y)->bruhatless(W,x,y),elements(W))
()<(1,2),(2,3)<(1,3,2),(1,2,3)<(1,3)
The output is not so nice, showing permutations instead of words. This can be fixed by defining:
julia> p.show_element=(io,x,n)->join(io,word(W,x.elements[n]));
julia> p
<1,2<12,21<121
julia> W=coxsym(4)
ð â
julia> Poset(W,W(1,3))
.<3,1<13
Base.length
â Methodlength(W::CoxeterGroup ,w)
returns the length of a reduced expression in the Coxeter generators of the element w
of W
.
julia> W=coxsym(4)
ð â
julia> p=W(1,2,3,1,2,3)
(1,3)(2,4)
julia> length(W,p)
4
julia> word(W,p)
4-element Vector{Int64}:
2
1
3
2
Chevie.CoxGroups.braid_relations
â Methodbraid_relations(W)
this function returns the relations which present the braid group of the reflection group W
. These are homogeneous (both sides of the same length) relations between generators in bijection with the generating reflections of W
. A presentation of W
is obtained by adding relations specifying the order of the generators.
julia> W=complex_reflection_group(29)
Gââ
julia> braid_relations(W)
7-element Vector{Tuple{Vector{Int64}, Vector{Int64}}}:
([1, 2, 1], [2, 1, 2])
([2, 4, 2], [4, 2, 4])
([3, 4, 3], [4, 3, 4])
([2, 3, 2, 3], [3, 2, 3, 2])
([1, 3], [3, 1])
([1, 4], [4, 1])
([4, 3, 2, 4, 3, 2], [3, 2, 4, 3, 2, 4])
each relation is represented as a pair of lists, specifying that the product of the generators according to the indices on the left side is equal to the product according to the indices on the right side. See also diagram
.
Chevie.CoxGroups.bruhatless
â Methodbruhatless(W, x, y)
whether xâ€y
in the Bruhat order, for x,yâ W
. We have xâ€y
if a reduced expression for x
can be extracted from one for w
. See (5.9) and (5.10) Humphreys1990 for properties of the Bruhat order.
julia> W=coxgroup(:H,3)
Hâ
julia> w=W(1,2,1,3);
julia> b=filter(x->bruhatless(W,x,w),elements(W));
julia> word.(Ref(W),b)
12-element Vector{Vector{Int64}}:
[]
[1]
[2]
[3]
[1, 2]
[2, 1]
[1, 3]
[2, 3]
[1, 2, 1]
[1, 2, 3]
[2, 1, 3]
[1, 2, 1, 3]
Chevie.CoxGroups.bruhatless
â Methodbruhatless(W, y)
returns a vector whose i
-th element is the vector of elements of W
smaller for the Bruhat order than w
and of Coxeter length i-1
. Thus the first element of the returned list contains only one(W)
and the length(W,w)
-th element contains only w
.
julia> W=coxsym(3)
ð â
julia> bruhatless(W,Perm(1,3))
4-element Vector{Vector{Perm{Int16}}}:
[()]
[(1,2), (2,3)]
[(1,2,3), (1,3,2)]
[(1,3)]
see also Poset
for Coxeter groups.
Chevie.CoxGroups.coxeter_group
â Methodcoxeter_group(m)
or coxgroup(m)
m
should be a square matrix of real cyclotomic numbers. It returns the Coxeter group whose Cartan matrix is m
. This is a matrix group W
constructed as follows. Let V
be a real vector space of dimension size(m,1)
, let eáµ¢
be the canonical basis of V
. Then W
is the matrix group generated by the reflections sᵢ(eⱌ)=eⱌ-mᵢⱌ eᵢ
.
julia> W=coxgroup([2 -2;-2 2])
coxeter_group([2 -2; -2 2])
Above is a way to construct the affine Weyl group AÌâ
.
Chevie.CoxGroups.coxeter_hyperoctaedral_group
â Methodcoxeter_hyperoctaedral_group(n)
or coxhyp(n)
The Hyperoctaedral group (the group of all signed permutations of ±1,âŠ,±n) as a Coxeter group of type Bâ
, with generators (1,-1)
and (i,i+1)(-i,-i-1)
.
julia> elements(coxhyp(2))
8-element Vector{SPerm{Int8}}:
()
(1,2)
(1,-1)
(1,2,-1,-2)
(1,-2,-1,2)
(2,-2)
(1,-2)
(1,-1)(2,-2)
Chevie.CoxGroups.coxeter_matrix
â Methodcoxeter_matrix(m::AbstractMatrix)
or coxmat
returns the Coxeter matrix of the Coxeter group defined by the cartan matrix m
julia> C=cartan(:H,3)
3Ã3 Matrix{Cyc{Int64}}:
2 릉
²+ζâ
³ 0
릉
²+ζâ
³ 2 -1
0 -1 2
julia> coxmat(C)
3Ã3 Matrix{Int64}:
1 5 2
5 1 3
2 3 1
Chevie.CoxGroups.coxeter_matrix
â Methodcoxeter_matrix(W)
or coxmat
returns the Coxeter matrix of the Coxeter group W
, that is the matrix m
whose entry m[i,j]
contains the order of W(i)*W(j)
where W(i)
is the i
-th Coxeter generator of W
. An infinite order is represented by the entry 0
.
julia> W=coxsym(4)
ð â
julia> coxmat(W)
3Ã3 Matrix{Int64}:
1 3 2
3 1 3
2 3 1
Chevie.CoxGroups.coxeter_symmetric_group
â Methodcoxeter_symmetric_group(n::Integer)
or coxeter_symmetric_group(m:n)
or coxsym
The symmetric group on the letters 1:n
(or if a mâ€n
is given, on the letters m:n
) as a Coxeter group. The Coxeter generators are the Perm(i,i+1)
for i
in m:n-1
.
julia> W=coxsym(3)
ð â
julia> gens(W)
2-element Vector{Perm{Int16}}:
(1,2)
(2,3)
julia> e=elements(W)
6-element Vector{Perm{Int16}}:
()
(1,2)
(2,3)
(1,3,2)
(1,2,3)
(1,3)
julia> length.(Ref(W),e) # length in the genrators of the elements
6-element Vector{Int64}:
0
1
1
2
2
3
Chevie.CoxGroups.firstleftdescent
â Methodfirstleftdescent(W,w)
returns the index in gens(W)
of the first element of the left descent set of w
â- that is, the first i
such that if s=W(i)
then l(sw)<l(w). It returns
nothingfor
one(W)`.
julia> W=coxsym(3)
ð â
julia> firstleftdescent(W,Perm(2,3))
2
Chevie.CoxGroups.inversions
â Methodinversions(W,w)
Returns the inversions of the element w
of the finite Coxeter group W
, that is, the list of the indices of reflections r
of W
such that l(rw)<l(w)
where l
is the Coxeter length.
julia> W=coxgroup(:A,3)
Aâ
julia> inversions(W,W(1,2,1))
3-element Vector{Int64}:
1
2
4
Chevie.CoxGroups.isleftdescent
â Methodisleftdescent(W::CoxeterGroup,w,i::Integer)
returns true
iff the i
-th generating reflection of the Coxeter group W
is in the left descent set of the element w
of W
, that is iff length(W,W(i)*w)<length(W,w)
.
julia> W=coxsym(3)
ð â
julia> isleftdescent(W,Perm(1,2),1)
true
Chevie.CoxGroups.isrightdescent
â Methodisrightdescent(W::CoxeterGroup,w,i::Integer)
returns true
iff the i
-th generating reflection of the Coxeter group W
is in the right descent set of the element w
of W
, that is iff length(W,w*W(i))<length(W,w)
.
julia> W=coxsym(3)
ð â
julia> isrightdescent(W,Perm(1,2),1)
true
Chevie.CoxGroups.leftdescents
â Methodleftdescents(W,w)
The left descents of the element w
of the Coxeter group W
, that is the set of i
such that length(W,W(i)*w)<length(W,w)
.
julia> W=coxsym(3)
ð â
julia> leftdescents(W,Perm(1,3))
2-element Vector{Int64}:
1
2
Chevie.CoxGroups.longest
â Functionlongest(W)
If W
is finite, returns the unique element of maximal length of the Coxeter group W
. May loop infinitely otherwise.
julia> longest(coxsym(4))
(1,4)(2,3)
longest(W,I)
returns the longest element of the parabolic subgroup of W
generated by the generating reflections of indices in I
.
julia> longest(coxsym(4))
(1,4)(2,3)
Chevie.CoxGroups.standard_parabolic_class
â Methodstandard_parabolic_class(W,I)
I
should be a subset of eachindex(gens(W))
. The function returns the list of such subsets W
-conjugate to I
.
julia> CoxGroups.standard_parabolic_class(coxgroup(:E,8),[7,8])
7-element Vector{Vector{Int64}}:
[7, 8]
[6, 7]
[5, 6]
[4, 5]
[2, 4]
[3, 4]
[1, 3]
Chevie.PermRoot.cartan
â Methodcartan(W::CoxeterGroup)
The Cartan matrix of W
.
Chevie.PermRoot.reflection_subgroup
â Methodreflection_subgroup(W::CoxHyp,I)
is defined only for I=1:m
for mâ€ngens(W)
.
Chevie.PermRoot.reflection_subgroup
â Methodreflection_subgroup(W::CoxSym,I)
The only reflection subgroups defined for coxsym(n)
are for I=1:m
for mâ€n
PermGroups.Groups.elements
â Methodelements(W::CoxeterGroup[,l])
When l
is not given this works only if W
is finite; it returns the elements of W
sorted by increasing Coxeter length. If the second argument is an integer l
, the elements of W
of Coxeter length l
are returned.
julia> W=coxgroup(:G,2)
Gâ
julia> e=elements(W,6)
1-element Vector{Perm{Int16}}:
(1,7)(2,8)(3,9)(4,10)(5,11)(6,12)
julia> e[1]==longest(W)
true
PermGroups.Groups.word
â Methodword(W::CoxeterGroup,w)
returns a reduced word in the standard generators of the Coxeter group W
for the element w
(represented as the vector of the corresponding generator indices).
julia> W=coxgroup(:A,3)
Aâ
julia> w=perm"(1,11)(3,10)(4,9)(5,7)(6,12)"
(1,11)(3,10)(4,9)(5,7)(6,12)
julia> w in W
true
julia> word(W,w)
5-element Vector{Int64}:
1
2
3
2
1
The result of  word
is the lexicographically smallest reduced word for w
(for the ordering of the Coxeter generators given by gens(W)
).
PermGroups.Groups.words
â Methodwords(W::CoxeterGroup[,l::Integer])
With one argument this works only if W
is finite; it returns the reduced Coxeter words of elements of W
by increasing length. If the second argument is an integer l
, only the elements of length l
are returned; this works for infinite Coxeter groups.
julia> W=coxgroup(:G,2)
Gâ
julia> e=elements(W,6)
1-element Vector{Perm{Int16}}:
(1,7)(2,8)(3,9)(4,10)(5,11)(6,12)
julia> e[1]==longest(W)
true
PermGroups.Groups.words
â Methodwords(W::CoxeterGroup,w)
returns the list of all reduced expressions of the element w
of the Coxeter group W
.
julia> W=coxgroup(:A,3)
Aâ
julia> words(W,longest(W))
16-element Vector{Vector{Int64}}:
[1, 2, 1, 3, 2, 1]
[1, 2, 3, 1, 2, 1]
[1, 2, 3, 2, 1, 2]
[1, 3, 2, 1, 3, 2]
[1, 3, 2, 3, 1, 2]
[2, 1, 2, 3, 2, 1]
[2, 1, 3, 2, 1, 3]
[2, 1, 3, 2, 3, 1]
[2, 3, 1, 2, 1, 3]
[2, 3, 1, 2, 3, 1]
[2, 3, 2, 1, 2, 3]
[3, 1, 2, 1, 3, 2]
[3, 1, 2, 3, 1, 2]
[3, 2, 1, 2, 3, 2]
[3, 2, 1, 3, 2, 3]
[3, 2, 3, 1, 2, 3]
PermGroups.reduced
â Functionreduced(H::CoxeterGroup,W::CoxeterGroup,i=nref(W))
The elements wâ W
which are H
-reduced, and of length â€i
(by default all of them), grouped by length.
julia> W=coxgroup(:G,2)
Gâ
julia> H=reflection_subgroup(W,[2,6])
Gâââââ=AÌâÃAâ
julia> [word(W,w) for S in reduced(H,W) for w in S]
3-element Vector{Vector{Int64}}:
[]
[1]
[1, 2]
PermGroups.reduced
â Methodreduced(W,w)
The unique element of minimal length in the coset W.w. This makes sense when isleftdescent(W,u)
makes sense for uâ W.w
which happens when w
is a Coxeter automorphism of W
or when w
lives in a Coxeter overgroup of W
.
julia> W=coxgroup(:G,2)
Gâ
julia> H=reflection_subgroup(W,[2,6])
Gâââââ=AÌâÃAâ
julia> word.(Ref(W),unique(reduced.(Ref(H),elements(W))))
3-element Vector{Vector{Int64}}:
[]
[1]
[1, 2]
Chevie.Chars
â ModuleCharacters and conjugacy classes of complex reflection groups.
The CharTable
of a finite complex reflection group W
is computed using the decomposition of W
in irreducible groups (see refltype
). For each irreducible group the character table is either computed using recursive formulas for the infinite series, or read into the system from a library file for the exceptional types. Thus, character tables can be obtained quickly even for very large groups (e.g., Eâ). Similar remarks apply for conjugacy classes.
The conjugacy classes and irreducible characters of irreducible finite complex reflection groups have canonical labelings by certain combinatorial objects; these labelings are used in the tables we give. For the classes, these are partitions or partition tuples for the infinite series, or, for exceptional Coxeter groups, Carter's admissible diagrams Carter1972; for other primitive complex reflection groups we just use words in the generators to specify the classes. For the characters, these are again partitions or partition tuples for the infinite series, and for the others they are pairs of two integers (d,e)
where d
is the degree of the character and e
is the smallest symmetric power of the reflection representation containing the given character as a constituent (the b
-invariant of the character). This information is given by the functions classinfo
and charinfo
. When you display the character table, the canonical labelings for classes and characters are displayed.
A typical example is coxgroup(:A,n)
, the symmetric group ðâââ
where classes and characters are parameterized by partitions of n+1
(this is also the case for coxsym(n+1)
).
julia> W=coxgroup(:A,3)
Aâ
julia> CharTable(W)
CharTable(Aâ)
ââââââ¬ââââââââââââââââââ
â â1111 211 22 31 4â
ââââââŒââââââââââââââââââ€
â1111â 1 -1 1 1 -1â
â211 â 3 -1 -1 . 1â
â22 â 2 . 2 -1 .â
â31 â 3 1 -1 . -1â
â4 â 1 1 1 1 1â
ââââââŽââââââââââââââââââ
julia> W=coxgroup(:G,2)
Gâ
julia> ct=CharTable(W)
CharTable(Gâ)
âââââââ¬âââââââââââââââââââââ
â âAâ AÌâ Aâ Gâ Aâ Aâ+AÌââ
âââââââŒâââââââââââââââââââââ€
âÏâââ â 1 1 1 1 1 1â
âÏâââ â 1 -1 -1 1 1 1â
âÏâ²ââââ 1 1 -1 -1 1 -1â
âÏâ³ââââ 1 -1 1 -1 1 -1â
âÏâââ â 2 . . 1 -1 -2â
âÏâââ â 2 . . -1 -1 2â
âââââââŽâââââââââââââââââââââ
julia> ct.charnames
6-element Vector{String}:
"\phi_{1,0}"
"\phi_{1,6}"
"\phi_{1,3}'"
"\phi_{1,3}''"
"\phi_{2,1}"
"\phi_{2,2}"
julia> ct.classnames
6-element Vector{String}:
"A_0"
"\tilde A_1"
"A_1"
"G_2"
"A_2"
"A_1+\tilde A_1"
Reflection groups have fake degrees (see fakedegrees
), whose valuation and degree give two integers b,B
for each irreducible character of W
. For spetsial groups (which include finite Coxeter groups), the valuation and degree of the generic degrees of the Hecke algebra give two more integers a,A
(for Coxeter groups see Carter1985, Ch.11 for more details). These integers are also used in the operations of truncated induction, see j_induction_table
and J_induction_table
.
Iwahori-Hecke algebras and cyclotomic Hecke algebras also have character tables, see the corresponding chapters.
We now describe for each type our conventions for labeling the classes and characters.
Type Aâ
(nâ¥0
). In this case we have W â
ðâââ
. The classes and characters are labelled by partitions of n+1
. The partition labelling a class is the cycle type of the elements in that class; the representative in '.classtext' is the concatenation of the words corresponding to each part, where the word for a part i
is the product of i-1
consecutive generators (starting one higher than the last generator used for the previous parts). The partition labelling a character describes the type of the Young subgroup such that the trivial character induced from this subgroup contains that character with multiplicity 1
and such that every other character occurring in this induced character has a higher a
-value. Thus, the sign character is labelled by the partition (1â¿âºÂ¹)
and the trivial character by the partition (n+1)
. The character of the reflection representation of W
is labelled by (n,1)
.
Type Bâ
(nâ¥2
). In this case W=W(Bâ)
is isomorphic to the wreath product of the cyclic group of order 2
with the symmetric group ðâ
. Hence the classes and characters are parameterized by pairs of partitions such that the total sum of their parts equals n
. The pair corresponding to a class describes the signed cycle type for the elements in that class, as in Carter1972. We use the convention that if (λ,Ό)
is such a pair then λ
corresponds to the positive and Ό
to the negative cycles. Thus, (1â¿,-)
and (-,1â¿)
label respectively the trivial class and the class of the longest element.
The pair corresponding to an irreducible character is determined via Clifford theory, as follows. We have a semidirect product decomposition W(Bâ)=N â ðâ
where N
is the standard n
-dimensional ðœââ¿
-vector space. For a,b ⥠0
such that n=a+b
let $η_{a,b}$ be the irreducible character of N
which takes value 1
on the first a
standard basis vectors and value -1
on the last b
standard basis vectors of N
. Then the inertia subgroup of $η_{a,b}$ has the form $T_{a,b}=N.(ð_a à ð_b)$ and we can extend $η_{a,b}$ trivially to an irreducible character $ηÌ_{a,b}$ of $T_{a,b}$. Let α
and β
be partitions of a
and b
, respectively. We take the tensor product of the corresponding irreducible characters of ð_a
and ð_b
and regard this as an irreducible character of $T_{a,b}$. Multiplying this character with $ηÌ_{a,b}$ and inducing to W(Bâ)
yields an irreducible character $Ï= Ï_{(α,β)}$ of W(Bâ)
. This defines the correspondence between irreducible characters and pairs of partitions as above.
For example, the pair ((n),-)
labels the trivial character and (-,(1â¿))
labels the sign character. The character of the natural reflection representation is labeled by ((n-1),(1))
.
Type Dâ
(nâ¥4
). In this case W=W(Dâ)
can be embedded as a subgroup of index 2
into the Coxeter group W(Bâ)
. The intersection of a class of W(Bâ)
with W(Dâ)
is either empty or a single class in W(Dâ)
or splits up into two classes in W(Dâ)
. This also leads to a parameterization of the classes of W(Dâ)
by pairs of partitions (λ,Ό)
as before but where the number of parts of Ό
is even and where there are two classes of this type if Ό
is empty and all parts of λ
are even. In the latter case we denote the two classes in W(Dâ)
by (λ,+)
and (λ,-)
, where we use the convention that the class labeled by (λ,+)
contains a representative which can be written as a word in {sâ,sâ,âŠ,sâ}
and (λ,-)
contains a representative which can be written as a word in {sâ,sâ, âŠ,sâ}
.
By Clifford theory the restriction of an irreducible character of W(Bâ)
to W(Dâ)
is either irreducible or splits up into two irreducible components. Let (α,β)
be a pair of partitions with total sum of parts equal to n
. If α!=β
then the restrictions of the irreducible characters of W(Bâ)
labeled by (α,β)
and (β,α)
are irreducible and equal. If α=β
then the restriction of the character labeled by (α,α)
splits into two irreducible components which we denote by (α,+)
and (α,-)
. Note that this can only happen if n
is even. In order to fix the notation we use a result of Stembridge1989 which describes the value of the difference of these two characters on a class of the form (λ,+)
in terms of the character values of the symmetric group ð_{n/2}
. Recall that it is implicit in the notation (λ,+)
that all parts of λ
are even. Let λ'
be the partition of n/2
obtained by dividing each part by 2
. Then the value of Ï_{(α,-)}-Ï_{(α,+)}
on an element in the class (λ,+)
is given by 2^{k(λ)}
times the value of the irreducible character of ð_{n/2}
labeled by α
on the class of cycle type λ'
. (Here, k(λ)
denotes the number of non-zero parts of λ
.)
The labels for the trivial, the sign and the natural reflection character are the same as for W(Bâ)
, since these characters are restrictions of the corresponding characters of W(Bâ)
.
The groups G(d,1,n)
. They are isomorphic to the wreath product of the cyclic group of order d
with the symmetric group ðâ
. Hence the classes and characters are parameterized by d
-tuples of partitions such that the total sum of their parts equals n
. The words chosen as representatives of the classes are, when d>2
, computed in a slightly different way than for Bâ
, in order to agree with the words on which Ram and Halverson compute the characters of the Hecke algebra. First the parts of the d
partitions are merged in one big partition and sorted in increasing order. Then, to a part i
coming from the j
-th partition is associated the word (l+1âŠ1⊠l+1)ʲâ»Â¹l+2âŠl+i
where l
is the highest generator used to express the previous part.
The d
-tuple corresponding to an irreducible character is determined via Clifford theory in a similar way than for the Bâ
case. The identity character has the first partition with one part equal n
and the other ones empty. The character of the reflection representations has the first two partitions with one part equal respectively to n-1
and to 1
, and the other partitions empty.
The groups G(de,e,n)
. They are normal subgroups of index e
in G(de,1,n)
. The quotient is cyclic, generated by the image g
of the first generator of G(de,1,n)
. The classes are parameterized as the classes of G(de,e,n)
with an extra information for a component of a class which splits.
According to Hugues1985, a class C
of G(de,1,n)
parameterized by a de
-partition $(Sâ,âŠ,S_{de-1})$ is in G(de,e,n)
if e
divides $âáµ¢ i â_{pâ Sáµ¢}p$. It splits in d
classes for the largest d
dividing e
and all parts of all Sáµ¢
and such that Sáµ¢
is empty if d
does not divide i
. If w
is in C
then 'gâ± w gâ»â±' for 'i in 0:d-1' are representatives of the classes of G(de,e,n)
which meet C
. They are described by appending the integer i
to the label for C
.
The characters are described by Clifford theory. We make g
act on labels for characters of G(de,1,n)
. The action of g
permutes circularly by d
the partitions in the de
-tuple. A character has same restriction to G(de,e,n)
as its transform by g
. The number of irreducible components of its restriction is equal to the order k
of its stabilizer under powers of g
. We encode a character of G(de,e,n)
by first, choosing the smallest for lexicographical order label of a character whose restriction contains it; then this label is periodic with a motive repeated k
times; we represent the character by one of these motives, to which we append E(k)â±
for 'i in 0:k-1' to describe which component of the restriction we choose.
Types Gâ
and Fâ
. The matrices of character values and the orderings and labelings of the irreducible characters are exactly the same as in Carter1985, p.412/413: in type Gâ
the character Ïâ,â'
takes the value -1 on the reflection associated to the long simple root; in type Fâ
, the characters Ïâ,ââ'
, Ïâ,â'
, Ïâ,â'
, Ïâ,â'
and Ïâ,â'
occur in the induced of the identity from the Aâ
corresponding to the short simple roots; the pairs (Ïâ,ââ'
, Ïâ,ââ³
) and (Ïâ,â'
, Ïâ,ââ³
) are related by tensoring by sign; and finally Ïâ,ââ³
is the exterior square of the reflection representation. Note, however, that we put the long root at the left of the Dynkin diagrams to be in accordance with the conventions in Lusztig1985, (4.8) and (4.10).
The classes are labeled by Carter's admissible diagrams Carter1972. A character is labeled by a pair (d,b)
where d
denotes the degree and b
the corresponding b
-invariant. If there are several characters with the same pair (d,b)
we attach a prime to them, as in Carter1985.
Types Eâ,Eâ,Eâ
. The character tables are obtained by specialization of those of the Hecke algebra. The classes are labeled by Carter's admissible diagrams Carter1972. A character is labeled by the pair (d,b)
where d
denotes the degree and b
is the corresponding b
-invariant. For these types, this gives a unique labeling of the characters.
Non-crystallographic types Iâ(m)
, Hâ
, Hâ
. In these cases we do not have canonical labelings for the classes. We label them by reduced expressions.
Each character for type Hâ
is uniquely determined by the pair (d,b)
where d
is the degree and b
the corresponding b
-invariant. For type Hâ
there are just two characters (those of degree 30
) for which the corresponding pairs are the same. These two characters are nevertheless distinguished by their fake degrees: the character Ïââ,ââ'
has fake degree q¹â°+q¹²+
higher terms, while Ïââ,âââ³
has fake degree q¹â°+q¹âŽ+
higher terms. The characters in the table for type Hâ
are ordered in the same way as in Alvis and Lusztig1982.
Finally, the characters of degree 2
for type Iâ(m)
are ordered as follows. The matrix representations affording the characters of degree 2
are given by: $Ï_j : sâsâ ⊠\begin{pmatrix}\zeta_m^j&0\\0&\zeta_m^{-j}\end{pmatrix}, sââŠ\begin{pmatrix}0&1\\1&0\end{pmatrix},$ where 1 †j †â(m-1)/2â
. The reflection representation is Ïâ
. The characters in the table are ordered by listing first the characters of degree 1 and then Ïâ,Ïâ,âŠ
.
Primitive complex reflection groups Gâ
to Gââ
. The groups Gââ=Hâ
, Gââ=Fâ
, Gââ=Hâ
are exceptional Coxeter groups and have been explained above. Similarly for the other groups labels for characters consist primarily of the pair (d,b)
where d
denotes the degree and b
is the corresponding b
-invariant. This is sufficient for Gâ
, Gââ
, Gââ
and Gââ
. For other groups there are pairs or triples of characters which have the same (d,b)
value. We disambiguate these according to the conventions of Malle2000 for Gââ, Gââ, Gââ, Gââ
and Gââ
:
- For
Gââ
:
The fake degree of Ïâ,â
'
(resp. Ïâ,ââ'
, Ïâ,ââ³
) has smaller degree that of Ïâ,â
â³
(resp. Ïâ,âââ³
, Ïâ,â'
). The characters Ïâ
,ââ
'
and Ïâ
,â'
occur with multiplicity 1 in the induced from the trivial character of the parabolic subgroup of type Aâ
generated by the first and third generator (it is asserted mistakenly in Malle2000 that Ïâ
,ââ³
does not occur in this induced; it occurs with multiplicity 2).
- For
Gââ
:
The character Ïâ,âââŽ
is the exterior square of Ïâ,â
; its complex conjugate is Ïâ,âââ
. The character Ïââ
,ââ³
occurs in Ïâ,ââÏâ,â
; the character Ïââ
,âââ³
is tensored by the sign character from Ïââ
,ââ³
. Finally Ïâ,ââ'
occurs in the induced from the trivial character of the standard parabolic subgroup of type Aâ
generated by the first, second and fourth generators.
- For
Gââ
:
The characters Ïââ
,â'
, Ïââ
,ââ'
and Ïââ
,ââ³
occur in Ïâ,ââÏââ,â
; the character Ïââ,ââ'
is complex conjugate of Ïââ,â
; the character Ïââ
,ââ'
is tensored by sign of Ïââ
,â'
. The two terms of maximal degree of the fakedegree of Ïââ,ââ'
are qâµâ°+qâŽâ¶
while for Ïââ,âââ³
they are qâµâ°+2qâŽâ¶
.
- For
Gââ
:
The two terms of maximal degree of the fakedegree of Ïââ,â'
are q²âž+q²â¶
while for Ïââ,ââ³
they are q²âž+q²âŽ
. The terms of maximal degree of the fakedegree of Ïââ,â
'
are q³¹+q²â¹
while for Ïââ,â
â³
they are q³¹+2q²â¹
. The character Ïââ,ââ'
is tensored by sign of Ïââ,â'
and Ïââ,ââ'
is tensored by sign of Ïââ,â
'
.
- For
Gââ
:
The character Ïââ,ââ'
occurs in Ïâ,ââÏââ
,ââ
. The character Ïââ,â'
is rational. The character Ïââ,ââ³
occurs in Ïâ,ââÏââ
,ââ
. The character Ïââ,ââ
'
is rational.The character Ïââ,ââ
â³
is tensored by the determinant character of Ïââ,ââ³
. The character Ïâ
ââ,ââ'
is rational. The character Ïâ
ââ,âââŽ
occurs in Ïâ,ââÏâââ,ââ
. The character Ïâââ,ââ'
occurs in Ïâ,ââÏâââ,ââ
. The character Ïâââ,âââ³
occurs in Ïâ,ââÏâââ,ââ
. The character Ïâ
ââ,ââ'
occurs in Ïâ,ââÏâââ
,ââ
. The character Ïâââ
,â'
is complex conjugate of Ïâââ
,â
, and Ïâââ,ââ'
is complex conjugate of Ïâââ,ââ
. The character Ïâââ,ââ'
is complex conjugate of Ïâââ,ââ
. Finally Ïâââ,ââ'
occurs in induced from the trivial character of the standard parabolic subgroup of type Aâ
generated by the generators of Gââ
with the third one omitted.
For the groups Gâ
and Gâ
we adopt the following conventions. For Gâ
they are compatible with those of MalleRouquier2003 and BroueMalleMichel2014.
- For
Gâ
:
We let W=complex_reflection_group(5)
, so the generators are W(1)
and W(2)
.
The character Ïâ,â'
(resp. Ïâ,ââ'
, Ïâ,â'
) takes the value 1
(resp. 릉
, -릉
) on W(1)
. The character Ïâ,ââ³
is complex conjugate to Ïâ,ââ
, and the character Ïâ,â'
is complex conjugate to Ïâ,â'
. The character Ïâ,â
â³
is complex conjugate to Ïâ,â
; Ïâ,â
'
takes the value -1
on W(1)
. The character Ïâ,â'
is complex conjugate to Ïâ,â
'
.
- For
Gâ
:
We let W=complex_reflection_group(7)
, so the generators are W(1)
, W(2)
and W(3)
.
The characters Ïâ,â'
and Ïâ,ââ'
take the value 1
on W(2)
. The character Ïâ,ââ³
is complex conjugate to Ïâ,ââ
and Ïâ,â'
is complex conjugate to Ïâ,â'
. The characters Ïâ,ââ'
and Ïâ,ââ'
take the value 릉
on W(2)
. The character Ïâ,âââ³
is complex conjugate to Ïâ,ââ
and Ïâ,ââ'
is complex conjugate to Ïâ,ââ'
. The character Ïâ,â'
takes the value -릉
on W(2)
and Ïâ,ââ'
takes the value -1
on W(2)
. The characters Ïâ,âââ³
, Ïâ,â
â³
, Ïâ,ââŽ
and Ïâ,â
are Galois conjugate, as well as the characters Ïâ,â'
, Ïâ,ââ'
, Ïâ,ââ'
and Ïâ,â
'
. The character Ïâ,â'
is complex conjugate to Ïâ,ââ
and Ïâ,ââŽ
is complex conjugate to Ïâ,â'
.
Finally, for the remaining groups Gâ, Gâ
to Gââ, Gââ
to Gââ
, Gââ
, Gââ
, Gââ
and Gââ
there are only pairs of characters with same value (d,b)
. We give labels uniformly to these characters by applying in order the following rules :
If the two characters have different fake degrees, label
Ï_{d,b}'
the one whose fake degree is minimal for the lexicographic order of polynomials (starting with the highest term).For the not yet labeled pairs, if only one of the two characters has the property that in its Galois orbit at least one character is distinguished by its
(d,b)
-invariant, label itÏ_{d,b}'
.For the not yet labeled pairs, if the minimum of the
(d,b)
-value (for the lexicographic order(d,b)
) in the Galois orbits of the two character is different, labelÏ_{d,b}'
the character with the minimal minimum.We define now a new invariant for characters: consider all the pairs of irreducible characters
Ï
andÏ
uniquely determined by their(d,b)
-invariant such thatÏ
occurs with non-zero multiplicitym
inÏâÏ
. We definet(Ï)
to be the minimal (for lexicographic order) possible list(d(Ï),b(Ï),d(Ï),b(Ï),m)
.
For the not yet labeled pairs, if the t-invariants are different, label Ï_{d,b}'
the character with the minimal t
-invariant.
After applying the last rule all the pairs will be labelled for the considered groups. The labelling obtained is compatible for Gââ
, Gââ
, Gââ
and Gââ
with that of Malle2000 and for Gâ
with that described in MalleRouquier2003.
We should emphasize that for all groups with a few exceptions, the parameters for characters do not depend on any non-canonical choice. The exceptions are G(de,e,n)
with e>1
, and Gâ
, Gâ
, Gââ
, Gââ
, Gââ
and Gââ
, groups which admit outer automorphisms preserving the set of reflections, so choices of a particular value on a particular generator must be made for characters which are not invariant by these automorphisms.
Labels for the classes. For the exceptional complex reflection groups, the labels for the classes represent the decomposition of a representative of the class as a product of generators, with the additional conventions that 'z' represents the generator of the center and for well-generated groups 'c' represents a Coxeter element (a product of the generators which is a regular element for the highest reflection degree).
Chevie.Chars.CharTable
â TypeCharTable is a structure to hold character tables of groups and Hecke algebras
Chevie.Chars.CharTable
â MethodCharTable(WF::Spets)
This function returns the character table of the reflection coset WF
. We call characters of the coset WF=W.Ï
of the group W
the restriction to W.Ï
of a set containing one extension of each Ï
-invariant character of W to the semidirect product of W with the cyclic group generated by Ï
(for Coxeter cosets we choose, following Lusztig, in each case one extension, called the preferred extension.)
julia> W=spets(coxgroup(:D,4),Perm(1,2,4))
³Dâ
julia> CharTable(W)
CharTable(³Dâ)
âââââââ¬ââââââââââââââââââââââââââââââââââ
â âCâ AÌâ Câ+Aâ AÌâ+Aâ Fâ AÌâ+Aâ Fâ(aâ)â
âââââââŒââââââââââââââââââââââââââââââââââ€
â.4 â 1 1 1 1 1 1 1â
â.1111â-1 1 1 -1 1 1 1â
â.22 â . 2 2 . -1 -1 -1â
â11.2 â . . . . -1 3 3â
â1.3 â 1 1 -1 -1 . -2 2â
â1.111â-1 1 -1 1 . -2 2â
â1.21 â . 2 -2 . . 2 -2â
âââââââŽââââââââââââââââââââââââââââââââââ
Chevie.Chars.J_induction_table
â MethodJ_induction_table(H, W)
computes the decomposition into irreducible characters of the reflection group W
of the J
-induced of the irreducible characters of the reflection subgroup H
. The J
-induced of Ï
is the sum of the irreducible components of the induced of Ï
which have same a
-function (see charinfo
) as Ï
. What is returned is an InductionTable
struct.
julia> W=coxgroup(:D,4)
Dâ
julia> H=reflection_subgroup(W,[1,3])
Dâââââ=AâΊâ²
julia> J_induction_table(H,W)
J-induction table from Dâââââ=AâΊâ² to Dâ
âââââââ¬âââââââââ
â â111 21 3â
âââââââŒâââââââââ€
â11+ â . . .â
â11- â . . .â
â1.111â . . .â
â.1111â . . .â
â11.2 â 1 . .â
â1.21 â 1 . .â
â.211 â . . .â
â2+ â . . .â
â2- â . . .â
â.22 â . . .â
â1.3 â . 1 .â
â.31 â . . .â
â.4 â . . 1â
âââââââŽâââââââââ
Chevie.Chars.WGraphToRepresentation
â MethodWGraphToRepresentation(coxrank::Integer,graph,v)
We store some representations of one-parameter Iwahori-Hecke algebras as W
-graphs. For a Coxeter system (W,S)
, a W
-graph is defined by a set of vertices C
with a function I
which attaches to xâ C
a subset I(x)â S
, and edge labels which to (x,y)â C^2
attach ÎŒ(x,y)â K
where K
is the field of definition of W
; this defines a representation of the Hecke algebra with parameters v
and -vâ»Â¹
on a space with basis ${e_y}_{yâ C}$ by:
$Tâ(e_y)=-e_y$ if sâ I(y)
and otherwise $Tâ(e_y)=v^2 e_y+â_{xâ£sâ I(x)} vÎŒ(x,y)eâ$.
The W
-graphs are stored in a compact format to save space. They are represented as a pair.
The first element is a list describing
C
. Its elements are either a vectorI(x)
of indices ineachindex(S)
, or an integern
specifying to repeat the previous elementn
more times.The second element is a list which specifies
Ό
.
We first describe the Ό
-list for symmetric W
-graphs (when Ό(x,y)=Ό(y,x)
). There is one element of the Ό
-list for each non-zero value m
taken by Ό
, which consists of a pair whose first element is m
and whose second element is a list of lists; if l
is one of these lists each pair [l[1],l[i]]
represents an edge (x=l[1]
,y=l[i]
) such that Ό(x,y)=Ό(y,x)=m
. For non-symmetric W
-graphs, the first element of each pair in the Ό
-list is a pair [m1,m2]
and each edge [x,y]
obtained from the lists in the second element has to be interpreted as Ό(x,y)=m1
and Ό(y,x)=m2
.
julia> W=coxgroup(:H,3)
Hâ
julia> g=Wgraph(W,3)
2-element Vector{Vector{Vector{Any}}}:
[[2], [1, 2], [1, 3], [1, 3], [2, 3]]
[[-1, [[1, 3], [2, 4], [3, 5], [4, 5]]]]
julia> WGraphToRepresentation(3,g,Pol(:x))
3-element Vector{Matrix{Pol{Int64}}}:
[x² 0 ⊠0 0; 0 -1 ⊠0 0; ⊠; 0 0 ⊠-1 -x; 0 0 ⊠0 x²]
[-1 0 ⊠0 0; 0 -1 ⊠-x 0; ⊠; 0 0 ⊠x² 0; 0 0 ⊠-x -1]
[x² 0 ⊠0 0; 0 x² ⊠0 0; ⊠; 0 -x ⊠-1 0; 0 0 ⊠0 -1]
Chevie.Chars.charinfo
â Methodcharinfo(W)
returns information about the irreducible characters of the finite reflection group or Spets W
. The result is an object with various entries describing properties of the irreducible characters of W
. This object prints at the Repl or in Pluto or Jupyter as a table synthesizing most information.
A field not in the table is .charparams
: it contains parameters for the irreducible characters. A parameter is a list with one item for each irreducible component of W
(as given by refltype
). For an irreducible W
see the helpstring for Chars
for what are the parameters.
julia> charinfo(coxgroup(:G,2)).charparams
6-element Vector{Vector{Vector{Int64}}}:
[[1, 0]]
[[1, 6]]
[[1, 3, 1]]
[[1, 3, 2]]
[[2, 1]]
[[2, 2]]
julia> charinfo(coxgroup(:G,2))
ââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ân0â name ext b B a A spaltenstein lusztig symbolâ
ââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â1 â Ïâââ Id 0 0 0 0 1 1 (0,0,0,0,0,2)â
â2 â Ïâââ det 6 6 6 6 ε ε (01,01,01,01,01,12)â
â3 âÏâ²âââ 3 3 1 5 εâ εⲠ(0,0,1+)â
â4 âÏâ³âââ 3 3 1 5 ε_c εⳠ(0,0,1-)â
â5 â Ïâââ ι 1 5 1 5 ΞⲠΞⲠ(0,0,0,0,1,1)â
â6 â Ïâââ 2 4 1 5 ΞⳠΞⳠ(0,0,0,1,0,1)â
ââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
In the table printed at the Repl, the columns reflect various fields of charinfo
. The column name
reflects the field .charnames
, a name computed from .charparams
. This is the same as charnames(io,W)
where here io
being the Repl has the property :limit
true.
The column ext
shows the exterior powers of the reflection representation. It corresponds to the field .extrefl
which is present only if W
is irreducible. Otherwise, only two items are shown in the column: Id
corresponds to the field .positionId
and shows the trivial character. det
corresponds to the field .positionDet
and shows the determinant character (for Coxeter groups the sign character). When W
is irreducible, the characters marked Îâ±
are the i
-th exterior power of the reflection representation. They are irreducible by a theorem of Steinberg.
The column b
shows the field .b
listing for each character the valuation of the fake degree, and the column B
shows the field .B
, the degree of the fake degree.
The columns a
and A
only appear for Spetsial groups. They correspond then to the fields .a
and .A
, and contain respectively the valuation and the degree of the generic degree of the character (in the one-parameter Hecke algebra hecke(W,Pol())
for W
).
For irreducible groups, the table shows sometimes additional columns, corresponding to a field of the same name.
for Fâ
, the column kondo
gives the labeling of the characters given by Kondo, also used in Lusztig1985, (4.10).
for Eâ, Eâ, Eâ
the column frame
gives the labeling of the characters given by Frame, also used in Lusztig1985, (4.11), (4.12), and (4.13).
for Gâ
the column spaltenstein
gives the labeling of the characters given by Spaltenstein.
for G(de,e,2)
even e
and d>1
, the column malle
gives the parameters for the characters used in Malle1996.
If W
is irreducible spetsial and imprimitive, the column 'symbol(corresponding to the field
.charSymbols`) shows the symbol attached to the corresponding unipotent caracter.
If W isa Spets
, the column restr.
(corresponding to the field .charRestrictions
) gives the number of the corresponding character of Group(W)
.
Finally, the field .hgal
contains the permutation of the characters resulting from a Galois action on the characters of H=hecke(W,Pol()^e)
where e
is the order of the center of W
. H
splits by taking v
an e
-th root of Pol()
, and .hgal
records the permutation effected by the Galois action v->E(e)*v
(charinfo
does not have the key :hgal
if this permutation is trivial). .hgal*conj
, where conj
is the complex conjugaison, is the Opdam involution.
julia> charinfo(complex_reflection_group(24))
ââââ¬ââââââââââââââââââââââ
ân0â name ext b B a Aâ
ââââŒââââââââââââââââââââââ€
â1 â Ïâââ Id 0 0 0 0â
â2 âÏââââ det 21 21 21 21â
â3 â Ïâââ 8 18 8 20â
â4 â Ïâââ ι 1 11 1 13â
â5 âÏââââ β 10 20 8 20â
â6 â Ïâââ 3 13 1 13â
â7 â Ïâââ 2 12 1 13â
â8 â Ïâââ 9 19 8 20â
â9 â Ïâââ 6 18 6 18â
â10â Ïâââ 3 15 3 15â
â11â Ïâââ 4 16 4 17â
â12â Ïâââ
5 17 4 17â
ââââŽââââââââââââââââââââââ
hgal=(11,12)
Chevie.Chars.charnames
â Methodcharnames(ComplexReflectionGroup or Spets;options...)
charnames(io::IO,ComplexReflectionGroup or Spets)
returns the list of character names for the reflection group or Spets W
. The options may imply alternative names in certain cases, or a different formatting of names in general. They can be specified by IO
attributes if giving an IO
as argument.
julia> W=coxgroup(:G,2)
Gâ
julia> charnames(W;limit=true)
6-element Vector{String}:
"Ïâââ"
"Ïâââ"
"Ïâ²âââ"
"Ïâ³âââ"
"Ïâââ"
"Ïâââ"
julia> charnames(W;TeX=true)
6-element Vector{String}:
"\phi_{1,0}"
"\phi_{1,6}"
"\phi_{1,3}'"
"\phi_{1,3}''"
"\phi_{2,1}"
"\phi_{2,2}"
julia> charnames(W;spaltenstein=true,limit=true)
6-element Vector{String}:
"1"
"ε"
"뵉"
"ε_c"
"Ξâ²"
"Ξâ³"
julia> charnames(W;spaltenstein=true,TeX=true)
6-element Vector{String}:
"1"
"\varepsilon"
"\varepsilon_l"
"\varepsilon_c"
"\theta'"
"\theta''"
The last two commands show the character names used by Spaltenstein and Lusztig when describing the Springer correspondence.
Chevie.Chars.classinfo
â Methodclassinfo(W)
returns information about the conjugacy classes of the finite reflection group or Spets W
. The result is an object with various entries describing properties of the conjugacy classes of W
. This object prints at the Repl or in Pluto or Jupyter as a table synthesizing most information.
A field not in the table is .classparams
, containing parameters for the conjugacy classes. Each parameter is a vector which has one item for each irreducible component of W
. For what are the parameters for an irreducible W
, see the helpstring of Chars
.
julia> classinfo(coxgroup(:A,2))
ââââ¬âââââââââââââââââââââââ
ân0âname length order wordâ
ââââŒâââââââââââââââââââââââ€
â1 â 111 1 1 .â
â2 â 21 3 2 1â
â3 â 3 2 3 12â
ââââŽâââââââââââââââââââââââ
The table contains the columns:
name
, corresponding to the field.classnames
: strings describing the conjugacy classes, made out of the information in:classparams
.length
, corresponding to the field.classes
, is the number of elements in the conjugacy class.order
, corresponding to the field.orders
, is the order of elements in the conjugacy class.word
, corresponding to the field.classtext
, describes a word in the generators for the representatives of each conjugacy class. Each word is a list of integers where the generatorW(i)
is represented by the integeri
. For finite Coxeter groups, it is the same asword.(Ref(W),classreps(W))
, and each such representative is of minimal length in its conjugacy class and is a "very good" element in the sense of GeckMichel1997.
Chevie.Chars.classnames
â Methodclassnames(W;options...)
classnames(io::IO,W)
returns the list of class names for the reflection group W
. The optional options are IOContext attributes which can give alternative names in certain cases, or a different formatting of names in general. They can be specified by giving an IO as argument.
Chevie.Chars.conjPerm
â MethodconjPerm(W)
return the permutation of the characters of the group W
which is effected when taking the complex conjugate of the character table.
julia> W=complex_reflection_group(4)
Gâ
julia> conjPerm(W)
(2,3)(5,6)
Chevie.Chars.decompose
â Methoddecompose(ct::CharTable,c::Vector;exact=true)
decompose class function c
(given by its values on conjugacy classes) on irreducible characters as given by CharTable
ct
. By default c
is expected to be a virtual character so the result will be an integer vector. If c
is not a virtual character give the keyword exact=false
to get a correct result.
Chevie.Chars.decomposition_matrix
â Methoddecomposition_matrix(W,p)
This provides an interface to some decomposition matrices for Weyl groups available in the Chevie library: those for Eâ, Eâ, Eâ
for p=2,3,5,7
.
Chevie.Chars.detPerm
â MethoddetPerm(W)
return the permutation of the characters of the reflection group W
which is effected when tensoring by the determinant character (for Coxeter groups this is the sign character).
julia> W=coxgroup(:D,4)
Dâ
julia> detPerm(W)
(1,8)(2,9)(3,11)(4,13)(7,12)
Chevie.Chars.fakedegree
â Functionfakedegree(W, Ï, q=Pol())
returns the fake degree (see fakedegrees
for a definition) of the character of parameter Ï (see charinfo(W).charparams
) of the reflection group W
, evaluated at q
.
julia> fakedegree(coxgroup(:A,2),[[2,1]],Pol(:q))
Pol{Cyc{Int64}}: q²+q
Chevie.Chars.fakedegrees
â Functionfakedegrees(W, q=Pol())
returns a list holding the fake degrees of the reflection group W
on the vector space V
, evaluated at q
. These are the graded multiplicities of the irreducible characters of W
in the quotient SV/I
where SV
is the symmetric algebra of V
and I
is the ideal generated by the homogeneous invariants of positive degree in SV
. The ordering of the result corresponds to the ordering of the characters in charinfo(W)
.
julia> fakedegrees(coxgroup(:A,2),Pol(:q))
3-element Vector{Pol{Int64}}:
q³
q²+q
1
Chevie.Chars.induction_table
â Methodinduction_table(u,g)
returns an object describing the decomposition of the irreducible characters of the subgroup u
induced to the group g
. At the repl or IJulia or Pluto, a table is displayed where the rows correspond to the characters of the parent group, and the columns to those of the subgroup. The returned object has a field scalar
which is a Matrix{Int}
containing the induction table, and the other fields contain labeling information taken from the character tables of u
and g
when it exists.
julia> g=Group([Perm(1,2),Perm(2,3),Perm(3,4)])
Group([(1,2),(2,3),(3,4)])
julia> u=Group( [ Perm(1,2), Perm(3,4) ])
Group([(1,2),(3,4)])
julia> induction_table(u,g) # needs "using GAP"
Induction table from Group((1,2),(3,4)) to Group((1,2),(2,3),(3,4))
âââââ¬ââââââââââââââââ
â âX.1 X.2 X.3 X.4â
âââââŒââââââââââââââââ€
âX.1â . 1 . .â
âX.2â . 1 1 1â
âX.3â 1 1 . .â
âX.4â 1 . 1 1â
âX.5â 1 . . .â
âââââŽââââââââââââââââ
julia> g=coxgroup(:G,2)
Gâ
julia> u=reflection_subgroup(g,[1,6])
Gââââ
â=Aâ
julia> t=induction_table(u,g)
Induction table from Gââââ
â=Aâ to Gâ
âââââââ¬âââââââââ
â â111 21 3â
âââââââŒâââââââââ€
âÏâââ â . . 1â
âÏâââ â 1 . .â
âÏâ²ââââ 1 . .â
âÏâ³ââââ . . 1â
âÏâââ â . 1 .â
âÏâââ â . 1 .â
âââââââŽâââââââââ
IO
attributes can be transmitted to the table format method
julia> xdisplay(t;rows=[5],cols=[3,2])
Induction table from Gââââ
â=Aâ to Gâ
âââââââ¬âââââ
â â3 21â
âââââââŒâââââ€
âÏâââ â. 1â
âââââââŽâââââ
It is also possible to TeX induction tables with xdisplay(t;TeX=true)
.
induction_table
also works for spets (reflection cosets).
Chevie.Chars.j_induction_table
â Methodj_induction_table(H, W)
computes the decomposition into irreducible characters of the reflection group W
of the j
-induced of the irreducible characters of the reflection subgroup H
. The j
-induced of Ï
is the sum of the irreducible components of the induced of Ï
which have same b
-function (see charinfo
) as Ï
. What is returned is an InductionTable
struct.
julia> W=coxgroup(:D,4)
Dâ
julia> H=reflection_subgroup(W,[1,3])
Dâââââ=AâΊâ²
julia> j_induction_table(H,W)
j-induction table from Dâââââ=AâΊâ² to Dâ
âââââââ¬âââââââââ
â â111 21 3â
âââââââŒâââââââââ€
â11+ â . . .â
â11- â . . .â
â1.111â . . .â
â.1111â . . .â
â11.2 â . . .â
â1.21 â 1 . .â
â.211 â . . .â
â2+ â . . .â
â2- â . . .â
â.22 â . . .â
â1.3 â . 1 .â
â.31 â . . .â
â.4 â . . 1â
âââââââŽâââââââââ
Chevie.Chars.on_chars
â Methodon_chars(G,aut)
aut
is an automorphism of the group G
(for a permutation group, this could be given as a permutation normalizing G
). The result is the permutation of the indices of the irreducible characters induced by aut
.
julia> WF=rootdatum("3D4")
³Dâ
julia> on_chars(Group(WF),WF.phi)
(1,2,7)(8,9,12)
Chevie.Chars.representation
â Methodrepresentation(W,i)
returns, for the i
-th irreducible representation of the complex reflection group or Spets W
, a list of matrices images of the generating reflections of W
in a model of the representation (for Spets, the result is a NamedTuple
with fields gens
, a representation of Group(W)
, and F
, the matrix for W.phi
in the representation). This function is based on the classification, and is not yet fully implemented for Gââ
; 78 representations are missing out of 169, that is, representations of dimension â¥140, except half of those of dimensions 315, 420 and 840.
julia> representation(complex_reflection_group(24),3)
3-element Vector{Matrix{Cyc{Int64}}}:
[1 0 0; -1 -1 0; -1 0 -1]
[-1 0 -1; 0 -1 (1-â-7)/2; 0 0 1]
[-1 -1 0; 0 1 0; 0 (1+â-7)/2 -1]
Chevie.Chars.representations
â Methodrepresentations(W)
returns the list of representations of the complex reflection group or Spets W
(see representation
).
julia> representations(coxgroup(:B,2))
5-element Vector{Vector{Matrix{Int64}}}:
[[1;;], [-1;;]]
[[1 0; -1 -1], [1 2; 0 -1]]
[[-1;;], [-1;;]]
[[1;;], [1;;]]
[[-1;;], [1;;]]
Chevie.Chars.schur_functor
â Methodschur_functor(mat,l)
mat
should be a square matrix and l
a partition. The result is the Schur functor of the matrix mat
corresponding to partition l
; for example, if l==[n]
it returns the n-th symmetric power and if l==[1,1,1]
it returns the 3rd exterior power. The current algorithm (from Littlewood) is rather inefficient so it is quite slow for partitions of n where n>6
.
julia> m=cartan(:A,3)
3Ã3 Matrix{Int64}:
2 -1 0
-1 2 -1
0 -1 2
julia> schur_functor(m,[2,2])
6Ã6 Matrix{Rational{Int64}}:
9 -6 4 3//2 -2 1
-12 16 -16 -4 8 -4
4 -8 16 2 -8 4
12 -16 16 10 -16 12
-4 8 -16 -4 16 -12
1 -2 4 3//2 -6 9
LaurentPolynomials.discriminant
â Methoddiscriminant(W)
returns the discriminant of the complex reflection group W
, as a polynomial in the fundamental invariants. The discriminant is the invariant obtained by taking the product of the linear forms describing the reflecting hyperplanes of W
, each raised to the order of the corresponding reflection. The discriminant is returned as a function f
such that the discriminant in the variables aâ,âŠ,aâ
is obtained by calling f(aâ,âŠ,aâ)
. For the moment, this function is implemented only for the exceptional complex reflection groups Gâ
to Gââ
.
julia> W=complex_reflection_group(4);@Mvp x,y
julia> discriminant(W)(x,y)
Mvp{Int64}: x³-y²
Chevie.InitChevie.chevieget
â Methodchevieget(t,w) returns CHEVIE[Symbol(t)][w]
Chevie.InitChevie.getchev
â Methodgetchev(t::TypeIrred,f::Symbol,extra...)
get CHEVIE[field(t)][f](extra...)
Chevie.Murphy
â ModuleThis module Murphy.jl
has been ported in december 2020 from
murphy.g Copyright (C) July 1998 Andrew Mathas mathas@maths.usyd.edu.au University of Sydney
It allows computations with the Murphy basis of an Hecke algebra of type A.
Multiplication of Murphy basis elements is done using the Garnir tableaux as described in Murphy's paper Mur1995. This also lets us convert from the T-basis to the Murphy basis since T_w = M([[1],âŠ,[n]], [[1],âŠ,[n]]) * T_w
. (We use "M" for the Murphy basis).
As with the T-basis, Murphy basis elements are implemented by ModuleElts
. Here the keys are standard tableaux pairs. These are represented by a tuple (mu,s,t)
where mu
, s
and t
are all integers and H.Murphy.partitions[mu]
is the associated partition and H.Murphy.tableaux[mu][s]
(resp t
) is a named tuple describing s
(this tuple is described in the function initMurphy()
below).
Throughout memory considerations are thrown to the wind as we cache many of the more horrible expansions as we go along in order to save time when we next need them.
Chevie.Murphy.SpechtModules
â ConstantSet Murphy.SpechtModules[]=true
to work just inside the Specht modules. This makes computations with the Murphy basis inside Specht modules modules much faster but also means that T
to Murphy
basis conversions do not work, even if Murphy.SpechtModules[]=false
is set later.
Chevie.Families
â ModuleFamilies of unipotent characters
The blocks of the (rectangular) matrix $âšRᵪ,Ïâ©_{ð ^F}$ when Ï
runs over Irr(W)
and Ï
runs over the unipotent characters, are called the Lusztig families. When ð
is split and W
is a Coxeter group they correspond on the Irr(W)
side to two-sided Kazhdan-Lusztig cells â- for split Spetses they correspond to Rouquier blocks of the Spetsial Hecke algebra. The matrix of scalar products $âšRᵪ,Ïâ©_{ð ^F}$ can be completed to a square matrix $âšA_{Ï'},Ïâ©_{ð ^F}$ where $A_{Ï'}$ are the characteristic functions of character sheaves on $ð ^F$; this square matrix is called the Fourier matrix of the family.
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.
julia> W=coxgroup(:G,2)
Gâ
julia> uc=UnipotentCharacters(W);
julia> uc.families
3-element Vector{Family}:
Family(D(ð â),[5, 6, 4, 3, 8, 7, 9, 10])
Family(Câ,[1])
Family(Câ,[2])
julia> uc.families[1]
Family(D(ð â),[5, 6, 4, 3, 8, 7, 9, 10])
Drinfeld double of ð â, Lusztigâ²s version
ââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââ
âlabel âeigen â
ââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â(1,1) â 1 1//6 1//2 1//3 1//3 1//6 1//2 1//3 1//3â
â(gâ,1) â 1 1//2 1//2 . . -1//2 -1//2 . .â
â(gâ,1) â 1 1//3 . 2//3 -1//3 1//3 . -1//3 -1//3â
â(1,Ï) â 1 1//3 . -1//3 2//3 1//3 . -1//3 -1//3â
â(1,ε) â 1 1//6 -1//2 1//3 1//3 1//6 -1//2 1//3 1//3â
â(gâ,ε) â -1 1//2 -1//2 . . -1//2 1//2 . .â
â(gâ,ζâ) â ζâ 1//3 . -1//3 -1//3 1//3 . 2//3 -1//3â
â(gâ,ζâ²)â ζâ² 1//3 . -1//3 -1//3 1//3 . -1//3 2//3â
ââââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââ
julia> charnames(uc)[uc.families[1].charNumbers]
8-element Vector{String}:
"phi2,1"
"phi2,2"
"phi1,3''"
"phi1,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 "drinfeld_double" of a small finite group and the '.charLabels' come from this construction.
Chevie.Families.Family
â TypeFamily(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 struct Family
.
The other (optional) arguments add information to the family defined by the first argument. If given, the second argument becomes f.charNumbers
. If given, the third argument opt
is a Dict
whose keys are added to the resulting family.
If opt
has a key signs
, this 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.
julia> Family("C2")
Family(Câ,4)
Drinfeld double D(â€/2)
ââââââââ¬âââââââââââââââââââââââââââââ
âlabel âeigen â
ââââââââŒâââââââââââââââââââââââââââââ€
â(1,1) â 1 1//2 1//2 1//2 1//2â
â(gâ,1)â 1 1//2 1//2 -1//2 -1//2â
â(1,ε) â 1 1//2 -1//2 1//2 -1//2â
â(gâ,ε)â -1 1//2 -1//2 -1//2 1//2â
ââââââââŽâââââââââââââââââââââââââââââ
julia> Family("C2",4:7,Dict(:signs=>[1,-1,1,-1]))
Family(Câ,4:7)
Drinfeld double D(â€/2)
ââââââââ¬âââââââââââââââââââââââââââââââââââ
âlabel âeigen signs â
ââââââââŒâââââââââââââââââââââââââââââââââââ€
â(1,1) â 1 1 1//2 -1//2 1//2 -1//2â
â(gâ,1)â 1 -1 -1//2 1//2 1//2 -1//2â
â(1,ε) â 1 1 1//2 1//2 1//2 1//2â
â(gâ,ε)â -1 -1 -1//2 -1//2 1//2 1//2â
ââââââââŽâââââââââââââââââââââââââââââââââââ
Base.:*
â Method<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.
Base.conj
â Methodconj(f::Family)
: is a synonym for 'galois(f,-1)'.
Base.length
â Methodlength(f::Family)
: how many characters are in the family.
Chevie.Families.FamiliesClassical
â MethodFamiliesClassical(l)
l
should be a list of symbols which classify the unipotent characters of a classical reductive group, like symbols(2,r)
for type Báµ£
or Cáµ£
, or symbols(2,r,0)
for type Dáµ£
. The function returns the list of families determined by these symbols.
julia> FamiliesClassical(symbols(2,3)) # for a reductive group of type Bâ
6-element Vector{Family}:
Family(112,[2])
Family(022,[6])
Family(3,[9])
Family(01123,[1, 3, 8, 11])
Family(0112233,[4])
Family(013,[5, 7, 10, 12])
Chevie.Families.cospecial
â Methodcospecial(f::Family)
the index of the cospecial character in f
Chevie.Families.drinfeld_double
â Methoddrinfeld_double(g;lu=false,pivotal=nothing)
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 ð (Î)
of pairs (x,Ï)
taken up to Î
-conjugacy, where xâÎ
and Ï
is an irreducible complex-valued character of C_Î(x)
. To such a pair Ï=(x,Ï)
is associated an eigenvalue of Frobenius defined by $Ï_Ï:=Ï(x)/Ï(1)$. Lusztig then defines a Fourier matrix Sâ
whose coefficient is given, for Ï=(x,Ï)
and Ï'=(x', Ï')
, by:
$Sâ_{Ï,Ï'}:=|C_Î(x)â»Â¹|â_{Ïâ=(xâ,Ïâ)}Ïâ(x)Ï(yâ)$
where the sum is over all pairs Ïââð (Î)
which are Î
-conjugate to Ï'
and such that $yââ C_Î(x)$. This coefficient also represents the scalar product $âšÏ,Ï'â©_{ð^F}$ of the corresponding unipotent characters.
A way to understand the formula for $Sâ_{Ï,Ï'}$ better is to consider another basis of the complex vector space with basis ð (Î)
, indexed by the pairs (x,y)
taken up to Î
-conjugacy, where x
and y
are commuting elements of Î
. This basis is called the basis of Mellin transforms, and given by:
$(x,y)=â_{Ïâ Irr(C_Î(x))}Ï(y)(x,Ï)$
In the basis of Mellin transforms, the linear map Sâ
is given by (x,y)âŠ(xâ»Â¹,yâ»Â¹)
and the linear transformation T
which sends Ï
to Ï_ÏÏ
becomes (x,y)âŠ(x,xy)
. These are particular cases of the permutation representation of GLâ(â€)
on the basis of Mellin transforms where $\begin{pmatrix}a&b\cr c&d\end{pmatrix}$ acts by (x,y)âŠ(xáµyáµ,xá¶yáµ)
.
Fourier matrices in finite reductive groups are given by the above matrix Sâ
. But for non-rational Spetses, we use a different matrix S
which in the basis of Mellin transforms is given by (x,y)âŠ(yâ»Â¹,x)
. Equivalently, the formula $S_{Ï,Ï'}$ differs from the formula for $Sâ_{Ï,Ï'}$ in that there is no complex conjugation of Ïâ
; thus the matrix S
is equal to Sâ
multiplied on the right by the permutation matrix which corresponds to (x,Ï)âŠ(x,Ï)
. The advantage of the matrix S
over Sâ
is that the pair S,T
satisfies directly the axioms for a fusion algebra (see below); also the matrix S
is symmetric, while Sâ
is Hermitian.
Thus there are two variants of 'drinfeld_double`:
drinfeld_double(g;lu=false)
returns a family containing Lusztig's Fourier matrix Sâ
, 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'.
drinfeld_double(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 Sâ
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â»Â¹,x)
or (x,y)âŠ(yâ»Â¹,xâ»Â¹)
depending on the call).
:special
: the index of the special element, which is (x,Ï)=(1,1)
.
julia> drinfeld_double(coxsym(3)) # needs "using GAP"
Family(drinfeld_double(coxsym(3)),8)
Drinfeld double D(coxsym(3))
âââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââ
âlabel âeigen â
âââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â(1,1) â 1 1//6 1//3 1//6 -1//2 -1//2 1//3 1//3 1//3â
â(1,X.2)â 1 1//3 2//3 1//3 . . -1//3 -1//3 -1//3â
â(1,X.3)â 1 1//6 1//3 1//6 1//2 1//2 1//3 1//3 1//3â
â(21,1) â 1 -1//2 . 1//2 1//2 -1//2 . . .â
â(21,-1)â -1 -1//2 . 1//2 -1//2 1//2 . . .â
â(3,1) â 1 1//3 -1//3 1//3 . . 2//3 -1//3 -1//3â
â(3,ζâ) â ζâ 1//3 -1//3 1//3 . . -1//3 -1//3 2//3â
â(3,ζâ²)â ζâ² 1//3 -1//3 1//3 . . -1//3 2//3 -1//3â
âââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââ
julia> drinfeld_double(coxsym(3);lu=true)
Family(Ldrinfeld_double(coxsym(3)),8)
Lusztigâ²sDrinfeld double D(coxsym(3))
âââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââ
âlabel âeigen â
âââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â(1,1) â 1 1//6 1//3 1//6 -1//2 -1//2 1//3 1//3 1//3â
â(1,X.2)â 1 1//3 2//3 1//3 . . -1//3 -1//3 -1//3â
â(1,X.3)â 1 1//6 1//3 1//6 1//2 1//2 1//3 1//3 1//3â
â(21,1) â 1 -1//2 . 1//2 1//2 -1//2 . . .â
â(21,-1)â -1 -1//2 . 1//2 -1//2 1//2 . . .â
â(3,1) â 1 1//3 -1//3 1//3 . . 2//3 -1//3 -1//3â
â(3,ζâ) â ζâ 1//3 -1//3 1//3 . . -1//3 2//3 -1//3â
â(3,ζâ²)â ζâ² 1//3 -1//3 1//3 . . -1//3 -1//3 2//3â
âââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââ
Chevie.Families.family_imprimitive
â Methodfamily_imprimitive(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 containing S
.
julia> family_imprimitive([[0,1],[1],[0]])
Family(0011,3)
imprimitive family
âââââââ¬âââââââââââââââââââââââââââââââ
âlabelâeigen 1 2 3â
âââââââŒâââââââââââââââââââââââââââââââ€
â1 â ζâ² â-3/3 -â-3/3 â-3/3â
â2 â 1 -â-3/3 ζâ²â-3/3 -ζââ-3/3â
â3 â 1 â-3/3 -ζââ-3/3 ζâ²â-3/3â
âââââââŽâââââââââââââââââââââââââââââââ
Chevie.Families.fourier
â Methodfourier(f::Family
: returns the Fourier matrix for the family f
.
Chevie.Families.fusion_algebra
â Functionfusion_algebra(f::Family)
or fusion_algebra(S,special=1)
All the Fourier matrices S
in Chevie are unitary, that is Sâ»Â¹=conj(S)
, and have a special line s
(the line of index s=special(f)
for a family f
) such that no entry Sâ,áµ¢
is equal to 0
. Further, they have the property that the sums Cáµ¢,ⱌ,â=sumâ Sáµ¢,â Sⱌ,â conj(Sâ,â)/Sâ,â
take integral values. Finally, S
has the property that complex conjugation does a permutation with signs Ï
of the lines of S
.
It follows that we can define a â€
-algebra A
as follows: it has a basis báµ¢
indexed by the lines of S
, and has a multiplication defined by the fact that the coefficient of bᵢbⱌ
on bâ
is equal to Cáµ¢,ⱌ,â
. This algebra can be specified by giving a family f
or just its Fourier matrix and the number of its special line.
A
is commutative, and has as unit the element bâ
; the basis Ï(báµ¢)is
dual to báµ¢
for the linear form (báµ¢,bⱌ)=Cáµ¢,ⱌ,Ïâââ`.
julia> W=complex_reflection_group(4)
Gâ
julia> uc=UnipotentCharacters(W);f=uc.families[4];
julia> A=fusion_algebra(fourier(f),1)
Fusion Algebra dim.5
julia> b=basis(A)
5-element Vector{AlgebraElt{Chevie.Families.FusionAlgebra, Int64}}:
Bâ
Bâ
Bâ
Bâ
Bâ
julia> b*permutedims(b)
5Ã5 Matrix{AlgebraElt{Chevie.Families.FusionAlgebra, Int64}}:
Bâ Bâ Bâ Bâ Bâ
Bâ -Bâ+Bâ
Bâ+Bâ Bâ-Bâ Bâ
Bâ Bâ+Bâ -Bâ+Bâ
-Bâ+Bâ Bâ
Bâ Bâ-Bâ -Bâ+Bâ Bâ+Bâ-Bâ
-Bâ
Bâ
Bâ Bâ -Bâ Bâ
julia> CharTable(A)
CharTable(Fusion Algebra dim.5)
âââ¬ââââââââââââââââââ
â â1 2 3 4 5â
âââŒââââââââââââââââââ€
â1â1 â-3 -â-3 2 -1â
â2â1 1 1 . 1â
â3â1 -1 -1 . 1â
â4â1 . . -1 -1â
â5â1 -â-3 â-3 2 -1â
âââŽââââââââââââââââââ
Chevie.Families.ndrinfeld_double
â Methodndrinfeld_double(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.
julia> Families.ndrinfeld_double(complex_reflection_group(5))
378
Chevie.Families.special
â Methodspecial(f::Family)
the index of the special character in f
CyclotomicNumbers.galois
â Methodgalois(f::Family,p::Int)
x->galois(x,p)
is applied to the Fourier matrix and eigenvalues of Frobenius of the family.
julia> f=UnipotentCharacters(complex_reflection_group(3,1,1)).families[2]
Family(0011,[4, 3, 2])
imprimitive family
âââââââ¬âââââââââââââââââââââââââââââââ
âlabelâeigen 1 2 3â
âââââââŒâââââââââââââââââââââââââââââââ€
â1 â ζâ² â-3/3 â-3/3 -â-3/3â
â2 â 1 â-3/3 ζâ²â-3/3 -ζââ-3/3â
â3 â 1 -â-3/3 -ζââ-3/3 ζâ²â-3/3â
âââââââŽâââââââââââââââââââââââââââââââ
julia> galois(f,-1)
Family(conj(0011),[4, 3, 2])
conj(imprimitive family)
âââââââ¬âââââââââââââââââââââââââââââââ
âlabelâeigen 1 2 3â
âââââââŒâââââââââââââââââââââââââââââââ€
â1 â ζâ -â-3/3 -â-3/3 â-3/3â
â2 â 1 -â-3/3 -ζââ-3/3 ζâ²â-3/3â
â3 â 1 â-3/3 ζâ²â-3/3 -ζââ-3/3â
âââââââŽâââââââââââââââââââââââââââââââ
PermGroups.Perms.invpermute
â Methodinvpermute(f::Family, p::Perm)
returns a copy of f
with the Fourier matrix, eigenvalues of Frobenius, :charLabelsâŠ
invpermuted by p
.
julia> f=UnipotentCharacters(complex_reflection_group(3,1,1)).families[2]
Family(0011,[4, 3, 2])
imprimitive family
âââââââ¬âââââââââââââââââââââââââââââââ
âlabelâeigen 1 2 3â
âââââââŒâââââââââââââââââââââââââââââââ€
â1 â ζâ² â-3/3 â-3/3 -â-3/3â
â2 â 1 â-3/3 ζâ²â-3/3 -ζââ-3/3â
â3 â 1 -â-3/3 -ζââ-3/3 ζâ²â-3/3â
âââââââŽâââââââââââââââââââââââââââââââ
julia> invpermute(f,Perm(1,2,3))
Family(0011,[2, 4, 3])
Permuted((1,2,3),imprimitive family)
âââââââ¬âââââââââââââââââââââââââââââââ
âlabelâeigen 3 1 2â
âââââââŒâââââââââââââââââââââââââââââââ€
â3 â 1 ζâ²â-3/3 -â-3/3 -ζââ-3/3â
â1 â ζâ² -â-3/3 â-3/3 â-3/3â
â2 â 1 -ζââ-3/3 â-3/3 ζâ²â-3/3â
âââââââŽâââââââââââââââââââââââââââââââ
FiniteFields.FFE
â MethodFFE{p}(z::Cyc)
where z
is a p
-integral cyclotomic number (that is, z
times some number prime to p
is a cyclotomic integer), returns the reduction of z
mod. p
, an element of some extension ðœ_{pʳ}
of the prime field ðœâ
.
julia> FFE{3}(E(7))
Zâââ¹â°âŽ
Chevie.Tools.abelian_gens
â Methodabelian_gens(A)
A
should be an abelian group or the list of its generators. Such a group has a unique decomposition up to isomorphism as a product of cyclic groups C(nâ)ÃâŠÃC(nâ)
where C(náµ¢)
is a cyclic group of order náµ¢
and náµ¢
divides náµ¢ââ
. The function returns a list of generators for each of the C(náµ¢)
.
julia> abelian_gens([Perm(1,2),Perm(3,4,5),Perm(6,7)])
2-element Vector{Perm{Int16}}:
(6,7)
(1,2)(3,5,4)(6,7)
Chevie.Tools.abelian_invariants
â Methodabelian_invariants(G::Group )
G
should be an abelian group. Such a group has a unique decomposition up to isomorphism as a product of cyclic groups C(nâ)ÃâŠÃC(nâ)
where C(náµ¢)
is a cyclic group of order náµ¢
and náµ¢
divides náµ¢ââ
. The function returns the list nâ,âŠ,nâ
.
julia> abelian_invariants(Group(Perm(1,2),Perm(3,4,5),Perm(6,7)))
2-element Vector{Int64}:
2
6
LaurentPolynomials.valuation
â Methodvaluation(c::Union{Integer,Rational{<:Integer},p::Integer)
p
-adic valuation of c
(largest power of p
which divides c
; for a Rational
, valuation of the numerator minus that of the denominator).
julia> valuation.(24,(2,3,5))
(3, 1, 0)
Chevie.FFfac
â ModuleFactoring polynomials over finite fields
see factor
.
Chevie.FFfac.factors_same_degree
â Methodfactors_same_degree(f::Pol{FFE{p}},d,F::GF)where p
find the irreducible factors of f
assumed to be a square free product of monic irreducible factors of degree d
over a finite field F
of characteristic p
.
Chevie.FFfac.factors_squarefree
â Methodfactors_squarefree(f::Pol{FFE{p}},F::GF)where p
find the irreducible factors of f
assumed to be a square free monic polynomial with nonzero constant term over a finite field F
of characteristic p
.
Primes.factor
â Methodfactor(f::Pol{FFE{p}}[, F])
Given f
a polynomial over a finite field of characteristic p
, factor f
, by default over the field of its coefficients, or if specified over the field F
. The result is a Primes.Factorization{Pol{FFE{p}}}
.
julia> @Pol q
Pol{Int64}: q
julia> f=q^3*(q^4-1)^2*Z(3)^0
Pol{FFE{3}}: q¹¹+qâ·+q³
julia> factor(f)
(q²+1)² * (q+1)² * (q-1)² * q³
julia> factor(f,GF(9))
(q+1)² * (q-1)² * (q+Zâ²)² * (q+Zââ¶)² * q³
Chevie.HeckeAlgebras
â ModuleThis module implements Hecke algebras associated to finite complex reflection groups and arbitrary Coxeter groups (these algebras are called Iwahori-Hecke algebras in this last case), and also implements the character tables, Schur elements and representations of Hecke algebras for finite groups. For Iwahori-Hecke algebras and G(d,1,1)
this module also implements the standard T
basis; see the module KL
for Kazhdan-Lusztig bases.
Let (W,S)
be a Coxeter system and let mââ
be the order of st
for s,tâ S
. Let R
be a commutative ring with 1 and for sâ S
let uââ,uâââ R
be elements which depend only on the conjugacy class of s
in W
(this is the same as requiring that uâáµ¢=uâáµ¢
whenever mââ
is odd). The Iwahori-Hecke algebra of W
over R
with parameters uâáµ¢
is a deformation of the group algebra of W
over R
defined as follows: it is the unitary associative R
-algebra generated by elements Tâ, sâ S
subject to the relations:
$(Tâ-uââ)(Tâ-uââ)=0$ for all sâ S
(the quadratic relations)
$TâTâTââŠ= TâTâTââŠ$ with mââ
factors on each side (the braid relations)
If uââ=1
and uââ=-1
for all s
then the quadratic relations become Tâ²=1
and the deformation of the group algebra is trivial.
Since the generators Tâ
satisfy the braid relations, H
is in fact a quotient of the group algebra of the braid group associated with W
. The braid relations also imply that for any reduced expression s_1⯠s_m
of w â W
the product Tâ_1⯠Tâ_m
has the same value, that we denote T_w
. We have T_1=1
; if one of the uâáµ¢
is invertible, the {T_w}_{wâ W}
form an R
-basis of the Iwahori-Hecke algebra which specializes to the canonical basis of the group algebra R[W]
for uâââŠ1
and uâââŠ-1
.
When one of the uâáµ¢
is invertible, the structure constants (the decomposion of a product T_vT_w
) in the T_w
basis are obtained as follows. Choose a reduced expression for v
, say v=s_1 ⯠s_k
and apply inductively the formula:
$T_sT_w=T_{sw}$ if l(sw)=l(w)+1
$T_sT_w=-uââuââT_{sw}+(uââ+uââ)T_w$ if l(sw)=l(w)-1
.
If one of uââ
or uââ
is invertible in R
, for example uââ
, then by changing the generators to Tâ²â=-Tâ/uââ
, and setting qâ=-uââ/uââ
, the braid relations do no change (since when mââ
is odd we have uâáµ¢=uâáµ¢
) but the quadratic relations become (Tâ²â-qâ)(Tâ²â+1)=0
. This normalisation is the most common form considered in the literature. Another common form in the context of Kazhdan-Lusztig theory, is uââ=âqâ
and uââ=-âqââ»Â¹
. The form provided, with two parameters per generator, is often useful, for instance when constructing the Jones polynomial. If for all s
we have uââ=q
, uââ=-1
then we call the corresponding algebra the "one-parameter" or "Spetsial" Iwahori-Hecke algebra associated with W
.
For some Iwahori-Hecke algebras the character table, and in general Kazhdan-Lusztig bases, require a square root of -uââuââ
. These square roots can be specified with the keyword rootpara
when constructing the algebra; after this the function rootpara(H)
will return the chosen roots. If not specified, we try to extract roots automatically when needed; rootpara(H)
informs on the choices made. Note that some mathematical results require an explicit choice of one of the two possible roots which cannot be automatically made thus require a keyword initialisation.
There is a universal choice for R
and uâáµ¢
: Let uâáµ¢:sâ S,iâ[0,1]
be indeterminates such that uâáµ¢=uâáµ¢
whenever mââ
is odd, and let A=â€[uâáµ¢]
be the corresponding polynomial ring. Then the Hecke algebra H
of W
over A
with parameters uâáµ¢
is called the generic Iwahori-Hecke algebra of W
. Any Hecke algebra Hâ
with parameters vâáµ¢
can be obtained by specialization from H
, since there is a unique ring homomorphism f:A â R
such that f(uâáµ¢)=vâáµ¢
for all i
. Then via f
we can identify Hâ
to $Râ _A H$.
Certain invariants of the irreducible characters of the one-parameter Hecke algebra play a special role in the representation theory of the underlying finite Coxeter groups, namely the a
- and A
-invariants. For basic properties of Iwahori-Hecke algebras and their relevance to the representation theory of finite groups of Lie type, see for example Curtis and Reiner 1987 Sections~67 and 68.
In the following example, we compute the multiplication table for the 0
-IwahoriâHecke algebra associated with the Coxeter group of type A_2
.
julia> W=coxgroup(:A,2)
Aâ
julia> H=hecke(W,0) # One-parameter algebra with `q=0`
hecke(Aâ,0)
julia> T=Tbasis(H); # Create the `T` basis
julia> b=T.(elements(W)) # the basis
6-element Vector{HeckeTElt{HeckeAlgebra{Int64, Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}, Int64, Perm{Int16}}}:
T.
Tâ
Tâ
Tââ
Tââ
Tâââ
julia> b*permutedims(b) # multiplication table
6Ã6 Matrix{HeckeTElt{HeckeAlgebra{Int64, Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}, Int64, Perm{Int16}}}:
T. Tâ Tâ Tââ Tââ Tâââ
Tâ -Tâ Tââ -Tââ Tâââ -Tâââ
Tâ Tââ -Tâ Tâââ -Tââ -Tâââ
Tââ Tâââ -Tââ -Tâââ -Tâââ Tâââ
Tââ -Tââ Tâââ -Tâââ -Tâââ Tâââ
Tâââ -Tâââ -Tâââ Tâââ Tâââ -Tâââ
Thus, we work with algebras with arbitrary parameters. We will see that this also works on the level of characters and representations.
For general complex reflection groups, the picture is similar. The Hecke algebras are deformations of the group algebras, generalizing those for real reflection groups.
The definition is as a quotient of the algebra of the braid group. We assume now that W
is a finite reflection group in the complex vector space V
. The braid group associated is the fundamental group Î â
of the space  $(V-\bigcup_{H\in\mathcal H} H)/W$, where $\mathcal H$ is the set of reflecting hyperplanes of W
. This group is generated by braid reflections, elements which by the natural map from the braid group to the reflection group project to distinguished reflections. The braid reflections which project to a given W
-orbit of reflections are conjugate. Let ð¬
be a representative of such a conjugacy class of braid reflections, let e
be the order of the image of ð¬
in W
, and let $u_{ð¬,0},âŠ,u_{ð¬,e-1}$ be indeterminates. The generic Hecke algebra of W
is the $â€[u_{ð¬,i}^{± 1}]_{ð¬,i}$-algebra quotient of the braid group algebra by the relations $(ð¬-u_{ð¬,0})âŠ(ð¬-u_{ð¬,e-1})=0$, and an arbitrary Hecke algebra for W
is an algebra obtained from this generic algebra by specializing some of the parameters.
The generic Hecke algebras are explicitely described by a presentation of the braid group. The braid group can be presented by homogeneous relations in the braid reflections, called braid relations, described in Broué-Malle-Rouquier 1998 and Bessis-Michel 2003 (some of which were obtained using the VKCURVE GAP3-package, also ported to Julia). Furthermore, these presentations are such that the reflection group is presented by the same relations, plus relations describing the order of the generating reflections, called the order relations. Thus the Hecke algebra has a presentation similar to that of W
, with the same braid relations but the order relations replaced by a deformed version.
If Sâ W
is the set of distinguished reflections of W
which lift to generating braid reflections in the braid group, for each conjugacy class of an s
of order e
we take indeterminates uââ,âŠ,uââââ
. Then the generic Hecke algebra is the $â€[uâáµ¢^{±1}]âáµ¢$-algebra H
with generators T_s
for each sâ S
presented by the braid relations and the deformed order relations $(T_s-u_{s,0})âŠ(T_s-u_{s,e-1})=0$.
Ariki, Koike and Malle have computed the character table of some of these algebras, including those for all 2-dimensional reflection groups, see Broué-Malle 1993 and Malle 1996; our data has models of all representation and character tables for real reflection groups; it contains the same for imprimitive groups and for primitive groups of dimension 2 and 3 (these last representations have been computed in Malle-Michel 2010) and contains also models and character tables computed by Michel for Gââ
and Gââ
; it contains also partial lists of representations and partial character tables for the remaining groups Gââ,Gââ
and Gââ
, computed by Malle and Michel for Gââ
and by Michel for the other two algebras.
The quotient of the Hecke algebra obtained by the specialisation $u_{ð¬,i}⊠ζââ±$ is isomorphic to the group algebra of W
. It was conjectured for 20 years that over a splitting ring the Hecke algebra is itself isomorphic to the group algebra of W
over the same ring. This was called the freeness conjecture since the main problem is to show that the Hecke algebra is free of dimension |W|
. This has finally been proved in 2019 thanks to the work of many people including Marin, Pfeiffer, Chavli and Tsuchioka for exceptional groups. Along the way it has been proven that there exists a set {b_w}_{wâ W}
of elements of the Braid group such that b_1=1
and b_w
maps to w
by the natural quotient map, such that their images T_w
form a basis of the Hecke algebra.
It is conjectured that such a basis T_w
can be chosen such that additionnaly the linear form t
defined by t(T_w)=0
if wâ 1
and t(1)=1
is a symmetrizing form for the symmetric algebra H
. This is well known for all real reflection groups and has been proved in Malle-Mathas 1998 for imprimitive reflection groups and in Malle-Michel 2010 for some primitive groups of dimension 2 and 3. Chlouveraki and Chavli have handled some other 2-dimensional cases. For each irreducible character Ï
of H
we define the Schur element Sᵩ
associated to Ï
by the condition that for any element T
of H
we have t(T)=âᵩ Ï(T)/Sᵩ
. It can be shown that the Schur elements are Laurent polynomials, and they do not depend on the choice of a basis having the above property. Malle has computed these Schur elements, assuming the above conjecture; they are in the Chevie data.
See the function hecke
for various ways of specifying the parameters of a Hecke algebra. Look also at the docstrings of central_monomials, char_values, class_polynomials, schur_elements, isrepresentation, factorized_schur_elements
, and at the methods for Hecke algebras of CharTable, representations, reflrep
.
Taking apart Hecke elements is done with the functions getindex
, setindex!
, keys
, values
, iterate
.
julia> H=hecke(W,Pol(:q))
hecke(Aâ,q)
julia> T=Tbasis(H);
julia> h=T(1,2)^2
qTââ+(q-1)Tâââ
julia> length(h) # h has 2 terms
2
julia> h[W(2,1)] # coefficient of W(2,1)
Pol{Int64}: q
julia> collect(h) # pairs perm=>coeff
2-element Vector{Any}:
(1,2,6)(3,4,5) => q
(1,5)(2,4)(3,6) => q-1
julia> collect(values(h)) # the coefficients
2-element Vector{Pol{Int64}}:
q
q-1
julia> collect(keys(h)) # the corresponding Perms
2-element Vector{Perm{Int16}}:
(1,2,6)(3,4,5)
(1,5)(2,4)(3,6)
julia> h[W(2,1)]=Pol(3)
Pol{Int64}: 3
julia> h
3Tââ+(q-1)Tâââ
finally, benchmarks on julia 1.8
julia> function test_w0(n)
W=coxgroup(:A,n)
Tbasis(hecke(W,Pol(:q)))(longest(W))^2
end
test_w0 (generic function with 1 method)
julia> @btime test_w0(7);
97.210 ms (1776476 allocations: 127.52 MiB)
in GAP3 the analogous function takes 920ms
test_w0:=function(n)local W,T,H;
W:=CoxeterGroup("A",n);H:=Hecke(W,X(Rationals));T:=Basis(H,"T");
return T(LongestCoxeterWord(W))^2;
end;
Chevie.Chars.CharTable
â MethodCharTable(H::HeckeAlgebra or HeckeCoset)
returns the CharTable
of the Hecke algebra H
. For the primitive groups Gââ, Gââ, Gââ
there are Unknown()
entries corresponding to missing representations (see representation
). The columns of the CharTable
are labelled by classnames(H.W)
and contain the character values for the corresponding element given by classreps(H.W)
.
julia> H=hecke(crg(4),Pol())
hecke(Gâ,q)
julia> CharTable(H)
CharTable(hecke(Gâ,q))
ââââââ¬âââââââââââââââââââââââââââââââââââââââ
â â. z 212 12 z12 1 1zâ
ââââââŒâââââââââââââââââââââââââââââââââââââââ€
âÏââââ1 qⶠq³ q² qâž q qâ·â
âÏââââ1 1 1 ζâ² ζâ² ζâ ζââ
âÏââââ1 1 1 ζâ ζâ ζâ² ζâ²â
âÏâââ
â2 -2 . 1 -1 -1 1â
âÏââââ2 -2q³ . ζâ²q -ζâ²q⎠q+ζâ² -qâŽ-ζâ²q³â
âÏââââ2 -2q³ . ζâq -ζâq⎠q+ζâ -qâŽ-ζâq³â
âÏââââ3 3q² -q . . q-1 q³-q²â
ââââââŽâââââââââââââââââââââââââââââââââââââââ
Chevie.HeckeAlgebras.FactSchur
â TypeA FactSchur
representing a Schur element of the form MâᵩÏ(Mᵩ)
(see factorized_schur_element
) is a struct
with a field factor
which holds the monomial M
, and a field vcyc
which holds a list of NamedTuples
describing each factor Mᵩ
in the product. An element of vcyc
representing a term Ï(Mᵩ)
is itself a NamedTuple
with fields monomial
holding Mᵩ
(as an Mvp
with a single term), and a field pol
holding a CycPol
(see CycPol
) representing Ï
.
A few operations are implemented for FactSchur
, like *, lcm
. They can be evaluated partially or completely keeping as much as possible the factored form.
julia> @Mvp x,y; W=crg(4); H=hecke(W,[[1,x,y]])
hecke(Gâ,Vector{Mvp{Int64, Int64}}[[1, x, y]])
julia> p=factorized_schur_element(H,[[2,5]])
-xâ»Â¹y(xy+1)(x-1)Ίâ(xyâ»Â¹)(y-1)
julia> q=p(;x=E(3)) # partial evaluation
ζâ²â-3yâ»Â¹ÎŠâΊâΊâ²â²(y)
julia> q(;y=2//1)
-9â-3/2
In contrast, the next operation expands p
to an Mvp
:
julia> HeckeAlgebras.expand(p)
Mvp{Cyc{Rational{Int64}},Rational{Int64}}: -x³y+x³+x²y²-2x²+x²yâ»Â¹-xy³+2xy-xyâ»Â¹+y³-2y²+1+xâ»Â¹y²-xâ»Â¹y
Chevie.HeckeAlgebras.HeckeCoset
â TypeHeckeCoset
s are HÏ
where H
is an Iwahori-Hecke algebra of some Coxeter group W
on which the automorphism Ï
of some Spets WÏ
acts by Ï(T_w)=T_{Ï(w)}
. For Weyl groups, this corresponds to the action of the Frobenius automorphism on the commuting algebra of the induced of the trivial representation from the rational points of some F
-stable Borel subgroup to ð ^F
.
julia> WF=rootdatum(:u,3)
uâ
julia> HF=hecke(WF,Pol(:v)^2;rootpara=Pol())
hecke(uâ,v²,rootpara=v)
julia> CharTable(HF)
CharTable(hecke(uâ,v²,rootpara=v))
âââââ¬âââââââââââ
â â 111 21 3â
âââââŒâââââââââââ€
â111â -1 1 -1â
â21 â-2v³ . vâ
â3 â vⶠ1 v²â
âââââŽâââââââââââ
Thanks to the work of Xuhua He and Sian Nie, 'class_polynomials' also make sense for these cosets. This is used to compute such character tables.
Chevie.Chars.WGraphToRepresentation
â MethodWGraphToRepresentation(H::HeckeAlgebra,gr::Vector)
H
should be a one-parameter Hecke algebra for a finite Coxeter group where rootpara
is defined. The function returns the matrices of the representation of H
defined by the W-graph gr
.
julia> W=coxgroup(:H,3)
Hâ
julia> H=hecke(W,Pol(:q)^2)
hecke(Hâ,q²)
julia> g=Wgraph(W,3)
2-element Vector{Vector{Vector{Any}}}:
[[2], [1, 2], [1, 3], [1, 3], [2, 3]]
[[-1, [[1, 3], [2, 4], [3, 5], [4, 5]]]]
julia> WGraphToRepresentation(H,g)
3-element Vector{Matrix{Pol{Int64}}}:
[q² 0 ⊠0 0; 0 -1 ⊠0 0; ⊠; 0 0 ⊠-1 q; 0 0 ⊠0 q²]
[-1 0 ⊠0 0; 0 -1 ⊠q 0; ⊠; 0 0 ⊠q² 0; 0 0 ⊠q -1]
[q² 0 ⊠0 0; 0 q² ⊠0 0; ⊠; 0 q ⊠-1 0; 0 0 ⊠0 -1]
Chevie.Chars.representation
â Methodrepresentation(H::HeckeAlgebra or HeckeCoset,i)
returns, for the i
-th irreducible representation of the Hecke algebra or Hecke coset H
, a list of matrices images of the generators of H
in a model of the representation (for Hecke cosets, the result is a NamedTuple
with fields gens
, a representation of hecke(H)
, and F
, the matrix for the automorphism of H
in the representation).
This function is based on the classification, and is not yet fully implemented for the Hecke algebras of the groups Gââ
, Gââ
and Gââ
: we have 50 representations out of 59 for type Gââ
, 30 representations out of 102 for type Gââ
and 38 representations out of 169 for type Gââ
; nothing
is returned for a missing representation.
julia> W=crg(24)
Gââ
julia> H=hecke(W,Pol(:q))
hecke(Gââ,q)
julia> representation(H,3)
3-element Vector{Matrix{Pol{Cyc{Int64}}}}:
[q 0 0; -q -1 0; -q 0 -1]
[-1 0 -1; 0 -1 ((1-â-7)/2)q; 0 0 q]
[-1 -1 0; 0 q 0; 0 (1+â-7)/2 -1]
The models implemented for imprimitive types G(de,e,n)
for n>2
and de>1
(this includes Coxeter type Dâ
), excepted for G(2,2,4), G(3,3,3), G(3,3,4), G(3,3,5)
and G(4,4,3)
, involve rational fractions.
julia> H=hecke(coxgroup(:D,5),Pol())
hecke(Dâ
,q)
julia> representation(H,7)
5-element Vector{Matrix{Frac{Pol{Int64}}}}:
[q 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1]
[q 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1]
[1/(-q-1) q/(q+1) 0 0; (q²+q+1)/(q+1) q²/(q+1) 0 0; 0 0 -1 0; 0 0 0 -1]
[-1 0 0 0; 0 1/(-q²-q-1) (-q²-q)/(-q²-q-1) 0; 0 (q³+q²+q+1)/(q²+q+1) q³/(q²+q+1) 0; 0 0 0 -1]
[-1 0 0 0; 0 -1 0 0; 0 0 1/(-q³-q²-q-1) (-q³-q²-q)/(-q³-q²-q-1); 0 0 (qâŽ+q³+q²+q+1)/(q³+q²+q+1) qâŽ/(q³+q²+q+1)]
Chevie.Chars.representations
â Methodrepresentations(H)
returns the list of representations of the Hecke algebra or Hecke coset H
(see representation
).
julia> WF=rootdatum("2B2")
²Bâ
julia> H=hecke(WF,Pol(:x)^2;rootpara=Pol())
hecke(²Bâ,x²,rootpara=x)
julia> representations(H)
3-element Vector{NamedTuple{(:gens, :F)}}:
(gens = Matrix{Pol{Int64}}[[x²;;], [x²;;]], F = [1;;])
(gens = [[-1;;], [-1;;]], F = [1;;])
(gens = Matrix{Pol{Cyc{Int64}}}[[-1 0; â2x x²], [x² â2x; 0 -1]], F = [0 -1; -1 0])
Chevie.Garside.α
â Methodα(a::HeckeTElt)
the anti-involution on the Hecke algebra defined by $T_w⊠T_{inv(w)}$.
Chevie.HeckeAlgebras.Tbasis
â MethodTbasis(H::HeckeAlgebra)
The T
basis of H
. It is defined currently for Iwahori-Hecke algebras and for Hecke algebras of cyclic complex reflection groups G(d,1,1)
. It returns a function, say T
, which can take an argument of the following forms
T(i::Integer)
: the generatorT_s
wheres=H.W(i)
.T(iâ,âŠ,iáµ£)
: the productT(iâ)âŠT(iáµ£)
T([iâ,âŠ,iáµ£])
: same asT(iâ,âŠ,iáµ£)
T(w)
wherewâ H.W
: returnsT_w
julia> H=hecke(coxgroup(:A,2),Pol(:q))
hecke(Aâ,q)
julia> T=Tbasis(H);T(longest(H.W))^2
q³T.+(q³-2q²+q)Tââ+(q³-q²)Tâ+(q³-q²)Tâ+(q³-2q²+2q-1)Tâââ+(q³-2q²+q)Tââ
julia> W=crg(3,1,1)
Gâââââ
julia> H=hecke(crg(3,1,1),Pol(:q))
hecke(Gâââââ,q)
julia> T=Tbasis(H);T(1)^3
(q-1)T.+(q-1)Tâ+qTââ
Chevie.HeckeAlgebras.alt
â Methodalt(a::HeckeTElt)
a
should be an element of an Iwahori-Hecke algebra H
. the involution on H
defined by x⊠bar(x)
on coefficients and Tâ⊠uâ,âuâ,âTâ
. Essentially it corresponds to tensoring with the sign representation.
julia> W=coxgroup(:G,2);H=hecke(W,Pol(:q))
hecke(Gâ,q)
julia> T=Tbasis(H);h=T(1,2)*T(2,1)
q²T.+(q²-q)Tâ+(q-1)Tâââ
julia> alt(h)
qâ»Â²T.+(qâ»Â²-qâ»Â³)Tâ+(qâ»Â³-qâ»âŽ)Tâââ
Chevie.HeckeAlgebras.central_monomials
â Methodcentral_monomials(H)
Let H
be an Hecke algebra for the finite reflection group W
. The function returns the scalars by which the image in H
of Ï
acts on the irreducible representations of H
.
When W
is irreducible, Ï
is the generator of the center of the pure braid group. In general, it is the product of such elements for each irreducible component. When W
is a Coxeter group, the image of Ï in H
is $T_{w_0}^2$.
julia> H=hecke(coxgroup(:H,3),Pol(:q))
hecke(Hâ,q)
julia> central_monomials(H)
10-element Vector{Pol{Cyc{Int64}}}:
1
q³â°
q¹²
q¹âž
q¹â°
q¹â°
q²â°
q²â°
q¹âµ
q¹âµ
Chevie.HeckeAlgebras.char_values
â Functionchar_values(h::HeckeTElt)
h
is an element of an Iwahori-Hecke algebra H
. The function returns the values of the irreducible characters of H
on h
(the method used is to convert to the T
basis, and then use class_polynomials
).
julia> W=coxgroup(:B,2)
Bâ
julia> H=hecke(W,q^2;rootpara=q)
hecke(Bâ,q²,rootpara=q)
julia> char_values(Cpbasis(H)(1,2,1))
5-element Vector{Pol{Int64}}:
-q-qâ»Â¹
q+qâ»Â¹
0
q³+2q+2qâ»Â¹+qâ»Â³
0
Chevie.HeckeAlgebras.char_values
â Methodchar_values(H::HeckeAlgebra,v::Vector{<:Integer})
For an Iwahori-Hecke algebra this computes the character values of H
on the Tbasis(H)(v)
.
For H
the Hecke algebra of a complex reflection group W
this routine computes character values on a lift of the element of W
defined by the word v
in gens(W)
.
For complex reflection groups the character table of the generic Hecke algebra of W
has been computed (not entirely for 3 exceptions, see representation
) in the sense that, if sâ,âŠ,sâ
are generators of the braid group lifting the Broué-Malle-Rouquier-Bessis-Michel generators of W
, there is at least one element v
in each conjugacy class of W
and one expression in the generators for it such that the character values of the image Táµ¥
in the Hecke algebra of the lift to the braid group are known. Such an expression in the generators will be called a known word (the list of known words is obtained by word.(conjugacy_classes(W))
. If the word v
is known, the computation is quick using the character table. If not, the function computes the trace of Táµ¥
in each irreducible representation. The values returned are Unknown()
for missing representations (see representation
).
julia> W=crg(4)
Gâ
julia> H=hecke(W,Pol(:q))
hecke(Gâ,q)
julia> char_values(H,[2,1,2])
7-element Vector{Pol{Cyc{Int64}}}:
q³
1
1
0
0
0
-q
Chevie.HeckeAlgebras.class_polynomials
â Methodclass_polynomials(h::HeckeElt)
returns the class polynomials of the element h
of the Iwahori-Hecke algebra or coset given by h.H
with respect to the T
basis for a set R
of representatives of minimal length in the conjugacy classes of the Coxeter group or coset H.W
. Such minimal length representatives are given by classreps(H.W)
. The vector p
of these polynomials has the property that if X
is the matrix of the values of the irreducible characters of H
on T_w
(for wâ R
), then the product X*p
is the list of values of the irreducible characters on h
.
julia> W=coxsym(4)
ð â
julia> H=hecke(W,Pol(:q))
hecke(ð â,q)
julia> h=Tbasis(H,longest(W))
Tââââââ
julia> p=class_polynomials(h)
5-element Vector{Pol{Int64}}:
0
0
q²
q³-2q²+q
q³-q²+q-1
The class polynomials were introduced in Geck-Pfeiffer1993.
Chevie.HeckeAlgebras.factorized_schur_element
â Methodfactorized_schur_element(H,phi)
returns the factorized schur_element
(see factorized_schur_elements
) of the Hecke algebra H
for the irreducible character of H
of parameter phi
(see charinfo(W).charparams
)
julia> W=complex_reflection_group(4)
Gâ
julia> @Mvp x,y; H=hecke(W,[[1,x,y]])
hecke(Gâ,Vector{Mvp{Int64, Int64}}[[1, x, y]])
julia> factorized_schur_element(H,[[2,5]])
-xâ»Â¹y(xy+1)(x-1)Ίâ(xyâ»Â¹)(y-1)
Chevie.HeckeAlgebras.factorized_schur_elements
â Methodfactorized_schur_elements(H)
Let H
be a Hecke algebra for the complex reflection group W
, whose parameters are all (Laurent) monomials in some variables xâ,âŠ,xâ
, and let K be the field of definition of W
. Then Maria Chlouveraki has shown that the Schur elements of H
take the particular form M âᵩ Ï(Mᵩ)
where Ï
runs over a list of K-cyclotomic polynomials, and M
and Mᵩ
are (Laurent) monomials (in possibly some fractional powers) of the variables xáµ¢
. The function factorized_schur_elements
returns a data structure (see HeckeAlgebras.FactSchur
) which shows this factorization.
julia> W=complex_reflection_group(4)
Gâ
julia> @Mvp x,y; H=hecke(W,[[1,x,y]])
hecke(Gâ,Vector{Mvp{Int64, Int64}}[[1, x, y]])
julia> factorized_schur_elements(H)
7-element Vector{Chevie.HeckeAlgebras.FactSchur}:
xâ»âŽyâ»âŽ(xy+1)ΊâΊâ(x)ΊâΊâ(y)
(x²yâ»Â¹+1)ΊâΊâ(x)ΊâΊâ(xyâ»Â¹)
-xâ»âŽyâµÎŠâΊâ(xyâ»Â¹)(xyâ»Â²+1)ΊâΊâ(y)
-xâ»Â¹y(xy+1)(x-1)Ίâ(xyâ»Â¹)(y-1)
-xâ»âŽy(x²yâ»Â¹+1)(x-1)(xyâ»Â¹-1)Ίâ(y)
xâ»Â¹yâ»Â¹ÎŠâ(x)(xyâ»Â¹-1)(xyâ»Â²+1)(y-1)
xâ»Â²y(x²yâ»Â¹+1)(xy+1)(xyâ»Â²+1)
Chevie.HeckeAlgebras.hecke
â Methodhecke(HF::HeckeCoset)
returns the underlying Hecke algebra
Chevie.HeckeAlgebras.hecke
â Methodhecke(WF::Spets, H)
hecke(WF::Spets, params)
Construct a HeckeCoset
from a Coxeter coset WF
and an Hecke algebra associated to Group(WF)
. The second form is equivalent to Hecke(WF,Hecke(Group(WF),params))
. See the doc for HeckeCoset
.
Chevie.HeckeAlgebras.hecke
â Methodhecke( W [, parameter];rootpara=nothing)
Hecke algebra for the complex reflection group or Coxeter group W
. If no parameter
is given, 1
is assumed which gives the group algebra of W
.
The following forms are accepted for parameter
: if parameter
is not a vector or a tuple, it is replaced by the vector fill(parameter,ngens(W))
. If it is a vector with one entry, it is replaced with fill(parameter[1],ngens(W))
. If parameter
is a vector with more than one entry, it should have length ngens(W)
, each entry representing the parameters for the corresponding generator of W
, and entries corresponding to the same W
-orbit of generators should be identical. Finally, if parameter
is a Tuple
, the tuple should have as many entries as there are hyperplane orbits in W
and each entry will represent the parameters for the corresponding conjugacy class of braid reflections.
An entry in parameter
for a reflection of order e
can be either a single scalar value or a Vector
of length 'e'. If it is a Vector
, it is interpreted as the list [uâ,âŠ,u_(e-1)]
of parameters for that reflection. If it is not a vector, let q
be its value; it is then interpreted as specifying the list of parameters for the Spetsial algebra, which are [q,ζ_e,âŠ,ζ_{e-1}]
(thus the list [q,-1]
of the one-parameter algebra for Coxeter groups).
When printing an Hecke algebra the parameter list is abbreviated using the same conventions.
Computing characters or representations of Hecke algebra needs sometimes to extract roots of the parameters. These roots are extracted automatically (when possible). For Coxeter groups it is possible to give explicit roots by giving a keyword argument rootpara
: if it is a vector it should contain at the i
-th position a square root of -parameter[i][1]*parameter[i][2]
; if a scalar it is replaced by fill(rootpara,ngens(W))
.
Example
julia> W=coxgroup(:B,2)
Bâ
julia> @Pol q
Pol{Int64}: q
julia> H=hecke(W,q)
hecke(Bâ,q)
julia> H.para
2-element Vector{Vector{Pol{Int64}}}:
[q, -1]
[q, -1]
julia> H=hecke(W,q^2,rootpara=-q)
hecke(Bâ,q²,rootpara=-q)
julia> H=hecke(W,q^2)
hecke(Bâ,q²)
julia> rootpara(H)
2-element Vector{Pol{Int64}}:
q
q
julia> H
hecke(Bâ,q²,rootpara=q)
julia> H=hecke(W,[q^2,q^4],rootpara=[q,q^2])
hecke(Bâ,Pol{Int64}[q², qâŽ],rootpara=Pol{Int64}[q, q²])
julia> H.para,rootpara(H)
(Vector{Pol{Int64}}[[q², -1], [qâŽ, -1]], Pol{Int64}[q, q²])
julia> H=hecke(W,9,rootpara=3)
hecke(Bâ,9,rootpara=3)
julia> H.para,rootpara(H)
([[9, -1], [9, -1]], [3, 3])
julia> @Mvp x,y,z,t
julia> H=hecke(W,[[x,y]])
hecke(Bâ,Vector{Mvp{Int64, Int64}}[[x, y]])
julia> rootpara(H);H
hecke(Bâ,Vector{Mvp{Int64, Int64}}[[x, y]],rootpara=ζâxÂœyÂœ)
julia> H=hecke(W,[[x,y],[z,t]])
hecke(Bâ,Vector{Mvp{Int64, Int64}}[[x, y], [z, t]])
julia> rootpara(H);H
hecke(Bâ,Vector{Mvp{Int64, Int64}}[[x, y], [z, t]],rootpara=Mvp{Cyc{Int64}, Rational{Int64}}[ζâxÂœyÂœ, ζâtÂœzÂœ])
julia> hecke(coxgroup(:F,4),(q,q^2)).para
4-element Vector{Vector{Pol{Int64}}}:
[q, -1]
[q, -1]
[q², -1]
[q², -1]
julia> hecke(complex_reflection_group(3,1,2),q).para # spetsial parameters
2-element Vector{Vector{Pol{Cyc{Int64}}}}:
[q, ζâ, ζâ²]
[q, -1]
Chevie.HeckeAlgebras.isrepresentation
â Methodisrepresentation(H::HeckeAlgebra,r)
returns true
or false
, according to whether a given set r
of elements corresponding to the standard generators of the reflection group H.W
defines a representation of the Hecke algebra H
or not.
julia> H=hecke(coxgroup(:F,4))
hecke(Fâ,1)
julia> isrepresentation(H,reflrep(H))
true
julia> isrepresentation(H,Tbasis(H).(1:4))
true
Chevie.HeckeAlgebras.schur_elements
â Methodschur_elements(H)
returns the list of Schur elements for the Hecke algebra H
julia> H=hecke(complex_reflection_group(4),Pol(:q))
hecke(Gâ,q)
julia> s=schur_elements(H)
7-element Vector{Pol{Cyc{Rational{Int64}}}}:
qâž+2qâ·+3qâ¶+4qâµ+4qâŽ+4q³+3q²+2q+1
2â-3+(6+4â-3)qâ»Â¹+12qâ»Â²+(6-4â-3)qâ»Â³-2â-3qâ»âŽ
-2â-3+(6-4â-3)qâ»Â¹+12qâ»Â²+(6+4â-3)qâ»Â³+2â-3qâ»âŽ
2+2qâ»Â¹+4qâ»Â²+2qâ»Â³+2qâ»âŽ
ζâ²â-3q³+(3-â-3)q²+3q+3+â-3-ζââ-3qâ»Â¹
-ζââ-3q³+(3+â-3)q²+3q+3-â-3+ζâ²â-3qâ»Â¹
q²+2q+2+2qâ»Â¹+qâ»Â²
julia> CycPol.(s)
7-element Vector{CycPol{Cyc{Rational{Int64}}}}:
Ίâ²ΊâΊâΊâ
2â-3qâ»âŽÎŠâ²Ίâ²âΊâ²â
-2â-3qâ»âŽÎŠâ²Ίâ³âΊâ³â
2qâ»âŽÎŠâΊâ
ζâ²â-3qâ»Â¹ÎŠâ²Ίâ²âΊâ³â
-ζââ-3qâ»Â¹ÎŠâ²Ίâ³âΊâ²â
qâ»Â²ÎŠâ²Ίâ
Chevie.PermRoot.reflection_representation
â Methodreflection_representation(H::HeckeAlgebra)
or reflrep(H)
returns a list of matrices for the generators of H
which give the reflection representation of the Iwahori-Hecke algebra H
.
julia> W=coxgroup(:B,2);H=hecke(W,Pol(:q))
hecke(Bâ,q)
julia> reflrep(H)
2-element Vector{Matrix{Pol{Int64}}}:
[-1 0; -q q]
[q -2; 0 -1]
julia> H=hecke(coxgroup(:H,3))
hecke(Hâ,1)
julia> reflrep(H)
3-element Vector{Matrix{Cyc{Int64}}}:
[-1 0 0; -1 1 0; 0 0 1]
[1 (-3-â5)/2 0; 0 -1 0; 0 -1 1]
[1 0 0; 0 1 -1; 0 0 -1]
Chevie.Chevie
â ModuleThis is my attempt to port the Chevie package from GAP3 to Julia. I started this project at the end of 2018 and it is still in flux so some function names or interfaces may still change. Pull requests and issues are welcome.
I have implemented the GAP functionality (infrastructure) needed to make Chevie work. I have already registered most of this infrastructure as separate packages; the following packages are loaded and re-exported so that their functionality is automatically available when you use Chevie
. In other words, Chevie
is a meta-package for the following packages:
- (univariate) LaurentPolynomials (and rational fractions)
- (multivariate) PuiseuxPolynomials (and rational fractions when there are no fractional exponents)
- CyclotomicNumbers(elements of cyclotomic fields)
- ModuleElts (elements of a free module over some ring)
- Combinat (combinatorics and some basic number theory)
- PermGroups (permutations, groups, permutations groups. It contains the modules
Perms
andGroups
which could be separate packages) - SignedPerms (signed permutations)
- MatInt (Integer matrices and lattices)
- CycPols (cyclotomic polynomials)
- GenLinearAlgebra (linear algebra on any field/ring)
- FinitePosets (finite posets)
- FiniteFields (finite fields)
- GroupPresentations (presentations of groups, and groups defined by generators and relations)
- UsingMerge (Automatically compose several packages)
Have a look at the documentation of the above packages to see how to use their features.
I have implemented some other infrastructure which currently resides in Chevie
but may eventually become separate packages:
- factorizing polynomials over finite fields (module
FFfac
) - factorizing polynomials over the rationals (module
Fact
) - Number fields which are subfields of the Cyclotomics (module
Nf
)
For permutation groups I have often replaced GAP's sophisticated algorithms with naive but easy-to-write methods suitable only for small groups (sufficient for the rest of the package but perhaps not for your needs). Otherwise the infrastructure code is often competitive with GAP, despite using much less code (often 100 lines of Julia replace 1000 lines of C); and I am sure it could be optimised better than I did. Comments on code and design are welcome. For functions that are too inefficient or difficult to implement (such as character tables of arbitrary groups), Chevie
uses the GAP
package as an extension. This means that if you have the GAP
package installed, Chevie
will automatically call GAP
to implement these functions.
Functions in the Chevie.jl
package are often 10 times faster than the equivalent functions in GAP3/Chevie (after the maddeningly long compilation time on the first run â- Julia's TTFP).
The Chevie
package currently contains about 95% of the GAP3 Chevie functionality. If you are a user of GAP3/Chevie, the gap
function can help you to find the equivalent functionality in Chevie.jl
to a Gap3 function: it takes a string and gives you Julia translations of functions in Gap3 that match that string.
julia> gap("words")
CharRepresentationWords => traces_words_mats
CoxeterWords(W[,l]) => word.(Ref(W),elements(W[,l]))
GarsideWords => elements
You can then access online help for the functions you have found.
The port to Julia is not complete in the sense that 80% of the code is the data library from Chevie, which was automatically ported by a transpiler so its code is "strange". When the need to maintain the GAP3
and Julia
versions simultaneously subsides, I will do a proper translation of the data library, which should give an additional speed boost.
Installing
This is a registered package that can be installed/upgraded in the standard way. For Julia newbies, we will remind you what this is. To install, do this at the REPL command line:
- enter package mode with ]
- do the command
(@v1.10) pkg> add Chevie
- exit package mode with backspace and then do
julia> using Chevie
and you are set up. For first help, type "?Chevie".
To update later to the latest version, do
(@v1.10) pkg> update
Chevie.jl
requires julia 1.10 or later.
Chevie.InducedDecompositionMatrix
â MethodInducedDecompositionMatrix(R,W,d)
returns the induced from the Levi L
to the reductive group W
of the generic Ί_d
decomposition matrix of L
.
julia> W=rootdatum(:psu,6)
psuâ
julia> L=reflection_subgroup(W,[1,2,4,5])
psuâââââ
ââ=(AâAâ)ââââââΊâ
julia> InducedDecompositionMatrix(L,W,6)
Induced Ίâ-decomposition matrix from psuâââââ
ââ=(AâAâ)ââââââΊâ to psuâ
ââââââ¬âââââââââ
â âps ps Aââ
ââââââŒâââââââââ€
â²Aâ
â . . .â
â.3 â 1 . .â
â3. â 1 . .â
â.21 â 1 1 .â
â1.2 â 2 1 .â
â21. â 1 1 .â
â2.1 â 2 1 .â
â.111â . 1 1â
â111.â . 1 1â
â1.11â 1 2 1â
â11.1â 1 2 1â
ââââââŽâââââââââ
The matrix itself is stored in the field .scalar
of the returned struct
.
Chevie.EvalPolRoot
â MethodEvalPolRoot(pol, x, n, p) compute pol(p*x^(1/n))
The point of this routine is to avoid unnecessary root extractions during evaluation (e.g., if pol has no terms of odd degree and n=2, then no root extraction is necessary).
this was in lib/util.g but is used only here
Chevie.elementary_symmetric_function
â Methodthe elementary symmetric function of degree t in the variables v
Chevie.homogeneous_symmetric_function
â Methodthe homogeneous symmetric function of degree t in the variables v
Chevie.hooksβ
â Methodhooksβ(S,s) the list of all hooks of area less than or equal to s in the Young diagram of the partition with βlist S.
Chevie.stripsβ
â Methodstripsβ(S,s) returns as a list of lists of Hooks all broken border strips (union of disjoint hooks) of area less than or equal to s in the Young diagram of the partition with βlist S.
GenericDecMats.generic_decomposition_matrix
â Methodgeneric_decomposition_matrix(W,d)
This function obtains the Ί_d
-decomposition matrix for the reductive group specified by the Coxeter group or coset W
from the package GenericDecMats.
julia> W=rootdatum(:psu,5)
psuâ
julia> generic_decomposition_matrix(W,13)
!!! Ί-decomposition matrices available for ²Aâ: Ίââ Ίâ Ίâ Ίâ
julia> generic_decomposition_matrix(W,10)
Ίââ-decomposition matrix for psuâ
ââââââââ¬ââââââââââââââââââââââââââ
â âps 21 ps ps ps 2111 11111â
ââââââââŒââââââââââââââââââââââââââ€
â2. â 1 . . . . . .â
â²Aâ:2 â . 1 . . . . .â
â11. â . . 1 . . . .â
â1.1 â 1 . . 1 . . .â
â.2 â . . . . 1 . .â
â²Aâ:11â . 1 . . . 1 .â
â.11 â . . . 1 . . 1â
ââââââââŽââââââââââââââââââââââââââ
The matrix itself is stored in the field .scalar
of the returned struct
.
LaurentPolynomials.coefficients
â Functioncoefficients(c::Cyc)
for a cyclotomic c
of conductor n
, returns a vector v
of length n
such that c==âáµ¢ váµ¢ââ ζâ±
for iâ 0:n-1
.
julia> coefficients(Cyc(E(9)))
9-element Vector{Int64}:
0
0
0
0
-1
0
0
-1
0
LaurentPolynomials.root
â Functionroot(x,n=2)
computes an n
-th root of x
when we know how to do it. We know how to compute n
-th roots of roots of unity, and n
-th or 2n
-th roots of perfect n
-th powers of integers or rationals.
julia> root(-1)
Cyc{Int64}: 릉
julia> root(E(4))
Root1: 릉
julia> root(27//8,6)
Cyc{Rational{Int64}}: â6/2
Chevie.Diagrams.diagram
â Methoddiagram(W)
prints a diagram describing a presentation of the finite reflection group or spets W
julia> diagram(coxgroup(:E,8))
O 2
ï¿š
OâOâOâOâOâOâO Eâ
1 3 4 5 6 7 8
julia> diagram(crg(33))
3 â¡ Gââ
/^\
â¡ âââ¡ âââ¡ âââ¡
1 2 4 5 423423=342342
Chevie.PermRoot
â ModuleLet V
be a vector space over a subfield K
of the complex numbers (in Julia the elements of K
will be usually represented by Rational
s or Cyc
s).
A complex reflection is an element sâ GL(V)
of finite order whose fixed point set is a hyperplane, the reflecting hyperplane Hâ
of s
.
Most of the time we abbreviate "complex reflection" to reflection; in some literature "reflection" is reserved for s
of order 2 and otherwise pseudo-reflection is used.
A reflection s
has a unique eigenvalue 릉
not equal to 1
, which is a root of unity; if K
is a subfield of the real numbers, 릉
is necessarily equal to -1
and s
is of order 2. An eigenvector râ V
of s
for the eigenvalue 릉
is called a root of s
and a linear form ráµ
on V
of kernel Hâ
is called a coroot of s
. If r
and ráµ
are normalized so that ráµ(r)=1-ζ
, then s
is the map on V
defined by s(x)=x-ráµ(x)r
. Such a normalized root and coroot for s
are unique up to scaling the root and inversely scaling the coroot.
A finite complex reflection group W
is a finite group generated by complex reflections. Since whenever W
contains a reflection s
it contains its powers, W
is always generated by reflections s
such that 릉==E(d)
where d
is the order of s
; we can also assume that s
is not a power of another reflection with larger order d
. Such a reflection is called a distinguished reflection of W
; it is a canonical generator of the cyclic subgroup of W
centralizing Hâ
. The generators of the complex reflection groups we construct are always distinguished reflections; the set of distinguished reflections are in bijection with the reflecting hyperplanes. In a real reflection group all reflections are distinguished.
It is much more efficient to compute with permutation groups than with matrix groups; hence we use for computing with a finite complex reflection group W
a permutation representation on a W
-invariant set of root and coroot vectors for reflections of W
; that is, a set R
of pairs (r,ráµ)â VÃVáµ
invariant by W
and such that every distinguished reflection in W
is determined by some pair in R
(see reflectionMatrix
). Using a W
-invariant set implies that there may be several pairs determining the same reflection, which differ by roots of unity. This generalizes the usual construction for Coxeter groups (the case K=â
) where to each reflection of W
is associated two roots, one positive and one negative.
A complex reflection group is irreducible if the representation V
is irreducible. For irreducible complex reflection groups, there are at least as many roots for a given reflection as the order of the center of W
.
The following methods are always defined for finite complex reflection groups:
gens(W)
: the (distinguished) reflections which generateW
, given as permutations of the roots.reflrep(W)
gives them as matrices.roots(W)
: the list of roots ofW
.coroots(W)
: the list of coroots, in the same order as the roots.refls(W)
: a list of distinguished reflections ofW
, as permutations. This list is of same length as the roots, and itsi
-th element is the distinguished reflection for thei
-th root, so it will have repetitions.unique_refls(W)
returns a sublist of1:length(roots(W))
such that the distinguished reflections around the corresponding roots reach one time only each distinguished reflection ofW
.
The lists roots
, coroots
and refls
starts with the "generating" ones (those corresponding to gens(W)
).
simpleroots(W)
: the generating roots as a matrix.simplecoroots(W)
: the generating coroots as a matrix.reflections(W)
gives a list without repetitions of all reflections ofW
(not only the distinguished ones), as objects of typeReflection
. These objects contain more information on each reflection.
The finite irreducible complex reflection groups have been completely classified by Shephard and Todd, see ShephardTodd1954. They consist of one infinite family G(de,e,r)
depending on 3 parameters (which includes the infinite families of Weyl groups), and 34 exceptional groups which have been given by Shephard and Todd names which range from Gâ
to Gââ
. These exceptional groups include the exceptional Weyl groups, e.g., coxgroup(:E,8)
is the same as Gââ
.
We provide functions to build any finite reflection group, either by giving a list of roots and coroots defining the generating reflections (see PRG
), or in terms of the classification (see complex_reflection_group
). In the context e.g. of Weyl groups, one wants to describe the particular root system chosen in term of the traditional classification of crystallographic root systems. This is done via calls to the function coxeter_group
(see the module Weyl
). There is not yet a general theory on how to construct a nice set of roots for a non-real reflection group; the roots chosen here where obtained case-by-case; however, they satisfy several important properties:
The generating reflections satisfy braid relations which present the braid group associated to
W
(seediagram
).The field of definition of
W
is the fieldK
generated by the traces of the elements ofW
acting onV
. It is a theorem thatW
may be realized as a reflection group overK
.The Cartan matrix
ráµ(r')
wherer
andr'
runs over the roots and coroots for the generating reflections has entries in the ringâ€â
of integers ofK
, and the other roots (resp. coroots) are linear combinations with coefficients inâ€â
of a linearly independent subset of them.
It turns out that all representations of W
are defined over the field of definition K
(see. Benard1976 and D.~Bessis' thesis). This has been known for a long time in the case K=â
, the case of Weyl groups, whose representations are all integral.
julia> W=complex_reflection_group(4)
Gâ
julia> gens(W) # as permutations of the 24 roots
2-element Vector{Perm{Int16}}:
(1,3,9)(2,4,7)(5,10,18)(6,11,16)(8,12,19)(13,15,20)(14,17,21)(22,23,24)
(1,5,13)(2,6,10)(3,7,14)(4,8,15)(9,16,22)(11,12,17)(18,19,23)(20,21,24)
julia> length(unique(refls(W)))
4
julia> length(refls(W)) # 24=4*(number of roots of unity in â (ζâ))
24
julia> reflrep(W) # the generators as matrices
2-element Vector{Matrix{Cyc{Rational{Int64}}}}:
[1 0; 0 릉]
[â-3/3 -ζâ²â-3/3; (-3+â-3)/3 -ζââ-3/3]
For almost all irreducible complex reflection groups, the generating matrices for W
we give have coefficients in the field of definition K
. Further, the set of matrices for all elements of W
is globally invariant under the Galois group of K/â
, thus the Galois action induces automorphisms of W
. The exceptions are Gââ, Gââ
where the matrices are in a degree two extension of K
(this is needed to have a globally invariant model, see MarinMichel2010) and some dihedral groups, as well as Hâ
and Hâ
, where the matrices given (the usual Coxeter reflection representation over K
) are not globally invariant (but one can get invariant ones by chevieget(:H4,:InvariantModel)
).
julia> braid_relations(W) # as tuples of equal words in the generators
1-element Vector{Tuple{Vector{Int64}, Vector{Int64}}}:
([1, 2, 1], [2, 1, 2])
julia> diagram(W) # the same in pictures
⢠ââ⢠Gâ
1 2
julia> cartan(W)
2Ã2 Matrix{Cyc{Rational{Int64}}}:
ζâ²â-3 ζâ²
-ζâ² ζâ²â-3
julia> simpleroots(W)
2Ã2 Matrix{Cyc{Rational{Int64}}}:
0 ζâ²â-3
2ζâ² ζâ²
julia> simplecoroots(W)
2Ã2 Matrix{Cyc{Rational{Int64}}}:
0 1
â-3/3 â-3/3
Let SV
be the symmetric algebra of V
. The invariants of W
in SV
are called the polynomial invariants of W
. If n=dim V
, they are generated as a polynomial ring by n
homogeneous algebraically independent polynomials fâ,âŠ,fâ
. The polynomials fáµ¢
are not uniquely determined but their degrees are. The fáµ¢
are called the basic invariants of W
, and their degrees the reflection degrees of W
; the function degrees(W)
returns these invariants.
Let I
be the ideal generated by the homogeneous invariants of positive degree in SV
. Then SV/I
is isomorphic to the regular representation of W
as a W
-module. It is thus a graded (by the degree of elements of SV
) version of the regular representation of W
. The polynomial which gives the graded multiplicity of a character Ï
of W
in the graded module SV/I
is called the fake degree of Ï
. The function fakedegrees
returns these polynomials.
julia> degrees(W)
2-element Vector{Int64}:
4
6
julia> fakedegrees(W,Pol(:x))
7-element Vector{Pol{Int64}}:
1
xâŽ
xâž
xâ·+xâµ
xâµ+x³
x³+x
xâ¶+xâŽ+x²
Chevie.PermRoot.PRG
â MethodPRG(roots,coroots)
complex reflection group with given roots and coroots
Chevie.PermRoot.PermRootGroup
â TypePermRootGroup
is the type of reflection groups represented as a permutation group on a set of roots.
Chevie.PermRoot.PermX
â MethodPermX(W::ComplexReflectionGroup,M::AbstractMatrix)
Let M
be an invertible linear map of the reflection representation of W
which preserves the set of roots of parent(W)
, and normalizes W
(for the action of matrices on the right). PermX
returns the corresponding permutation of the roots of parent(W)
; it returns nothing
if M
does not normalize the set of roots of parent(W)
.
julia> W=reflection_subgroup(rootdatum("E7sc"),1:6)
Eâââââââ
ââ=EâΊâ
julia> PermX(W,reflrep(W,longest(W)))==longest(W)
true
Chevie.PermRoot.PermY
â MethodPermY(W::ComplexReflectionGroup,M::AbstractMatrix)
Let M
be an invertible linear map on the dual of the reflection representation of W
which preserves the set of coroots of parent(W)
, and normalizes W
(for the action of matrices on the right). PermY
returns the corresponding permutation of the coroots of parent(W)
; it returns nothing
if M
does not normalize the set of coroots of parent(W)
.
julia> W=reflection_subgroup(rootdatum("E7sc"),1:6)
Eâââââââ
ââ=EâΊâ
julia> PermY(W,YMatrix(W,longest(W)))==longest(W)
true
Chevie.PermRoot.YMatrix
â MethodYMatrix(W,w)
Let W
be a finite reflection group on the space V
and let w
be an element of W
. The function YMatrix
returns the matrix of w
acting on the dual of V
. This is the linear transformation of this space which acts trivially on the orthogonal of the roots and has same effect as w
on the simple coroots. The function makes sense more generally for an element of the normalizer of W
in the whole permutation group of the coroots.
julia> W=reflection_subgroup(rootdatum("E7sc"),1:6)
Eâââââââ
ââ=EâΊâ
julia> YMatrix(W,longest(W))
7Ã7 transpose(::Matrix{Int64}) with eltype Int64:
0 0 0 0 0 -1 0
0 -1 0 0 0 0 0
0 0 0 0 -1 0 0
0 0 0 -1 0 0 0
0 0 -1 0 0 0 0
-1 0 0 0 0 0 0
2 2 3 4 3 2 1
Chevie.PermRoot.action
â Methodaction(W::PermRootGroup,i::Integer,p::Perm)
The elements of a PermRootGroup
permute the roots of parent(W)
, that is are permutations on 1:nref(parent(W))
. The function action
translates this action of pâ W
to 1:nref(W)
. For a reflection subgroup we have action(W,i,p)==restriction(W,inclusion(W,i)^p)
and for a parent group action(W,i,p)==i^p
. The first formula is always valid since for a parent group restriction(W)==inclusion(W)==1:nref(W)
.
Chevie.PermRoot.asreflection
â Methodasreflection(s::Matrix [,r::AbstractVector])
s
should be is a square matrix, and if given r
should be a vector of length size(s,1)
. The function determines if s
is the matrix of a complex reflection (resp. if r
is given if it is the matrix of a reflection of root r
; the point of giving r
is to specify exactly the desired root and coroot, which otherwise are determined only up to a scalar and its inverse). The function returns nothing
if s
if is not a reflection (resp. not a reflection with root r
), and otherwise returns a named tuple with four fields:
.root
: the root of the reflection s
(equal to r
if given)
.coroot
: the coroot of s
.eigenvalue
: the non-trivial eigenvalue of s
.isunitary
: a boolean which is true
if and only if s
is unitary with respect to the usual scalar product (then s
is determined by the root and the eigenvalue as reflectionMatrix(.root,.eigenvalue)
)
julia> asreflection([-1 0 0;1 1 0;0 0 1])
(root = [2, 0, 0], coroot = Rational{Int64}[1, -1//2, 0], eig = -1, isunitary = false)
julia> asreflection([-1 0 0;1 1 0;0 0 1],[1,0,0])
(root = [1, 0, 0], coroot = Rational{Int64}[2, -1, 0], eig = -1, isunitary = false)
Chevie.PermRoot.bipartite_decomposition
â Methodbipartite_decomposition(W)
Returns a bipartite decomposition [L,R]
of the indices of the generators of the reflection group W
, such that reflection_subgroup(W,L)
and reflection_subgroup(W,R)
are abelian subgroups, and W=reflection_subgroup(W, vcat(L,R))
. Gives an error if no such decomposition is possible.
julia> bipartite_decomposition(coxgroup(:E,8))
([1, 4, 6, 8], [3, 2, 5, 7])
Chevie.PermRoot.cartan
â Methodcartan(W::PermRootGroup,i,j)
the cartan coefficient cᵢ(rⱌ)
, the value of the linear form given by the i
-th coroot cáµ¢
on the j
-th root ráµ¢
of W
Chevie.PermRoot.cartan
â Methodcartan(W::PermRootGroup)
Cartan matrix of W
.
Let sâ,âŠ,sâ
be reflections with associated roots ráµ¢
and coroots cáµ¢
. The matrix C
with entries Cᵢ,ⱌ=cᵢ(rⱌ)
is called a Cartan matrix of sâ,âŠ,sâ
. Since a reflection determines up to scalar a root and a coroot, C
is uniquely determined by sâ,âŠ,sâ
up to conjugation by a diagonal matrix.
If sâ,âŠ,sâ
generate a reflection group W
, then C
up to conjugation by a diagonal matrix is an invariant of the reflection representation of W
. If invertible, the matrix C
determines this representation since then the ráµ¢
form a basis in which the matrix for sáµ¢
differs from the identity only on the i
-th row, where the corresponding row of C
has been subtracted.
In general cartan(W)==simplecoroots(W)*permutedims(simpleroots(W))
.
julia> W=coxgroup(:A,3)
Aâ
julia> cartan(W)
3Ã3 Matrix{Int64}:
2 -1 0
-1 2 -1
0 -1 2
Chevie.PermRoot.check_minimal_relation
â Methodcheck_minimal_relation(gens,rel;verbose=false)
returns true
iff the homogeneous relation prod(gens[rel[1]])==prod(gens[rel[2]])
is a minimal relation between gens (in particular, no left factor homogeneous relation holds), false
otherwise. If verbose=true
prints a description of failure.
Chevie.PermRoot.coroot
â Functioncoroot(r,λ=-1)
the coroot for a unitary reflection of root r
and eigenvalue λ
.
Chevie.PermRoot.coroots
â Methodcoroots(W,i)
same as but better than coroots(W)[i]
Chevie.PermRoot.coroots
â Methodcoroots(W)
the list of coroots of W
(listed in the same order as the roots)
Chevie.PermRoot.coxeter_number
â Methodcoxeter_number(W::PermRootGroup,i)
or coxnum
Gordon and Griffeth GG2012 have defined the Coxeter number of an irreducible character Ï
of a complex reflection group as the scalar by which the central element â_{s in reflections(W)}(1-s)
acts on the representation of character Ï
. The function coxnum
returns the Coxeter number of the i
-th irreducible character of W
.
Chevie.PermRoot.coxeter_number
â Methodcoxeter_number(W::PermRootGroup)
or coxnum
Gordon and Griffeth GG2012 have defined the Coxeter number of an irreducible complex reflection group as the Coxeter number of its reflection character. It is also given by the formula (nref(W)+nhyp(W))/rank(W)
; for a well-generated group it is equal to the highest reflection degree. For a non-irreducible group, the Coxeter number is the sum of those of its irreducible components.
Chevie.PermRoot.generic_order
â Functiongeneric_order(W,q=Pol())
returns the generic order of W
as a polynomial in q
(the "compact" order of the Spets). This is $q^{Nâ}Î áµ¢(q^{dáµ¢}-1)$ where dáµ¢
are the reflection degrees and Nâ
the number of reflecting hyperplanes. For a Weyl group, it is the order of the associated semisimple finite reductive group over the field with q
elements.
julia> PermRoot.generic_order(complex_reflection_group(4),Pol(:q))
Pol{Int64}: q¹âŽ-q¹â°-qâž+qâŽ
Chevie.PermRoot.inclusion
â Methodinclusion(W::PermRootGroup)
the indices of the roots of W
in the roots of parent(W)
.
inclusion(W::PermRootGroup,i::Integer)
inclusion(W::PermRootGroup,v::AbstractVector{<:Integer})
same as inclusion(W)[i]
or inclusion(W)[v]
(but more efficient).
Chevie.PermRoot.invariant_form
â Methodinvariant_form(W::ComplexReflectionGroup)
This function returns the matrix F
(defined up to a scalar) of an Hermitian form invariant under the action of the reflection group W
. That is, if M
is the matrix of an element of W
, then M*F*M'=F
.
julia> W=complex_reflection_group(4)
Gâ
julia> invariant_form(W)
2Ã2 Matrix{Int64}:
1 0
0 2
Chevie.PermRoot.invariants
â Methodinvariants(W::ComplexReflectionGroup)
returns the fundamental invariants of W
in its reflection representation V
. That is, returns a set of algebraically independent elements of the symmetric algebra of the dual of V
which generate the W
-invariant polynomial functions on V
. Each such invariant function is returned as a function: if eâ,âŠ,eâ
is a basis of V
and f
is the function, then the value of the polynomial function on aâeâ+âŠ+aâeâ
is obtained by calling f(aâ,âŠ,aâ)
. This function depends on the classification, and is dependent on the exact reflection representation of W
. So for the moment it is only implemented when the reflection representation for the irreducible components has the same Cartan matrix as the one provided by Chevie for the corresponding irreducible group. The polynomials are invariant for the natural action of the group elements as matrices; that is, if m==reflrep(W,w)
for some w
in W
, then an invariant f
satisfies f(aâ,âŠ,aâ)=f(vâ,âŠ,vâ)
where [vâ,âŠ,vâ]=[aâ,âŠ,aâ]Ãm
. This action is implemented on Mvp
s by the function ^
.
julia> W=coxgroup(:A,2)
Aâ
julia> @Mvp x,y,z
julia> i=invariants(W);
julia> map(f->f(x,y),i)
2-element Vector{Mvp{Int64, Int64}}:
-2x²+2xy-2y²
6x²y-6xy²
julia> W=complex_reflection_group(24)
Gââ
julia> p=invariants(W)[1](x,y,z)
Mvp{Rational{Int64}}: (14//1)xâŽ+(-12//1)x²y²+(-42//1)x²yz+(21//2)x²z²+(18//7)yâŽ+(-6//1)y³z+(-9//2)y²z²+(-21//8)zâŽ
julia> map(v->^(v,reflrep(W,1);vars=[:x,:y,:z]),(x,y,z))
((1//2)x+(3â-7/14)y, (-â-7/2)x+(-1//2)y, z)
julia> p^reflrep(W,1)-p
Mvp{Cyc{Rational{Int64}}}: 0
Chevie.PermRoot.isparabolic
â Methodisparabolic(W)
whether the reflection subgroup W
is a parabolic subgroup of parent(W)
.
julia> W=complex_reflection_group(7)
Gâ
julia> isparabolic(reflection_subgroup(W,[1,2]))
false
julia> isparabolic(reflection_subgroup(W,[1]))
true
Chevie.PermRoot.number_of_hyperplanes
â Methodnumber_of_hyperplanes(W::ComplexReflectionGroup)
or nhyp(W)
The number of reflecting hyperplanes of W
Chevie.PermRoot.number_of_reflections
â Methodnumber_of_reflections(W::ComplexReflectionGroup)
or nref(W)
the number of reflections of W
Chevie.PermRoot.parabolic_closure
â Methodparabolic_closure(W,I)
I
should be a list of indices of reflections of W
. Returns J
such that reflection_subgroup(W,J)
is the smallest parabolic subgroup of W
containing reflection_subgroup(W,I)
.
julia> W=complex_reflection_group(7)
Gâ
julia> parabolic_closure(W,[1])
1-element Vector{Int64}:
1
julia> parabolic_closure(W,[1,2])
3-element Vector{Int64}:
1
2
3
Chevie.PermRoot.parabolic_reps
â Methodparabolic_reps(W)
For a Coxeter group or finite complex reflection group W
, returns a list of indices of roots of W
describing representatives of orbits of parabolic subgroups under conjugation by W
. For Coxeter groups, each orbit has a representative which is a standard parabolic subgroup, that is whose indices is a subset of eachindex(gens(W))
. This may not be the case in general.
julia> parabolic_reps(coxgroup(:A,4))
7-element Vector{Vector{Int64}}:
[]
[1]
[1, 2]
[1, 3]
[1, 2, 3]
[1, 2, 4]
[1, 2, 3, 4]
julia> parabolic_reps(complex_reflection_group(3,3,3))
7-element Vector{Vector{Int64}}:
[]
[1]
[1, 2]
[1, 3]
[1, 9]
[2, 3]
[1, 2, 3]
parabolic_reps(W,r)
If a second argument r
is given, returns only representatives of the parabolic subgroups of semisimple rank r
.
julia> parabolic_reps(coxgroup(:A,4),2)
2-element Vector{Vector{Int64}}:
[1, 2]
[1, 3]
julia> parabolic_reps(complex_reflection_group(3,3,3),2)
4-element Vector{Vector{Int64}}:
[1, 2]
[1, 3]
[1, 9]
[2, 3]
Chevie.PermRoot.radical
â Methodradical(G)
The radical datum of a root datum (X,Ί,Y,Ί^âš)
is (X/(Xâ© â Ί),â
,Ί^â,â
)
, a toral datum. This function returns the torus corresponding to the radical of the root datum G
.
Chevie.PermRoot.rank
â Methodrank(W::ComplexReflectionGroup)
returns the rank of W
, which is the dimension of the space where it acts.
julia> rank(complex_reflection_group(31))
4
Chevie.PermRoot.reflectionMatrix
â FunctionreflectionMatrix(r, ζ=-1)
returns the matrix of the unitary complex reflection determined by the root r
and the eigenvalue ζ
, that is, when the vector space and its dual are identified via the scalar product <x,y>=transpose(x)*y
; the coroot ráµ
is then equal to the linear form x->(1-ζ)<x,r>/<r,r>
.
julia> reflectionMatrix([1,0,-E(3,2)])
3Ã3 Matrix{Cyc{Rational{Int64}}}:
0 0 ζâ²
0 1 0
릉 0 0
Chevie.PermRoot.reflectionMatrix
â MethodreflectionMatrix(root, coroot)
the matrix of the reflection with a given root and coroot.
A (complex) reflection is a finite order element s
of GL(V)
, the linear group of a vector space over a subfield of the complex numbers, whose fixed points form a hyperplane H
(the reflecting hyperplane of s
); an eigenvector r
for the non-trivial eigenvalue ζ
(a root of unity) is called a root of s
. If we choose a linear form ráµ
defining H
such that ráµ(r)=1-ζ
(a coroot of s
) then s
is given by x⊠x-ráµ(x)r
.
A way of specifying s
is by giving a root and a coroot, which are uniquely determined by s
up to multiplication of the root by a scalar and of the coroot by the inverse scalar. The function reflectionMatrix
gives the matrix of the corresponding reflection in the standard basis of V
, where the root
and the coroot
are vectors given in the standard bases of V
and Váµ
, so the pairing ráµ(r)
is obtained as transpose(root)*coroot
.
julia> r=reflectionMatrix([1,0,0],[2,-1,0])
3Ã3 Matrix{Int64}:
-1 0 0
1 1 0
0 0 1
julia> r==reflrep(coxgroup(:A,3),1)
true
julia> r*[2,-1,0]
3-element Vector{Int64}:
-2
1
0
julia> [1 0 0]*r
1Ã3 Matrix{Int64}:
-1 0 0
As we see in the last lines, in Julia a matrix operates from the right on the vector space V
of row vectors and from the left on the dual space Váµ
of column vectors.
Chevie.PermRoot.reflection_character
â Methodreflection_character(W::ComplexReflectionGroup,w)
or reflchar
Returns the trace of the element w
of W
as an endomorphism of the vector space V
on which W
acts.
julia> W=coxgroup(:B,3)
Bâ
julia> reflchar(W,longest(W))
-3
Chevie.PermRoot.reflection_character
â Methodreflection_character(W::ComplexReflectionGroup)
or reflchar
Returns the reflection character of W
. When W
is irreducible, it is CharTable(W).irr[charinfo(W).extRefl[2]]
.
julia> reflchar(coxgroup(:A,3))
5-element Vector{Int64}:
3
1
-1
0
-1
Chevie.PermRoot.reflection_eigenvalues
â Methodrefleigen(W,i)
faster than refleigen(W)[i]
Chevie.PermRoot.reflection_eigenvalues
â Methodreflection_eigenvalues(W)
or refleigen(W)
Let W
be a reflection group on the vector space V
. reflection_eigenvalues(W)
returns for each conjugacy class representative x
of W
(see classreps
) the eigenvalues of x
on V
, as a list of Root1
.
julia> refleigen(coxgroup(:B,2))
5-element Vector{Vector{Root1}}:
[1, 1]
[-1, 1]
[-1, -1]
[-1, 1]
[ζâ³, ζâ]
Chevie.PermRoot.reflection_representation
â Methodreflection_representation(W,i::Integer)
or reflrep(W,i)
the matrix for the distinguished reflection around the i
-th root of W
.
Chevie.PermRoot.reflection_representation
â Methodreflection_representation(W::ComplexReflectionGroup)
or reflrep(W)
returns reflrep.(Ref(W),gens(W))
, that is the generators of W
as matrices.
Chevie.PermRoot.reflection_representation
â Methodreflection_representation(W::ComplexReflectionGroup,w)
or reflrep(W,w)
Let V
be the space on which W
acts as a reflection group and let wâ W
, represented as a permutation of the roots. The function reflrep
returns the matrix of w
acting on V
(recall that matrices operate from the right on a vector space in Chevie
). This is the linear transformation of V
which acts trivially on the orthogonal of the coroots and has same effect as w
on the simple roots. The function makes sense more generally for a permutation of the roots induced by an element of GL(V)
which stabilizes the roots (thus in particular normalizes W
); thus it works for reflection cosets.
julia> W=reflection_subgroup(rootdatum("E7sc"),1:6)
Eâââââââ
ââ=EâΊâ
julia> reflrep(W,longest(W))
7Ã7 Matrix{Int64}:
0 0 0 0 0 -1 2
0 -1 0 0 0 0 2
0 0 0 0 -1 0 3
0 0 0 -1 0 0 4
0 0 -1 0 0 0 3
-1 0 0 0 0 0 2
0 0 0 0 0 0 1
Chevie.PermRoot.reflection_subgroup
â Methodreflection_subgroup(W,r)
returns the reflection subgroup of the complex reflection group W
generated by refls(W,r)
.
A reflection subgroup H
of W
is a permutation subgroup with the same additional information as W
, and some new one added which express the relationship with the parent W
:
inclusion(H)
: the indices of the roots of H
in the roots of W
parent(H)
: is set to W
.
restriction(H)
: a list of length length(roots(W))
with non-zero entries in positions inclusion(H)
bound to eachindex(roots(H))
.
A reflection group which is not a subgroup actually also has this information, set to the trivial values: inclusion(W)==restriction(W)==eachindex(roots(W))
, and parent()==W
. This allows a lot of code to be written in the same way for parent groups or reflection subgroups.
reflection_subgroup(R)
where R
is itself a reflection subgroup returns a reflection subgroup of the parent of R
.
julia> W=coxgroup(:F,4)
Fâ
julia> H=reflection_subgroup(W,[1,2,11,20])
Fâââââââââââ=Dâââââââ
julia> [restriction(H)]
1-element Vector{Vector{Int64}}:
[1, 2, 0, 0, 5, 0, 0, 0, 3, 0 ⊠0, 16, 0, 19, 0, 21, 0, 22, 23, 24]
julia> reflection_subgroup(H,[1,2,3])
Fââââââ=AââââââΊâ
Chevie.PermRoot.refls
â Methodrefls(W::ComplexReflectionGroup,i)
the element of W
representing the distinguished reflection around the i
-th root of W
(i
can be an index or a vector of indices)
Chevie.PermRoot.refls
â Methodrefls(W::ComplexReflectionGroup)
a list of same length as W.roots
giving the corresponding element of W
representing a distinguished reflection. In particular this list is much longer than unique(refls(W))
since in general there are several roots corresponding to a reflection.
Chevie.PermRoot.restriction
â Methodrestriction(W::PermRootGroup)
A list for each root of parent(W)
, which holds 0
if the root is not a root of W
and i
if the root is the i
-th root of W
.
restriction(W::PermRootGroup,i::Integer)
restriction(W::PermRootGroup,v::AbstractVector{<:Integer})
same as restriction(W)[i]
or restriction(W)[v]
(but more efficient).
Chevie.PermRoot.roots
â Methodroots(W::PermRootGroup,i)
same as roots(W)[i]
Chevie.PermRoot.roots
â Methodroots(W::PermRootGroup)
the roots of W
Chevie.PermRoot.semisimplerank
â MethodsemisimpleRank(W::ComplexReflectionGroup)
returns the semisimple rank of W
, which is the dimension of the space where it effectively acts. If W
is a reflection group on the space V
, and Vâ
is the subspace generated by roots(W)
, then semisimplerank(W)
is the dimension of Vâ
. The reflection group W
is called essential if Vâ=V
.
julia> W=reflection_subgroup(coxgroup(:A,3),[1,3])
Aâââââ=AâÃAâΊâ
julia> semisimplerank(W)
2
julia> rank(W)
3
Chevie.PermRoot.simple_conjugating
â Methodsimple_conjugating(W,i)
an element wâ W
such that action(W,simple_reps(W,i),w)==i
. In particular W(simple_reps(W,i))^simple_conjugating(W,i)==refls(W,i)
.
Chevie.PermRoot.simple_conjugating
â Methodsimple_conjugating(W::ComplexReflectionGroup)
For each index i
of a root, an element wâ W
such that action(W,simple_reps(W,i),w)==i
.
Chevie.PermRoot.simple_reps
â Methodsimple_reps(W,i)
the smallest index of a root in the same W
-orbit as the i
-th root (it is the index of a generator of W
).
Chevie.PermRoot.simple_reps
â Methodsimple_reps(W)
for each root, the index of the first simple root conjugate to it (it is the index of a generator of W
).
Chevie.PermRoot.simplecoroots
â Methodsimplecoroots(W::ComplexReflectionGroup)
the simple coroots of W
(those corresponding to gens(W)
) as a matrix (each coroot is a row)
Chevie.PermRoot.simpleroots
â Methodsimpleroots(W::ComplexReflectionGroup)
the simple roots of W
(those corresponding to gens(W)
) as a matrix (each root is a row)
Chevie.PermRoot.torus_order
â Functiontorus_order(W::ComplexReflectionGroup,i,q=Pol())
returns as a polynomial in q
the toric order of the i
-th conjugacy class of W
. This is the characteristic polynomial of an element of that class on the reflection representation of W
. It is the same as the generic order of the reflection subcoset torus(W,i)
of W
determined by the trivial subgroup and a representative of the i
-th conjugacy class.
julia> W=complex_reflection_group(4)
julia> torus_order.(Ref(W),1:nconjugacy_classes(W),Pol(:q))
7-element Vector{Pol{Cyc{Int64}}}:
q²-2q+1
q²+2q+1
q²+1
q²-ζâq+ζâ²
q²+ζâq+ζâ²
q²+ζâ²q+ζâ
q²-ζâ²q+ζâ
Chevie.PermRoot.type_irred
â MethodLet W be an irreducible CRG, generated by distinguished reflections S. type_irred classifies W (returns a type record) using:
- r=semisimplerank(W)
- s=length(W)/factorial(r)
- D=all distinguished reflections of W=orbit of S, which gives
- o=the maximum order of a reflection=max_{sâ S}o(s)
- h=the Coxeter number=sum_{sâ D}o(s)
G(de,e,r) has s=(de)ʳ/e, o=max(2,d), h=ed(r-1)+d-Ύ_{d,1}
(r,s,o) are sufficient to determine a G(de,e,r) excepted for ambiguity G(2e,e,2)/G(4e,4e,2), which is resolved by h (excepted for e=1, when the two solutions are isomorphic).
(r,s,o) are also sufficient to distinguish primitive groups except in the cases (which are resolved by h): G9/G(24,6,2) G12/G(12,6,2)/G(24,24,2) G13/G(24,12,2)/G(48,48,2) G22/G(60,30,2)/G(120,120,2) G7/G14/G(24,8,2) G8/G(12,3,2) G15/G(48,16,2) G17/G(120,24,2) G21/G(120,40,2)
Chevie.PermRoot.unique_refls
â Methodunique_refls(W::ComplexReflectionGroup)
A sublist of 1:length(roots(W))
such that the distinguished reflections around the corresponding roots reach one time only each distinguished reflection of W
.
Combinat.catalan
â Functioncatalan(W::ComplexReflectionGroup)
returns the Catalan Number of the irreducible complex reflection group W
. For well-generated groups, this number is equal to the number of simples in the dual Braid monoid. For other groups it was defined by Gordon and Griffeth2012. For Weyl groups, it also counts the number of antichains of roots.
julia> catalan(coxgroup(:A,7))
1430
catalan(W,i)
returns the i
-th Fuss-Catalan Number of the irreducible complex reflection group W
. For well-generated groups, this number is equal to the number of chains sâ,âŠ,sáµ¢
of simples in the dual monoid where sⱌ
divides sⱌââ
. For these groups, it is also equal to âⱌ(ih+dⱌ)/dⱌ
where the product runs over the reflection degrees of W
, and where h
is the Coxeter number of W
. For non-well generated groups, the definition is in Gordon and Griffeth2012.
julia> catalan(complex_reflection_group(7),2)
16
catalan(W;q=1)
, resp. catalan(W,i;q=1)
for q
a variable (like Pol()
or an Mvp
) returns the q
-Catalan number (resp. the i
-th q
-Fuss Catalan number) of W
. Again the definitions in general are in Gordon and Griffeth2012.
julia> catalan(complex_reflection_group(7),2;q=Pol())
Pol{Int64}: qâ·Â²+2qâ¶â°+3qâŽâž+4q³â¶+3q²âŽ+2q¹²+1
PermGroups.Perms.reflection_length
â Methodreflection_length(W::PermRootGroup,w::Perm)
or reflength
This function returns the number of eigenvalues of w
in the reflection representation which are not equal to 1. For a finite Coxeter group, this is equal to the reflection length of w
, that is the minimum number of reflections of which w
is a product. This also holds in general for a well-generated complex reflection group if w
divides for the reflection length a Coxeter element.
julia> W=coxgroup(:A,4)
Aâ
julia> reflength(W,longest(W))
2
julia> reflength(W,W(1,2,3,4))
4
Chevie.Urad
â ModuleThis module contains functions for computing with unipotent elements of reductive groups; specifically to compute with elements of the unipotent radical of a Borel subgroup of a connected algebraic reductive group; these functions were initially written by Olivier Dudas in GAP3, partly inspired by older C code of Jean Michel.
The unipotent radical of a Borel subgroup is the product in any order of the root subgroups associated to the positive roots. We fix an order, which gives a canonical form to display elements and to compare them.
The computations use the Steinberg relations between root subgroups, which come from the choice of a Chevalley basis of the Lie algebra. The reference we follow is Carter1972, chapters 4 to 6.
We start with a root datum specified by a Weyl group W
and build a struct UnipotentGroup
which contains information about the maximal unipotent subgroup of the corresponding reductive group, that is the unipotent radical of the Borel subgroup determined by the positive roots.
julia> W=coxgroup(:E,6)
Eâ
julia> U=UnipotentGroup(W)
UnipotentGroup(Eâ)
Now, if α=roots(W,2)
, we construct the element u_α(4)
of the root subgroup u_α
:
julia> U(2=>4)
u2(4)
If we do not specify the coefficient we make by default u_α(1)
, so we have also:
julia> U(2)^4
u2(4)
We can make more complicated elements:
julia> U(2=>4)*U(4=>5)
u2(4)u4(5)
julia> U(2=>4,4=>5)
u2(4)u4(5)
If the roots are not in order the element is normalized:
julia> U(4=>5,2=>4)
u2(4)u4(5)u8(-20)
It is possible to display the decomposition of the roots in simple roots instead of their index:
julia> xdisplay(U(4=>5,2=>4);root=true)
uââââââ(4)uââââââ(5)uââââââ(-20)
The coefficients in the root subgroups can be elements of arbitrary rings. Here is an example using Mvp
's:
julia> W=coxgroup(:E,8);U=UnipotentGroup(W)
UnipotentGroup(Eâ)
julia> u=U(map(i->i=>Z(2)*Mvp(Symbol("x",Char(i+0x2080))),1:8)...)
u1(xâ)u2(xâ)u3(xâ)u4(xâ)u5(xâ
)u6(xâ)u7(xâ)u8(xâ)
julia> cut(xrepr(u^16;limit=true,root=true),before="u",width=60)
uââââââââ(xâ²xâ²xâ³xââŽxâ
³xâ²xâ)
uââââââââ(xâxâ²xâ³xââŽxâ
³xâ²xâxâ)
uââââââââ(xâxâ²xâ²xââŽxâ
³xâ²xâ²xâ)
uââââââââ(xâxâ²xâ²xâ³xâ
³xâ³xâ²xâ)
uââââââââ(xâ²xâ²xâ³xââŽxâ
³xâ²xâxâ)
uââââââââ(xâxâ²xâ²xââŽxâ
³xâ³xâ²xâ)
uââââââââ(xâxâ²xâ²xââŽxâ
âŽxâ³xâ²xâ)
uââââââââ(xâ²xâ²xâ³xââŽxâ
³xâ³xâ²xâ)
uââââââââ(xâxâ²xâ³xââŽxâ
âŽxâ³xâ²xâ)
uââââââââ(xâ²xâ²xâ³xââŽxâ
âŽxâ³xâ²xâ)
uââââ
ââââ(xâ²xâ³xâ³xââµxâ
âŽxâ³xâ²xâ)
uââââ
ââââ(xâ²xâ²xââŽxââµxâ
âŽxâ³xâ²xâ)
uâââââ
âââ(xâ²xâ³xââŽxââ¶xâ
âµxââŽxâ³xâ²)
julia> u^32
()
The above computation shows that in characteristic 2 the exponent of the unipotent group of Eâ
is 32. More precisely, squaring doubles the height of the involved roots, so in the above u¹â¶
involves only roots of height 16 or more.
Various actions are defined on unipotent elements. Elements of the Weyl group act (through certain representatives) as long as no root subgroup is in their inversion set:
julia> W=coxgroup(:G,2)
Gâ
julia> U=UnipotentGroup(W);@Mvp x,y
julia> u=U(1=>x,3=>y)
u1(x)u3(y)
julia> u^W(2,1)
u4(y)u5(x)
julia> u^W(1)
ERROR: u1(x)u3(y) should have no coefficient on root 1
Semisimple elements act by conjugation:
julia> s=SemisimpleElement(W,[E(3),2])
SemisimpleElement{Cyc{Int64}}: <릉,2>
julia> u^s
u1(릉x)u3(2릉y)
As well as unipotent elements:
julia> u^U(2)
u1(x)u3(x+y)u4(-x-2y)u5(x+3y)u6(x²+3xy+3y²)
Chevie.Urad.UnipotentGroup
â TypeA struct UnipotentGroup
represents the unipotent radical ð
of a Borel subgroup of a reductive group G
.
See Carter1972, section 4.2 for details on the following. A Chevalley basis of the Lie algebra of ð
is a basis eáµ£
, where each eáµ£
is in the corresponding root subspace, such that [eáµ£,eâ]=Náµ£â e_{r+s}
for some integer constants Náµ£â
. The constants Náµ£â
for general roots are computed from the case where r
and s
are positive roots whose sum is a root; such a pair (r,s)
is called special.
Constants Cáµ£âᵢⱌ
are defined, see Carter1972, 5.2.3, by
$u_s(u)u_r(t)=u_r(t)u_s(u)\prod_{i,j>0}u_{ir+js}(C_{rsij}(-t)^iu^j)$
Where ir+js
runs over the positive integral combinations of r
and s
which are roots, taken in lexicographic order on (i,j)
. The constants Cáµ£âᵢⱌ
are computed from the constants Náµ£â
, see Carter1972, bottom of page 61 and top of page 76.
The fields of struct Unipotent Group
are:
W
: the Weyl group ofG
order
: the total order on the roots used to normalize products of root subgroups (by default1:nref(W)
)special: a
NamedTuplefor each special pair of roots
(r,s)`r
index ofr
s
index ofs
rs
index ofr+s
N
: the constantNáµ£â
comm
: stores theCáµ£âᵢⱌ
as the list of quadruples(i,j,ir+js,Cáµ£âᵢⱌ)
.
julia> U=UnipotentGroup(coxgroup(:G,2))
UnipotentGroup(Gâ)
julia> U.special
10-element Vector{@NamedTuple{r::Int64, s::Int64, rs::Int64, N::Int64, comm::Vector{NTuple{4, Int64}}}}:
(r = 1, s = 2, rs = 3, N = 1, comm = [(1, 1, 3, 1), (1, 2, 4, -1), (1, 3, 5, 1), (2, 3, 6, 2)])
(r = 2, s = 3, rs = 4, N = 2, comm = [(1, 1, 4, 2), (2, 1, 5, 3), (1, 2, 6, -3)])
(r = 2, s = 4, rs = 5, N = 3, comm = [(1, 1, 5, 3)])
(r = 1, s = 5, rs = 6, N = 1, comm = [(1, 1, 6, 1)])
(r = 3, s = 4, rs = 6, N = 3, comm = [(1, 1, 6, 3)])
(r = 2, s = 1, rs = 3, N = -1, comm = [(1, 1, 3, -1), (2, 1, 4, -1), (3, 1, 5, -1), (3, 2, 6, -1)])
(r = 3, s = 2, rs = 4, N = -2, comm = [(1, 1, 4, -2), (2, 1, 6, -3), (1, 2, 5, 3)])
(r = 4, s = 2, rs = 5, N = -3, comm = [(1, 1, 5, -3)])
(r = 5, s = 1, rs = 6, N = -1, comm = [(1, 1, 6, -1)])
(r = 4, s = 3, rs = 6, N = -3, comm = [(1, 1, 6, -3)])
Chevie.Urad.UnipotentGroup
â MethodUnipotentGroup(W;chevalley=nothing,order=1:nref(W))
W
should be a Weyl group. This function returns a struct UnipotentGroup
associated to the reductive group of Weyl group W
.
If the keyword order
is given it is a total order on the positive roots used to normalize unipotent elements.
By default the structure constants Náµ£â
are computed using the method of Carter72 from extraspecial pairs. Another set of structure constants can be given by given for the keyword chevalley
a Dict
associating to a pair (r,s)
of root indices some object p
such that first(p)
is the corresponding N_{r,s}
. Here is an example of using different constants from ChevLie
.
julia> W=coxgroup(:G,2)
Gâ
julia> using ChevLie: LieAlg, structconsts
julia> l=LieAlg(:g,2)
#I dim = 14
LieAlg('G2')
julia> U=UnipotentGroup(W;chevalley=structconsts(l))
#I calculating structconsts
#I calculating eps-canonical base (100/.)
UnipotentGroup(Gâ)
Chevie.Urad.UnipotentGroup
â Method'U(r)'
'U(r1=>c1,..,r_n=>c_n
)'
Where U
is a UnipotentGroup
. In the first form the function creates the element uáµ£(1)
, and in the second form the element u_{r_1}(c_1)⊠u_{r_n}(c_n)
julia> U=UnipotentGroup(coxgroup(:G,2))
UnipotentGroup(Gâ)
julia> U(2)
u2(1)
julia> U(1=>2,2=>4)
u1(2)u2(4)
julia> U(2=>4,1=>2)
u1(2)u2(4)u3(-8)u4(32)u5(-128)u6(512)
Chevie.Chars.decompose
â Methoddecompose(w,u::UnipotentElement)
w
should be an element of the Weyl group corresponding to u
. If ð
is the unipotent radical of the Borel subgroup determined by the positive roots, and ðâ»
the opposite unipotent radical, this function decomposes u
into its component in ð â© Ê·ðâ»
and its component in ð â© Ê·ð
.
julia> W=coxgroup(:G,2)
Gâ
julia> U=UnipotentGroup(W);@Mvp x,y
julia> u=U(2=>y,1=>x)
u1(x)u2(y)u3(-xy)u4(xy²)u5(-xy³)u6(2x²y³)
julia> decompose(W(1),u)
2-element Vector{UnipotentElement{Mvp{Int64, Int64}}}:
u1(x)
u2(y)u3(-xy)u4(xy²)u5(-xy³)u6(2x²y³)
julia> decompose(W(2),u)
2-element Vector{UnipotentElement{Mvp{Int64, Int64}}}:
u2(y)
u1(x)
Chevie.Urad.abelianpart
â Method'abelianpart(u::UnipotentElement)'
If ð
is the unipotent subgroup and D(ð)
its derived subgroup, this function returns the projection of the unipotent element 'u' on ð/D(ð)
, that is its coefficients on the simple roots.
julia> U=UnipotentGroup(coxgroup(:G,2));@Mvp x,y
julia> u=U(2=>y,1=>x)
u1(x)u2(y)u3(-xy)u4(xy²)u5(-xy³)u6(2x²y³)
julia> abelianpart(u)
u1(x)u2(y)
Chevie.Urad.reorder
â Function'reorder(U,l[,order])'
This function takes a list of pairs 'r=>c' representing a unipotent element, where 'r' is a root and 'c' the corresponding coefficient, and puts it in canonical form, reordering the terms to agree with 'U.order' using the commutation relations. If a second argument is given, this is used instead of 'U.order'.
julia> U=UnipotentGroup(coxgroup(:G,2))
UnipotentGroup(Gâ)
julia> l=reorder(U,[2=>4,1=>2])
6-element Vector{Pair{Int64, Int64}}:
1 => 2
2 => 4
3 => -8
4 => 32
5 => -128
6 => 512
julia> reorder(U,l,6:-1:1)
2-element Vector{Pair{Int64, Int64}}:
2 => 4
1 => 2
Chevie.Weyl
â ModuleFinite Coxeter groups are the finite complex reflection groups which can be defined on a real vector space V
.
Weyl groups are the finite Coxeter groups which can be defined over a rational vector space V
(thus over the integers).
Like finite complex reflection groups, finite Coxeter groups are implemented as groups of permutations of a set of roots. The particular crystallographic root systems for Weyl groups play an important role in mathematics as they classify semi-simple Lie algebras and algebraic groups.
Let us give precise definitions. Let V
be a real vector space and Vⱜ
its dual. A root system is a finite set of vectors Râ V
(the roots), together with a map r⊠rⱜ
from R
to a subset Rⱜ
of Vⱜ
(the coroots) such that:
- For any
râ R
, we haverⱜ(r)=2
, so that the formulax⊠x-rⱜ(x)r
defines a reflectionsáµ£:Vâ V
with rootr
and corootrⱜ
. - The reflection
sáµ£
stabilizesR
.
The subgroup W=W(R)
of GL(V)
generated by the reflections sáµ£
for râ R
is a finite Coxeter group. We require reduced root systems, that is such that the only elements of R
colinear with râ R
are r
and -r
; for Weyl groups, we also require that the root system be crystallographic, that is rⱜ(s)
is an integer, for any sâ R,rⱜâ Rⱜ
.
If we identify V
with Vⱜ
by choosing a W
-invariant bilinear form (.;.)
, then we have rⱜ=2r/(r;r)
. A root system R
is irreducible if R
is not the union of two orthogonal subsets; equivalently the representation of W
on the subspace generated by R
is irreducible. If R
is reducible then the corresponding Coxeter group is the direct product of the Coxeter groups associated with the irreducible components of R
.
Let us now describe how a root system R
and a presentation of the corresponding W
are encoded in a Cartan matrix or a Dynkin diagram. We can choose a linear form on V
which does not vanish on any element of R
. Depending on the sign of the value of this linear form on a root r â R
we call r
positive or negative. Then there exists a unique subset Î
of the positive roots, the simple roots, such that any positive root is a linear combination with non-negative coefficients of the roots in Î
. Any two sets of simple roots (corresponding to different choices of linear forms) can be transformed into each other by a unique element of W(R)
. If S
is the set of reflections with respect to the simple roots, then (W,S)
is a Coxeter system. These generating reflections are called Coxeter generators or simple reflections.
Since the pairing between V
and Vⱜ
is W
-invariant, if Î
is a set of simple roots and if we define the Cartan matrix as being the n
times n
matrix C={rⱜ(r')}
for r,r'âÎ
, this matrix is independent of the chosen linear form up to simultaneous permutation of rows and columns. Since the action of sáµ£
on r'
for r,r'âÎ
is given by sáµ£(r')=r'-C(r,r')r
, the Cartan matrix determines the reflection representation of W
.
For a crystallographic root system the Cartan matrix has integral entries, and in the basis Î
(completed by a basis of the orthogonal), sáµ£
has an integral matrix. All finite-dimensional (complex) representations of a finite Coxeter group can be realized over the field generated by the entries of the Cartan matrix.
The Cartan matrix is encoded in a Dynkin diagram, a tree with weighted edges and an orientation on edges of even weight >2, as follows. The vertices are indexed by the simple reflections; an edge is drawn between s
and t
if the order mââ
of st
is greater than 2
and is given the weight mââ
. These weights are encoded by drawing the edge single for weight 3, double for weight 4 and triple for weight 6. The arrows indicate the relative root lengths (going from the longer to the shorter root) which may differ between different orbits of W
on R
. Alternately the Dynkin diagram can be obtained from the Cartan matrix as follows: if Cáµ£â
and Câáµ£
are integers such that |Câáµ£|â¥|Cáµ£â|=1
there is an edge of weight |Câáµ£|
from r
to s
with an arrow pointing to s
if |Câáµ£|>1
. Note that the Cartan matrices we consider here are not necessarily symmetric, contrary to the Cartan matrices we considered describing the reflection representation of a general Coxeter group; being symmetric corresponds to all roots being taken of the same length.
The irreducible crystallographic root systems are classified by the following list of Dynkin diagrams. The labeling of the nodes is the order of the generators and is shown by the function diagram
.
Aâ OâOâOââŠâO Bâ Oâ OâOââŠâO Câ Oâ OâOââŠâO Dâ O 2
1 2 3 ⊠n 1 2 3 ⊠n 1 2 3 ⊠n ᅳ
OâOââŠâO
1 3 ⊠n
Gâ Oâ O Fâ OâOâOâO Eâ O 2 Eâ O 2 Eâ O 2
1 2 1 2 3 4 ï¿š ï¿š ï¿š
OâOâOâOâO OâOâOâOâOâO OâOâOâOâOâOâO
1 3 4 5 6 1 3 4 5 6 7 1 3 4 5 6 7 8
We get the Coxeter diagram, which describes the underlying Weyl group, if we ignore the arrows: we see that the root systems B_n
and C_n
correspond to the same Coxeter group (the Coxeter diagram is defined by the Coxeter matrix). Weyl groups can also be characterized as the finite Coxeter groups such that all off-diagonal entries of the Coxeter matrix are in {2,3,4,6}
.
Here are the Coxeter diagrams for the finite Coxeter groups which are not crystallographic (Iâ(e)
is not crystallographic if eâ {2,3,4,6}
).
e 5 5
Iâ(e) OâO Hâ OâOâO Hâ OâOâOâO
1 2 1 2 3 1 2 3 4
The function cartan
gives the cartan matrix for an irreducible root system
julia> cartan(:D,4)
4Ã4 Matrix{Int64}:
2 0 -1 0
0 2 -1 0
-1 -1 2 -1
0 0 -1 2
julia> cartan(:I,2,5) # for type Iâ(e) give e as 3rd argument
2Ã2 Matrix{Cyc{Int64}}:
2 릉
²+ζâ
³
릉
²+ζâ
³ 2
Given two Cartan matrices c1
and c2
, their matrix direct sum (corresponding to the orthogonal direct sum of the root systems) can be obtained by cat(c1,c2,dims=[1,2])
.
The whole root system can be recovered from the simple roots and the corresponding coroots, since each root is in the orbit of a simple root. The restriction of the simple reflections to the span of R
is determined by the Cartan matrix, so R
is determined by the Cartan matrix and the set of simple roots.
The function rootdatum
takes as arguments a matrix r
whose lines represents the list of simple roots and another matrix cr
whose lines are the corresponding coroots and produces a FiniteCoxeterGroup
. Such an object is a permutation group containing in addition the description of a root system. cr*transpose(r)
should be a Cartan matrix. Each element of the coxeter group is represented as the permutation it induces on the roots, coded as a permutation of 1:2N
where we label the positive roots by 1:N
, and the negative roots by N+1:2N
.
If a single matrix argument is given to rootdatum
it is taken as cr
and r
is taken to be the identity matrix; we get thus a particular root system where the roots are the canonical basis of V
. For convenience, rootdatum(cartan(t...))
can be simplified to coxgroup(t...)
.
julia> W=coxgroup(:D,4) # same as rootdatum(cartan(:D,4))
Dâ
julia> cartan(W)
4Ã4 Matrix{Int64}:
2 0 -1 0
0 2 -1 0
-1 -1 2 -1
0 0 -1 2
Also, the FiniteCoxeterGroup
associated to a direct sum of irreducible root systems can be obtained as
julia> W=coxgroup(:A,2)*coxgroup(:B,2)
AâÃBâ
julia> cartan(W) # same as cat(cartan(:A,2), cartan(:B,2),dims=[1,2])
4Ã4 Matrix{Int64}:
2 -1 0 0
-1 2 0 0
0 0 2 -2
0 0 -1 2
The elements of a Weyl group are permutations of the roots:
julia> W=coxgroup(:D,4)
Dâ
julia> p=W(1,3,2,1,3) # permutes the 24 roots
(1,14,13,2)(3,17,8,18)(4,12)(5,20,6,15)(7,10,11,9)(16,24)(19,22,23,21)
julia> word(W,p)
5-element Vector{Int64}:
1
3
1
2
3
finally, a benchmark on julia 1.0.2
julia> @btime length(elements(coxgroup(:E,7)))
531.385 ms (5945569 allocations: 1.08 GiB)
GAP3 for the same computation takes 2.2s
Chevie.CoxGroups.coxeter_group
â Functioncoxeter_group(type,rank[,bond];sc=false)
(or coxgroup
)
If C=cartan(type,rank[,bond])
, this is equivalent to rootdatum(C)
. If sc=true
this is equivalent to rootdatum(permutedims(C),one(C))
.
The resulting object W
, a FiniteCoxeterGroup
, has an additional entry compared to a PermRootGroup
.
W.rootdec
: the root vectors, given as linear combinations of simple roots. The firstnref(W)
roots are positive, the nextnref(W)
are the corresponding negative roots. Moreover, the firstsemisimplerank(W)
roots are the simple roots. The positive roots are ordered by increasing height.
and roots(W)
is ordered is the same way as W.rootdec
.
For how to get various information on the root system and the Coxeter group, see the functions nref, coroots, rootlengths, simple_reps, simple_conjugating, reflrep, simpleroots, simplecoroots, PermX, cartan, inclusion, restriction, action, rank, semisimplerank
In terms of root data, this function returns the adjoint root datum of Weyl group W
. If sc=true
it returns the simply connected root datum.
julia> W=coxgroup(:G,2)
Gâ
julia> cartan(W)
2Ã2 Matrix{Int64}:
2 -1
-3 2
julia> W.rootdec
12-element Vector{Vector{Int64}}:
[1, 0]
[0, 1]
[1, 1]
[1, 2]
[1, 3]
[2, 3]
[-1, 0]
[0, -1]
[-1, -1]
[-1, -2]
[-1, -3]
[-2, -3]
julia> reflrep(W)
2-element Vector{Matrix{Int64}}:
[-1 0; 1 1]
[1 3; 0 -1]
Chevie.CoxGroups.coxeter_group
â Methodcoxeter_group()
or coxgroup()
the trivial Coxeter group
Chevie.CoxGroups.coxeter_matrix
â Functioncoxeter_matrix(type, rank [,bond])
or coxmat
Like cartan
, the function coxmat
can be defined from the type and rank of a finite Coxeter group.
Chevie.CoxGroups.inversions
â Methodinversions(W::FiniteCoxeterGroup, w::AbstractVector{<:Integer})
Given a word w=[sâ,âŠ,sâ]
(a vector of integers) representing the element W(w...)
, returns the inversions of w
, that is the list of indices of the reflections of W
given by W(sâ), W(sâ,sâ,sâ), âŠ, W(sâ,sâ,âŠ,sâ,sâââ,âŠ,sâ)
.
julia> W=coxgroup(:A,3)
Aâ
julia> inversions(W,[2,1,2])
3-element Vector{Int64}:
2
4
1
Chevie.PermRoot.cartan
â Functioncartan(type, rank [,bond])
the Cartan matrix for a finite Coxeter group described by type and rank. The recognized types are :A, :B, :Bsym, :C, :D, :E, :F, :Fsym, :G, :Gsym, :I, :H
. For type :I
a third argument must be given describing the bond between the two generators. The sym
types correspond to (non-crystallographic) root systems where all roots have the same length; they afford automorphisms that the crystallographic root system does not afford, which allow to define the "very twisted" Chevalley groups.
julia> cartan(:F,4)
4Ã4 Matrix{Int64}:
2 -1 0 0
-1 2 -1 0
0 -2 2 -1
0 0 -1 2
julia> cartan(:I,2,5)
2Ã2 Matrix{Cyc{Int64}}:
2 릉
²+ζâ
³
릉
²+ζâ
³ 2
julia> cartan(:Bsym,2)
2Ã2 Matrix{Cyc{Int64}}:
2 -â2
-â2 2
Chevie.PermRoot.cartan
â Methodcartan(M::AbstractMatrix)
Cartan matrix from Coxeter matrix
The argument should be the Coxeter matrix M
for a Coxeter group W
and the result is the Cartan Matrix C
for the standard reflection representation of W
. We have C[s,t]=-2cos(Ï/M[s,t])
, where M[s,s]==1
and by convention Ï/M[s,t]==0
if M[s,t]==â
, which we represent by M[s,t]==0
. Since M
is symmetric, the resulting C
is symmetric, meaning that all roots in the constructed reflection representation have same length.
julia> cartan([1 3;3 1])
2Ã2 Matrix{Cyc{Int64}}:
2 -1
-1 2
Chevie.PermRoot.reflection_subgroup
â Methodreflection_subgroup(W::FiniteCoxeterGroup,I)
For Iâ1:nref(W)
, the subgroup H
of W
generated by refls(W,I)
.
A theorem found independently by Deodhar1989 and Dyer1990 is that a subgroup H
of a Coxeter system (W,S)
generated by reflections has a canonical Coxeter generating set, formed of the t â Ref(H)
such length(W,tt')>length(W,t)
for any t'â Ref(H)
different from t
. This is used by reflection_subgroup
to determine the Coxeter system of H
.
julia> W=coxgroup(:G,2)
Gâ
julia> diagram(W)
Oâ O Gâ
1 2
julia> H=reflection_subgroup(W,[2,6])
Gâââââ=AÌâÃAâ
julia> diagram(H)
O AÌâ
1
O Aâ
2
The notation Gâââââ
means that roots(W,[2,6])
is a system of simple roots for H
.
If H
is a standard parabolic subgroup of a Coxeter group W
then the length function on H
(with respect to its set of generators) is the restriction of the length function on W
. This need not no longer be true for arbitrary reflection subgroups of W
.
julia> elH=word.(Ref(H),elements(H))
4-element Vector{Vector{Int64}}:
[]
[1]
[2]
[1, 2]
julia> elW=word.(Ref(W),elements(H))
4-element Vector{Vector{Int64}}:
[]
[2]
[1, 2, 1, 2, 1]
[1, 2, 1, 2, 1, 2]
julia> map(w->H(w...),elH)==map(w->W(w...),elW)
true
We implement finite reflection groups as permutation groups on a set of roots. Consequently, a reflection subgroup Hâ W
is a permutation subgroup, thus its elements are represented as permutations of the roots of the parent group.
Chevie.PermRoot.roots
â Methodroots(C::AbstractMatrix)
returns the set of positive roots defined by the Cartan matrix C
, which should be the Cartan matrix of a finite Coxeter group.
For an integer Cartan matrix, the returned roots are sorted by height and reverse lexicographically for a given height.
Chevie.Weyl.badprimes
â Methodbadprimes(W)
Let W
be a Weyl group. A prime is bad for W
if it divides a coefficient of some root on the simple roots. The function badprimes
returns the list of primes which are bad for W
.
julia> W=coxgroup(:E,8)
Eâ
julia> badprimes(W)
3-element Vector{Int64}:
2
3
5
Chevie.Weyl.derived_datum
â Methodderived_datum(G)
The derived datum of (X,Ί,Y,Ί^âš)
is (X/Ί^{âšâ}, Ί, Yâ© â Ί^âš, Ί^âš)
where â
denotes the orthogonal. This function starts with a root datum object G
and returns the root datum object corresponding to the derived datum.
Chevie.Weyl.describe_involution
â Methoddescribe_involution(W,w)
Given an involution w
of a Coxeter group W
, by a theorem of Richardson1982 there is a unique parabolic subgroup P
of W
such that P
is finite and w
is the longest element of P
, and is central in P
. The function returns I
such that P==reflection_subgroup(W,I)
and w==longest(reflection_subgroup(W,I))
.
julia> W=coxgroup(:A,2)
Aâ
julia> w=longest(W)
(1,5)(2,4)(3,6)
julia> describe_involution(W,w)
1-element Vector{Int64}:
3
julia> w==longest(reflection_subgroup(W,[3]))
true
For now only works for finite Coxeter groups.
Chevie.Weyl.highest_short_root
â Methodhighest_short_root(W)
It is an error if W
is not an irreducible Coxeter group. Otherwise HighestShortRoot
returns the index of the unique short root of maximal height of W
. If all roots have the same length then this is the index of the unique root of maximal height, equal to nref(W)
.
julia> W=coxgroup(:G,2)
Gâ
julia> highest_short_root(W)
4
Chevie.Weyl.istorus
â Methodistorus(W)
whether W
is a torus
Chevie.Weyl.relative_group
â Methodrelative_group(W::FiniteCoxeterGroup,J)
J
should be a if distinguished subset of S==eachindex(gens(W))
, that is if for sâ S-J
we set $v(s,J)=wâ^{J⪠s}wâᎶ$ then J
is stable by all v(s,J)
. Then $N_W(W_J)=W_Jâ Nâ$ where Nâ
is the group generated by the v(s,J)
, which form a Coxeter system for Nâ
. Equivalently Nâ
consists of the J
-reduced elements of N_W(W_J)
. The quotient R=N_W(W_J)/W_J
has a natural reflection representation on $X(ZL_J/ZG)$, using that by Lusztig1976, the images of the roots of W
in $X(ZL_J)$ form a root system. The function returns R
as a reflection group on $X(ZL_J/ZG)$, with some extra attributes reflecting its origin
R.relative_indices=setdiff(S,J)
in a certain orderR.toparent=
the list ofv(s,J)
corresponding to.relative_indices
; defines an isomorphismRâ Nâ
.R.fromparent
is a function mapping elements ofNâ
toR
. The inverse mapping to.toparent
.
Chevie.Weyl.rootdatum
â Methodrootdatum(R::AbstractMatrix,CR::AbstractMatrix)
root datum from R
whose rows are the simple roots on a basis of X(T)
and CR
whose rows are the simple coroots on a basis of Y(T)
. The following methods all define glâ
.
julia> rootdatum(:gl,3)==rootdatum("gl",3)
true
julia> rootdatum([1 -1 0;0 1 -1],[1 -1 0;0 1 -1])
AâΊâ
Chevie.Weyl.rootdatum
â Methodrootdatum(C::AbstractMatrix)
adjoint root datum from Cartan matrix C
. The adjoint group is also the default returned for coxeter_group(type,rank)
. The following methods all define pglâ
.
julia> rootdatum(cartan(:A,3))==coxgroup(:A,3)
true
julia> rootdatum(:pgl,3)
pglâ
Chevie.Weyl.rootlengths
â Methodrootlengths(W::FiniteCoxeterGroup)
the vector of the (squared) length of the roots of W
. The shortest roots in an irreducible subsystem are given the length 1. In a Weyl group the others then have length 2 (or 3 in type Gâ
). The matrix of the W
-invariant bilinear form is given by Diagonal(rootlengths(W)[1:ngens(W)])*cartan(W)
.
Chevie.Weyl.standard_parabolic
â Methodstandard_parabolic(W,H)
Given a reflection subgroup H
or the indices of its simple roots returns nothing
if H
is not parabolic, otherwise returns w
such that H^w
is a standard parabolic subgroup of W
.
julia> W=coxgroup(:E,6)
Eâ
julia> R=reflection_subgroup(W,[20,30,19,22])
Eââââââââââââ=AâââââââΊâ²
julia> p=standard_parabolic(W,R)
(1,4,49,12,10)(2,54,62,3,19)(5,17,43,60,9)(6,21,34,36,20)(7,24,45,41,53)(8,65,50,15,22)(11,32,31,27,28)(13,48,46,37,40)(14,51,58,44,29)(16,23,35,33,30)(18,26,39,55,38)(42,57,70,72,56)(47,68,67,63,64)(52,59,71,69,66)
julia> p==standard_parabolic(W,[19,1,9,20]) # can give inclusiongens
true
julia> reflection_subgroup(W,[20,30,19,22].^p) # same as R^p
Eâââââ
ââ=AâΊâ²
julia> R=reflection_subgroup(W,[1,2,3,5,6,35])
Eââââââââââ
ââ
âââ=AâââââÃAâââââÃAââââ
â
julia> standard_parabolic(W,R)
Chevie.Weyl.torus
â Methodtorus(rank::Integer)
This function returns the object corresponding to the notion of a torus of dimension rank
, a Coxeter group of semisimple rank 0 and given rank
. This corresponds to a split torus; the extension to Coxeter cosets is more useful.
julia> torus(3)
Ίâ³
Chevie.Weyl.two_tree
â Functiontwo_tree(m)
Given a square matrix m
with zeroes symmetric with respect to the diagonal, let G
be the graph with vertices axes(m)[1]
and an edge between i
and j
iff !iszero(m[i,j])
.
If G
is a line this function returns it as a Vector{Int}
. If G
is a tree with one vertex c
of valence 3
the function returns (c,b1,b2,b3)
where b1,b2,b3
are the branches from this vertex sorted by increasing length. Otherwise the function returns nothing
.
This function is used when recognizing the type of a Cartan matrix.
julia> two_tree(cartan(:A,4))
4-element Vector{Int64}:
1
2
3
4
julia> two_tree(cartan(:E,8))
(4, [2], [3, 1], [5, 6, 7, 8])
Chevie.Weyl.type_cartan
â Methodtype_cartan(C)
return a list of (series=s,indices=[i1,..,in]) for a Cartan matrix
Chevie.Weyl.type_fincox_cartan
â MethodTypeIrred or nothing for an irreducible Cartan matrix
Chevie.Weyl.with_inversions
â Methodwith_inversions(W,N)
W
should be a finite Coxeter group and N
a subset of 1:nref(W)
. Returns the element w
of W
such that N==inversions(W,w)
. Returns nothing
if no such element exists.
julia> W=coxgroup(:A,2)
Aâ
julia> map(N->with_inversions(W,N),combinations(1:nref(W)))
8-element Vector{Union{Nothing, Perm{Int16}}}:
()
(1,4)(2,3)(5,6)
(1,3)(2,5)(4,6)
nothing
nothing
(1,6,2)(3,5,4)
(1,2,6)(3,4,5)
(1,5)(2,4)(3,6)
Chevie.Garside
â ModuleGarside monoids are a general class of monoids whose most famous examples are the braid and dual braid monoids. They have groups of fractions, which in both examples is the braid group. Here we implement braid groups as part of a general implementation of Garside monoids and groups.
To define Garside monoids we introduce some vocabulary about divisibility in monoids. A left-divisor of x
is a d
such that there exists y
with x=dy
(and then we say that x
is a right multiple of d
, and write d⌠x
). We say that a monoid M
is left cancellable if an equality dx=dy
implies x=y
. We define symmetrically right-divisors, left multiples and right cancellability. We say that x
is an atom if 1
and x
are its only divisors. A left gcd of x
and y
is a common left divisor d
of x
and y
such that any other common left-divisor is a left-divisor of d
. Similarly a right lcm of x
and y
is a common multiple which is a left-divisor of any other common multiple.
We call Garside a monoid M
which:
- is left and right cancellable.
- is generated by its atoms.
- admits left and right gcds and lcms.
- is such that any element has only finitely many left (or right) divisors.
- admits a Garside element, which is an element
Î
whose set of left and right-divisors coincide and generateM
.
Garside elements are not unique, but there is a unique minimal one (for divisibility); we assume that a Garside element Î
has been chosen. Then the divisors of Î
are called the simples of M
. A Garside monoid embeds into its group of fractions, which is called a Garside group (a group can have several different Garside structures, for instance braid groups of finite Coxeter groups have an ordinary and a dual braid monoid).
We also implement locally Garside monoids, which are monoids where lcms do not always exist, but exist if any common multiple exists; the set of simples is then not defined by a Garside element, but by the condition that they contain the atoms and are closed under lcms and taking divisors (see BDM01); since this is not ensured by the existence of a Garside element, one has to add the condition that each element is divisible by finitely many simples (but the number of simples can be infinite). The most important example is the Artin monoid of an infinite Coxeter group. It is not known whether these monoids embed in their group of fractions (although this has been proved for Artin monoids of Coxeter groups by Paris Paris01), and thus computing in the monoid does not help for computing in the group; only the monoid is implemented here for these cases.
What allows computing with Garside and locally Garside monoids, and Garside groups, is the fact that they admit normal forms â- these normal forms were exhibited for braid monoids of Coxeter groups by Deligne Del72, who extended earlier work of Brieskorn, Saito BS72 and Garside Gar69:
Let
M
be a locally Garside monoid. Then forbâ M
there is a unique maximal simple left-divisorα(b)
ofb
; any other simple dividingb
dividesα(b)
.Let
M
be a Garside monoid with Garside elementÎ
and group of fractionsG
. Then for anyxâ G
, for large enoughi
we haveÎâ±xâ M
.
A consequence of 1. is that every element has a canonical decomposition as a product of simples, its left-greedy normal form. If we define Ï(x)
by x=α(x)Ï(x)
, then the normal form of x
is α(x)α(Ï(x))α(Ï^2(x))âŠ
We use the normal form to represent elements of M
, and when M
is Garside we use 2. to represent elements of G
: given xâ G
we compute the smallest power i
such that Îâ± xâ M
, and we represent x
by the pair (i,Îâ»â±x)
. We are thus reduced to the case where xâ M
, not divisible by Î
, where we represent x
by the sequence of simples that make up its normal form.
We now describe Artin-Tits braid monoids. Let (W,S)
be a Coxeter system, that is W
has presentation
âšsâ Sâ£s²=1, sts⯠=tst⯠(mââ factors on each side) for s,tâ Sâ©
for some Coxeter matrix mââ
. The braid group B
associated to (W,S)
is the group defined by the presentation
âšð¬â ð⣠ð¬ðð¬â¯ =ðð¬ð⯠(mââ factors on each side) for ð¬,ðâ ðâ©
The positive braid monoid Bâº
associated with W
is the monoid defined by the presentation above â- it identifies with the submonoid of B
generated by ð
by Paris01. This monoid is locally Garside, with the set of simples in bijection with the elements of W
and with ð
as atoms; we will denote by ð
the set of simples, and by ð° ⊠w
the bijection between simples and elements of W
. The group W
has a length defined in terms of reduced expressions. Similarly, having only homogeneous relations, Bâº
has a natural length function. Then ð
can be characterised as the subset of elements of Bâº
with the same length as their image in W
.
If W
is finite, then Bâº
is Garside with Garside element the element of ð
whose image is the longest element of W
. A finite Coxeter group is also a reflection group in a real vector space, thus in its complexified V
, and B
also has a topological definition as the fundamental group of the space Vʳáµáµ/W
, where Vʳáµáµ
is the set of elements of V
which are not fixed by any non-identity element of S
; however, we will not use this here.
We implement in general only monoids which have a finite number of atoms (the package AffineA
implements, following the work of François Digne, the dual braid monoid of the affine Coxeter group W(AÌâ)
).
Given a Coxeter group W
,
julia> W=coxgroup(:A,4)
Aâ
julia> B=BraidMonoid(W)
BraidMonoid(Aâ)
constructs the associated braid monoid, and then, used as a function, B
constructs elements of the braid monoid (or group when W
is finite) from a list of generators indices given as arguments:
julia> w=B(1,2,3,4) # represents ð¬âð¬âð¬âð¬â
1234
julia> w^3 # the terms of the normal form are printed separated by a .
121321432.343
julia> word(α(w^3))
9-element Vector{Int64}:
1
2
1
3
2
1
4
3
2
julia> w^4
Î.232432
julia> inv(w)
(1234)â»Â¹
How an element of a Garside group is printed is controlled by the IOcontext
attribute ':greedy'. By default, elements are printed as fractions aâ»Â¹b
where a
and b
have no left common divisor. Each of a
and b
is printed using its left-greedy normal form, that is a maximal power of the Garside element followed by the rest. One can print the entire element in the left-greedy normal from by setting the IOContext
:greedy=>true
; with the same w
as above we have:
julia> xrepr(w^-1,greedy=true,limit=true)
"Îâ»Â¹.232432"
By default, repr
gives w
back in a form which after assigning B=BraidMonoid(W)
can be input back into Julia:
julia> repr(w)
"B(1,2,3,4)"
julia> repr(w^3)
"B(1,2,1,3,2,1,4,3,2,3,4,3)"
julia> repr(w^-1)
"B(-4,-3,-2,-1)"
In general elements of a Garside monoid are displayed as a list of the indices of their constituting atoms.
We will now describe the dual braid monoid. First we define interval monoids. Given a group W
and a set S
of generators of W
as a monoid, we define the length l_S(w)
as the minimum number of elements of S
needed to write w
. We then define left-divisors of x
as those dâW
such that there exists y
with x=dy
and l_S(d)+l_S(y)=l_S(x)
. We say that wâ W
is balanced if its set of left and right divisors coincide; in this case we denote this set by [1,w]
, an interval for the poset of S
-divisibility. We say that w
is Garside for l_S
if it is balanced and [1,w]
is a lattice (where upper and lower bounds are lcms and gcds), which generates W
. Then we have the theorem:
Suppose w
is Garside for the l_S
. Then the monoid M
with generators [1,w]
and relations xy=z
whenever xy=z
holds in W
and l_S(x)+l_S(y)=l_S(z)
, is a Garside monoid, with simples [1,w]
and atoms S
. It is called the interval monoid defined by the interval [1,w]
.
The Artin-Tits braid monoid is an interval monoid by taking for S
the Coxeter generators, in which case l_S
is the Coxeter length, and taking for w
the longest element of W
. The dual monoid, constructed by Birman, Ko and Lee for type A
and by Bessis for all well-generated complex reflection groups, is obtained in a similar way, by taking this time for w
a Coxeter element, for l_S
the reflection length 'reflength' and for S_S
the reflections which divide w
for the reflection length (for Coxeter groups all reflections divide w
but for well-generated complex reflection groups not all reflections divide); for the dual monoid the simples are of cardinality the generalized Catalan numbers catalan
. An interval monoid has naturally an inverse morphism from M
to W
, called 'image' which is the quotient map from the interval monoid to W
which sends back simple braids to [1,w]
.
A last pertinent notion is reversible monoids. Since we store left normal forms, it is easy to compute left lcms and gcds, but hard to compute right lcms and gcds. But this becomes easy to do if the monoid has an operation 'reverse', which has the property that 'a' is a left-divisor of 'b' if and only if 'reverse(a)' is a right-divisor of 'reverse(b)'. This holds for Artin-Tits and dual braid monoids of groups generated by true reflections; Artin-Tits monoids have a reverse
operation which consists of reversing a word, written as a list of atoms. The dual monoid also has a reverse
operation defined in the same way, but this operation changes monoid: it goes from the dual monoid for the Coxeter element w
to the dual monoid for the Coxeter element wâ»Â¹
. The operations 'rightlcm' and 'rightgcd', and some other algorithms, have faster implementations if the monoid has a reverse
operation.
This module implements also functions to solve the conjugacy problem and compute centralizers in Garside groups, following the work of Franco, Gebhardt and Gonzalez-Meneses.
Two elements w
and w'
of a monoid M
are conjugate in M
if there exists xâ M
such that wx=xw'
; if M
satisfies the Ãre conditions, it has a group of fractions where this becomes xâ»Â¹wx=w'
, the usual definition of conjugacy. A special case which is even closer to conjugacy in the group is if there exists yâ M
such that w=xy
and w'=yx
. This relation is not transitive in general, but we call cyclic conjugacy the transitive closure of this relation, a restricted form of conjugacy.
The next observation is that if w,w'
are conjugate in the group of fractions of the Garside monoid M
then they are conjugate in M
, since if wx=xw'
then there is a power Îâ±
which is central and such that xÎâ±â M
. Then wxÎâ±=xÎâ± w'
is a conjugation in M
.
The crucial observation for solving the conjugacy problem is to introduce inf(w):=sup{i such that Îâ»â±wâ M}
and sup(w):=inf{i such that wâ»Â¹Îâ±â M}
, and to notice that the number of conjugates of w
with same inf
and sup
as w
is finite (since our monoids have a finite number of atoms). Further, a theorem of Birman shows that the maximum inf
and minimum sup
in a conjugacy class can be achieved simultaneously; the elements achieving this are called the super summit set of w
. Thus a way to determine if two elements are conjugate is to find a representative of both of them in their super summit set, and then solve conjugacy within that set. This can also be used to compute the centralizer of an element: if we consider the super summit set as the objects of a category whose morphisms are the conjugations by simple elements, the centralizer is given by the endomorphisms of the given object. For the implementation of finite categories we use, see the docstrings of Category
and endomorphisms
.
We illustrate this on an example:
julia> b=B(2,1,4,1,4)
214.14
julia> c=B(1,4,1,4,3)
14.143
julia> d=conjugating_elt(b,c)
(1)â»Â¹21321432
julia> b^d
14.143
julia> centralizer_gens(b)
3-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
321432.213243
21.1
4
julia> C=conjcat(b;ss=Val(:ss))
category with 10 objects and 32 generating maps
julia> C.obj
10-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
1214.4
214.14
124.24
1343.1
14.124
143.13
24.214
134.14
13.134
14.143
There is a faster solution to the conjugacy problem given in gebgon10: for each bâ M
, they define a particular simple left-divisor of b
, its preferred prefix such that the operation slide which cyclically conjugates b
by its preferred prefix, is eventually periodic, and the period is contained in the super summit set of x
. We say that x
is in its sliding circuit if some iterated slide of x
is equal to x
. The set of sliding circuits in a given conjugacy class is smaller than the super summit set, thus allows to solve the conjugacy problem faster. Continuing from the above example,
julia> word(W,preferred_prefix(b))
2-element Vector{Int64}:
2
1
julia> b^B(preferred_prefix(b))
1214.4
julia> b1=b^B(preferred_prefix(b))
1214.4
julia> C=conjcat(b)
category with 2 objects and 6 generating maps
julia> C.obj
2-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
1214.4
1343.1
Finally, we have implemented Hao Zheng's algorithm to extract roots in a Garside monoid:
julia> W=coxgroup(:A,3)
Aâ
julia> B=BraidMonoid(W)
BraidMonoid(Aâ)
julia> Pi=B(B.ÎŽ)^2
β
julia> root(Pi,2)
Î
julia> root(Pi,3)
1232
julia> root(Pi,4)
132
Chevie.Garside.BraidMonoid
â Method(B::BraidMonoid)(M::DualBraidMonoid,s)
convert to an element of B
the simple s
of M
.
Chevie.Garside.BraidMonoid
â Method(B::BraidMonoid)(M::DualBraidMonoid,i::Integer)
convert to an element of B
the i
-th atom of M
.
Chevie.Garside.BraidMonoid
â MethodBraidMonoid(W::CoxeterGroup)
The ordinary monoid of the Artin group associated to W
Chevie.Garside.BraidMonoid
â Method(B::BraidMonoid)(b::GarsideElt)
b
should be a dual braid. Convert b
to an element of B
.
Chevie.Garside.Category
â TypeCategory{TO,TM}
is the type of a finite category whose objects are of type TO
and maps of type TM
. It is represented as a struct
with two fields:
obj::Vector{TO}
the objectsatoms::Vector{Vector{Pair{TM,Int}}}
a vector representing the atoms (generators) of the category. It is such thatatoms[i]
is aVector
of pairsm=>j
representing a mapm
fromobj[i]
toobj[j]
. If the julia objects of typeTM
belong to a monoid, a general map can be represented as a triple(i,m,j)
wherem
is of typeTM
representing a map fromobj[i]
toobj[j]
.
A category is graphically shown by giving the :graph
io property:
julia> W=coxsym(4);M=BraidMonoid(W)
BraidMonoid(ð â)
julia> xprint(conjcat(M(1,1,2,2,3));graph=true)
category with 4 objects and 8 generating maps
1232 12 213 213 213 32
213.32ââââ 12.213ââ 213.12âââ 12.213âââ 213.32âââ 32.213ââ 213.32
1321 213
213.12ââââ 32.213âââ 213.12
Chevie.Garside.Category
â MethodCategory(atomsfrom::Function,o;action::Function=^)
constructs a category from an initial object o
and a function atomsfrom(o)
which given object o
returns atoms from o
as "maps" m
such that the target object is action(o,m)
.
As an example we construct a Garside category associated to the braid group of Gââ
, realized as the centralizer of a 4th root of Ύ³â°
in the dual braid monoid of Eâ
; that is the fixed points of ÎŽad¹âµ
in the 2-divided category.
julia> W=coxgroup(:E,8);M=DualBraidMonoid(W)
DualBraidMonoid(Eâ,c=[1, 4, 6, 8, 3, 2, 5, 7])
julia> s4=left_divisors(M,M.ÎŽ,4); # simples of length 4
julia> s=M(s4[findfirst(x->x*ÎŽad(M,x,8)==M.ÎŽ,s4)])#an object of 2-divided cat
(1 8 17 35)
julia> "the right-lcms of the `ÎŽâ±`-orbits on `leftdescents(b)`"
function satoms(b,i)
M=b.M
ld=M.atoms[leftdescents(b)]
di=Perm(ld,ÎŽad.(Ref(M),ld,i))
if isnothing(di) error(b," is not ÎŽ^$i-stable") end
map(o->M(rightlcm(M,ld[o]...)),orbits(di,eachindex(ld)))
end
satoms
julia> Category(x->satoms(x,15),s;action=(o,m)->inv(m)*o*ÎŽad(m,8))
category with 88 objects and 660 generating maps
Chevie.Garside.DualBraidMonoid
â MethodDualBraidMonoid(W;c=xxx)
W
should be a well generated complex reflection group and c
a Coxeter element of W
, given as a word (a Vector{Int}
) specifiying the element W(c...)
.
If no c
is given a particular one is chosen (what the notation xxx
above tries to convey).
For áº
a Coxeter groups the Coxeter diagram is partitioned in two sets where in each set reflections commute pairwise; c
is the product of the product of the reflections in each set.
For a complex reflection group the representative stored in the Coxeter class is used for c
.
The function returns the dual braid monoid determined by W
and c
julia> W=coxgroup(:A,3)
Aâ
julia> B=DualBraidMonoid(W)
DualBraidMonoid(Aâ,c=[1, 3, 2])
julia> B(2,1,2,1,1)
12.1.1.1
julia> B(-1,-2,-3,1,1)
(25.1)â»Â¹1.1
julia> W=crg(4)
Gâ
julia> B=DualBraidMonoid(W)
DualBraidMonoid(Gâ,c=[1, 2])
julia> left_divisors(B(B.ÎŽ))
5-element Vector{GarsideElt{Perm{Int16}, DualBraidMonoid{Perm{Int16}, PRG{Cyc{Rational{Int64}}, Int16}}}}:
.
1
2
3
ÎŽ
Chevie.Garside.GarsideMonoid
â TypeGarsideMonoid{T}
is the abstract type of Garside monoids, where T
is the type of simples. Such a monoid M
should implement the same methods as LocallyGarsideMonoid
except that isrightascent(M,a)
is automatically defined as isleftdescent(M,\(M,a,M.ÎŽ),i)
.
An implementation should have fields M.ÎŽ
, M.stringÎŽ
An interval monoid should have a field M.orderÎŽ
.
Chevie.Garside.LocallyGarsideMonoid
â TypeLocallyGarsideMonoid{T}
is the abstract type of locally Garside monoids, where T
is the type of simples. Such a monoid M
needs, for a,b
simples, to implement the functions
one(M)
isleftdescent(M,a,i::Int)
whetherM.atoms[i]⌠a
isrightdescent(M,a,i::Int)
whethera✠M.atoms[i]
isrightascent(M,a,i::Int)
whethera*M.atoms[i]
is simple*(M,a,b)
whena*b
is simple returns the simplea*b
\(M,a,b)
whena⌠b
returns the simplea
/(M,a,b)
whena✠b
returns the simplea/b
GroupPresentations.Presentation
â MethodPresentation(M::GarsideMonoid)
returns a presentation of the Garside group defined by M
(as given in theorem 4.1 of Dehornoy-Paris 1999).
julia> M=DualBraidMonoid(coxgroup(:A,3))
DualBraidMonoid(Aâ,c=[1, 3, 2])
julia> p=Presentation(M)
Presentation: 6 generators, 15 relators, total length 62
julia> simplify(p)
<< presentation with 3 generators, 4 relators of total length 26>>
<< presentation with 3 generators, 3 relators of total length 16>>
julia> display_balanced(p)
1: ab=ba
2: cac=aca
3: cbc=bcb
Chevie.CoxGroups.isleftdescent
â Methodisleftdescent(M,w,i)
returns true
if and only if the i
-th atom of the locally Garside monoid M
left-divides the simple w
.
Chevie.CoxGroups.leftdescents
â Methodleftdescents(b::LocallyGarsideElt)
the list of indices of the atoms which left-divide b
Chevie.Garside.Brieskorn_normal_form
â MethodBrieskorn_normal_form(b::LocallyGarsideElt)
Brieskorn citeBri71 has noticed that if L(b)
is the left descent set of b
(see leftdescents
), and if b_(L(b))
is the right lcm of L(b)
, then b_(L(b))
left-divides b
. We can now divide b
by b_(L(b))
and continue this process with the quotient. In this way, we obtain an expression b=b_(Lâ)⯠b_(Láµ£)
where Lᵢ=L(b_(Lᵢ)⯠b_(Lᵣ))
for all i
, which we call the Brieskorn normal form of b
. The function Brieskorn_normal_form
returns a description of this form, by returning the list of sets L(b)
which describe the above decomposition.
julia> W=coxgroup(:E,8);B=BraidMonoid(W)
BraidMonoid(Eâ)
julia> w=B(2,3,4,2,3,4,5,4,2,3,4,5,6,5,4,2,3,4,5,6,7,6,5,4,2,3,4,5,6,7,8)
2342345423456542345676542345678
julia> Brieskorn_normal_form(w)
2-element Vector{Vector{Int64}}:
[2, 3, 4, 5, 6, 7]
[8]
julia> Brieskorn_normal_form(w^2)
2-element Vector{Vector{Int64}}:
[2, 3, 4, 5, 6, 7, 8]
[2, 3, 4, 5, 6]
Chevie.Garside.CorranPicantinMonoid
â FunctionCorranPicantinMonoid(e,n,k=1)
returns the interval monoid defined by G. Neaime, http://arxiv.org/abs/1707.06864, which generalizes the Corran-Picantin monoid for G(e,e,n)
.
In this monoid ÎŽ
has image
the element of G(e,e,n)
corresponding to the diagonal matrix whose diagonal entries except the first are equal to E(e)^k
; this monoid is isomorphic to the Corran-Picantin monoid for G(e,e,n)
when gcd(k,e)=1
.
julia> C=CorranPicantinMonoid(3,3)
CorranPicantinMonoid(3,3,3)
julia> word(C(C.ÎŽ))
6-element Vector{Int64}:
1
3
4
1
3
4
julia> Matrix(C,C.ÎŽ)
3Ã3 Matrix{Cyc{Int64}}:
릉 0 0
0 릉 0
0 0 릉
julia> b=C(1,2,3,4)^3
1.2.341.2.341.2.34
julia> Matrix(C,b[3])
3Ã3 Matrix{Cyc{Int64}}:
0 0 릉
0 ζâ² 0
1 0 0
© July 2017 â- Jean Michel and Georges Neaime
Chevie.Garside.centralizer_gens
â Functioncentralizer_gens(b[,F];ss=Val(:sc))
a list of generators of the centralizer of b
. The computation is done by computing the endomorphisms of the object b
in the category of its sliding circuits. If an argument ss
is given, the computation is done in the corresponding category â- see conjcat
.
If an argument F
is given it should be an automorphism of the braid monoid, like the Frobenius of a reflection coset attached to b.M.W
; then the F
-centralizer is computed.
julia> W=coxgroup(:D,4)
Dâ
julia> B=BraidMonoid(W)
BraidMonoid(Dâ)
julia> w=B(4,4,4)
4.4.4
julia> cc=centralizer_gens(w)
8-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
1
(31432)â»Â¹231432
(1)â»Â¹34.431
(2)â»Â¹34.432
(32431)â»Â¹132431
4
34.43
2
julia> shrink(cc)
5-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
4
2
1
34.43
(3243)â»Â¹13243
julia> centralizer_gens(w;ss=Val(:cyc))
1-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
4
julia> F=Frobenius(spets(W,Perm(1,2,4)));
julia> centralizer_gens(w,F)
2-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
124
312343123
Chevie.Garside.conjcat
â Functionconjcat(b[,F];ss=Val(:sc))
returns the conjugacy category of the summit set of b
of the required type.
- By default, computes the category of sliding circuits of
b
. - If
ss==Val(:ss)
, computes the super summit set. - If
ss==Val(:cyc)
, computes the cyclic conjugacy category. - If
ss==Val(:inf)
computes the category of all conjugate elements with sameInf
asb
.
If an argument F
is given it should be the Frobenius of a Reflection coset attached to b.M.W
. Then the F
-conjugacy category is returned.
julia> W=coxgroup(:A,4)
Aâ
julia> w=BraidMonoid(W)(4,3,3,2,1)
43.321
julia> C=conjcat(w)
category with 2 objects and 4 generating maps
julia> C.obj # the (sliding circuits) summit set
2-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
32143
21324
julia> xprint(C;graph=true) # show the conjugations among the summit set
category with 2 objects and 4 generating maps
32143 21343 21324 13214
32143âââââ 32143âââââ 21324âââââ 21324âââââ 32143
julia> conjcat(w;ss=Val(:ss)).obj # the super summit set
4-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
32143
13243
21432
21324
Chevie.Garside.conjugating_elt
â Functionconjugating_elt(b,bâ[,F];ss=Val(:sc))
b
and bâ
should be elements of the same Garside group. The function returns a
such that b^a=bâ
if such exists, and nothing
otherwise. If an argument ss
is given, the computation is done in the corresponding category â- see conjcat
. If an argument F
is given it should be an automorphism of the braid monoid, like the Frobenius of a reflection coset attached to b.M.W
; the computation is then done in the corresponding F
-conjugacy category.
julia> W=coxgroup(:D,4)
Dâ
julia> B=BraidMonoid(W)
BraidMonoid(Dâ)
julia> b=B(2,3,1,2,4,3)
231243
julia> b1=B(1,4,3,2,2,2)
1432.2.2
julia> conjugating_elt(b,b1)
(134312.23)â»Â¹
julia> c=conjugating_elt(b,b1;ss=Val(:cyc))
232.2
julia> b^c
1432.2.2
julia> WF=spets(W,Perm(1,2,4))
³Dâ
julia> F=Frobenius(WF);
julia> c=B(3,4,3,1,2,3)
343123
julia> conjugating_elt(b,c,F)
124312
julia> ^(b,B(1,2,4,3,1,2),F)
343123
Chevie.Garside.endomorphisms
â Methodendomorphisms(C::Category,o)
returns generators of the endomorphisms of C.obj[o]
julia> W=coxsym(4);M=BraidMonoid(W)
BraidMonoid(ð â)
julia> endomorphisms(conjcat(M(1,1,2,2,3)),1)
2-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, CoxSym{Int16}}}}:
213.1232
12.213
Chevie.Garside.fraction
â Methodfraction(b::GarsideElt)
denominator(b::GarsideElt)
numerator(b::GarsideElt)
fraction(b)
returns a tuple (x,y)
of positive Garside elements with trivial leftgcd
and such that b=x\y
. For such a decomposition, denominator(b)
returns x
and numerator(b)
returns y
.
julia> B=BraidMonoid(coxgroup(:A,3))
BraidMonoid(Aâ)
julia> b=B( 2, 1, -3, 1, 1)
(23)â»Â¹321.1.1
julia> fraction(b)
(23, 321.1.1)
Chevie.Garside.hurwitz
â Methodhurwitz(l,v::AbstractVector{<:Integer})
does successively hurwitz(l,i)
for each i
in v
.
Chevie.Garside.hurwitz
â Methodhurwitz(l,b)
the Hurwitz action of the braid bâ Bâ
on the list l
of length n
of group elements.
Chevie.Garside.hurwitz
â Methodhurwitz(l,i::Integer)
the Hurwitz action of the generator Ïáµ¢ of the braid group Bâ on the list l
of length n
of group elements, which replaces láµ¢,láµ¢ââ
by láµ¢ââ,láµ¢^láµ¢ââ
. If i<0
, does the action of inv(Ïⱌ)
where j=-i
, which replaces lⱌ,lⱌââ
by lⱌââ^inv(lⱌ),lⱌ
.
Chevie.Garside.image
â Methodimage(b::GarsideElt)
This function is defined only if b
is an element of an interval monoid, for instance a braid. It returns the image of b
in the group of which the monoid is an interval monoid. For instance it gives the projection of a braid in an Artin monoid back to the Coxeter group.
julia> W=coxsym(4)
ð â
julia> b=BraidMonoid(W)(2,1,2,1,1)
121.1.1
julia> p=image(b)
(1,3)
julia> word(W,p)
3-element Vector{Int64}:
1
2
1
Chevie.Garside.left_divisors
â Functionleft_divisors(M::LocallyGarsideMonoid, s)
left_divisors(M::LocallyGarsideMonoid, s,i)
all the left-divisors of the simple element s
of M
, as a vector of vectors of simples, where the i+1-th vector of simples holds the left-divisors of length i in the atoms. If a third argument i
is given, returns the list of divisors of length i
.
julia> W=coxgroup(:A,3)
Aâ
julia> B=BraidMonoid(W)
BraidMonoid(Aâ)
julia> map(x->B.(x),left_divisors(B,W(1,3,2)))
4-element Vector{Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}}:
[.]
[1, 3]
[13]
[132]
julia> B=DualBraidMonoid(W)
DualBraidMonoid(Aâ,c=[1, 3, 2])
julia> map(x->B.(x),left_divisors(B,W(1,3,2)))
4-element Vector{Vector{GarsideElt{Perm{Int16}, DualBraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}}:
[.]
[1, 2, 3, 4, 5, 6]
[12, 13, 15, 25, 34, 45]
[ÎŽ]
Chevie.Garside.left_divisors
â Methodleft_divisors(b::LocallyGarsideElt[, i])
returns all left-divisors of b
(left-divisors of length i
if specified)
julia> B=DualBraidMonoid(coxsym(4))
DualBraidMonoid(ð â,c=[1, 3, 2])
julia> left_divisors(B(1,5,4,3))
10-element Vector{GarsideElt{Perm{Int16}, DualBraidMonoid{Perm{Int16}, CoxSym{Int16}}}}:
.
1
1.4
1.4.2
1.4.3
5
6
15
15.4
15.4.3
julia> left_divisors(B(1,5,4,3),1)
3-element Vector{GarsideElt{Perm{Int16}, DualBraidMonoid{Perm{Int16}, CoxSym{Int16}}}}:
1
5
6
Chevie.Garside.leftgcd
â Methodleftgcd(M::LocallyGarsideMonoid,simp...)
leftgcdc(M::LocallyGarsideMonoid,simp...)
simp
should be simples of M
. The function returns the left gcd d
of the simp
.
leftgcdc
returns d
followed by the tuple of complements inv(d).*simp
Chevie.Garside.leftgcd
â Methodleftgcd(aâ,âŠ,aâ)
leftgcdc(aâ,âŠ,aâ)
aâ,âŠ,aâ
should be elements of the same (locally) Garside monoid. The function returns the left gcd d
of aâ,âŠ,aâ
.
leftgcdc
returns (d,(dâ»Â¹aâ,âŠ,dâ»Â¹aâ))
.
julia> W=coxgroup(:A,3)
Aâ
julia> B=BraidMonoid(W)
BraidMonoid(Aâ)
julia> leftgcdc(B(2,1,2)^2,B(3,2)^2)
(2, (121.21, 32.2))
Chevie.Garside.leftlcm
â Methodleftlcm(M::GarsideMonoid,simp...)
leftlcmc(M::GarsideMonoid,simp...)
simp
should be simples of M
. The function returns the left lcm m
of the simp
.
leftlcmc
returns m
followed by the tuple of complements m./simp
Chevie.Garside.leftlcm
â Methodleftlcm(aâ,âŠ,aâ)
leftlcmc(aâ,âŠ,aâ)
aâ,âŠ,aâ
should be elements of the same Garside monoid. The function returns the least common left multiple m
of aâ,âŠ,aâ
.
leftlcmc
returns '(m,(m/aâ,âŠ,m/aâ))`.
julia> B=BraidMonoid(coxgroup(:A,3))
BraidMonoid(Aâ)
julia> leftlcmc(B(2,1,2)^2,B(3,2)^2)
(Î.121, (123, 23.321))
Chevie.Garside.rightascents
â Methodrightascents(M,s)
where s
is a simple return the right ascents of s
, that is the list of i
such that s*M.atoms[i]
is still simple.
Chevie.Garside.rightgcd
â Methodrightgcd(M::LocallyGarsideMonoid,simp...)
rightgcdc(M::LocallyGarsideMonoid,simp...)
simp
should be simples of M
. The function returns the right gcd d
of the simp
.
rightgcdc
returns d
followed by the tuple of complements simp./d
Chevie.Garside.rightgcd
â Methodrightgcd(aâ,âŠ,aâ)
rightgcdc(aâ,âŠ,aâ)
aâ,âŠ,aâ
should be elements of the same (locally) Garside monoid. The function returns the right gcd d
of aâ,âŠ,aâ
rightgcdc
returns (d,(aâ/d,âŠ,aâ/d))
.
julia> W=coxgroup(:A,3)
Aâ
julia> B=BraidMonoid(W)
BraidMonoid(Aâ)
julia> rightgcdc(B(2,1,2)^2,B(3,2)^2)
(2.2, (12.21, 23))
Chevie.Garside.rightlcm
â Methodrightlcm(M::GarsideMonoid,simp...)
rightlcmc(M::GarsideMonoid,simp...)
simp
should be simples of M
. The function returns the right lcm m
of the simp
.
rightlcmc
returns m
followed by the tuple of complements simp.\m
Chevie.Garside.rightlcm
â Methodrightlcm(aâ,âŠ,aâ)
rightlcmc(aâ,âŠ,aâ)
aâ,âŠ,aâ
should be elements of the same Garside monoid. The function returns the least common right multiple m
of aâ,âŠ,aâ
.
rightlcmc
returns '(m,(aââ»Â¹m,âŠ,aââ»Â¹m))`.
julia> B=BraidMonoid(coxgroup(:A,3))
BraidMonoid(Aâ)
julia> rightlcmc(B(2,1,2)^2,B(3,2)^2)
(β, (321.123, 12321.321))
Chevie.Garside.shrink
â Methodshrink(l::Vector{<:GarsideElt})
The list l
is a list of elements of the same Garside group G
. This function tries to find another set of generators of the subgroup of G
generated by the elements of l
, of smaller total length (the length being counted as returned by the function word
). This can be use to simplify the result of centralizer_gens
, or other braid subgroups.
julia> B=BraidMonoid(coxsym(3))
BraidMonoid(ð â)
julia> b=[B(1)^3,B(2)^3,B(-2,-1,-1,2,2,2,2,1,1,2),B(1,1,1,2)]
4-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, CoxSym{Int16}}}}:
1.1.1
2.2.2
(1.12)â»Â¹2.2.2.21.12
1.1.12
julia> shrink(b)
2-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, CoxSym{Int16}}}}:
2
1
Chevie.Garside.α
â Methodα(b::LocallyGarsideElt,I)
returns the longest prefix of b using only b.M.atoms[I]
julia> W=coxgroup(:A,4);B=BraidMonoid(W)
BraidMonoid(Aâ)
julia> w0=B(longest(W))
Î
julia> α(w0,[1,2,3])
121321
Chevie.Garside.α
â Methodα(b::LocallyGarsideElt)
returns as a Garside element the first term in the normal form of b
(b[1]
returns this term as a simple).
julia> W=coxgroup(:A,3)
Aâ
julia> b=BraidMonoid(W)(2,1,2,1,1)
121.1.1
julia> α(b)
121
Chevie.Garside.α2
â Methodα2(M::LocallyGarsideMonoid,x,v)
returns M(x)M(v)[1],M(x)M(v)[2] for the simples x and v
Chevie.Garside.ÎŽad
â FunctionÎŽad(M::GarsideMonoid,x,i=1)
returns the image of the simple x
by the i
-th power of the automorphism induced by conjugation by M.ÎŽ
(that is x^(M.ÎŽ^i)
).
Chevie.Garside.ÎŽad
â FunctionÎŽad(b::GarsideElt,i=1)
returns the image of b
by the i
-th power of the automorphism induced by conjugation by b.M.ÎŽ
.
PermGroups.Groups.elements
â Methodelements(M::LocallyGarsideMonoid,l::Integer)
elements(M::LocallyGarsideMonoid,v::AbstractVector{<:Integer})
M
should have an additive length function (that is, a product of l
atoms is not equal to any product of less than l
atoms). elements(M,l)
returns the list of elements of length l
in M
.
In the second form elements
returns all elements of length i
for iâ v
.
julia> M=BraidMonoid(coxgroup(:A,2))
BraidMonoid(Aâ)
julia> elements(M,4)
12-element Vector{GarsideElt{Perm{Int16}, BraidMonoid{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Int64}}}}:
Î.1
Î.2
12.21
12.2.2
1.12.2
1.1.12
1.1.1.1
21.12
21.1.1
2.21.1
2.2.21
2.2.2.2
PermGroups.Groups.word
â Methodword(b::GarsideElt)
returns a description of b
as a list of the atoms of which it is a product. If b
is in the Garside group but not the Garside monoid, it is represented in fraction normal form where as a special convention the inverses of the atoms are represented by negating the corresponding integer.
julia> B=BraidMonoid(coxgroup(:A,3))
BraidMonoid(Aâ)
julia> b=B(2,1,2,1,1)*inv(B(2,2))
(21)â»Â¹1.12.21
julia> word(b)
7-element Vector{Int64}:
-1
-2
1
1
2
2
1
PermGroups.Groups.word
â Methodword(M::GarsideMonoid,w)
returns a word in the atoms of M
representing the simple w
julia> B=BraidMonoid(coxgroup(:A,3))
BraidMonoid(Aâ)
julia> word(B,B.ÎŽ)
6-element Vector{Int64}:
1
2
1
3
2
1
PermGroups.Groups.words
â Methodwords(b::LocallyGarsideElt)
returns all the decompositions in atoms of b
julia> W=coxgroup(:A,2)
Aâ
julia> pi=BraidMonoid(W)(longest(W))^2
β
julia> words(pi)
8-element Vector{Vector{Int64}}:
[1, 1, 2, 1, 1, 2]
[1, 2, 1, 1, 2, 1]
[1, 2, 1, 2, 1, 2]
[1, 2, 2, 1, 2, 2]
[2, 1, 1, 2, 1, 1]
[2, 1, 2, 1, 2, 1]
[2, 1, 2, 2, 1, 2]
[2, 2, 1, 2, 2, 1]
Chevie.Eigenspaces
â ModuleEigenspaces and d
-Harish-Chandra series
Let WÏ
be a reflection coset on a vector space V
; that is ΊâGL(V)
normalizes the reflection group W
. Let LwÏ
be a reflection subcoset; that is L
is a parabolic subgroup of W
(the fixator of a subspace of V
) and wâ W
is such that wΊ
normalizes L
. There are several interesting cases where the relative group $N_W(LwÏ)/L$, or a subgroup of it normalizing some further data attached to L
, is itself a reflection group.
A first example is the case where Ï=1
and w=1
, W
is the Weyl group of a finite reductive group $ð^F$ and the Levi subgroup $ð^F$ corresponding to L
has a cuspidal unipotent character. Then $N_W(L)/L$ is a Coxeter group acting on the space X(Zð)ââ
. A combinatorial characterization of such parabolic subgroups of Coxeter groups is that they are normalized by the longest element of larger parabolic subgroups (see 5.7.1 Lusztig1976).
A second example is when L
is trivial and wÏ
is a ζ
-regular element, that is the ζ
-eigenspace $V_ζ$ of wÏ
contains a vector outside all the reflecting hyperplanes of W
. Then $N_W(LwÏ)/L=C_W(wÏ)$ is a reflection group in its action on $V_ζ$.
A similar but more general example is when $V_ζ$ is the ζ
-eigenspace of some element of the reflection coset WÏ
, and is of maximal dimension among such ζ
-eigenspaces. Then the set of elements of WÏ
which act by ζ
on $V_ζ$ is a certain subcoset LwÏ
, and $N_W(LwÏ)/L$ is a reflection group in its action on $V_ζ$ (see 2.5 Lehrer-Springer1999).
Finally, a still more general example, but which only occurs for Weyl groups or Spetsial reflection groups, is when ð
is a ζ
-split Levi subgroup (which means that the corresponding subcoset LwÏ
is formed of all the elements which act by ζ
on some subspace V_ζ
of V
), and λ
is a d
-cuspidal unipotent character of ð
(which means that the multiplicity of ζ
as a root of the degree of λ
is the same as the multiplicity of ζ
as a root of the generic order of the semi-simple part of ð
); then $N_W(LwÏ,λ)/L$ is a complex reflection group in its action on V_ζ
.
Further, in the above cases the relative group describes the decomposition of a Lusztig induction.
When $ð^F$ is a finite reductive group, and λ
a cuspidal unipotent character of the Levi subgroup $ð^F$, then the $ð^F$-endomorphism algebra of the Harish-Chandra induced representation $R_ð^ð(λ)$ is a Hecke algebra attached to the group $N_W(L)/L$, thus the dimension of the characters of this group describe the multiplicities in the Harish-Chandra induced.
Similarly, when ð
is a ζ
-split Levi subgroup, and λ
is a d
-cuspidal unipotent character of ð
then (conjecturally) the $ð^F$-endomorphism algebra of the Lusztig induced $R_ð^ð(λ)$ is a cyclotomic Hecke algebra for to the group $N_W(LwÏ,λ)/L$. The constituents of $R_ð^ð(λ)$ are called a ζ
-Harish-Chandra series. In the case of rational groups or cosets, corresponding to finite reductive groups, the conjugacy class of LwÏ
depends only on the order d
of ζ
, so one also talks of d
-Harish-Chandra series. These series correspond to â
-blocks where l
is a prime divisor of Ί_d(q)
which does not divide any other cyclotomic factor of the order of $ð^F$.
The functions relative_degrees, regular_eigenvalues, eigenspace_projector, position_regular_class, split_levis, cuspidal
in this module and the functions in the module dSeries
allow to explore these situations.
Chevie.Eigenspaces.eigenspace_projector
â Functioneigenspace_projector(WF,w,ζ::Root1=1)
Let WF
be a reflection group or a reflection coset, let w
be an element of WF
and let ζ
be a root of unity. The function returns the unique w
-invariant projector on the ζ
-eigenspace of w
.
The eigenvalue ζ
can also be specified by giving an integer d
(which then specifies ζ=E(d)
) or a fraction a//b
which then specifies ζ=E(b,a)
. If omitted, ζ
is taken to be 1
.
julia> W=coxgroup(:A,3)
Aâ
julia> w=W(1:3...)
(1,12,3,2)(4,11,10,5)(6,9,8,7)
julia> p=eigenspace_projector(W,w,1//4)
3Ã3 Matrix{Cyc{Rational{Int64}}}:
(1+릉)/4 릉/2 (-1+릉)/4
(1-릉)/4 1//2 (1+릉)/4
(-1-릉)/4 -릉/2 (1-릉)/4
julia> GenLinearAlgebra.rank(p)
1
Chevie.Eigenspaces.position_regular_class
â Methodposition_regular_class(WF,ζ::Root1=1)
Let WF
be a reflection group or a reflection coset and ζ
be a root of unity such that some element of WF
has a non-trivial ζ
-eigenspace. The function returns the index of a conjugacy class of WF
whose ζ
-eigenspace is maximal (amongst all ζ
-eigenspaces of elements of W
). If no element of WF
has a non-trivial ζ
-eigenspace the function returns nothing
.
The eigenvalue ζ
can also be specified by giving an integer d
(which then specifies ζ=E(d)
) or a fraction a//b
which then specifies ζ=E(b,a)
. If omitted, ζ
is taken to be 1
.
julia> W=coxgroup(:E,8)
Eâ
julia> position_regular_class(W,30)
65
julia> W=complex_reflection_group(6)
Gâ
julia> L=twistings(W,[2])[4]
Gââââ=Gâââââ[ζâ]Ίâ²â
julia> position_regular_class(L,7//12)
2
Chevie.Eigenspaces.regular_eigenvalues
â Methodregular_eigenvalues(W)
Let W
be a reflection group or a reflection coset. A root of unity ζ
is a regular eigenvalue for W
if some element of W
has a ζ
-eigenvector which lies outside of the reflecting hyperplanes. The function returns the list of regular eigenvalues for W
.
julia> regular_eigenvalues(coxgroup(:G,2))
6-element Vector{Root1}:
1
-1
릉
ζâ²
릉
ζââµ
julia> W=complex_reflection_group(6)
Gâ
julia> L=twistings(W,[2])[4]
Gââââ=Gâââââ[ζâ]Ίâ²â
julia> regular_eigenvalues(L)
3-element Vector{Root1}:
릉
ζâââ·
ζââ¹¹
Chevie.Eigenspaces.relative_degrees
â Methodrelative_degrees(WF,ζ::Root1=1)
Let WF
be a reflection group or a reflection coset and ζ
be a root of unity. Then if $V_ζ$ is the ζ
-eigenspace of some element of WF
, and is of maximal dimension among such ζ
-eigenspaces (and if WF
is a coset W
is the group of WF
) then $N_W(V_ζ)/C_W(V_ζ)$ is a reflection group in its action on $V_ζ$. The function relative_degrees
returns the reflection degrees of this complex reflection group, which are a subset of those of W
. These degrees are computed by an invariant-theoretic formula: if (dâ,εâ),âŠ,(dâ,εâ)
are the generalized degrees of WF
(see degrees
) they are the dáµ¢
such that ζ^{dᵢ}=εᵢ
.
The eigenvalue ζ
can also be specified by giving an integer d
(which then specifies ζ=E(d)
) or a fraction a//b
which then specifies ζ=E(b,a)
. If omitted, ζ
is taken to be 1
.
julia> W=coxgroup(:E,8)
Eâ
julia> relative_degrees(W,4) # the degrees of Gââ
4-element Vector{Int64}:
8
12
20
24
Chevie.Eigenspaces.relative_root
â Methodrelative_root(W,L,i)
return 'action' of refls(W,i)â L on X(Z_L) a namedtuple with root, coroot, eigenvalue, index=i and toparent in W
Chevie.Eigenspaces.split_levis
â Functionsplit_levis(WF,ζ::Root1=1[,ad])
Let WF
be a reflection group or a reflection coset. If W
is a reflection group it is treated as the trivial coset 'Spets(W)'. A Levi is a subcoset of the form WâFâ
where Wâ
is a parabolic subgroup of W
, that is the centralizer of some subspace of V
, and Fââ WF
normalizes Wâ
.
Let ζ
be a root of unity. split_levis
returns a list of representatives of conjugacy classes of ζ
-split Levis of W
. A ζ
-split Levi is a subcoset of WF
formed of all the elements which act by ζ
on a given subspace V_ζ
. If the additional argument ad
is given, it returns only those subcosets such that the common ζ
-eigenspace of their elements is of dimension ad
. These notions make sense and thus are implemented for any complex reflection group.
In terms of algebraic groups, an F
-stable Levi subgroup of the reductive group ð
is ζ
-split if and only if it is the centralizer of the Ί
-part of its center, where Ί
is a cyclotomic polynomial with ζ
as a root. When ζ=1
, we get the notion of a split Levi, which is the same as a Levi sugroup of an F
-stable parabolic subgroup of ð
.
The eigenvalue ζ
can also be specified by giving an integer d
(which then specifies ζ=E(d)
) or a fraction a//b
which then specifies ζ=E(b,a)
. If omitted, ζ
is taken to be 1
.
julia> W=coxgroup(:A,3)
Aâ
julia> split_levis(W,4)
2-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Aâ
Aâââ=ΊâΊâ
julia> W=spets(coxgroup(:D,4),Perm(1,2,4))
³Dâ
julia> split_levis(W,3)
3-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
³Dâ
³Dâââââ=AâΊâ
³Dâââ=Ίâ²
julia> W=coxgroup(:E,8)
Eâ
julia> split_levis(W,4,2)
3-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
Eââââââ
â=DâââââââΊâ²
Eâââ
ââââ=(AâAâ)Ã(AâAâ)Ίâ²
Eâââââ
ââ=²(AâAâ)ââââââΊâ²
julia> split_levis(complex_reflection_group(5))
4-element Vector{Spets{PRSG{Cyc{Rational{Int64}}, Int16}}}:
Gâ
Gâ
âââ=GâââââΊâ
Gâ
âââ=GâââââΊâ
Gâ
ââ=Ίâ²
Chevie.Weyl.standard_parabolic
â Methodstandard_parabolic(W::PermRootGroup, H)
Let H
be a reflection subgroup of W
. Returns an element wâ W
such that H^w
is a standard parabolic subgroup of W
(or nothing if H
is not parabolic or not conjugate to a standard parabolic).
Chevie.Sscoset
â ModuleQuasi-Semisimple elements of non-connected reductive groups
We also use Coxeter cosets to represented non-connected reductive groups of the form ð â Ï
where ð
is a connected reductive group and Ï
is an algebraic automorphism of ð
; more specifically to represent the coset ð .Ï
. We may always choose Ïâ ð â
Ï
quasi-semisimple, which means that Ï
preserves a pair ð â ð
of a maximal torus and a Borel subgroup of ð
, and further quasi-central, which means that the Weyl group of C_ð (Ï)
is W^Ï
. Then Ï
defines an automorphism F_0
of the root datum (X(ð ), Ί, Y(ð ), Ί^âš)
, thus a Coxeter coset. We refer to Digne-Michel2018 for details.
We have extended the functions for semi-simple elements to work with quasi-semisimple elements tÏâ ð â
Ï
. Here, as in Digne-Michel2018, Ï
is a quasi-central automorphism uniquely defined by a diagram automorphism of (W,S)
, taking Ï
symplectic in type Aââ
.
Here are some examples:
julia> WF=rootdatum(:u,6)
uâ
We can see WF
as the coset GLââ
Ï
where Ï
is the composed of transpose, inverse and the longest element of W
.
julia> l=quasi_isolated_reps(WF)
4-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<ζâ,ζâ,ζâ,ζâ³,ζâ³,ζâ³>
<ζâ,ζâ,1,1,ζâ³,ζâ³>
<ζâ,1,1,1,1,ζâ³>
we define an element tÏâ ð â
Ï
to be quasi-isolated if the Weyl group of C_ð (tÏ)
is not in any proper parabolic subgroup of W^Ï
. This generalizes the definition for connected groups. The above shows the elements t
where tÏ
runs over representatives of quasi-isolated quasi-semisimple classes of ð â
Ï
. The given representatives have been chosen Ï
-stable.
julia> centralizer.(Ref(WF),l)
4-element Vector{ExtendedCox{Perm{Int16}, FiniteCoxeterGroup{Perm{Int16},Rational{Int64}}}}:
Cââââââ
²Aââââââ
(AâAâ)ââââÃAââââ
BâΊâ
in the above example, the groups C_ð (tÏ)
are computed and displayed as extended Coxeter groups (following the same convention as for centralisers in connected reductive groups).
We define an element tÏâ ð â
Ï
to be isolated if the Weyl group of C_ð (tÏ)â°
is not in any proper parabolic subgroup of W^Ï
. This generalizes the definition for connected groups.
julia> isisolated.(Ref(WF),l)
4-element BitVector:
1
1
1
0
Chevie.Semisimple.isisolated
â Methodisisolated(WF::Spets,t::SemisimpleElement{Root1})
WF
should be a Coxeter coset representing an algebraic coset ð â
Ï
, where ð
is a connected reductive group (represented by W=Group(WF)
), and Ï
is a quasi-central automorphism of ð
defined by WF
. The element t
should be a semisimple element of ð
. The function returns a boolean describing whether tÏ
is isolated, that is whether the Weyl group of C_ð (tÏ)â°
is not in any proper parabolic subgroup of W^Ï
.
julia> WF=rootdatum(:u,6)
uâ
julia> l=quasi_isolated_reps(WF)
4-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<ζâ,ζâ,ζâ,ζâ³,ζâ³,ζâ³>
<ζâ,ζâ,1,1,ζâ³,ζâ³>
<ζâ,1,1,1,1,ζâ³>
julia> isisolated.(Ref(WF),l)
4-element BitVector:
1
1
1
0
Chevie.Semisimple.quasi_isolated_reps
â Functionquasi_isolated_reps(WF::Spets,p=0)
WF
should be a Coxeter coset representing an algebraic coset ð â
Ï
, where ð
is a connected reductive group (represented by W=Group(WF)
), and Ï
is a quasi-central automorphism of ð
defined by WF
. The function returns a list of semisimple elements of ð
such that tÏ
, when t
runs over this list, are representatives of the conjugacy classes of quasi-isolated quasisemisimple elements of ð â
Ï
(an element tÏâ ð â
Ï
is quasi-isolated if the Weyl group of C_ð (tÏ)
is not in any proper parabolic subgroup of W^Ï
). If a second argument p
is given, it lists only those representatives which exist in characteristic p
.
julia> WF=rootdatum("2E6sc")
²Eâsc
julia> quasi_isolated_reps(WF)
5-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<1,-1,릉,1,릉,1>
<1,1,1,-1,1,1>
<1,ζâ²,1,ζâ,1,1>
<1,ζâ³,1,-1,1,1>
julia> quasi_isolated_reps(WF,2)
2-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<1,ζâ²,1,ζâ,1,1>
julia> quasi_isolated_reps(WF,3)
4-element Vector{SemisimpleElement{Root1}}:
<1,1,1,1,1,1>
<1,-1,릉,1,릉,1>
<1,1,1,-1,1,1>
<1,ζâ³,1,-1,1,1>
PermGroups.Groups.centralizer
â Methodcentralizer(WF::Spets,t::SemisimpleElement{Root1})
WF
should be a Coxeter coset representing an algebraic coset ð â
Ï
, where ð
is a connected reductive group (represented by 'W:=Group(WF)'), and Ï
is a quasi-central automorphism of ð
defined by WF
. The element t
should be a semisimple element of ð
. The function returns an extended reflection group describing C_ð (tÏ)
, with the reflection group part representing C_ð â°(tÏ)
, and the diagram automorphism part being those induced by C_ð (tÏ)/C_ð (tÏ)â°
on C_ð (tÏ)â°
.
julia> WF=rootdatum(:u,6)
uâ
julia> s=ss(Group(WF),[1//4,0,0,0,0,3//4])
SemisimpleElement{Root1}: <ζâ,1,1,1,1,ζâ³>
julia> centralizer(WF,s)
BâΊâ
julia> centralizer(WF,one(s))
Cââââââ
Chevie.Symbols
â ModuleThe combinatorial objects in this module are partitions, β-sets and symbols.
A partition is a non-increasing list of positive integers pââ¥pââ¥âŠpââ¥0
, represented as a Vector{Int}
, which is normalized if it has no trailing zeroes.
A β-set is a strictly increasing Vector
of nonnegative integers, up to shift, the equivalence relation generated by the elementary shifts [bâ,âŠ,bâ]âŒ[0,1+bâ,âŠ,1+bâ]
. An equivalence class has exactly one member which does not contain 0
: it is called a normalized β-set.
To a normalized partition pââ¥pââ¥âŠpâ>0
is associated a β-set, whose normalized representative is pâ,pâââ+1,âŠ,pâ+n-1
. Conversely, to each β-set bâ<bâ<âŠ<bâ
is associated the partition bâ-n+1â¥âŠâ¥bâ-1â¥bâ
, which may have some trailing zeros if starting from a non-normalized representative.
As a generalisation of β
-sets, Lusztig1977 has introduced 2
-symbols and more general e
-symbols were introduced in Malle1995. An e
-symbol is a vector S=[Sâ,âŠ,Sâ]
of β-sets, taken modulo the equivalence relation generated by the simultaneous elementary shift of all β-sets, and by cyclic permutations of S
; in the particular case where e=2
, S
is thus an unordered pair of β-sets. S
is a normalized symbol if 0
is not in the intersection of the Sáµ¢
; equivalent normalized symbols are equivalent by cyclic permutation. The content of S
is mod(c,e)
where c=sum(length.(S))
; it is an invariant of the symbol, as well as the rank, defined for an e
-symbol as sum(sum,S)-div((c-1)*(c-e+1),2*e)
. Invariant by shift but not cyclic permutation is the shape s.-minimum(s)
where s=length.(S)
.
When e=2
we choose representatives of the symbols [Sâ,Sâ]
such that length(Sâ)â¥length(Sâ)
, so the shape is [d,0]
for some dâ¥0
called the defect of the symbol; the content is equal to mod(d,2)
. For symbols [Sâ,Sâ]
with length(Sâ)==length(Sâ)
we choose representatives such that Pââ€Pâ
lexicographically where Pâ,Pâ
are the partitions associated to Sâ,Sâ
.
Partitions and pairs of partitions parametrize characters of the Weyl groups of classical types, and tuples of partitions parametrize characters of imprimitive complex reflection groups. 2-Symbols parametrize unipotent characters of classical Chevalley groups, and more general e
-symbols parametrize unipotent characters of Spetses associated to spetsial imprimitive complex reflection groups. The rank of a symbol is equal to the semi-simple rank of the corresponding Chevalley group or Spets.
Symbols of rank n
and defect 0
parametrize characters of the Weyl group of type Dâ
, and symbols of rank n
and defect divisible by 4
parameterize unipotent characters of split orthogonal groups of dimension 2n
. Symbols of rank n
and defectâ¡2 (mod 4)
parameterize unipotent characters of non-split orthogonal groups of dimension 2n
. Symbols of rank n
and defect 1
parametrize characters of the Weyl group of type Bâ
, and symbols of rank n
and odd defect parametrize unipotent characters of symplectic groups of dimension 2n
or orthogonal groups of dimension 2n+1
.
e
-symbols of rank n
and content 1
parameterize unipotent characters of G(e,1,n)
. Those of content 0
parameterize unipotent characters of G(e,e,n)
. The principal series (in bijection with characters of the reflection group) is parametrized by symbols of shape [1,0,âŠ,0]
for G(e,1,n)
and [0,âŠ,0]
for G(e,e,n)
.
Finally, in this module we also provides a function XSP
which returns the "symbols" (pairs of lists of increasing positive integers satisfying some conditions) $XÌ^{Ï-s,s}_{n,d}$ defined by Lusztig and Spaltenstein which parametrize local systems on unipotent classes for classical reductive groups.
Chevie.Symbols.BDSymbols
â MethodBDSymbols(n,d)
returns 2-symbols of defect d
and rank n
(for Weyl types B,C,D,2D). If d==0
the symbols with equal entries are returned twice, represented as the first entry, followed by the repetition factor 2 and an ordinal number 0 or 1, so that BDSymbols(n, 0)
is a set of parameters for the characters of the Weyl group of type Dâ
.
julia> BDSymbols(2,1)
5-element Vector{Vector{Vector{Int64}}}:
[[1, 2], [0]]
[[0, 2], [1]]
[[0, 1, 2], [1, 2]]
[[2], []]
[[0, 1], [2]]
julia> BDSymbols(4,0)
13-element Vector{Vector}:
Any[[1, 2], 2, 0]
Any[[1, 2], 2, 1]
[[0, 1, 3], [1, 2, 3]]
[[0, 1, 2, 3], [1, 2, 3, 4]]
[[1, 2], [0, 3]]
[[0, 2], [1, 3]]
[[0, 1, 2], [1, 2, 4]]
Any[[2], 2, 0]
Any[[2], 2, 1]
[[0, 1], [2, 3]]
[[1], [3]]
[[0, 1], [1, 4]]
[[0], [4]]
Chevie.Symbols.EnnolaSymbol
â MethodEnnolaSymbol(S)
Ennola of e
-symbol S
(of content 1
or 0
) The order of Ennola (order of center of reflection group) is computed automatically: it is e
for content 1
and gcd(e,rank(S))
for content 0
.
Chevie.Symbols.XSP
â FunctionXSP(Ï,s,n,even=false)
returns the union of the Lusztig-Spaltenstein 1985 $XÌ^{Ï-s,s}_{n,d}$ for all d
even when even=true
, all d
odd otherwise; these symbols parametrize local systems on unipotent conjugacy classes for classical groups. In Lusztig2004, 13.2 the notation is ${}^Ï X^s_{n,d}$. The result is a list of lists, each one corresponding to a similarity class (which correspond to a given conjugacy class for the support). If s==0
, only positive defects are considered.
XSP(2,1,n)
gives L-S symbols for SpââXSP(4,2,n)
gives L-S symbols for Spââ in char.2XSP(2,0,n)
gives L-S symbols for SOââââ [defect odd]XSP(2,0,n,true)
gives L-S symbols for SOââ [defect even]XSP(4,0,n,true)
gives L-S symbols for SOââ in char 2
each item is a NamedTuple
giving some information on the local system. It has fields
symbol
the Lusztig-Spaltenstein symboldimBu
for the supportu
of the local systemAu
describes the character ofA(u)
for the local system as a list:true
->sgn,false
->Idsp
parameter (double partition) of the generalized Springer correspondent (a character of the relative Weyl group)
Chevie.Symbols.defectsymbol
â Method`defectsymbol(s)'
For an e
-symbol [Sâ,Sâ,âŠ,Sâ]
returns length(Sâ)-length(Sâ)
.
julia> defectsymbol([[1,5,6],[1,2]])
1
Chevie.Symbols.defshape
â Methoddefshape(s::Vector{Int})
Malle-defect of symbols of shape s. This is an invariant by shift but not under cyclic permutations.
Chevie.Symbols.degree_fegsymbol
â Methoddegree_fegsymbol(s)
the degree of the fake degree of the character parameterized by the symbol s
.
julia> degree_fegsymbol([[1,5,6],[1,2]])
88
Chevie.Symbols.degree_gendeg_symbol
â Methoddegree_gendeg_symbol(S)
the degree of the generic degree of the unipotent character parameterized by the symbol S
.
julia> degree_gendeg_symbol([[1,5,6],[1,2]])
91
Chevie.Symbols.fegsymbol
â Functionfegsymbol(S,p=0)
returns as a CycPol
the fake degree of the character of symbol S
.
julia> fegsymbol([[1,5,6],[1,2]])
q¹â¶ÎŠâ
ΊâΊâΊâΊââΊââΊââΊââΊââΊââΊââ
If S
is an e
-symbol, when given a second argument p
dividing e
, and a first argument of shape (0,âŠ,0)
representing the restriction of the character to G(e,e,r)
, works for the coset G(e,e,r).sâáµ
.
Chevie.Symbols.gendeg_symbol
â Methodgendeg_symbol(S)
returns as a CycPol
the generic degree of the unipotent character parameterized by S
.
julia> gendeg_symbol([[1,2],[1,5,6]])
q¹³Ίâ
ΊâΊâΊâ²ΊâΊââΊââΊââΊââΊââΊââΊââ/2
for an e
-symbol of rank r
, content c
and Malle-defect d
the Spets is
- G(e,1,r) (c==1, d==0)
- G(e,e,r) (c==0, d==0)
- ²G(e,e,r) (c==0, d==1) (e,r even. This includes ²Dâ, ²Bâ, ²Gâ)
Chevie.Symbols.lesssymbols
â Methodlesssymbols(x,y)
<
for symbols
A symbol is smaller than another if the shape is lexicographically smaller, or the shape is the same and the the symbol is lexicographically bigger
Chevie.Symbols.partβ
â Methodpartβ(β)
partition defined by β-set β
julia> partβ([0,4,5])
2-element Vector{Int64}:
3
3
Chevie.Symbols.ranksymbol
â Methodranksymbol(S)
rank of symbol S
.
julia> ranksymbol([[1,5,6],[1,2]])
11
Chevie.Symbols.shapesSymbols
â FunctionshapesSymbols(e,r,c=1,def=0)
possible shapes for e
-symbols of rank r
, content c
, Malle-defect def
"
Chevie.Symbols.shiftβ
â Functionshiftβ( β, n)
shift the β-set β
by n
julia> shiftβ([2,3],2)
4-element Vector{Int64}:
0
1
4
5
julia> shiftβ([0,1,4,5],-2)
2-element Vector{Int64}:
2
3
Chevie.Symbols.string_partition_tuple
â Methodstring_partition_tuple(tuple)
converts the partition tuple tuple
to a string where the partitions are separated by a dot.
julia> d=partition_tuples(3,2)
10-element Vector{Vector{Vector{Int64}}}:
[[1, 1, 1], []]
[[1, 1], [1]]
[[1], [1, 1]]
[[], [1, 1, 1]]
[[2, 1], []]
[[1], [2]]
[[2], [1]]
[[], [2, 1]]
[[3], []]
[[], [3]]
julia> string_partition_tuple.(d)
10-element Vector{String}:
"111."
"11.1"
"1.11"
".111"
"21."
"1.2"
"2.1"
".21"
"3."
".3"
Chevie.Symbols.stringsymbol
â Methodstringsymbol(io=stdout,S)
string for symbol S
Chevie.Symbols.symbol_partition_tuple
â Methodsymbol_partition_tuple(p, s)
symbol of shape s
for partition tuple p
.
In the general case, s
is a Vector{Int}
of same length as p
and the i
-th element of the result is the β-set for pᵢ
shifted to be of length sáµ¢
(the minimal integer which makes this possible is added to s
).
When s
is a positive integer it is interpreted as [s,0,0,âŠ]
and a negative integer is interpreted as [0,-s,-s,âŠ]
so when p
is a double partition one gets the symbol of defect s
associated to p
; as other uses the unipotent symbol for a character of the principal series of G(e,1,r)
parameterized by an e
-tuple p
of partitions is symbol_partition_tuple(p,1)
and for G(e,e,r)
the similar computation is symbol_partition_tuple(p,0)
(the function handles coded periodic p
for G(e,e,r)
).
julia> symbol_partition_tuple([[2,1],[1]],1)
2-element Vector{Vector{Int64}}:
[1, 3]
[1]
julia> symbol_partition_tuple([[2,1],[1]],0)
2-element Vector{Vector{Int64}}:
[1, 3]
[0, 2]
julia> symbol_partition_tuple([[2,1],[1]],-1)
2-element Vector{Vector{Int64}}:
[1, 3]
[0, 1, 3]
Chevie.Symbols.symbols
â Functionsymbols(e,r,c=1,def=0)
The list of e
-symbols of rank r
, content c
and Malle-defect def
An e
-symbol is a symbol of length e
. The content of an e
-symbol S
is sum(length,S)%e
. The symbols for unipotent characters of:
G(d,1,r)
aresymbols(d,r)
G(e,e,r)
aresymbols(e,r,0)
.G(e,e,r).sâáµ
wheresâ
is the first generator ofG(e,1,r)
andt|e
aresymbols(e,r,0,t)
julia> stringsymbol.(symbols(3,2)) # unipotent characters of G(3,1,2)
14-element Vector{String}:
"(12,0,0)"
"(02,1,0)"
"(02,0,1)"
"(012,12,01)"
"(01,1,1)"
"(012,01,12)"
"(2,,)"
"(01,2,0)"
"(01,0,2)"
"(1,012,012)"
"(,02,01)"
"(,01,02)"
"(0,,012)"
"(0,012,)"
julia> stringsymbol.(symbols(3,3,0)) # unipotent characters of G(3,3,3)
12-element Vector{String}:
"(1+)"
"(1E(3))"
"(1E(3,2))"
"(01,12,02)"
"(01,02,12)"
"(012,012,123)"
"(0,1,2)"
"(0,2,1)"
"(01,01,13)"
"(0,0,3)"
"(012,,)"
"(012,012,)"
Chevie.Symbols.symbolsshape
â Methodsymbolsshape(r,s)
symbols of rank r
and shape s
Chevie.Symbols.valuation_fegsymbol
â Methodvaluation_fegsymbol(s)
the valuation of the fake degree of the character parameterized by the symbol s
.
julia> valuation_fegsymbol([[1,5,6],[1,2]])
16
Chevie.Symbols.valuation_gendeg_symbol
â Methodvaluation_gendeg_symbol(S)
the valuation of the generic degree of the unipotent character parameterized by the symbol S
.
julia> valuation_gendeg_symbol([[1,5,6],[1,2]])
13
Chevie.Symbols.βset
â Functionβset(p)
normalized β-set of partition p
julia> βset([3,3,1])
3-element Vector{Int64}:
1
4
5
Chevie.Util
â ModuleThis module contains various utility functions used in the rest of the code. Maybe some of them exist in some Julia module I am not aware of; please tell me.
Chevie.Util.cart2lin
â Methodcart2lin([lâ,âŠ,lâ],[iâ,âŠ,iâ])
is GAP3 PositionCartesian faster findfirst(==([i1,âŠ,iâ]),cartesian(1:lâ,âŠ,1:lâ)) very fast with 2 Tuple arguments
Chevie.Util.cartesian
â Methodcartesian(a::AbstractVector...)
A variation on Iterators.product
which gives the same result as GAP's Cartesian
. reverse
is done twice to get the same order as GAP.
Chevie.Util.lin2cart
â Methodlin2cart([lâ,âŠ,lâ],i)
is GAP3 CartesianAt faster cartesian(map(j->1:j,l))[i]
Chevie.Util.@forward
â Macro@forward T.f f1,f2,...
is a macro which delegates definitions. The above generates
f1(a::T,args...)=f1(a.f,args...)
f2(a::T,args...)=f2(a.f,args...)
...
Chevie.dSeries
â Moduled
-Harish-Chandra series describe unipotent l
-blocks of a finite reductive group $ð(ðœ_q)$ for $l|Ί_d(q)$ (at least, when l
is not too small which means mostly not a bad prime for ð
). Some of the facts stated below are still partly conjectural, we do not try to distinguish precisely what has been established and what is still conjectural.
If (ð,λ)
is a d
-cuspidal pair then the constituents of the Lusztig induced $R_ð^ð(λ)$ are called a d
-Harish-Chandra series; they form the unipotent part of an l
-block of $ð^F$. It is conjectured (and proven in some cases) that the $ð^F$-endomorphism algebra of the l
-adic cohomology of the variety ð
which defines the Lusztig induction is a d
-cyclotomic Hecke algebra $H_ð(ð,λ)$ for the group $W_ð(ð,λ):=N_ð(ð,λ)/ð$, which is a complex reflection group â- here d
-cyclotomic means that the parameters of $H_ð(ð,λ)$ are monomials in q
and that $H_ð(ð,λ)$ specializes to the algebra of $W_ð(ð,λ)$ for $qâŠÎ¶_d$.
It follows that the decomposition of the Lusztig induction is of the form $R_ð^ð(λ)=â_{ÏâIrr(W_ð(ð,λ))}(-1)^{nᵩ} Ï(1)γᵩ,$ where γᵩ
is a unipotent character of ð^F
attached to Ï
and where nᵩ
is the degree $H^{nᵩ}_c(ð)$ where γᵩ
occurss; and further for any Ï
we have $R_ð^ð(λ)(1)= (-1)^{nᵩ} γᵩ(1)Sᵩ$ where Sᵩ
is the Schur element of the character of $H_ð(ð,λ)$ which deforms to Ï
. The function |Series| allows to explore a d
-Harish-Chandra series.
julia> W=rootdatum("3D4")
³Dâ
julia> l=cuspidal_data(W,3)
2-element Vector{@NamedTuple{levi::Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}, cuspidal::Int64, d::Root1}}:
(levi = ³Dâ, cuspidal = 8, d = ζâ)
(levi = ³Dâââ=Ίâ², cuspidal = 1, d = ζâ)
julia> Series(W,l[2]...)
ζâ-series R^³Dâ_{³Dâââ=Ίâ²}(λ==Id) H_G(L,λ)==hecke(Gâ,Vector{Mvp{Cyc{Int64}, Int64}}[[ζâq², ζâ, ζâq]])
âââ¬ââââââââââââââââââââââââ
â â γᵩ Ï Îµ family #â
âââŒââââââââââââââââââââââââ€
â1â Ïâââ Ïâââ 1 1â
â2â Ïâââ Ïâââ 1 2â
â3â Ïâââ Ïâââ -1 5â
â6â Ïâ³âââ Ïâââ
1 4â
â5â Ïâ²âââ Ïâââ -1 3â
â7â Ïâââ Ïâââ -1 5â
â4â³Dâ[1] Ïâââ 1 5â
âââŽââââââââââââââââââââââââ
Above we explore the 3-series corresponding to $R_ð^ð(Id)$ where ð
is the triality group and ð
is the torus of type (q²+q+1)²
. The group $W_ð(ð)$ is the complex reflection group Gâ
. The displays shows in the column 'γᵩ' the name of the unipotent characters constituents of $R_ð^ð(Id)$, and in the first column the number of these characters in the list of unipotent characters. In the column 'Ï' the name of the character of $W_ð(ð)$ corresponding to the unipotent character γᵩ
is shown; in the column 'ε' we show the sign $(-1)^{nᵩ}$. Finally in the last column we show in which family of unipotent characters is γᵩ
.
The theory of d
-Harish-Chandra series can be generalized to spetsial complex reflection groups using some axioms. We show below an example.
julia> W=complex_reflection_group(4)
Gâ
julia> l=cuspidal_data(W,3)
5-element Vector{@NamedTuple{levi::Spets{PRSG{Cyc{Rational{Int64}}, Int16}}, cuspidal::Int64, d::Root1}}:
(levi = Gâ, cuspidal = 3, d = ζâ)
(levi = Gâ, cuspidal = 6, d = ζâ)
(levi = Gâ, cuspidal = 7, d = ζâ)
(levi = Gâ, cuspidal = 10, d = ζâ)
(levi = Gâââ=ΊâΊâ²â, cuspidal = 1, d = ζâ)
julia> Series(W,l[5]...)
ζâ-series R^Gâ_{Gâââ=ΊâΊâ²â}(λ==Id) W_G(L,λ)==Zâ
âââ¬âââââââââââââââââââââââââââââââââââââ
â â γᵩ Ï(mod 3) ε parameter family #â
âââŒâââââââââââââââââââââââââââââââââââââ€
â1â Ïâââ 1 1 ζâq² 1â
â5â Ïâââ ζâ 1 -ζâq 2â
â2â Ïâââ ζâ -1 ζâ 4â
â8â Zâ:2 -1 -1 -ζâ²q 2â
â9âZâ:11 ζâ² -1 ζâ² 4â
â4â Ïâââ
ζââµ -1 -ζâ 4â
âââŽâââââââââââââââââââââââââââââââââââââ
Above we explore the 3
-series corresponding to the trivial character of the torus of type (q-1)(q-릉)
. For cyclic groups $W_ð(ð,λ)$ we display the parameters in the table since they are associated to characters of $W_ð(ð,λ)$. Finally the mention '(mod 3)' which appears in the 'Ï' column means that in this case the axioms leave an ambiguity in the correspondence between unipotent characters γᵩ
and characters Ï
(as well as with parameters): the correspondence is known only up to a translation by 3 (in this case, the same as a global multiplication of all Ï
by -1
).
Finally, we should note that if the reflection group or coset W
is not defined over the integers, what counts is not cyclotomic polynomials but factors of them over the field of definition of W
. In this case, one should not give as argument an integer d
representing $ζ_d$ but specify a root of unity. For instance, in the above case we get a different answer with:
julia> cuspidal_data(W,E(3,2))
5-element Vector{@NamedTuple{levi::Spets{PRSG{Cyc{Rational{Int64}}, Int16}}, cuspidal::Int64, d::Root1}}:
(levi = Gâ, cuspidal = 2, d = ζâ²)
(levi = Gâ, cuspidal = 5, d = ζâ²)
(levi = Gâ, cuspidal = 7, d = ζâ²)
(levi = Gâ, cuspidal = 10, d = ζâ²)
(levi = Gâââ=ΊâΊâ³â, cuspidal = 1, d = ζâ²)
Chevie.dSeries.Series
â MethodSeries(W, L, cuspidal, d)
If the reflection coset or group W
corresponds to the algebraic group ð
and cuspidal
to the d
-cuspidal unipotent character λ
of ð
, constructs the d
-series corresponding to $R_ð^ð(λ)$. The result s
it is a record with the following fields and functions:
s.spets
: the reflection group or coset W
.
s.levi
: the subcoset L
.
s.cuspidal
: the index of λ
in UnipotentCharacters(L)
.
s.d
: the value of d
(a Root1
).
relative_group(s)
: the group $W_ð(ð,λ)$.
dSeries.RLG(s)
: the UnipotentCharacter
given by $R_ð^ð(λ)$.
dSeries.eps(s)
: for each character Ï
of relative_group(s)
the sign $(-1)^{n_Ï}$ in the cohomology of the variety defining RLG(s)
of the corresponding constituent γᵩ
of RLG(s)
.
degree(s)
: the generic degree of RLG(s)
, as a CycPol
.
charnumbers(s)
: the indices in UnipotentCharacters(W)
of the constituents of RLG(s)
.
hecke(s)
: the hecke algebra $H_ð(ð,λ)$.
The function Series
has another form:
Series(<W> [,<d> [,<ad>]];k...)
where it returns a vector of Series
corresponding to the cuspidal data described by the arguments and the keywords (see the help for cuspidal_data
).
julia> W=complex_reflection_group(4)
Gâ
julia> Series(W,3;proper=true)
1-element Vector{Series}:
ζâ-series R^Gâ_{Gâââ=ΊâΊâ²â}(λ==Id) W_G(L,λ)==Zâ
julia> s=Series(W,3,1)[1]
ζâ-series R^Gâ_{Gâââ=ΊâΊâ²â}(λ==Id) W_G(L,λ)==Zâ
âââ¬âââââââââââââââââââââââââââââââââââââ
â â γᵩ Ï(mod 3) ε parameter family #â
âââŒâââââââââââââââââââââââââââââââââââââ€
â1â Ïâââ 1 1 ζâq² 1â
â5â Ïâââ ζâ 1 -ζâq 2â
â2â Ïâââ ζâ -1 ζâ 4â
â8â Zâ:2 -1 -1 -ζâ²q 2â
â9âZâ:11 ζâ² -1 ζâ² 4â
â4â Ïâââ
ζââµ -1 -ζâ 4â
âââŽâââââââââââââââââââââââââââââââââââââ
julia> s.spets
Gâ
julia> s.levi
Gâââ=ΊâΊâ²â
julia> s.cuspidal
1
julia> s.d
Root1: 릉
julia> hecke(s)
hecke(Gâââââ,Vector{Mvp{Cyc{Int64}, Int64}}[[ζâq², -ζâq, ζâ, -ζâ²q, ζâ², -ζâ]])
julia> degree(s)
ζâΊâΊâ²Ίâ³âΊâΊâ
julia> dSeries.RLG(s)
[Gâ]:<Ïâââ>-<Ïâââ>-<Ïâââ
>+<Ïâââ>-<Zâ:2>-<Zâ:11>
julia> charnumbers(s)
6-element Vector{Int64}:
1
5
2
8
9
4
julia> dSeries.eps(s)
6-element Vector{Int64}:
1
1
-1
-1
-1
-1
julia> relative_group(s)
Gâââââ
Chevie.dSeries.FitParameter
â MethodFitParameter(sch,m)
given: sch: schur elements for H(â€/e) given as CycPols m: a list of length e of Rationals, exponents of params
finds all permutations Ï of 1:e such that the parameters pâ=E(e,Ïâ-1)q^mâ gives sch by the formula scháµ¢=â_{jâ i}(1-páµ¢/pⱌ). Since multiplying the pâ by a scalar leaves invariant the sch, Ï is known only modulo a translation.
The result is a list of pairs [v1,v2] telling that globally Ï(v1)=v2, where the v1 are sort(collectby(sch,eachindex(sch)),by=minimum)
Chevie.dSeries.ennola
â Methodennola(W[,z1])
Let W
be an irreducible spetsial reflection group or coset, and z
the generator of the center of W
, viewed as a root of unity. Let ðŸ
be the spets attached to W
. A property checked case-by case is that, for a unipotent character γ
of ðŸ
with polynomial generic degree deg γ(q)
, deg γ(zq)
is equal to ±deg γ'(q)
for another unipotent character γ'
; ±γ'
is called the Ennola transform of γ
. For W
a Weyl group, the spets ðŸ
is a finite reductive group, in which case z=-1
if -1
is in W
and z=1
otherwise. The function returns the signed permutation e
done by ennola
on the unipotent degrees (as an SPerm
of 1:length(UnipotentCharacters(W))
).
The SPerm
e
is not uniquely determined by the degrees since two of them may be equal, but is uniquely determined by some additional axioms that we do not recall here (they include a description of the Ennola-permutation in terms of the fusion algebras attached to each Lusztig family).
If a second argument z1
is given, it should be a power of z
and the corresponding power of e
is returned.
julia> ennola(rootdatum("3D4"))
SPerm{Int64}: (3,-4)(5,-5)(6,-6)(7,-8)
julia> ennola(complex_reflection_group(14))
SPerm{Int64}: (2,43,-14,16,41,34)(3,35,40,18,-11,42)(4,-37,25,-17,-26,-36)(5,-6,-79)(7,-7)(8,-74)(9,-73)(10,-52,13,31,-50,29)(12,53,15,32,-51,-30)(19,71,70,21,67,68,20,69,72)(22,-39,27,-33,-28,-38)(23,24,-66,-23,-24,66)(44,46,49,-44,-46,-49)(45,48,47,-45,-48,-47)(54,-63,-55,-57,62,-56)(58,-65,-59,-61,64,-60)(75,-77)(76,-76)(78,-78)
The above example shows that it may happen that the order of z
-Ennola (here 18) is greater than the order of z
(here 6); this is related to the presence of irrationalities qâ
in the character table of the spetsial Hecke algebra of W
.
For a non-irreducible group, z
-ennola is defined if z
can be considered an element of the the centre of each irreducible component.
Chevie.Gt.ClassTypes
â TypeClassTypes(G[,p])
G
should be a root datum or a twisted root datum representing a finite reductive group $ð ^F$ and p
should be a prime. The function returns the class types of G
in characteristic p
(in good characteristic if p
is omitted). Two elements of $ð ^F$ have the same class type if their centralizers are conjugate. If su
is the Jordan decomposition of an element x
, the class type of x
is determined by the class type of its semisimple part s
and the unipotent class of u
in $C_ð (s)$.
The function ClassTypes
is presently only implemented for simply connected groups, where $C_ð (s)$ is connected. This section is a bit experimental and may change in the future.
ClassTypes
returns a struct
which contains a list of classtypes for semisimple elements, which are represented by subspets
and contain additionnaly information on the unipotent classes of $C_ð (s)$.
Let us give some examples:
julia> t=ClassTypes(rootdatum(:sl,3))
ClassTypes(Aâ,good characteristic)
ââââââââââââ¬ââââââââââ
âC_G(s) â |C_G(s)|â
ââââââââââââŒââââââââââ€
âAâââ=Ίâ² â Ίâ²â
âAâââ=ΊâΊâ â ΊâΊââ
âAâââ=Ίâ â Ίââ
âAââââ=AâΊââ qΊâ²Ίââ
âAâ âq³Ίâ²ΊâΊââ
ââââââââââââŽââââââââââ
By default, only information about semisimple centralizer types is returned: the type, and its generic order.
julia> xdisplay(t;unip=true)
ClassTypes(Aâ,good characteristic)
ââââââââââââ¬ââââââââââââââââ
âC_G(s) â u |C_G(su)|â
ââââââââââââŒââââââââââââââââ€
âAâââ=Ίâ² â 1 Ίâ²â
âAâââ=ΊâΊâ â 1 ΊâΊââ
âAâââ=Ίâ â 1 Ίââ
âAââââ=AâΊââ 11 qΊâ²Ίââ
â â 2 qΊââ
âAâ â 111 q³Ίâ²ΊâΊââ
â â 21 q³Ίââ
â â 3 3q²â
â â 3_ζâ 3q²â
â â3_ζâ² 3q²â
ââââââââââââŽââââââââââââââââ
Here we have displayed information on unipotent classes, with their centralizer.
julia> xdisplay(t;nClasses=true)
ClassTypes(Aâ,good characteristic)
ââââââââââââ¬ââââââââââââââââââââââââââ
âC_G(s) â nClasses |C_G(s)|â
ââââââââââââŒââââââââââââââââââââââââââ€
âAâââ=Ίâ² â(q²-5q+2qâ+4)/6 Ίâ²â
âAâââ=ΊâΊâ â (q²-q)/2 ΊâΊââ
âAâââ=Ίâ â (q²+q-qâ+1)/3 Ίââ
âAââââ=AâΊââ (q-qâ-1) qΊâ²Ίââ
âAâ â qâ q³Ίâ²ΊâΊââ
ââââââââââââŽââââââââââââââââââââââââââ
Here we have added information on how many semisimple conjugacy classes of ð ^F
have a given type. The answer in general involves variables of the form qâ
which represent gcd(q-1,a)
.
Finally an example in bad characteristic:
julia> t=ClassTypes(coxgroup(:G,2),2);xdisplay(t;nClasses=true)
ClassTypes(Gâ,char. 2)
ClassTypes(Gâ,char. 2)
ââââââââââââ¬âââââââââââââââââââââââââââââââ
âC_G(s) â nClasses |C_G(s)|â
ââââââââââââŒâââââââââââââââââââââââââââââââ€
âGâââ=Ίâ² â(q²-8q+2qâ+10)/12 Ίâ²â
âGâââ=ΊâΊâ â (q²-2q)/4 ΊâΊââ
âGâââ=ΊâΊâ â (q²-2q)/4 ΊâΊââ
âGâââ=Ίâ â (q²-q-qâ+1)/6 Ίââ
âGâââ=Ίâ â (q²+q-qâ+1)/6 Ίââ
âGâââ=Ίâ² â (q²-4q+2qâ-2)/12 Ίâ²â
âGââââ=AâΊââ (q-qâ-1)/2 qΊâ²Ίââ
âGââââ=AâΊââ (q-qâ+1)/2 qΊâΊâ²â
âGââââ=AÌâΊââ (q-2)/2 qΊâ²Ίââ
âGââââ=AÌâΊââ q/2 qΊâΊâ²â
âGâ â 1 qâ¶ÎŠâ²Ίâ²ΊâΊââ
âGââââ
â=Aâ â (qâ-1)/2 q³Ίâ²ΊâΊââ
âGââââ
â=²Aââ (qâ-1)/2 q³ΊâΊâ²Ίââ
ââââââââââââŽâââââââââââââââââââââââââââââââ
We notice that if q
is a power of 2
such that qâ¡2 (mod 3)
, so that qâ=1
, some class types do not exist. We can see what happens by giving a specific value to qâ
:
julia> xdisplay(t(;q_3=1);nClasses=true)
ClassTypes(Gâ,char. 2) qâ=1
ââââââââââââ¬âââââââââââââââââââââââââââ
âC_G(s) â nClasses |C_G(s)|â
ââââââââââââŒâââââââââââââââââââââââââââ€
âGâââ=Ίâ² â(q²-8q+12)/12 Ίâ²â
âGâââ=ΊâΊâ â (q²-2q)/4 ΊâΊââ
âGâââ=ΊâΊâ â (q²-2q)/4 ΊâΊââ
âGâââ=Ίâ â (q²-q)/6 Ίââ
âGâââ=Ίâ â (q²+q)/6 Ίââ
âGâââ=Ίâ² â (q²-4q)/12 Ίâ²â
âGââââ=AâΊââ (q-2)/2 qΊâ²Ίââ
âGââââ=AâΊââ q/2 qΊâΊâ²â
âGââââ=AÌâΊââ (q-2)/2 qΊâ²Ίââ
âGââââ=AÌâΊââ q/2 qΊâΊâ²â
âGâ â 1 qâ¶ÎŠâ²Ίâ²ΊâΊââ
ââââââââââââŽâââââââââââââââââââââââââââ
Chevie.Gt.closed_subsystems
â Methodclosed_subsystems(W)
W
should be a Weyl group. The function returns the Poset of closed subsystems of the root system of W
. Each closed subsystem is represented by the list of indices of its simple roots. If W
is the Weyl group of a reductive group ð
, then closed subsystem correspond to reductive subgroups of maximal rank. And all such groups are obtained this way, apart from some exceptions in characteristics 2 and 3 (see Malle-Testerman 2011 Proposition 13.4).
julia> W=coxgroup(:G,2)
Gâ
julia> closed_subsystems(W)
1 2<1 4<4<â
1 2<1 5<1<â
1 2<2 6<6<â
1 2<3 5<5<â
1 4<1
1 5<6
1 5<5
2 6<2<â
3 5<3<â
Chevie.Ucl
â ModuleThis module gives information about the unipotent conjugacy classes of a connected reductive group over an algebraically closed field k
, and various invariants attached to them. The unipotent classes depend on the characteristic of k
; their classification differs when the characteristic is not good (that is, when it divides one of the coefficients of the highest root). In good characteristic, the unipotent classes are in bijection with nilpotent orbits on the Lie algebra.
We give the following information for a unipotent element u
of each class:
the centralizer $C_ð (u)$, that we describe by the reductive part of $C_ð (u)^0$, by the group of components $A(u):=C_ð (u)/C_ð (u)^0$, and by the dimension of its radical.
in good characteristic, the Dynkin-Richardson diagram.
the Springer correspondence, attaching characters of the Weyl group or relative Weyl groups to each character of
A(u)
.
The Dynkin-Richarson diagram is attached to a nilpotent element $e$ of the Lie algebra $ð€$. By the Jacobson-Morozov theorem there exists an $ð°ð©â$ subalgebra of $ð€$ containing $e$ as the element $\begin{pmatrix}0&1\\0&0 \end{pmatrix}$. Let $ð$ be the torus $\begin{pmatrix}h&0\\0&h^{-1} \end{pmatrix}$ of $SLâ$ and let $ð$ be a maximal torus containing $ð$, so that $ð$ is the image of a one-parameter subgroup $Ïâ Y(ð)$. Consider the root decomposition $ð€=â_{αâΊ}ð€_α$ given by $ð$ and the root system Ί
; then $αâŠâšÏ,αâ©$ defines a linear form on $Ί$, determined by its value on simple roots Î
. It is possible to choose a system of simple roots such that $âšÏ,αâ©â¥ 0$ for $αâÎ $, and then $âšÏ,αâ©â{0,1,2}$ for any $αâÎ $. The Dynkin diagram of $Î $ decorated by these values $0,1,2$ is called the Dynkin-Richardson diagram of $e$, and in good characteristic is a complete invariant of its $ð€$-orbit.
Another classification of unipotent elements was given by Bala-Carter. A standard parabolic subgroup ð
of ð
parameterised by a subset IâÎ
is distinguished if the linear form Ï
taking the value 2
for 뱉 I
and 0
for other simple roots satisfies 2nâ+semisimplerank(ð)=nâ
, where náµ¢
is the number of roots in Ί
where Ï
takes the value i
. Given a distinguished parabolic ð
, there is a unique unipotent class which is dense in the unipotent radical of ð
. This class has the linear form described by the Dynkin-Richardson diagram equal to Ï
. Such unipotent classes are called distinguished. The theorem of Bala-Carter says that every unipotent class is distinguished in the smallest Levi subgroup ð
which contains it, and that such pairs of ð
and the distinguished parabolic ð
of ð
taken up to ð
-conjugacy are in bijection with unipotent classes of ð
.
Let $â¬$ be the variety of all Borel subgroups and let $â¬áµ€$ be the subvariety of Borel subgroups containing the unipotent element u
. Then $dim C_ð(u)=rank ð + 2 dim â¬_u$ and in good characteristic this dimension can be computed from the Dynkin-Richardson diagram: the dimension of the class of u
is the number of roots α
such that $âšÏ,αâ©â{0,1}$.
We now describe the Springer correspondence. Indecomposable locally constant $ð$-equivariant sheaves on a unipotent class $C$, called local systems, are parameterised by irreducible characters of $A(u)$ for uâ C
. The ordinary Springer correspondence is a bijection between irreducible characters of the Weyl group and a large subset of the local systems containing all trivial local systems (those parameterised by the trivial character of $A(u)$ for each $u$). More generally, the generalised Springer correspondence associates to each local system a (unique up to $ð$-conjugacy) cuspidal pair of a Levi subgroup $ð$ of $ð$ and a cuspidal local system on an unipotent class of $ð$, such that the set of local systems associated to a given cuspidal pair is parameterised by the characters of the relative Weyl group $W_ð (ð):=N_ð (ð)/ð$. There are only few cuspidal pairs (at most one in each dimension for classical groups).
The Springer correspondence gives information on the character values of a finite reductive groups as follows: assume that $k$ is the algebraic closure of a finite field $ðœ_q$ and that $F$ is the Frobenius attached to an $ðœ_q$-structure of $ð$. Let $C$ be an $F$-stable unipotent class and let $uâ C^F$; we call $C$ the geometric class of $u$ and the $ð^F$-classes inside $C^F$ are parameterised by the $F$-conjugacy classes of $A(u)$, denoted $H¹(F,A(u))$ (most of the time we can find $u$ such that $F$ acts trivially on $A(u)$ and $H¹(F,A(u))$ is then just the conjugacy classes). To an $F$-stable character $Ï$ of $A(u)$ we associate the characteristic function of the corresponding local system (actually associated to an extension $ÏÌ$ of $Ï$ to $A(u).F$); it is a class function $Y_{u,Ï}$ on $ð^F$ which can be normalized so that: $Y_{u,Ï}(uâ)=ÏÌ(cF)$ if $uâ$ is geometrically conjugate to $u$ and its $ð^F$-class is parameterised by the $F$-conjugacy class $cF$ of $A(u)$, otherwise $Y_{u,Ï}(uâ)=0$. If the pair $u,Ï$ corresponds via the Springer correspondence to the character $Ï$ of $W_ð(ð)$, then $Y_{u,Ï}$ is also denoted $Yᵪ$. There is another important class of functions indexed by local systems: to a local system on class $C$ is attached an intersection cohomology complex, which is a complex of sheaves supported on the closure $CÌ$. To such a complex of sheaves is associated its characteristic function, a class function of $ð^F$ obtained by taking the alternating trace of the Frobenius acting on the stalks of the cohomology sheaves. If $Y_Ï$ is the characteristic function of a local system, the characteristic function of the corresponding intersection cohomology complex is denoted by $X_Ï$. This function is supported on $CÌ$, and Lusztig has shown that $X_Ï=âᵩ P_{Ï,Ï} Yᵪ$ where $P_{Ï,Ï}$ are integer polynomials in $q$ and $Yᵪ$ are attached to local systems on classes lying in $CÌ$.
Lusztig and Shoji have given an algorithm to compute the matrix $P_{Ï,Ï}$, which is implemented in Chevie. The relation to characters of $ð(ðœ_q)$, considering for simplicity the ordinary Springer correspondence, is that the restriction to the unipotent elements of the almost character $R_Ï$ is equal to $q^{bᵪ} Xᵪ$, where $bᵪ$ is $dim â¬áµ€$ for an element u
of the class C
such that the support of Ï
is $CÌ$. The restrictions of the Deligne-Lusztig characters $R_w$ for wâ W
on the unipotents are called the Green functions and can also be computed by Chevie. The values of all unipotent characters on unipotent elements can also be computed in principle by applying Lusztig's Fourier transform matrix (see the section on the Fourier matrix) but there is a difficulty in that the $Xᵪ$ must first be multiplied by some roots of unity which are not known in all cases (and when known may depend on the congruence class of $q$ modulo some small primes).
Finally, we describe how unipotent classes of ð
are parameterised in various quasisimple groups. In classical types, the classes are parametrised by partitions corresponding to the Jordan form in the standard representation. Thus,
- for
Aâ
we have partitions ofn+1
. - for
B_n
we have partitions of2n+1
where even parts occur an even number of times. In characteristic 2, types B and C are isogenous so have the same classification; thus see the next paragraph. - for
C_n
we have partitions of2n
where odd parts occur an even number of times. In characteristic 2, there are2áµ
classes attached to a partition wherek
is the number of even parts which occur an even number of times. - for
D_n
we have partitions of2n
where even parts occur an even number of times, excepted there are two classes when all parts are even. In characteristic 2, we have partitions of2n
where odd parts occur an even number of times, excepted there are2áµ+ÎŽ
classes attached to a partition wherek
is the number of even parts which occur an even number of times, andÎŽ
is 2 when all parts are even and 0 otherwise.
In exceptional groups, the names of the classes are derived from the Bala-Carter classification. The name for a class parametrised by (ð,ð)
is of the form l(p)
where l
is the name of ð
and (p)
is present if there is more than one distinguished parabolic in ð
and describes which one it is. Before the classification of Bala-Carter was universally adopted, Shoji and Mizuno used a different scheme where sometimes a class was parametrised by a reductive subgroup of maximal rank which was not a Levi. These older labels can be obtained instead by giving the IO
property :shoji=>true
or :mizuno=>true
. In a bad characteristic p
, there are extra classes. Each of them is associated to a class c
in good characteristic and is named (c)â
.
We illustrate the above descriptions on some examples:
julia> UnipotentClasses(rootdatum(:sl,4))
UnipotentClasses(slâ)
1111<211<22<31<4
ââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âu âD-R d⬠ᵀ B-C C_ð(u) Aâ(Ίâ³) Aâ(AâÃAâΊâ)/-1 .(Aâ)/ζâ .(Aâ)/ζâ³â
ââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â4 â222 0 222 q³.Zâ 1:4 -1:2 ζâ:Id ζâ³:Idâ
â31 â202 1 22. qâŽ.Ίâ Id:31 â
â22 â020 2 2.2 qâŽ.Aâ.Zâ 2:22 11:11 â
â211 â101 3 2.. qâµ.AâΊâ Id:211 â
â1111â000 6 ... Aâ Id:1111 â
ââââââŽââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
The first column of the table gives the name of the unipotent class, here a partition describing the Jordan form. The partial order on unipotent classes given by Zariski closure is given before the table. The column D-R
, which is only shown in good characteristic, gives the Dynkin-Richardson diagram for each class; the column dBu
gives the dimension of the variety $⬠ᵀ$. The column B-C
gives the Bala-Carter classification of $u$, that is in the case of $slâ$ it shows $u$ as a regular unipotent in a Levi subgroup by giving the Dynkin-Richardson diagram of a regular unipotent (all 2's) for the entries corresponding to the Levi and .
for the entries which not corresponding to the Levi. The column C(u)
describes the group $C_ð(u)$: a power $qáµ$ describes that the unipotent radical of $C_ð(u)$ has dimension $d$ (thus $qáµ$ rational points); then follows a description of the reductive part of the neutral component of $C_ð(u)$, given by the name of its root datum. Then if $C_ð(u)$ is not connected, the description of $A(u)$ is given using a different vocabulary: a cyclic group of order 4 is given as Z4
, and a symmetric group on 3 points would be given as S3
.
For instance, the first class 4
has $C_ð(u)^0$ unipotent of dimension 3
and $A(u)$ equal to Z4
, the cyclic group of order 4. The class 22
has $C_G(u)$ with unipotent radical of dimension 4
, reductive part of type A1
and $A(u)$ is Z2
, that is the cyclic group of order 2. The other classes have $C_ð(u)$ connected. For the class 31
the reductive part of $C_G(u)$ is a torus of rank 1.
Then there is one column for each Springer series, giving for each class the pairs 'a:b' where 'a' is the name of the character of $A(u)$ describing the local system involved and 'b' is the name of the character of the (relative) Weyl group corresponding by the Springer correspondence. At the top of the column is written the name of the relative Weyl group, and in brackets the name of the Levi affording a cuspidal local system; next, separated by a /
is a description of the central character associated to the Springer series (omitted if this central character is trivial): all local systems in a given Springer series have same restriction to the center of $ð$. To find what the picture becomes for another algebraic group in the same isogeny class, for instance the adjoint group, one simply discards the Springer series whose central character becomes trivial on the center of $ð$; and each group $A(u)$ has to be quotiented by the common kernel of the remaining characters. Here is the table for the adjoint group:
julia> UnipotentClasses(coxgroup(:A,3))
UnipotentClasses(Aâ)
1111<211<22<31<4
ââââââ¬âââââââââââââââââââââââââââââ
âu âD-R d⬠ᵀ B-C C_ð(u) Aâ(Ίâ³)â
ââââââŒâââââââââââââââââââââââââââââ€
â4 â222 0 222 q³ Id:4â
â31 â202 1 22. qâŽ.Ίâ Id:31â
â22 â020 2 2.2 qâŽ.Aâ Id:22â
â211 â101 3 2.. qâµ.AâΊâ Id:211â
â1111â000 6 ... Aâ Id:1111â
ââââââŽâââââââââââââââââââââââââââââ
Here is another example:
julia> UnipotentClasses(coxgroup(:G,2))
UnipotentClasses(Gâ)
1<Aâ<AÌâ<Gâ(aâ)<Gâ
ââââââââ¬âââââââââââââââââââââââââââââââââââââââââââ
âu âD-R d⬠ᵀ B-C C_ð(u) Gâ(Ίâ²) .(Gâ)â
ââââââââŒâââââââââââââââââââââââââââââââââââââââââââ€
âGâ â 22 0 22 q² Id:Ïâââ â
âGâ(aâ)â 20 1 20 qâŽ.Sâ 21:Ïâ²âââ 3:Ïâââ 111:Idâ
âAÌâ â 01 2 .2 q³.Aâ Id:Ïâââ â
âAâ â 10 3 2. qâµ.Aâ Id:Ïâ³âââ â
â1 â 00 6 .. Gâ Id:Ïâââ â
ââââââââŽâââââââââââââââââââââââââââââââââââââââââââ
which illustrates that on class Gâ(aâ)
there are two local systems in the principal series of the Springer correspondence, and a further cuspidal local system. It also illustrates how we display in general the Bala-Carter classification. If a class is attached to (ð,ð)
then the simple roots in the complement of ð
have a .
. Those in ð
have a 0
or a 2
, the 2
s characterizing ð
. So, from the B-C
column, we see that that Gâ(aâ)
is not in a proper Levi, in which case the Bala-Carter diagram coincides with the Dynkin-Richardson diagram.
The characteristics 2 and 3 are not good for G2
. To get the unipotent classes and the Springer correspondence in bad characteristic, one gives a second argument to the function UnipotentClasses
:
julia> UnipotentClasses(coxgroup(:G,2),3)
UnipotentClasses(Gâ,3)
1<Aâ,(AÌâ)â<AÌâ<Gâ(aâ)<Gâ
ââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââ
âu âd⬠ᵀ B-C C_ð(u) Gâ(Ίâ²) .(Gâ) .(Gâ) .(Gâ)â
ââââââââŒââââââââââââââââââââââââââââââââââââââââââââ€
âGâ â 0 22 q².Zâ 1:Ïâââ ζâ:Id ζâ²:Idâ
âGâ(aâ)â 1 20 qâŽ.Zâ 2:Ïâââ 11:Id â
âAÌâ â 2 .2 qⶠId:Ïâââ â
âAâ â 3 2. qâµ.Aâ Id:Ïâ³âââ â
â(AÌâ)â â 3 ?? qâµ.Aâ Id:Ïâ²âââ â
â1 â 6 .. Gâ Id:Ïâââ â
ââââââââŽââââââââââââââââââââââââââââââââââââââââââââ
The function ICCTable
gives the transition matrix between the functions $Xᵪ$ and $Y_Ï$.
julia> uc=UnipotentClasses(coxgroup(:G,2));
julia> t=ICCTable(uc;q=Pol(:q))
Coefficients of Xᵪ on Yᵩ for series L=Gâââ=Ίâ² W_G(L)=Gâ
ââââââââ¬ââââââââââââââââââââââââââââââ
âX\Y âGâ Gâ(aâ)âœÂ²Â¹âŸ Gâ(aâ) AÌâ Aâ 1â
ââââââââŒââââââââââââââââââââââââââââââ€
âXÏâââ â 1 . 1 1 1 1â
âXÏâ²ââââ . 1 . 1 . q²â
âXÏâââ â . . 1 1 1 Ίââ
âXÏâââ â . . . 1 1 Ίââ
âXÏâ³ââââ . . . . 1 1â
âXÏâââ â . . . . . 1â
ââââââââŽââââââââââââââââââââââââââââââ
An example which illustrates how to get the shoji
names of classes
julia> uc=UnipotentClasses(coxgroup(:F,4));
julia> uc.classes[10:end]
7-element Vector{UnipotentClass}:
UnipotentClass(Câ(aâ))
UnipotentClass(Fâ(aâ))
UnipotentClass(Câ)
UnipotentClass(Bâ)
UnipotentClass(Fâ(aâ))
UnipotentClass(Fâ(aâ))
UnipotentClass(Fâ)
julia> xdisplay(uc.classes[10:end],shoji=true)
7-element Vector{UnipotentClass}:
UnipotentClass(Aâ+Bâ)
UnipotentClass(Aâ+AÌâ)
UnipotentClass(Câ)
UnipotentClass(Bâ)
UnipotentClass(Câ+Aâ)
UnipotentClass(Bâ)
UnipotentClass(Fâ)
Here the row labels and the column labels show the two ways of indexing local systems: the row labels give the character of the relative Weyl group and the column labels give the class and the name of the local system as a character of A(u)
: for instance, G2(a1)
is the trivial local system of the class G2(a1)
, while G2(a1)(21)
is the local system on that class corresponding to the 2-dimensional character of $A(u)=Aâ$.
The data on unipotent classes for arbitrary reductive groups are obtained as follows. The data for a quasi-simple simply connected group ðŸ
have been entered by hand for each type. In such a group to each Springer series is attached a character of A(Z)
, the group of components of the center. For any reductive group ðŸ'
of the same type with center Z'
the group A(Z')
is a quotient of the group A(Z)
. The Springer series for ðŸ'
are those such that the corresponding character of A(Z)
factors through A(Z')
(for computing A(Z')
see algebraic_center
). The geometric unipotent classes of ðŸ
and ðŸ'
are in bijection. For u
a unipotent element of ðŸ'
(which we can consider also as a unipotent element of ðŸ
) the group Aâ=A(u)
in ðŸ'
is a quotient of A=A(u)
in ðŸ
that we can compute as follows: the Springer correspondence for ðŸ'
tells us which characters of A
survive in ðŸ'
. Then A'
is the quotient of A
by the common kernel of these characters.
Chevie.Ucl.GreenTable
â MethodGreenTable(uc;classes=false)
Keeping the same notations as in the description of 'XTable', this function returns a table of the functions $Q_{wF}$, attached to elements $wFâ W_ð (ð)â
F$ where $W_ð (ð)$ are the relative weyl groups attached to cuspidal local systems. These functions are defined by $Q_{wF}=â_{u,Ï} ÏÌ(wF) XÌ_{u,Ï}$. An point to note is that in the principal Springer series, when ð
is a maximal torus, the function $Q_{wF}$ coincides with the Deligne-Lusztig character $R^ð _{ð_W}(1)$. As for 'XTable', by default the table gives the values of the functions on local systems. If classes=true
is given, then it gives the values of the functions $Q_{wF}$ on conjugacy classes.
julia> W=coxgroup(:G,2)
Gâ
julia> GreenTable(UnipotentClasses(W))
Values of Green functions Q_wF on local systems Ï
ââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âQᎵ_wF|Ï â 1 Aâ AÌâ Gâ(aâ)âœÂ¹Â¹Â¹âŸ Gâ(aâ)âœÂ²Â¹âŸ Gâ(aâ) Gââ
ââââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
âQ_Aâ^Gâ â Ίâ²ΊâΊâ ΊâΊâ (2q+1)Ίâ . q 2q+1 1â
âQ_AÌâ^Gâ â-ΊâΊâΊâΊâ -ΊâΊâ Ίâ . q 1 1â
âQ_Aâ^Gâ â-ΊâΊâΊâΊâ ΊâΊâ -Ίâ . -q 1 1â
âQ_Gâ^Gâ â Ίâ²Ίâ²Ίâ -ΊâΊâ² -ΊâΊâ . -q Ίâ 1â
âQ_Aâ^Gâ â Ίâ²Ίâ²Ίâ Ίâ²Ίâ -ΊâΊâ . q -Ίâ 1â
âQ_Aâ+AÌâ^Gââ Ίâ²ΊâΊâ -ΊâΊâ (2q-1)Ίâ . -q -2q+1 1â
âQ_^. â . . . q² . . .â
ââââââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
The functions $Q_{wF}$ depend only on the conjugacy class of wF
, so in the first column the indices of 'Q' are the names of the conjugacy classes of $W_ð(ð)$. The exponents are the names of the groups $W_ð(ð)$.
julia> GreenTable(UnipotentClasses(W);classes=true)
Values of Green functions Q_wF on unipotent classes
âââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âQᎵ_wF|classâ 1 Aâ AÌâ Gâ(aâ) Gâ(aâ)ââââ Gâ(aâ)âââ Gââ
âââââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
âQ_Aâ^Gâ â Ίâ²ΊâΊâ ΊâΊâ (2q+1)Ίâ 4q+1 2q+1 Ίâ 1â
âQ_AÌâ^Gâ â-ΊâΊâΊâΊâ -ΊâΊâ Ίâ 2q+1 1 -Ίâ 1â
âQ_Aâ^Gâ â-ΊâΊâΊâΊâ ΊâΊâ -Ίâ -2q+1 1 Ίâ 1â
âQ_Gâ^Gâ â Ίâ²Ίâ²Ίâ -ΊâΊâ² -ΊâΊâ -Ίâ Ίâ 2q+1 1â
âQ_Aâ^Gâ â Ίâ²Ίâ²Ίâ Ίâ²Ίâ -ΊâΊâ Ίâ -Ίâ -2q+1 1â
âQ_Aâ+AÌâ^Gâ â Ίâ²ΊâΊâ -ΊâΊâ (2q-1)Ίâ -4q+1 -2q+1 -Ίâ 1â
âQ_^. â . . . q² -q² q² .â
âââââââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
julia> GreenTable(UnipotentClasses(rootdatum(:sl,4)))
Values of Green functions Q_wF on local systems Ï
ââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âQᎵ_wF|Ï â 1111 211 22âœÂ¹Â¹âŸ 22 31 4 4^(ζâ) 4âœâ»Â¹âŸ 4^(ζâ³)â
ââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
âQââââ^Aââ Ίâ²ΊâΊâ (3q²+2q+1)Ίâ . (2q+1)Ίâ 3q+1 1 . . .â
âQâââ^Aâ â-ΊâΊâΊâΊâ -q³+q²+q+1 . Ίâ Ίâ 1 . . .â
âQââ^Aâ â Ίâ²ΊâΊâ -ΊâΊâ . 2q²-q+1 -Ίâ 1 . . .â
âQââ^Aâ â Ίâ²Ίâ²Ίâ -ΊâΊâ . -ΊâΊâ 1 1 . . .â
âQâ^Aâ â -Ίâ³ΊâΊâ Ίâ²Ίâ . -Ίâ -Ίâ 1 . . .â
âQââ^Aâ â . . q²Ίâ . . . . q .â
âQâ^Aâ â . . -q²Ίâ . . . . q .â
âQ_^. â . . . . . . q³ââ . .â
âQ_^. â . . . . . . . . q³âââ
ââââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Chevie.Ucl.ICCTable
â TypeICCTable(uc,seriesNo=1;q=Pol())
This function gives the table of decompositions of the functions $X_ι$ in terms of the functions $Y_ι$. Here ι
is a ð
-equivariant local system on the class C
of a unipotent element u
. Such a local system is parametrised by the pair (u,Ï)
of u
and a character of the group of components A(u)
of $C_ð (u)$. The function $Y_ι$ is the characteristic function of this local system and $X_ι$ is the characteristic function of the corresponding intersection cohomology complex on CÌ
. The Springer correspondence says that the local systems can also be indexed by characters of a relative Weyl group. Since the coefficient of Xᵪ
on Yᵩ
is 0
if Ï
and Ï
are not characters of the same relative Weyl group (are not in the same Springer series), the table is for one Springer series, specified by the argument 'seriesNo' (this defaults to 'seriesNo=1' which is the principal series). The decomposition multiplicities are graded, and are given as polynomials in one variable (specified by the argument q
; if not given Pol()
is assumed).
julia> uc=UnipotentClasses(coxgroup(:A,3));t=ICCTable(uc)
Coefficients of Xᵪ on Yᵩ for series L=Aâââ=Ίâ³ W_G(L)=Aâ
âââââââ¬âââââââââââââââââ
âX\Y â4 31 22 211 1111â
âââââââŒâââââââââââââââââ€
âX4 â1 1 1 1 1â
âX31 â. 1 1 Ίâ Ίââ
âX22 â. . 1 1 Ίââ
âX211 â. . . 1 Ίââ
âX1111â. . . . 1â
âââââââŽâââââââââââââââââ
In the above the multiplicities are given as products of cyclotomic polynomials to display them more compactly. However the format of such a table can be controlled more precisely.
For instance, one can ask to not display the entries as products of cyclotomic polynomials and not display the zeroes as '.'
julia> xdisplay(t;cycpol=false,dotzero=false)
Coefficients of Xᵪ on Yᵩ for A3
âââââââ¬âââââââââââââââââââ
âX\Y â4 31 22 211 1111â
âââââââŒâââââââââââââââââââ€
âX4 â1 1 1 1 1â
âX31 â0 1 1 q+1 q²+q+1â
âX22 â0 0 1 1 q²+1â
âX211 â0 0 0 1 q²+q+1â
âX1111â0 0 0 0 1â
âââââââŽâââââââââââââââââââ
Since show
uses the function showtable
, all the options of this function are also available. We can use this to restrict the entries displayed to a given sublist of the rows and columns (here the indices correspond to the number in Chevie of the corresponding character of the relative Weyl group of the given Springer series):
julia> uc=UnipotentClasses(coxgroup(:F,4));
julia> t=ICCTable(uc);
julia> sh=[13,24,22,18,14,9,11,19];
julia> xdisplay(t,rows=sh,cols=sh)
Coefficients of Xᵪ on Yᵩ for series L=Fâââ=Ίâ⎠W_G(L)=Fâ
âââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââ
âX\Y âAâ+AÌâ Aâ AÌâ Aâ+AÌâ AÌâ+Aâ BââœÂ¹Â¹âŸ Bâ Câ(aâ)âœÂ¹Â¹âŸâ
âââââââââŒâââââââââââââââââââââââââââââââââââââââââââââ€
âXÏââââ â 1 . . . . . . .â
âXÏâ³âââ â 1 1 . . . . . .â
âXÏâ²âââ â 1 . 1 . . . . .â
âXÏâ³âââ â 1 1 . 1 . . . .â
âXÏâ²âââ â Ίâ 1 1 1 1 . . .â
âXÏâââ â q² . . . . 1 . .â
âXÏâ³âââ â Ίâ Ίâ . 1 . . 1 .â
âXÏâ²âââ â q² . Ίâ . 1 . . 1â
âââââââââŽâââââââââââââââââââââââââââââââââââââââââââââ
The ìo
option rowlocsys=true
will display local systems also for the row labels.
The function 'ICCTable' returns an object with various pieces of information which can help further computations.
.scalar
: this contains the table of multiplicities Pᵪᵩ
of the Xᵪ
on the Yᵩ
. One should pay attention that by default, the table is not displayed in the same order as the stored |.scalar|, which is in order in Chevie of the characters in the relative Weyl group; the table is transposed, then lines and rows are sorted by dimBu,class no,index of character in A(u)
while displayed.
.group
: The group W
.
.relgroup
: The relative Weyl group for the Springer series.
.series
: The index of the Springer series given for W
.
.dimBu
: The list of $dimâ¬áµ€$ for each local system (u,Ï)
in the series.
:L
: The matrix of (unnormalized) scalar products of the functions $Yᵩ$ with themselves, that is the $(Ï,Ï)$ entry is $â_{gâð(ðœ_q)} Yᵩ(g) Yᵪ(g)$. This is thus a symmetric, block-diagonal matrix where the diagonal blocks correspond to geometric unipotent conjugacy classes. This matrix is obtained as a by-product of Lusztig's algorithm to compute $Pᵩᵪ$.
Chevie.Ucl.UnipotentClass
â TypeA struct UnipotentClass
representing the class C
of a unipotent element u
of the reductive group ð
with Weyl group W
, contains always the following information
.name
The name ofC
.parameter
A parameter describingC
. Sometimes the same as.name
; a partition describing the Jordan form, for classical groups..dimBu
The dimension of the variety of Borel subgroups containingu
.
For some types there is a field .mizuno
or .shoji
giving alternate names used in the literature.
A UnipotentClass
contains also some of the following information (all of it for some types and some characteristics but sometimes much less)
.dynkin
the Dynkin-Richardson diagram ofC
(a vector giving a weight 0, 1 or 2 to the simple roots)..dimred
the dimension of the reductive part ofC_G(u)
..red
aCoxeterCoset
recording the type of the reductive part ofC_G(u)
, with the twisting induced by the Frobenius if any..Au
the groupA_G(u)=C_G(u)/C^0_G(u)
..balacarter
encodes the Bala-Carter classification ofC
, which says thatu
is distinguished in a LeviL
(the Richardson class in a parabolicP_L
) as a vector listing the indices of the simple roots inL
, with those not inP_L
negated..rep
a list of indices for roots such that ifU=UnipotentGroup(W)
thenprod(U,u.rep)
is a representative ofC
..dimunip
the dimension of the unipotent part ofC_G(u)
..AuAction
anExtendedCoxeterGroup
recording the action ofA_G(u)
onred
.
Chevie.Ucl.UnipotentClasses
â TypeUnipotentClasses(W[,p])
W
should be a CoxeterGroup
record for a Weyl group or RootDatum
describing a reductive algebraic group ð
. The function returns a record containing information about the unipotent classes of ð
in characteristic p
(if omitted, p
is assumed to be any good characteristic for ð
). This contains the following fields:
group
: a pointer to W
p
: the characteristic of the field for which the unipotent classes were computed. It is 0
for any good characteristic.
orderclasses
: a list describing the Hasse diagram of the partial order induced on unipotent classes by the closure relation. That is .orderclasses[i]
is the list of j
such that $CÌⱌâ CÌáµ¢$ and there is no class $Câ$ such that $CÌⱌâ CÌââ CÌáµ¢$.
classes
: a list of records holding information for each unipotent class (see below).
springerseries
: a list of records, each of which describes a Springer series of ð
.
The records describing individual unipotent classes have the following fields:
name
: the name of the unipotent class.
parameter
: a parameter describing the class (for example, a partition describing the Jordan form, for classical groups).
Au
: the group A(u)
.
dynkin
: present in good characteristic; contains the Dynkin-Richardson diagram, given as a list of 0,1,2 describing the coefficient on the corresponding simple root.
red
: the reductive part of $C_ð(u)$.
dimBu
: the dimension of the variety ðáµ€
.
The records for classes contain additional fields for certain groups: for instance, the names given to classes by Mizuno in Eâ, Eâ, Eâ
or by Shoji in Fâ
. See the help for UnipotentClass
for more details.
The records describing individual Springer series have the following fields:
levi
:the indices of the reflections corresponding to the Levi subgroup ð
where lives the cuspidal local system ι
from which the Springer series is induced.
relgroup
: The relative Weyl group $N_ð(ð,ι)/ð$. The first series is the principal series for which .levi=[]
and .relgroup=W
.
locsys
: a list of length nconjugacy_classes(.relgroup)
, holding in i
-th position a pair describing which local system corresponds to the i
-th character of $N_ð(ð,ι)$. The first element of the pair is the index of the concerned unipotent class u
, and the second is the index of the corresponding character of A(u)
.
Z
: the central character associated to the Springer series, specified by its value on the generators of the center.
julia> W=rootdatum(:sl,4)
slâ
julia> uc=UnipotentClasses(W);
julia> uc.classes
5-element Vector{UnipotentClass}:
UnipotentClass(1111)
UnipotentClass(211)
UnipotentClass(22)
UnipotentClass(31)
UnipotentClass(4)
The show
function for unipotent classes accepts all the options of showtable
and of charnames
. Giving the option mizuno
(resp. shoji
) uses the names given by Mizuno (resp. Shoji) for unipotent classes. Moreover, there is also an option fourier
which gives the Springer correspondence tensored with the sign character of each relative Weyl group, which is the correspondence obtained via a Fourier-Deligne transform (here we assume that p
is very good, so that there is a nondegenerate invariant bilinear form on the Lie algebra, and also one can identify nilpotent orbits with unipotent classes).
Here is how to display the non-cuspidal part of the Springer correspondence of the unipotent classes of Eâ
using the notations of Mizuno for the classes and those of Frame for the characters of the Weyl group and of Spaltenstein for the characters of Gâ
(this is convenient for checking our data with the original paper of Spaltenstein):
julia> uc=UnipotentClasses(rootdatum(:E6sc));
julia> xdisplay(uc;cols=[5,6,7],spaltenstein=true,frame=true,mizuno=true,
order=false)
ââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âu â Eâ(Ίââ¶) Gâ(AâÃAâΊâ²)/ζâ Gâ(AâÃAâΊâ²)/ζâ²â
ââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
âEâ â 1:1â ζâ:1 ζâ²:1â
âEâ(aâ)â 1:6â ζâ:εâ ζâ²:εââ
âDâ
â Id:20â â
âAâ
+Aâ â -1:15â 1:30â ζâ:ΞⲠζâ²:Ξâ²â
âAâ
â 1:15_q ζâ:ΞⳠζâ²:Ξâ³â
âDâ
(aâ)â Id:64â â
âAâ+Aâ â Id:60â â
âDâ â Id:24â â
âAâ â Id:81â â
âDâ(aâ)â111:20â 3:80â 21:90â â
âAâ+Aâ â Id:60â â
â2Aâ+Aââ 1:10â ζâ:ε_c ζâ²:ε_câ
âAâ â Id:81ââ² â
âAâ+2Aââ Id:60ââ² â
â2Aâ â 1:24âⲠζâ:ε ζâ²:εâ
âAâ+Aâ â Id:64ââ² â
âAâ â 11:15ââ² 2:30ââ² â
â3Aâ â Id:15_qâ² â
â2Aâ â Id:20ââ² â
âAâ â Id:6ââ² â
â1 â Id:1ââ² â
ââââââââŽââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Chevie.Ucl.XTable
â MethodXTable(uc;classes=false)
This function presents in a different way the information obtained from ICCTable
. Let $XÌ_{u,Ï}=q^{1/2(codim C-dim Z(ð ))}X_{u,Ï}$ where C
is the class of u
and Z(ð )
is the center of Levi subgroup on which lives the cuspidal local system attached to the local system (u,Ï)
.
Then XTable(uc)
gives the decomposition of the functions $XÌ_{u,Ï}$ on local systems. t=XTable(uc,classes==true)
gives the values of the functions $XÌ_{u,Ï}$ on unipotent classes. A side effect of classes=true
is to compute the cardinal of the unipotent conjugacy classes, available in t.cardClass
; in this case displaying t
will show the cardinal of the centralizers of unipotent elements, available in t.centClass
.
julia> W=coxgroup(:G,2)
Gâ
julia> XTable(UnipotentClasses(W))
Values of character sheaves XÌᵪ on local systems Ï
ââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââ
âXÌᵪ|Ï â 1 Aâ AÌâ Gâ(aâ)âœÂ¹Â¹Â¹âŸ Gâ(aâ)âœÂ²Â¹âŸ Gâ(aâ) Gââ
ââââââââââââŒââââââââââââââââââââââââââââââââââââââââââââ€
âX_Ïâââ^Gâ â 1 1 1 . . 1 1â
âX_Ïâââ^Gâ â qⶠ. . . . . .â
âX_Ïâ²âââ^Gââ q³ . q . q . .â
âX_Ïâ³âââ^Gââ q³ q³ . . . . .â
âX_Ïâââ^Gâ â qΊâ q q . . q .â
âX_Ïâââ^Gâ âq²Ίâ q² q² . . . .â
âX_Id^. â . . . q² . . .â
ââââââââââââŽââââââââââââââââââââââââââââââââââââââââââââ
The functions XÌ
in the first column are decorated by putting as an exponent the relative groups $W_ð (ð)$.
julia> t=XTable(UnipotentClasses(W);classes=true)
Values of character sheaves XÌᵪ on unipotent classes
ââââââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âXÌᵪ|class â 1 Aâ AÌâ Gâ(aâ) Gâ(aâ)ââââ Gâ(aâ)âââ Gââ
ââââââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
âX_Ïâââ^Gâ â 1 1 1 1 1 1 1â
âX_Ïâââ^Gâ â qⶠ. . . . . .â
âX_Ïâ²âââ^Gââ q³ . q 2q . -q .â
âX_Ïâ³âââ^Gââ q³ q³ . . . . .â
âX_Ïâââ^Gâ â qΊâ q q q q q .â
âX_Ïâââ^Gâ â q²Ίâ q² q² . . . .â
âX_Id^. â . . . q² -q² q² .â
ââââââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â|C_ð(u)| âqâ¶ÎŠâ²Ίâ²ΊâΊâ qâ¶ÎŠâΊâ qâŽÎŠâΊâ 6q⎠2q⎠3q⎠q²â
ââââââââââââŽââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
julia> XTable(UnipotentClasses(W,2))
Values of character sheaves XÌᵪ on local systems Ï
ââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââ
âXÌᵪ|Ï â 1 Aâ AÌâ Gâ(aâ)âœÂ¹Â¹Â¹âŸ Gâ(aâ)âœÂ²Â¹âŸ Gâ(aâ) GââœÂ¹Â¹âŸ Gââ
ââââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââ€
âX_Ïâââ^Gâ â 1 1 1 . . 1 . 1â
âX_Ïâââ^Gâ â qⶠ. . . . . . .â
âX_Ïâ²âââ^Gââ q³ . q . q . . .â
âX_Ïâ³âââ^Gââ q³ q³ . . . . . .â
âX_Ïâââ^Gâ â qΊâ q q . . q . .â
âX_Ïâââ^Gâ âq²Ίâ q² q² . . . . .â
âX_Id^. â . . . q² . . . .â
âX_Id^. â . . . . . . q .â
ââââââââââââŽâââââââââââââââââââââââââââââââââââââââââââââââââââ
julia> XTable(UnipotentClasses(rootdatum(:sl,4)))
Values of character sheaves XÌᵪ on local systems Ï
ââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââ
âXÌᵪ|Ï â1111 211 22âœÂ¹Â¹âŸ 22 31 4 4^(ζâ) 4âœâ»Â¹âŸ 4^(ζâ³)â
ââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââ€
âXââââ^Aââ qⶠ. . . . . . . .â
âXâââ^Aâ âq³Ίâ q³ . . . . . . .â
âXââ^Aâ âq²Ίâ q² . q² . . . . .â
âXââ^Aâ â qΊâ qΊâ . q q . . . .â
âXâ^Aâ â 1 1 . 1 1 1 . . .â
âXââ^Aâ â . . q³ . . . . . .â
âXâ^Aâ â . . q² . . . . q .â
âX_Id^. â . . . . . . q³ââ . .â
âX_Id^. â . . . . . . . . q³âââ
ââââââââââŽâââââââââââââââââââââââââââââââââââââââââââââ
Chevie.Ucl.UnipotentValues
â MethodUnipotentValues(uc,classes=false)
This function returns a table of the values of unipotent characters on local systems (by default) or on unipotent classes (if classes=true
).
julia> W=coxgroup(:G,2)
Gâ
julia> UnipotentValues(UnipotentClasses(W);classes=true)
Values of unipotent characters for Gâ on unipotent classes
âââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â â 1 Aâ AÌâ Gâ(aâ) Gâ(aâ)ââââ Gâ(aâ)âââ Gââ
âââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
âÏâââ â 1 1 1 1 1 1 1â
âÏâââ â qⶠ. . . . . .â
âÏâ²âââ â qΊâΊâ/3 -qΊâΊâ/3 q (q+5)q/3 -qΊâ/3 qΊâ/3 .â
âÏâ³âââ â qΊâΊâ/3 (2q²+1)q/3 . qΊâ/3 -qΊâ/3 (q+2)q/3 .â
âÏâââ â qΊâ²Ίâ/6 (2q+1)qΊâ/6 qΊâ/2 (q+5)q/6 -qΊâ/6 qΊâ/6 .â
âÏâââ â qΊâ²Ίâ/2 qΊâ/2 qΊâ/2 -qΊâ/2 qΊâ/2 -qΊâ/2 .â
âGâ[-1] â qΊâ²Ίâ/2 -qΊâ/2 -qΊâ/2 -qΊâ/2 qΊâ/2 -qΊâ/2 .â
âGâ[1] â qΊâ²Ίâ/6 (2q-1)qΊâ/6 -qΊâ/2 (q+5)q/6 -qΊâ/6 qΊâ/6 .â
âGâ[ζâ] âqΊâ²Ίâ²/3 -qΊâΊâ/3 . qΊâ/3 -qΊâ/3 (q+2)q/3 .â
âGâ[ζâ²]âqΊâ²Ίâ²/3 -qΊâΊâ/3 . qΊâ/3 -qΊâ/3 (q+2)q/3 .â
âââââââââŽââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
julia> UnipotentValues(UnipotentClasses(W,3);classes=true)
Values of unipotent characters for Gâ on unipotent classes
âââââââââ¬ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â â 1 Aâ AÌâ Gâ(aâ) Gâ(aâ)âââ Gâ Gâ_(ζâ)
âââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âÏâââ â 1 1 1 1 1 1 1
âÏâââ â qⶠ. . . . . .
âÏâ²âââ â qΊâΊâ/3 -qΊâΊâ/3 q/3 qΊâ/3 -qΊâ/3 -2q/3 q/3
âÏâ³âââ â qΊâΊâ/3 (2q²+1)q/3 q/3 qΊâ/3 -qΊâ/3 -2q/3 q/3
âÏâââ â qΊâ²Ίâ/6 (2q+1)qΊâ/6 (3q+1)q/6 qΊâ/6 -qΊâ/6 2q/3 -q/3
âÏâââ â qΊâ²Ίâ/2 qΊâ/2 qΊâ/2 -qΊâ/2 qΊâ/2 . .
âGâ[-1] â qΊâ²Ίâ/2 -qΊâ/2 -qΊâ/2 -qΊâ/2 qΊâ/2 . .
âGâ[1] â qΊâ²Ίâ/6 (2q-1)qΊâ/6 (-3q+1)q/6 qΊâ/6 -qΊâ/6 2q/3 -q/3
âGâ[ζâ] âqΊâ²Ίâ²/3 -qΊâΊâ/3 q/3 qΊâ/3 -qΊâ/3 q/3 (-ζâ+2ζâ²)q/3
âGâ[ζâ²]âqΊâ²Ίâ²/3 -qΊâΊâ/3 q/3 qΊâ/3 -qΊâ/3 q/3 (2ζâ-ζâ²)q/3
âââââââââŽââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âââââââââ¬ââââââââââââââââââââââââââ
â â Gâ_(ζâ²) (AÌâ)ââ
âââââââââŒââââââââââââââââââââââââââ€
âÏâââ â 1 1â
âÏâââ â . .â
âÏâ²âââ â q/3 (2q²+1)q/3â
âÏâ³âââ â q/3 -qΊâΊâ/3â
âÏâââ â -q/3 (2q+1)qΊâ/6â
âÏâââ â . qΊâ/2â
âGâ[-1] â . -qΊâ/2â
âGâ[1] â -q/3 (2q-1)qΊâ/6â
âGâ[ζâ] â (2ζâ-ζâ²)q/3 -qΊâΊâ/3â
âGâ[ζâ²]â(-ζâ+2ζâ²)q/3 -qΊâΊâ/3â
âââââââââŽââââââââââââââââââââââââââ
Chevie.Ucl.distinguished_parabolics
â Methoddistinguished_parabolics(W)
the list of distinguished standard parabolic subgroups of W
as defined by Richardson, each given as a list of the corresponding indices. The distinguished unipotent conjugacy classes of W
consist of the dense unipotent orbit in the unipotent radical of such a parabolic subgroup. Their Dynkin-Richardson diagram contains a 0 at the indices of the parabolic subgroup, otherwise a 2.
julia> W=coxgroup(:F,4)
Fâ
julia> distinguished_parabolics(W)
4-element Vector{Vector{Int64}}:
[]
[3]
[1, 3]
[1, 3, 4]
Chevie.Ucl.induced_linear_form
â Methodinduced_linear_form(W, K, h)
This routine can be used to find the class in the algebraic group ð
which contains a given unipotent class of a reductive subgroup of maximum rank ð
of ð
.
The argument h
is a linear form on the roots of ð
, given by its value on the simple roots; this linear form is extended to the roots of ð
by 0
on the orthogonal of the roots of K
; and finally the resulting form is conjugated by an element of the Weyl group so that it takes positive values on the simple roots. If the initial form describes a Dynkin-Richardson diagram for ð
, the result will describe a Dynkin-Richardson diagram for ð
.
julia> W=coxgroup(:F,4)
Fâ
julia> H=reflection_subgroup(W,[1,3])
Fâââââ=AâÃAÌâΊâ²
julia> induced_linear_form(W,H,[2,2])
4-element Vector{Int64}:
0
1
0
0
julia> uc=UnipotentClasses(W);
julia> uc.classes[4].dynkin
4-element Vector{Int64}:
0
1
0
0
julia> uc.classes[4]
UnipotentClass(Aâ+AÌâ)
The example above shows that the class containing the regular class of the Levi subgroup of type AâÃAÌâ
is the class Aâ+AÌâ
.
Chevie.Ucl.special_pieces
â Method'special_pieces(<uc>)'
The special pieces form a partition of the unipotent variety of a reductive group ð
which was first defined in Spaltenstein1982 chap. III as the fibres of d^2
, where d
is a "duality map". Another definition is as the set of classes in the Zariski closure of a special class and not in the Zariski closure of any smaller special class, where a special class is the support of the image of a special character by the Springer correspondence.
Each piece is a union of unipotent conjugacy classes so is represented in Chevie as a list of class numbers. Thus the list of special pieces is returned as a list of lists of class numbers. The list is sorted by increasing piece dimension, while each piece is sorted by decreasing class dimension, so that the special class is listed first.
julia> W=coxgroup(:G,2)
Gâ
julia> special_pieces(UnipotentClasses(W))
3-element Vector{Vector{Int64}}:
[1]
[4, 3, 2]
[5]
julia> special_pieces(UnipotentClasses(W,3))
3-element Vector{Vector{Int64}}:
[1]
[4, 3, 2, 6]
[5]
The example above shows that the special pieces are different in characteristic 3.