#15703: Refactor Coxeter groups as matrix groups and non crystallographic root
systems
-------------------------------------+-------------------------------------
       Reporter:  nthiery            |        Owner:
           Type:  enhancement        |       Status:  new
       Priority:  major              |    Milestone:  sage-6.4
      Component:  combinatorics      |   Resolution:
       Keywords:  coxeter groups,    |    Merged in:
  days57                             |    Reviewers:  Nicolas M. Thiéry
        Authors:  Jean-Philippe      |  Work issues:
  Labbé, Vivien Ripoll               |       Commit:
Report Upstream:  N/A                |  09a1ff9ae3fe50ab4b1d4c31f0afe682ed5173e1
         Branch:                     |     Stopgaps:
  
u/jipilab/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems|
   Dependencies:  #16120, #16126,    |
  #16130                             |
-------------------------------------+-------------------------------------
Description changed by vripoll:

Old description:

> This is a follow up to #9290.
>
>  * Experiment with the infrastructure scales and benchmark
>
>  * CoxegerGraph, see #16126
>    - Create a class similar to DynkinDiagram
>      Starter: an edge-labeled graph.
>    - Edge labels: m_{i,j}, possibly with number <-1 for oo
>    - method dynkin_diagram() which builds the cartan matrix for the
> geometric representation
>      Starter: just make this a function
>
>  * Update DynkinDiagram to support non crystallographic case:
>    - Add an argument base_ring to the constructor
>    - Add a method base_ring
>    - Make add_edge honor this method when automatically adding edges
>    - Update cartan_matrix() to use the base_ring
>    - Add a method _test_base_ring that checks that all edge labels are
>      indeed in this base ring
>    - Implement is_crystallographic testing if the base ring is ZZ
>    - Add an argument symmetric=False to the constructor, and make
>      add_edge and symmetrizer use it.
>    - Add a method _test_dynkin_diagram that tests that the Dynkin
>      diagram indeed defines a proper root system. See in particular
>      cartan_matrix.is_generalized_cartan_matrix.
>    - adapt column() and row() method to give the labels in the base ring
>
>   * Update CartanMatrix
>    - Add a base ring argument to the constructor
>    - Update is_crystallographic
>    - Update is_affine
>    - Update is_finite
>    - Update is_generalized_cartan_matrix
>
>  * CartanType
>    - Possibly update to accept appropriate data to build a CoxeterDiagram
> (e.g. a matrix)
>    - Add a base_ring method?
>    - Decide on the semantic of is_crystallographic (symmetrizable or
>      not?), and if possibly add an is_... method to decide whether the
>      entries are integral or not.
>    - Provide a dynkin_diagram method that builds the Dynkin diagram
>      from the Coxeter diagram when available
>    - Test: H_3 and friends should have a working dynkin_diagram method
>
>  * RootSystem
>    - Decide on the meaning of root_lattice: either disable it in the
>      non integral case, or have it be the span of the roots over the
>      smallest available ring.
>
>  * RootLatticeRealizations:
>    - Feed this to RootSystem, and check that the root space and weight
>      space are built properly.
>    - Rename the weyl_group method to reflection_group, with an alias
>      from weyl_group; update the setting of the category.
>    - Define a new projection "transversal" to visualise root systems (and
> find a right name for it)
>    - Long run: stuff specific to the crystallographic case, starting
>      with this weyl_group method, should go in
>      RootLatticeRealizations.Crystallographic. That's for a follow up
>      ticket on using axioms for root systems; but let's not depend on
>      #10963 right now.
>
>  * RootSpace (for this ticket or some follow up):
>    - Define the inner product
>    - adapt the is_positive_root to make it work for any base ring
>    - Signature of the bilinear form
>
>  * CoxeterMatrixGroup and WeylGroup:
>    - Refactor WeylGroup to make it a subclass of CoxeterMatrixGroup,
>      and lift as many features as possible from WeylGroup to
>      CoxeterMatrixGroup.
>    - Check that, with a proper Dynkin diagram, the conversion to GAP
>      issue does not appear
>    - Now or later: we probably want the Weyl group elements to be
>      represented by Sage matrices, but keep a handle to the
>      corresponding Gap group. Currently one has to make a choice
>      between MatrixGroup_generic and MatrixGroup_gap.
>
>  * Plotting:
>    - add a family_of_points method in the projections to be used by the
> "transversal projection"
>
>  * Update WeylGroups:
>    - inversions: use the "root_lattice" by default?
>
>  * Prerequisites:
>    - Add a __float__ method to UCF, see #16120
>
> Tests:
>
> {{{
>   sage: C = CoxeterDiagram(...)           # good name? or
> CartanDatum(coxeter_matrix=...) [1] ? or?
>   sage: L = RootSystem(C).root_space()
>   sage: W = L.reflection_group()
>   sage: W = CoxeterGroup(['H',3])
>   sage: W.domain()
> }}}
> Sage Days 57 in Cernay will be a good occasion to work on this.
>
> Follow ups: #16087
>
> [1]: Generally speaking, it's planned to rename CartanType to
> CartanDatum.

