.. _SectGrpRflComp:

.. _create-group-refl-complex:

Construction of Finite Complex Reflection Groups
================================================

In this section, we describe the classification and construction of finite
complex reflection groups.

A finite complex reflection group has a finite root system but there is no known
analogue of a set of simple roots as in the theory of finite Coxeter groups. To
illustrate the difficulty, one of the examples in this section constructs a
complex reflection group of rank 4 which cannot be generated by fewer than 5
generators.

Nevertheless, it is possible to generalise the concept of *root datum* to the
complex case and construct all complex reflection groups via their root data.

Let :math:`D` be the ring of integers of a number field :math:`F` which admits a
well-defined operation of complex conjugation (which in the case of a real
number field will be the identity automorphism). Let :math:`\mu(D)` be the group
of roots of unity in :math:`D` and let :math:`V = F\otimes_D L`.

A *complex root datum* is a :math:`4`-tuple :math:`(L,L^*,\Phi,\rho)`, where

:math:`\bullet` :math:`L` and :math:`L^*` are free :math:`D`-modules of rank
:math:`n` which are in duality via a pairing
:math:`L\times L^* \to D : (a,\phi) \mapsto \langle\,a,\phi\,\rangle`;

:math:`\bullet` :math:`\Phi` is a finite subset of :math:`L` and
:math:`\rho : \Phi \to L^*`.

For all :math:`a\in \Phi` we have:

for all :math:`\lambda\in F`, we have :math:`\lambda a \in \Phi` if and only if
:math:`\lambda\in \mu(D)`;

for all :math:`\lambda \in D`, we have :math:`\rho(\lambda a) = 
\overline{\lambda}\rho(a)`;

:math:`f(a) = 1 - \langle\,a,\rho(a)\,\rangle\in \mu(D)\setminus \{1\}`;

the reflection :math:`r_a` of :math:`V` defined by
:math:`v r_a = v - \langle\,v,\rho(a)\,\rangle a` and the reflection
:math:`r^*_a` of :math:`V^*` defined by
:math:`\phi r^*_a = \phi - \langle\,a,\phi\,\rangle \rho(a)` satisfy:

:math:`\bullet\quad
\Phi r_a \subseteq \Phi` and :math:`\Phi^* r^*_a\subseteq \Phi^*`, where
:math:`\Phi^* = \rho(\Phi)`. :math:`\bullet\quad f(a r_b ) = f(a)` for all
:math:`a,b\in \Phi`.

Put :math:`a^* = \rho(a)` and :math:`V^* = F\otimes_D L^*`. Then
:math:`\rho : \Phi \to \Phi^*` is a bijection and the map

.. math:: p := V \to V^* : v \mapsto \sum_{a\in\Phi}\overline{\langle\,v,a^*\,\rangle} a^*

is semilinear. Furthermore, :math:`\beta(u,v) = \langle\,u,p(v)\,\rangle`
defines a non-degenerate hermitian form on the span of :math:`\Phi`.

The group :math:`W` generated by the reflections :math:`\{r_a\mid a\in \Phi\}`
is the *Weyl group* of the root datum. For any set :math:`\{r_1,r_2,\dots,r_k\}`
of reflections that generate :math:`W`, every reflection in :math:`W` is
conjugate to a power of some :math:`r_i`. The set :math:`\Phi` is a *root
system* for :math:`W` and :math:`\Phi^*` is the set of *coroots*.

If :math:`a_1`, :math:`a_2`, …, :math:`a_k\in\Phi` are roots of the reflections
:math:`r_1`, :math:`r_2`, …, :math:`r_n` which generate :math:`W`, then
:math:`C = (\langle\,a_i,a^*_j\,\rangle)` is a *complex Cartan matrix* and the
:math:`a_i` and :math:`a^*_j` are *basic* roots and coroots of :math:`W`.

Even though there is no satisfactory notion of ‘simple roots’, a complex
reflection group can nevertheless be described by means of a complex Cartan
matrix. In Magma if the roots are the rows of a matrix :math:`A` and if the
coroots are the rows of a matrix :math:`B`, then :math:`C = AB^\tr`. The
matrices :math:`A` and :math:`B` are called *basic* root and coroot matrices.

The complex Cartan matrix can be described by a diagram similar to the Dynkin
diagram of a Coxeter group. This notation was suggested by Coxeter and used by
Cohen in :cite:`Cohen76`. (There is a different type of diagram used
by Broué, Malle and others.)

