.. _SectGrpEltOp:

.. _group-elt-op:

Operations on Elements
======================

See Chapter :ref:`ChapGrpFP` for general functions for finitely
presented groups or Chapter :ref:`ChapGrpPerm` for general
functions for permutation groups.

Unlike groups of type ``GrpFP``, elements of a group of type are always
converted into the normal form of
Section :ref:`SubsectGrpCoxRed`.

.. magma:example:: Example: Word Arithmetic
   :label: WordArithmetic

   Arithmetic with words.

   .. code-block:: magma

      > W<[s]> := CoxeterGroup(GrpFPCox, "G2");
      > w1 := W![2,1,2,1,2] ;
      > w1;
      s[2] * s[1] * s[2] * s[1] * s[2]  
      > w2 := W![1,2,2,1,2,1];
      > w2;
      s[2] * s[1]
      > w1 * w2;
      s[1] * s[2] * s[1]
      > W![1,2,1,2,1,2] eq W![2,1,2,1,2,1];
      true
      %%a> assert $1;

.. magma:operation:: \# w
   :input_types: GrpFPCoxElt
   :output_types: RngIntElt

.. magma:function:: Length(w)
   :input_types: GrpFPCoxElt
   :output_types: RngIntElt
   :label: Length_GrpFPCoxElt

.. magma:function:: Length(W, w)
   :input_types: GrpPermCox, GrpPermElt
   :output_types: RngIntElt
   :label: Length_GrpPermCox_GrpPermElt

.. magma:function:: CoxeterLength(w)
   :input_types: GrpFPCoxElt
   :output_types: RngIntElt
   :label: CoxeterLength_GrpFPCoxElt

.. magma:function:: CoxeterLength(W, w)
   :input_types: GrpPermCox, GrpPermElt
   :output_types: RngIntElt
   :label: CoxeterLength_GrpPermCox_GrpPermElt

   The length of :math:`w` as an element of the Coxeter group :math:`W`, ie. the
   number of positive roots of :math:`W` which become negative under the action of
   :math:`w`. The # operator does not work for permutation Coxeter group elements.

.. magma:function:: LongestElement(W)
   :input_types: GrpFPCox
   :output_types: SeqEnum
   :label: LongestElement_GrpFPCox

.. magma:function:: LongestElement(W)
   :input_types: GrpPermCox
   :output_types: GrpPermElt
   :label: LongestElement_GrpPermCox

   The unique longest element of the Coxeter group :math:`W`.

.. magma:function:: CoxeterElement(W)
   :input_types: GrpFPCox
   :output_types: SeqEnum
   :label: CoxeterElement_GrpFPCox

.. magma:function:: CoxeterElement(W)
   :input_types: GrpPermCox
   :output_types: GrpPermElt
   :label: CoxeterElement_GrpPermCox

   The Coxeter element of the Coxeter group :math:`W`, ie. the product of the
   generators of :math:`W`.

.. magma:function:: CoxeterNumber(W)
   :input_types: GrpFPCox
   :output_types: SeqEnum
   :label: CoxeterNumber_GrpFPCox

.. magma:function:: CoxeterNumber(W)
   :input_types: GrpPermCox
   :output_types: GrpPermElt
   :label: CoxeterNumber_GrpPermCox

   The Coxeter number of the irreducible Coxeter group :math:`W` (see
   :raw-latex:`\cite[page 20]{Carter-big}`).

.. magma:example:: Example: Longest Coxeter Elements
   :label: LongestCoxeterElements

   The Coxeter number can be described in a variety of ways.

   .. code-block:: magma

      > W<[s]> := CoxeterGroup(GrpFPCox, "F4");
      > LongestElement(W);
      s[1] * s[2] * s[1] * s[3] * s[2] * s[1] * s[3] * s[2] * s[3] * s[4] * s[3] *
      s[2] * s[1] * s[3] * s[2] * s[3] * s[4] * s[3] * s[2] * s[1] * s[3] * s[2] *
      s[3] * s[4]
      > CoxeterElement(W);
      s[1] * s[2] * s[3] * s[4]
      > W := CoxeterGroup("E8");
      > Length(W, LongestElement(W));
      120
      %%a> assert $1 eq 120;
      > Length(W, CoxeterElement(W)); 
      8
      %%a> assert $1 eq 8;
      > W := CoxeterGroup("D5");                              
      > CoxeterNumber(W) eq Order(CoxeterElement(W));       
      true
      %%a> assert $1;
      > CoxeterNumber(W) eq #Roots(W) / Rank(W);              
      true
      %%a> assert $1;
      > R := RootDatum(W);
      > CoxeterNumber(W) eq &+Eltseq(HighestRoot(R)) + 1;
      true
      %%a> assert $1;

.. magma:function:: LeftDescentSet(W, w)
   :input_types: GrpFPCox, GrpFPCoxElt
   :output_types: $\{\}$
   :label: LeftDescentSet_GrpFPCox_GrpFPCoxElt

.. magma:function:: LeftDescentSet(W, w)
   :input_types: GrpPermCox, GrpPermElt
   :output_types: $\{\}$
   :label: LeftDescentSet_GrpPermCox_GrpPermElt

   The set of indices :math:`r` of simple roots of the Coxeter group :math:`W` such
   that the length of the product :math:`s_rw` is less than that of the element
   :math:`w`.

.. magma:function:: RightDescentSet(W, w)
   :input_types: GrpFPCox, GrpFPCoxElt
   :output_types: $\{\}$
   :label: RightDescentSet_GrpFPCox_GrpFPCoxElt

.. magma:function:: RightDescentSet(W, w)
   :input_types: GrpPermCox, GrpPermElt
   :output_types: $\{\}$
   :label: RightDescentSet_GrpPermCox_GrpPermElt

   The set of indices :math:`r` of simple roots of the Coxeter group :math:`W` such
   that the length of the product :math:`ws_r` is less than that of the element
   :math:`w`.

.. magma:example:: Example: Descent Sets
   :label: DescentSets

   .. code-block:: magma

      > W := CoxeterGroup("A5");
      > x := W.1*W.2*W.4*W.5;
      > LeftDescentSet(W, x);
      { 1, 4 }
      > RightDescentSet(W, x);
      { 2, 5 }
