Opened 9 years ago

Last modified 7 years ago

#15703 new enhancement

Refactor Coxeter groups as matrix groups and non crystallographic root systems

Reported by: Nicolas M. Thiéry Owned by:
Priority: major Milestone: sage-6.4
Component: combinatorics Keywords: coxeter groups, days57
Cc: Sage Combinat CC user, Travis Scrimshaw, Jean-Philippe Labbé, Vivien Ripoll, Tomer Bauer Merged in:
Authors: Jean-Philippe 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, GitHub, GitLab) Commit: 09a1ff9ae3fe50ab4b1d4c31f0afe682ed5173e1
Dependencies: #16120, #16126, #16130, #17798, #18152 Stopgaps:

Status badges

Description (last modified by Jean-Philippe Labbé)

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, 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)

benchmark.png (62.2 KB) - added by Jean-Philippe Labbé 8 years ago.
benchmark2.png (84.0 KB) - added by Jean-Philippe Labbé 8 years ago.
test_rootsystems.sage (976 bytes) - added by Jean-Philippe Labbé 8 years ago.

Download all attachments as: .zip

Change History (29)

comment:1 Changed 9 years ago by Travis Scrimshaw

Cc: Travis Scrimshaw added

comment:2 Changed 9 years ago by For batch modifications

Milestone: sage-6.1sage-6.2

comment:3 Changed 9 years ago by Frédéric Chapoton

Keywords: coxeter added

comment:4 Changed 9 years ago by Frédéric Chapoton

Summary: Refactor Coxeter groups as matrix groups and non crystalographic root systemsRefactor Coxeter groups as matrix groups and non crystallographic root systems

comment:5 Changed 9 years ago by Nicolas M. Thiéry

Cc: Jean-Philippe Labbé added
Description: modified (diff)

comment:6 Changed 9 years ago by Nicolas M. Thiéry

Description: modified (diff)
Keywords: groups days57 added

comment:7 Changed 9 years ago by Jean-Philippe Labbé

Cc: Vivien Ripoll added
Description: modified (diff)

comment:8 Changed 9 years ago by Tomer Bauer

Cc: Tomer Bauer added

comment:9 Changed 8 years ago by Nicolas M. Thiéry

Description: modified (diff)

comment:10 Changed 8 years ago by Nicolas M. Thiéry

Authors: Jean-Philippe Labbé, Vivien Ripoll
Description: modified (diff)
Reviewers: Nicolas M. Thiéry

comment:11 Changed 8 years ago by Travis Scrimshaw

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 non-symmetrizable types (for when we get the hyperbolic types done).

comment:12 Changed 8 years ago by Jean-Philippe Labbé

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 8 years ago by Jean-Philippe Labbé

Attachment: benchmark.png added

comment:13 Changed 8 years ago by Jean-Philippe Labbé

Dependencies: 16120
Description: modified (diff)

comment:14 Changed 8 years ago by Jean-Philippe Labbé

Dependencies: 16120#16120

comment:15 Changed 8 years ago by Vivien Ripoll

Branch: u/vripoll/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems

comment:16 Changed 8 years ago by Jean-Philippe Labbé

Commit: 2846f67039fe6baf568fe3ffebdb675fba9ba091
Dependencies: #16120#16120, #16126
Description: modified (diff)

New commits:

a2fdd20First draft with some hacks to make root systems visualization work
d025f0fAdded a __float__ method to the class Universal Cyclotomic Field
2846f67Merge branch 'ticket16120' into t/15703/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems

comment:17 Changed 8 years ago by Jean-Philippe Labbé

Dependencies: #16120, #16126#16120, #16126, #16130

comment:18 Changed 8 years ago by Jean-Philippe Labbé

Description: modified (diff)

Changed 8 years ago by Jean-Philippe Labbé

Attachment: benchmark2.png added

comment:19 Changed 8 years ago by Jean-Philippe Labbé

Description: modified (diff)

comment:20 Changed 8 years ago by Jean-Philippe Labbé

Branch: u/vripoll/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systemsu/jipilab/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems

comment:21 Changed 8 years ago by Jean-Philippe Labbé

Commit: 2846f67039fe6baf568fe3ffebdb675fba9ba09109a1ff9ae3fe50ab4b1d4c31f0afe682ed5173e1

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:

09a1ff9First dirty version to get a TODO list for the ticket 15703

Changed 8 years ago by Jean-Philippe Labbé

Attachment: test_rootsystems.sage added

comment:22 Changed 8 years ago by For batch modifications

Milestone: sage-6.2sage-6.3

comment:23 Changed 8 years ago by For batch modifications

Milestone: sage-6.3sage-6.4

comment:24 Changed 8 years ago by Jean-Philippe Labbé

Description: modified (diff)

comment:25 Changed 8 years ago by Vivien Ripoll

Description: modified (diff)

comment:26 Changed 7 years ago by Jean-Philippe Labbé

Dependencies: #16120, #16126, #16130#16120, #16126, #16130, #17798, #18152
Description: modified (diff)
Note: See TracTickets for help on using tickets.