.. _SectGrpRflProp:

.. _properties:

Properties of Reflection  Groups
================================

See Chapter :ref:`ChapGrpMat` for general functions for matrix
groups.

.. magma:function:: IsReflectionGroup(G)
   :input_types: GrpMat
   :output_types: BoolElt
   :label: IsReflectionGroup_GrpMat

Strict : BoolElt : ``true``

The default action is to return ``true`` if every generator of :math:`G` is a
reflection. If ``Strict`` is ``false``, the function checks if :math:`G` can be
generated by *some* of its reflections, not necessarily those returned by
``Generators(G)``.

.. magma:function:: RootsAndCoroots(G)
   :input_types: GrpMat
   :output_types: [RngIntElt], [ModTupRngElt], [ModTupRngElt]
   :label: RootsAndCoroots_GrpMat

   Returns the orders of the reflections, the roots and the coroots of the
   reflection group :math:`G`.

.. magma:function:: IsRealReflectionGroup(G)
   :input_types: GrpMat
   :output_types: BoolElt, [], []
   :label: IsRealReflectionGroup_GrpMat

   Returns ``true`` if and only if the matrix group :math:`G` is a real reflection
   group. If ``true``, the simple orders, roots, and coroots are also returned.

.. magma:example:: Example: Is Reflection Group
   :label: IsReflectionGroup

   .. code-block:: magma

      > W := ComplexReflectionGroup("A", 4);
      > IsReflectionGroup(W);
      true
      %%a> assert $1;
      > IsRealReflectionGroup(W);
      true
      %%a> assert $1;
      \bln
      [1 0 0 0]
      [0 1 0 0]
      [0 0 1 0]
      [0 0 0 1]
      \bln
      [ 2 -1  0  0]
      [-1  2 -1  0]
      [ 0 -1  2 -1]
      [ 0  0 -1  2]
      > W := ComplexReflectionGroup("M", 3);
      > IsReflectionGroup(W);
      true
      %%a> assert $1;
      \< IsRealReflectionGroup(W);
                              ^
      Runtime error in 'IsRealReflectionGroup': The group must be defined over the
      reals

.. magma:function:: IsCrystallographic(W)
   :input_types: GrpMat
   :output_types: BoolElt
   :label: IsCrystallographic_GrpMat

   Returns ``true`` if and only if the real reflection group :math:`W` is
   crystallographic; i.e., its Cartan matrix has integral entries.

.. magma:function:: IsSimplyLaced(W)
   :input_types: GrpMat
   :output_types: BoolElt
   :label: IsSimplyLaced_GrpMat

   Returns ``true`` if and only if the real reflection group :math:`W` is simply
   laced; i.e., its Coxeter graph has no labels.

.. magma:example:: Example: Properties
   :label: Properties

   .. code-block:: magma

      > W := ReflectionGroup("A~2 D4");
      > IsFinite(W);
      false
      %%a> assert not $1;
      > IsCrystallographic(W);
      true
      %%a> assert $1;
      > IsSimplyLaced(W);
      true
      %%a> assert $1;

.. magma:function:: Dual(G)
   :input_types: GrpMat
   :output_types: BoolElt
   :label: Dual_GrpMat

   The dual of the reflection group :math:`G`, ie, the reflection group gotten by
   swapping roots with coroots.

.. magma:function:: Overgroup(H)
   :input_types: GrpMat
   :output_types: GrpMat
   :label: Overgroup_GrpMat

   The overgroup of :math:`H`, i.e. the reflection group whose roots are permuted
   by the elements of the reflection subgroup :math:`H`.

.. magma:function:: Overdatum(H)
   :input_types: GrpMat
   :output_types: RootDtm
   :label: Overdatum_GrpMat

   The root datum whose roots are permuted by the elements of the reflection
   subgroup :math:`H`.

   Every Coxeter group :math:`W` has a standard action. For example, the standard
   action group of a Coxeter group of type :math:`A_n` is the symmetric group of
   degree :math:`n+1` acting on :math:`\{1,\dots,n\}`.

.. magma:function:: StandardAction(W)
   :input_types: GrpMat
   :output_types: Map
   :label: StandardAction_GrpMat

   The standard action of the reflection group :math:`W`.

.. magma:function:: StandardActionGroup(W)
   :input_types: GrpMat
   :output_types: GrpPerm, Map
   :label: StandardActionGroup_GrpMat

   The group :math:`G` of the standard action of the reflection group :math:`W`,
   together with an isomorphism :math:`W\to G`.