Cohen’s naming scheme for the diagrams extends the standard notation
:math:`A_n`, :math:`B_n`, …, :math:`H_3`, :math:`H_4` used for Coxeter groups.
Magma uses a slight variation of Cohen’s scheme; that is, in Magma, Cohen’s
group :math:`EN_4` is referred to as :math:`O_4`.

The original numbering system for the primitive complex reflection groups is due
to Shephard and Todd :cite:`ShephardTodd54`.

.. magma:function:: ShephardTodd(n)
   :label: ShephardTodd

RngIntElt -> GrpMat, Fld

NumFld : BoolElt : ``false``

This function returns the primitive reflection group :math:`G_n` using the
Shephard and Todd numbering.

By default the matrices are written over the ring of integers of the smallest
cyclotomic field which contains the character values of the reflections. If the
parameter ``NumFld`` is set to ``true``, the number field generated by the
character values of the reflections is used.

The groups available via this function include all finite primitive complex
reflection groups other than the symmetric groups
:math:`{\operatorname{Sym}}(n)` for :math:`n\ge 5`. The groups are listed below.

Nineteen 2-dimensional primitive complex reflection groups:

Tetrahedral family: :math:`G_4`, …, :math:`G_7`

Octahedral family: :math:`G_8`, …, :math:`G_{15}`

Icosahedral family: :math:`G_{16}`, …, :math:`G_{22}`

Five 3-dimensional complex reflection groups:

:math:`G_{23}`: :math:`W(H_3) = {\mathbb{Z}}_2 \times PSL(2,5)`, order 120.

:math:`G_{24}`: :math:`W(J_3(4)) = {\mathbb{Z}}_2 \times PSL(2,7)`, order 336.

:math:`G_{25}`: :math:`W(L_3) = 3^{1+2}\cdot SL(2,3)`, order 648; Hessian group.

:math:`G_{26}`: :math:`W(M_3) = {\mathbb{Z}}_2 \times 3^{1+2}\cdot SL(2,3)`,
order 1296; Hessian group.

:math:`G_{27}`:
:math:`W(J_3(5)) = {\mathbb{Z}}_2 \times ({\mathbb{Z}}_3\cdot \Alt(6))`, order
2160, where :math:`{\mathbb{Z}}_3\cdot \Alt(6)` denotes the non-split extension
of :math:`{\mathbb{Z}}_3` by :math:`\Alt(6)`.

Five :math:`4`-dimensional complex reflection groups in addition to
:math:`{\operatorname{Sym}}(5)`:

:math:`G_{28}`:
:math:`W(F_4) = (SL(2,3)\circ SL(2,3))\cdot ({\mathbb{Z}}_2 \times {\mathbb{Z}}_2)`,
order 1152.

:math:`G_{29}`:
:math:`W(N_4) = ({\mathbb{Z}}_4\circ 2^{1+4})\cdot {\operatorname{Sym}}(5)`,
order 7680 (splits).

:math:`G_{30}`: :math:`W(H_4) = (SL(2,5)\circ SL(2,5))\cdot{\mathbb{Z}}_2`,
order 14.

:math:`G_{31}`: :math:`W(O_4) = ({\mathbb{Z}}_4\circ 2^{1+4})\cdot Sp(4,2)`,
order 46 (non-split) 5 generators.

:math:`G_{32}`: :math:`W(L_4) = {\mathbb{Z}}_3 \times Sp(4,3)`, order
:math:`155\ts520 = 2^7 \times 3^5 \times 5`.

One 5-dimensional complex reflection group in addition to
:math:`{\operatorname{Sym}}(6)`:

:math:`G_{33}`:
:math:`W(K_5) = {\mathbb{Z}}_2 \times \Omega(5,3) = {\mathbb{Z}}_2 \times PSp(4,3)
= {\mathbb{Z}}_2 \times PSU(4,2)`, order
:math:`51\ts840 = 2^7 \times 3^4 \times 5`.

Two :math:`6`-dimensional complex reflection groups in addition to
:math:`{\operatorname{Sym}}(7)`:

:math:`G_{34}`: :math:`W(K_6) = {\mathbb{Z}}_3\cdot \widehat\Omega^-(6,3)`,
order :math:`39\ts191\ts040 =
2^9 \times 3^7 \times 5 \times 7` (non-split), where
:math:`\widehat\Omega^-(6,3)` is a semidirect product of :math:`\Omega^-(6,3)`
by :math:`{\mathbb{Z}}_2`.

