.. _SubsectGrpRflGrpRflConstr:

.. _create-group-refl:

Construction of Reflection  Groups
==================================

In Magma a *pseudo-reflection group* is a group generated by a finite set of
invertible pseudo-reflections. A convenient way to provide the generators for a
pseudo-reflection group :math:`W` is via a finite collection of roots and
coroots. In this context the roots and coroots of the generators are called the
*basic roots* and *basic coroots* of :math:`W`.

In the most general case, even when the pseudo-reflection group :math:`W` is
generated by reflections, there are no known distinguished generating
reflections whose roots have properties analogous to simple roots in Weyl groups
or Coxeter groups. Therefore, one should be careful to distinguish between the
basic roots as defined here and the simple (or fundamental) roots of real
reflection groups

See Section :ref:`SectGrpRflGrpRflConstr` for the
construction of real reflection groups and
Section :ref:`SectGrpRflComp` for the construction of finite
complex reflection groups.

.. magma:function:: PseudoReflectionGroup(A, B)
   :input_types: Mtrx, Mtrx
   :output_types: GrpMat, Map
   :label: PseudoReflectionGroup_Mtrx_Mtrx

   The pseudo-reflection group with the basic roots and corresponding coroots given
   by the rows of the matrices :math:`A` and :math:`B`.

.. magma:example:: Example: Reflection Groups
   :label: ReflectionGroups

   A direct construction of the Shephard and Todd group :math:`G(14,1,2)` with user
   supplied roots and coroots.

   .. code-block:: magma

      > F<z> := CyclotomicField(7);
      > A := Matrix(F,2,3,[[z,0,1],[0,1,0]]);
      > B := Matrix(F,2,3,[[1,1,1],[1,2,1]]);
      > G<x,y> := PseudoReflectionGroup(A,B);
      > IsReflectionGroup(G);
      true
      %%a> assert $1;
      > Order(x),Order(y),Order(x*y);
      14 2 28
      > #G;
      392
      %%a> assert $1 eq 392;