New description:

 This is a follow up to #9290.

  * Experiment with the infrastructure scales and benchmark

  * !CoxeterGraph, see #16126
    - Create a class similar to !DynkinDiagram
      Starter: an edge-labeled graph.
    - Edge labels: m_{i,j}, possibly with number <-1 for oo
    - method dynkin_diagram() which builds the cartan matrix for the
 geometric representation
      Starter: just make this a function

  * Update !DynkinDiagram to support non crystallographic case:
    - Add an argument base_ring to the constructor
    - Add a method base_ring
    - Make add_edge honor this method when automatically adding edges
    - Update cartan_matrix() to use the base_ring
    - Add a method _test_base_ring that checks that all edge labels are
      indeed in this base ring
    - Implement is_crystallographic testing if the base ring is ZZ
    - Add an argument symmetric=False to the constructor, and make
      add_edge and symmetrizer use it.
    - Add a method _test_dynkin_diagram that tests that the Dynkin
      diagram indeed defines a proper root system. See in particular
      cartan_matrix.is_generalized_cartan_matrix.
    - adapt column() and row() method to give the labels in the base ring

   * Update !CartanMatrix
    - Add a base ring argument to the constructor
    - Update is_crystallographic
    - Update is_affine
    - Update is_finite
    - Update is_generalized_cartan_matrix

  * !CartanType
    - Possibly update to accept appropriate data to build a !CoxeterGraph
 (e.g. a matrix)
    - Add a base_ring method?
    - Decide on the semantic of is_crystallographic (symmetrizable or
      not?), and if possibly add an is_... method to decide whether the
      entries are integral or not.
    - Provide a dynkin_diagram method that builds the Dynkin diagram
      from the Coxeter diagram when available
    - Test: H_3 and friends should have a working dynkin_diagram method

  * !RootSystem
    - Decide on the meaning of root_lattice: either disable it in the
      non integral case, or have it be the span of the roots over the
      smallest available ring.

  * !RootLatticeRealizations:
    - Feed this to !RootSystem, and check that the root space and weight
      space are built properly.
    - Rename the weyl_group method to reflection_group, with an alias
      from weyl_group; update the setting of the category.
    - Define a new projection "transversal" to visualise root systems (and
 find a right name for it)
    - Long run: stuff specific to the crystallographic case, starting
      with this weyl_group method, should go in
      !RootLatticeRealizations.Crystallographic. That's for a follow up
      ticket on using axioms for root systems; but let's not depend on
      #10963 right now.

  * !RootSpace (for this ticket or some follow up):
    - Define the inner product
    - adapt the is_positive_root to make it work for any base ring
    - Signature of the bilinear form

  * !CoxeterMatrixGroup and !WeylGroup:
    - Refactor !WeylGroup to make it a subclass of !CoxeterMatrixGroup,
      and lift as many features as possible from !WeylGroup to
      !CoxeterMatrixGroup.
    - Check that, with a proper Dynkin diagram, the conversion to GAP
      issue does not appear
    - Now or later: we probably want the Weyl group elements to be
      represented by Sage matrices, but keep a handle to the
      corresponding Gap group. Currently one has to make a choice
      between !MatrixGroup_generic and !MatrixGroup_gap.

  * Plotting:
    - add a family_of_points method in the projections to be used by the
 "transversal projection"

  * Update !WeylGroups:
    - inversions: use the "root_lattice" by default?


 Tests:

 {{{
   sage: C = CoxeterDiagram(...)           # good name? or
 CartanDatum(coxeter_matrix=...) [1] ? or?
   sage: L = RootSystem(C).root_space()
   sage: W = L.reflection_group()
   sage: W = CoxeterGroup(['H',3])
   sage: W.domain()
 }}}
 Sage Days 57 in Cernay will be a good occasion to work on this.

 Follow ups: #16087

 [1]: Generally speaking, it's planned to rename !CartanType to
 !CartanDatum.

--

--
Ticket URL: <http://trac.sagemath.org/ticket/15703#comment:25>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to