Opened 6 years ago
Last modified 5 years ago
#15703 new enhancement
Refactor Coxeter groups as matrix groups and non crystallographic root systems
Reported by:  nthiery  Owned by:  

Priority:  major  Milestone:  sage6.4 
Component:  combinatorics  Keywords:  coxeter groups, days57 
Cc:  sagecombinat, tscrim, jipilab, vripoll, mathzeta2  Merged in:  
Authors:  JeanPhilippe Labbé, Vivien Ripoll  Reviewers:  Nicolas M. Thiéry 
Report Upstream:  N/A  Work issues:  
Branch:  u/jipilab/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems (Commits)  Commit:  09a1ff9ae3fe50ab4b1d4c31f0afe682ed5173e1 
Dependencies:  #16120, #16126, #16130, #17798, #18152  Stopgaps: 
Description (last modified by )
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 edgelabeled 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, see #17798
 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.
Attachments (3)
Change History (29)
comment:1 Changed 6 years ago by
 Cc tscrim added
comment:2 Changed 6 years ago by
 Milestone changed from sage6.1 to sage6.2
comment:3 Changed 6 years ago by
 Keywords coxeter added
comment:4 Changed 6 years ago by
 Summary changed from Refactor Coxeter groups as matrix groups and non crystalographic root systems to Refactor Coxeter groups as matrix groups and non crystallographic root systems
comment:5 Changed 6 years ago by
 Cc jipilab added
 Description modified (diff)
comment:6 Changed 6 years ago by
 Description modified (diff)
 Keywords groups days57 added
comment:7 Changed 6 years ago by
 Cc vripoll added
 Description modified (diff)
comment:8 Changed 6 years ago by
 Cc mathzeta2 added
comment:9 Changed 6 years ago by
 Description modified (diff)
comment:10 Changed 6 years ago by
 Description modified (diff)
 Reviewers set to Nicolas M. Thiéry
comment:11 Changed 6 years ago by
comment:12 Changed 6 years ago by
Very good!
Just a small suggestion: I would call the function "bilinear_form". Although it is true that we deal with symmetric forms so far...
Changed 6 years ago by
comment:13 Changed 6 years ago by
 Dependencies set to 16120
 Description modified (diff)
comment:14 Changed 6 years ago by
 Dependencies changed from 16120 to #16120
comment:15 Changed 6 years ago by
 Branch set to u/vripoll/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems
comment:16 Changed 6 years ago by
 Commit set to 2846f67039fe6baf568fe3ffebdb675fba9ba091
 Dependencies changed from #16120 to #16120, #16126
 Description modified (diff)
comment:17 Changed 6 years ago by
 Dependencies changed from #16120, #16126 to #16120, #16126, #16130
comment:18 Changed 6 years ago by
 Description modified (diff)
Changed 6 years ago by
comment:19 Changed 6 years ago by
 Description modified (diff)
comment:20 Changed 6 years ago by
 Branch changed from u/vripoll/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems to u/jipilab/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems
comment:21 Changed 6 years ago by
 Commit changed from 2846f67039fe6baf568fe3ffebdb675fba9ba091 to 09a1ff9ae3fe50ab4b1d4c31f0afe682ed5173e1
I adapted the TODO list in relation with the latest changes I just pushed. The script joined allows you to create the pictures and do some tests...
Now we have to work!!
New commits:
09a1ff9  First dirty version to get a TODO list for the ticket 15703

Changed 6 years ago by
comment:22 Changed 6 years ago by
 Milestone changed from sage6.2 to sage6.3
comment:23 Changed 5 years ago by
 Milestone changed from sage6.3 to sage6.4
comment:24 Changed 5 years ago by
 Description modified (diff)
comment:25 Changed 5 years ago by
 Description modified (diff)
comment:26 Changed 5 years ago by
 Dependencies changed from #16120, #16126, #16130 to #16120, #16126, #16130, #17798, #18152
 Description modified (diff)
Note: See
TracTickets for help on using
tickets.
I believe I'm taking care of the inner product on the root space in #15384 (which I called
symmetric_form()
). Also for a followup ticket, we should implement/refactor things for symmetrizable and the nonsymmetrizable types (for when we get the hyperbolic types done).