:math:`G_{35}`:
:math:`W(E_6) = SO(5,3) = O^-(6,2) = PSp(4,3)\cdot{\mathbb{Z}}_2 = PSU(4,2)\cdot{\mathbb{Z}}_2`,
order :math:`51\ts840 = 2^7 \times 3^4 \times 5`.

One 7-dimensional complex reflection group in addition to
:math:`{\operatorname{Sym}}(8)`:

:math:`G_{36}`: :math:`W(E_7) = {\mathbb{Z}}_2 \times Sp(6,2)`, order
:math:`2\ts903\ts040 =
2^{10} \times 3^4 \times 5 \times 7`.

One 8-dimensional complex reflection group in addition to
:math:`{\operatorname{Sym}}(9)`:

:math:`G_{37}`: :math:`W(E_8) = {\mathbb{Z}}_2\cdot O^+(8,2)`, order
:math:`696\ts729\ts600 =
2^{14} \times 3^5 \times 5^2 \times 7` (non-split).

.. magma:example:: Example: Complex Reflection Groups
   :label: ComplexReflectionGroups

   We verify that the complex reflection group :math:`G_{24}` is isomorphic to
   :math:`{\mathbb{Z}}_2\times \Omega(3,7)`.

   .. code-block:: magma

      > W := ShephardTodd(24);
      > G := sub<GL(3,7) | Omega(3,7), -GL(3,7)!1>;
      > IsIsomorphic(W,G):Minimal;
      true Homomorphism of MatrixGroup(3, Cyclotomic Field of order 7 and degree 6)
      of order 2^4 * 3 * 7 into MatrixGroup(3, GF(7)) of order 2^4 * 3 * 7

.. magma:function:: ComplexReflectionGroup(C)
   :input_types: Mtrx
   :output_types: GrpMat, Map
   :label: ComplexReflectionGroup_Mtrx
   :parameters: Reduced : BoolElt : \texttt{true}

   This function returns the complex reflection group defined by the (complex)
   Cartan matrix :math:`C`. When the optional parameter ``Reduced`` is ``true``
   (the default), the roots and coroots are computed modulo the null space of
   :math:`C`.

.. magma:function:: ComplexReflectionGroup(X, n)
   :input_types: MonStgElt, RngIntElt
   :output_types: GrpMat, Map
   :label: ComplexReflectionGroup_MonStgElt_RngIntElt
   :parameters: NumFld : BoolElt : \texttt{false}

   This function returns the primitive reflection group of type :math:`X` and rank
   :math:`n`, using the Cohen/Coxeter naming scheme.

   By default the matrices are written over the ring of integers of the smallest
   cyclotomic field which contains the character values of the reflections. If the
   parameter ``NumFld`` is set to ``true``, the number field generated by the
   character values of the reflections is used.

