#15703: Refactor Coxeter groups as matrix groups and non crystallographic root
systems
-------------------------------------------------+-------------------------
Reporter: nthiery | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: sage-6.2
Component: combinatorics | Resolution:
Keywords: coxeter groups, days57 | Merged in:
Authors: Jean-Philippe Labbé, Vivien | Reviewers: Nicolas
Ripoll | M. Thiéry
Report Upstream: N/A | Work issues:
Branch: | Commit:
Dependencies: | Stopgaps:
-------------------------------------------------+-------------------------
Changes (by {'newvalue': u'Jean-Philippe Labb\xe9, Vivien Ripoll', 'oldvalue':
''}):
* reviewer: => Nicolas M. Thiéry
* author: => Jean-Philippe Labbé, Vivien Ripoll
Old description:
> This is a follow up to #9290.
>
> * Experiment with the infrastructure scales and benchmark
>
> - Build by hand an interesting dynkin diagram.
> - Shoot straight at producing a nice plot with a bunch of limit roots.
> - Post the picture here.
> - Benchmark the calculation.
> - Every hack along the way is fair.
> - Update the TODO list below with what would need to be done for a
> proper implementation.
> - Discard the experiment.
>
> * CoxegerGraph
>
> - 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.
>
> * Update CartanMatrix
> - Add a base ring argument to the constructor
> - Update is_crystallographic
> - Decide on the semantic of crystallographic (symmetrizable or
> not?), and if possibly add an is_... method to decide whether the
> entries are integral or not.
> - Update is_affine
> - Update is_finite
> - Update is_generalized_cartan_matrix
>
> * CartanType
> - Possibly update to accept appropriate data to build a
> CoxeterDiagram
>
> * 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.
> - 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
> - 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.
>
> * Update WeylGroups:
>
> - inversions: use the "root_lattice" by default?
>
> * Cartan types
>
> - 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
>
> * Prerequisites:
>
> - Add a _float_ method to UCF
>
> 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
- Build by hand an interesting dynkin diagram.
- Shoot straight at producing a nice plot with a bunch of limit roots.
- Post the picture here.
- Benchmark the calculation.
- Every hack along the way is fair.
- Update the TODO list below with what would need to be done for a
proper implementation.
- Discard the experiment.
* CoxegerGraph
- 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.
* 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.
- 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
- 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.
* Update WeylGroups:
- inversions: use the "root_lattice" by default?
* Prerequisites:
- Add a _float_ method to UCF
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:10>
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.