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: sage-6.4
Component: combinatorics Keywords: coxeter groups, days57
Cc: sage-combinat, tscrim, jipilab, vripoll, mathzeta2 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) Commit: 09a1ff9ae3fe50ab4b1d4c31f0afe682ed5173e1
Dependencies: #16120, #16126, #16130, #17798, #18152 Stopgaps:

Description (last modified by jipilab)

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 jipilab 6 years ago.
benchmark2.png (84.0 KB) - added by jipilab 6 years ago.
test_rootsystems.sage (976 bytes) - added by jipilab 6 years ago.

Download all attachments as: .zip

Change History (29)

comment:1 Changed 6 years ago by tscrim

  • Cc tscrim added

comment:2 Changed 6 years ago by vbraun_spam

  • Milestone changed from sage-6.1 to sage-6.2

comment:3 Changed 6 years ago by chapoton

  • Keywords coxeter added

comment:4 Changed 6 years ago by chapoton

  • 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 nthiery

  • Cc jipilab added
  • Description modified (diff)

comment:6 Changed 6 years ago by nthiery

  • Description modified (diff)
  • Keywords groups days57 added

comment:7 Changed 6 years ago by jipilab

  • Cc vripoll added
  • Description modified (diff)

comment:8 Changed 6 years ago by mathzeta2

  • Cc mathzeta2 added

comment:9 Changed 6 years ago by nthiery

  • Description modified (diff)

comment:10 Changed 6 years ago by nthiery

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

comment:11 Changed 6 years ago by tscrim

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 6 years ago by jipilab

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 jipilab

comment:13 Changed 6 years ago by jipilab

  • Dependencies set to 16120
  • Description modified (diff)

comment:14 Changed 6 years ago by jipilab

  • Dependencies changed from 16120 to #16120

comment:15 Changed 6 years ago by vripoll

  • Branch set to u/vripoll/refactor_coxeter_groups_as_matrix_groups_and_non_crystallographic_root_systems

comment:16 Changed 6 years ago by jipilab

  • Commit set to 2846f67039fe6baf568fe3ffebdb675fba9ba091
  • Dependencies changed from #16120 to #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 6 years ago by jipilab

  • Dependencies changed from #16120, #16126 to #16120, #16126, #16130

comment:18 Changed 6 years ago by jipilab

  • Description modified (diff)

Changed 6 years ago by jipilab

comment:19 Changed 6 years ago by jipilab

  • Description modified (diff)

comment:20 Changed 6 years ago by jipilab

  • 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 jipilab

  • 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:

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

Changed 6 years ago by jipilab

comment:22 Changed 6 years ago by vbraun_spam

  • Milestone changed from sage-6.2 to sage-6.3

comment:23 Changed 5 years ago by vbraun_spam

  • Milestone changed from sage-6.3 to sage-6.4

comment:24 Changed 5 years ago by jipilab

  • Description modified (diff)

comment:25 Changed 5 years ago by vripoll

  • Description modified (diff)

comment:26 Changed 5 years ago by jipilab

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