.. magma:example:: Example: Reflection Subgroups
   :label: reflection-subgroups

   In this example we find (up to conjugacy) all subgroups of
   :math:`G = W(O_4) = G_{31}` that are generated by reflections. This shows that
   :math:`G` cannot be generated by fewer than :math:`5` reflections.

   We begin by checking that :math:`G` has only one class of reflections.

   We proceed by building the list of reflection subgroups in ‘layers’, where the
   :math:`n`-th layer consists of representatives of the subgroups generated by
   :math:`n` reflections.

   We extend each group in layer :math:`n` by adjoining one additional reflection.
   The resulting subgroup will be generated by :math:`n` or :math:`n+1`
   reflections. If we haven’t seen it before we add it to the list.

   After the construction of each layer we print the orders of the subgroups.

   Looking at the orders we see that the first time the group :math:`G_{31}`
   appears is in layer :math:`5`. That is, it cannot be generated by :math:`4` or
   fewer reflections. It is interesting to note that there is one subgroup which
   requires :math:`6` generators; namely the imprimitive group
   :math:`G(4,2,2)\times G(4,2,2)`.

   .. code-block:: magma

      > G := ComplexReflectionGroup("O",4);
      > print #[c[3] : c in Classes(G) | IsReflection(c[3])];
      1
      %%a> assert $1 eq 1;
      > R := Class(G,G.1); #R;
      60
      > #G;
      46080
      %%a> assert $1 eq 46080;
      > L := [sub<G|G.1>];
      > layers := [L];
      > n := 0;
      > while true do
      >   n +:= 1;
      >   nextlayer := [];
      >   for H in layers[n] do
      >     for A in {sub<G|H,s> : s in R | s notin H} do
      >       if forall{B : B in L | not IsConjugate(G,A,B)} then
      >         Append(~nextlayer,A);
      >         Append(~L,A);
      >       end if;
      >     end for;
      >   end for;
      >   if IsEmpty(nextlayer) then break; end if;
      >   Append(~layers,nextlayer);
      >   print n+1,"generators";
      >   print [#A : A in nextlayer];
      > end while;
      2 generators
      [ 4, 4, 8, 6 ]
      3 generators
      [ 8, 8, 16, 24, 12, 16, 24, 48, 16, 96 ]
      4 generators
      [ 192, 16, 32, 96, 16, 192, 32, 48, 1536, 384, 64, 64, 32,
       7680, 1152, 36, 384, 120, 120, 192, 192 ]
      5 generators
      [ 64, 384, 3072, 128, 46080 ]
      6 generators
      [ 256 ]

.. magma:function:: ShephardTodd(m, p, n)
   :label: ShephardTodd_2

RngIntElt, RngIntElt, RngIntElt -> GrpMat, Fld

.. magma:function:: ImprimitiveReflectionGroup(m, p, n)
   :label: ImprimitiveReflectionGroup

RngIntElt, RngIntElt, RngIntElt -> GrpMat, Fld

NumFld : BoolElt : ``false``

Let :math:`B` be the direct product of :math:`n` copies of the cyclic group
:math:`C_m` of order :math:`m` and represent the elements of :math:`B` by
diagonal matrices :math:`\diag(\theta_1,\theta_2,\dots,\theta_n)`. The elements
of the symmetric group :math:`{\operatorname{Sym}}(n)` can be represented by
:math:`n\times n` permutation matrices and in this guise it acts on the group
:math:`B`; the resulting semidirect product is also known as the *wreath
product* :math:`C_m\wr {\operatorname{Sym}}(n)`.

For each divisor :math:`p` of :math:`m` define

.. math::

   A(m,p,n) := \{\,\diag(\theta_1,\theta_2,\dots,\theta_n)\in B\mid
    (\theta_1\theta_2\cdots\theta_n)^{m/p} = 1\,\}.

It is immediately clear that :math:`A(m,p,n)` is a subgroup of index :math:`p`
in :math:`B` that is invariant under the action of
:math:`{\operatorname{Sym}}(n)`. The semidirect product of :math:`A(m,p,n)` by
the symmetric group :math:`{\operatorname{Sym}}(n)` is the group
:math:`G(m,p,n)`. These groups are imprimitive when :math:`m \ge 2`. The group
:math:`G(1,1,n)` is the symmetric group :math:`{\operatorname{Sym}}(n)` acting
as permutation matrices.

Shephard and Todd proved that every irreducible imprimitive complex reflection
subgroup of :math:`GL(n,{\mathbb{C}})` is conjugate to :math:`G(m,p,n)` for some
:math:`m` and :math:`p`.

This function returns the Shephard and Todd group
:math:`G(m,p,n) \subset {\operatorname{GL}}(n,F)`, where :math:`p` divides
:math:`m`. In general, :math:`G(m,p,n)` is irreducible but if :math:`m = p = 1`,
the function returns :math:`{\operatorname{Sym}}(n)` in its natural permutation
representation, which is not irreducible.

By default the matrices are written over the ring of integers of the smallest
cyclotomic field which contains the character values of the reflections. If the
parameter ``NumFld`` is set to ``true``, the number field generated by the
character values of the reflections is used.

.. magma:example:: Example: Imprimitive Reflection Group
   :label: ImprimitiveReflectionGroup

   .. code-block:: magma

      > ShephardTodd(6, 3, 3);
      MatrixGroup(3, Cyclotomic Field of order 6 and degree 2)
      Generators:
           [0 1 0]
           [1 0 0]
           [0 0 1]
      \bln
           [1 0 0]
           [0 0 1]
           [0 1 0]
      \bln
           [1      0      0]
           [0      0      z]
           [0 -z + 1      0]
      \bln
           [1  0   0]
           [0  1   0]
           [0  0  -1]
      Mapping from: MatrixGroup(3, Cyclotomic Field of order 6 and degree 2) to GL(3, 
      CyclotomicField(6))

.. magma:function:: ComplexRootMatrices(k)
   :input_types: RngIntElt
   :output_types: AlgMatElt, AlgMatElt, AlgMatElt, RngElt, RngIntElt
   :label: ComplexRootMatrices_RngIntElt

.. magma:function:: ComplexRootMatrices(m, p, n)
   :input_types: RngIntElt, RngIntElt, RngIntElt
   :output_types: AlgMatElt, AlgMatElt, AlgMatElt, RngElt, RngIntElt
   :label: ComplexRootMatrices_RngIntElt_RngIntElt_RngIntElt
   :parameters: NumFld : BoolElt : \texttt{false}

   If :math:`G` is the complex reflection group ``ShephardTodd(k)`` or
   ``ShephardTodd(m,p,n)``, respectively, these functions return five values: the
   basic root and coroot matrices for :math:`G`, an invariant hermitian form, a
   generator for the group of roots of unity of the ring of definition, and the
   order of the generator.

   By default the root matrices are written over the ring of integers of the
   smallest cyclotomic field which contains the character values of the
   reflections. If the parameter ``NumFld`` is set to ``true``, the number field
   generated by the character values of the reflections is used.

.. magma:example:: Example: Complex Reflection Group By Matrix
   :label: ComplexReflectionGroupByMatrix

   .. code-block:: magma

      > A,B,J,gen,ordgen := ComplexRootMatrices(13);
      > A,B;
      [            1               0]
      [ -z^2 - z - 1               1]
      [z^2 + 2*z + 1    -z^2 - z - 1]
      \bln
      [             2     -z^3 + z + 2]
      [           z^2    z^3 + z^2 + 1]
      [-z^3 + z^2 - 1          z^2 - 1]
      > gen,ordgen;
      -z^3
      8
      > G := PseudoReflectionGroup(A,B);
      > #G;
      96
      %%a> assert $1 eq 96;

.. magma:function:: ComplexCartanMatrix(k)
   :input_types: RngIntElt
   :output_types: AlgMatElt
   :label: ComplexCartanMatrix_RngIntElt

.. magma:function:: ComplexCartanMatrix(m, p, n)
   :input_types: RngIntElt, RngIntElt, RngIntElt
   :output_types: AlgMatElt
   :label: ComplexCartanMatrix_RngIntElt_RngIntElt_RngIntElt
   :parameters: NumFld : BoolElt : \texttt{false}

   If :math:`A` and :math:`B` are the basic root and coroot matrices returned by
   ``ComplexRootMatrices`` above, then this function returns :math:`AB^\tr`, where
   :math:`B^\tr` is the transpose of :math:`B`. The meaning of the optional
   parameter ``NumFld`` has been described above.

.. magma:function:: BasicRootMatrices(C)
   :input_types: Mtrx
   :output_types: AlgMatElt, AlgMatElt
   :label: BasicRootMatrices_Mtrx
   :parameters: Reduced : BoolElt : \texttt{true}

   This function returns a matrix :math:`A` of roots and a matrix :math:`B` of
   coroots such that :math:`C = AB^\tr`. The default, when the optional parameter
   ``Reduced`` is ``true``, is to compute the roots and coroots modulo the null
   space of :math:`C`.

.. magma:function:: CohenCoxeterName(k)
   :input_types: RngIntElt
   :output_types: MonStgElt, RngIntElt
   :label: CohenCoxeterName_RngIntElt

   Cohen’s string name and rank of the Shephard and Todd group :math:`G_k`. This is
   an extension of the naming scheme for Coxeter groups. For example, the Shephard
   and Todd group :math:`G_{37}` is the Coxeter group of type :math:`E_8` whereas
   the Shephard and Todd group :math:`G_{32}` has Cohen name :math:`L_4`.

.. magma:function:: ShephardToddNumber(X, n)
   :input_types: MonStgElt, RngIntElt
   :output_types: RngIntElt
   :label: ShephardToddNumber_MonStgElt_RngIntElt

   Given a string :math:`X` and an integer :math:`n`, this function returns the
   Shephard and Todd number of the complex reflection group :math:`W(X_n)` of type
   :math:`X` and rank :math:`n`. The rank is the dimension of the space on which
   the group acts; it is not always the number of generators.

   The Shepard and Todd numbers range from 1 to 37. All symmetric groups (type
   :math:`A`) have Shephard and Todd number 1, all imprimitive groups
   :math:`G(m,p,n)` have Shephard and Todd number 2, and all cyclic groups have
   Shephard and Todd number 3. The primitive complex reflection groups of rank 2
   have Shepard and Todd numbers in the range 4 to 22. Except for the group
   :math:`G_4` which has type :math:`L_2`, the rank 2 groups do not have
   Cohen–Coxeter names.

   The Shephard and Todd numbers in the range 23 to 37 refer to the Cohen–Coxeter
   groups :math:`W(E_6)`, :math:`W(E_7)`, :math:`W(E_8)`, :math:`W(F_4)`,
   :math:`W(H_3)`, :math:`W(H_4)`, :math:`W(J_3(4))`, :math:`W(J_3(5))`,
   :math:`W(K_5)`, :math:`W(K_6)`, :math:`W(L_3)`, :math:`W(L_4)`, :math:`W(M_3)`,
   :math:`W(N_4)`, and :math:`EW(N_4)`. Note that in Magma the types of the rank 3
   groups :math:`W(J_3(4))` and :math:`W(J_3(5))` are :math:`J4` and :math:`J5`;
   and the type of the rank 4 group :math:`EW(N_4)` is :math:`O`.

   As a matrix group the Coxeter group of type :math:`A` is returned by the
   function ``CoxeterGroup(GrpMat,"A",n)``, where :math:`n` is the rank. The groups
   of types :math:`B`, :math:`C` and :math:`D` are Coxeter groups and imprimitive
   complex reflection groups. Thus, as matrix groups, they can be obtained via the
   function ``ShephardTodd(2,p,n)``, where :math:`p = 1` for type :math:`B` or
   :math:`C` and :math:`p=2` for type :math:`D`.

.. magma:example:: Example: Name Conversion
   :label: NameConversion

   The type of the group :math:`G_{31}` is :math:`O` and its rank is 4. This is the
   notation used in :cite:`LehrerTaylor`.

   .. code-block:: magma

      > ShephardToddNumber("J5",3);
      27
      %%a> assert $1 eq 27;
      > CohenCoxeterName(31);
      O 4

.. magma:example:: Example: Reflection Group Names
   :label: ReflectionGroupNames

   To construct a complex reflection group with a given name, first convert the
   name to its Shephard and Todd number.

   .. code-block:: magma

      > G := ShephardTodd(ShephardToddNumber("L",4)); 
      > G;
      MatrixGroup(4, Cyclotomic Field of order 3 and degree 2)
      Generators:
          [     omega          0          0          0]
          [-omega - 1          1          0          0]
          [         0          0          1          0]
          [         0          0          0          1]
      \bln
          [        1 omega + 1         0         0]
          [        0     omega         0         0]
          [        0 omega + 1         1         0]
          [        0         0         0         1]
      \bln
          [         1          0          0          0]
          [         0          1 -omega - 1          0]
          [         0          0      omega          0]
          [         0          0 -omega - 1          1]
      \bln
          [        1         0         0         0]
          [        0         1         0         0]
          [        0         0         1 omega + 1]
          [        0         0         0     omega]

.. magma:function:: ComplexRootDatum(k)
   :input_types: RngIntElt
   :output_types: SeqEnum, SeqEnum, Map, GrpMat, AlgMatElt
   :label: ComplexRootDatum_RngIntElt

.. magma:function:: ComplexRootDatum(m, p, n)
   :label: ComplexRootDatum

RngIntElt, RngIntElt, RngIntElt -> SeqEnum, SeqEnum, Map, GrpMat, AlgMatElt

NumFld : BoolElt : ``false``

A root datum for the Shephard and Todd group :math:`G_k` or, in the second form
of the function, the imprimitive group :math:`G(m,p,n)`. This is returned as a
:math:`5`-tuple :math:`\Phi`, :math:`\Phi^*`, :math:`\rho`, :math:`W`,
:math:`J`, where :math:`\Phi` is the sequence of roots, :math:`\Phi^*` the
sequence of coroots, :math:`\rho : \Phi\to\Phi^*` is a bijective map, :math:`W`
is the complex reflection group of the root datum, and :math:`J` is an hermitian
form preserved by :math:`W`.
