Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend bruhat graphs #22854

Closed
thecaligarmo opened this issue Apr 21, 2017 · 29 comments
Closed

Extend bruhat graphs #22854

thecaligarmo opened this issue Apr 21, 2017 · 29 comments

Comments

@thecaligarmo
Copy link
Contributor

Right now we can only get the Bruhat graph of Weyl groups even though we can do the same thing for Coxeter Groups. I plan on moving bruhat_graph from the WeylGroups class in combinat/root_system to the category of Coxeter groups. This will keep WeylGroup having the method, but expand it to Coxter groups.

Additionally, it would be natural to not require two elements to find a the graph between them. So instead, if the group is finite, we'll allow the calling of bruhat_graph() which will bring back the entire graph.

CC: @nthiery @tscrim @fchapoton

Component: combinatorics

Keywords: sagedays86

Author: Aram Dermenjian

Branch/Commit: 33265f8

Reviewer: Travis Scrimshaw, Frédéric Chapoton

Issue created by migration from https://trac.sagemath.org/ticket/22854

@thecaligarmo
Copy link
Contributor Author

Changed keywords from none to sagedays86

@thecaligarmo

This comment has been minimized.

@thecaligarmo thecaligarmo changed the title Generalize bruhat graphs Extend bruhat graphs Apr 21, 2017
@thecaligarmo
Copy link
Contributor Author

@thecaligarmo
Copy link
Contributor Author

comment:4

This should be ready for review.


New commits:

f64c494Move bruhat_graph to Coxeter category

@thecaligarmo
Copy link
Contributor Author

Commit: f64c494

@thecaligarmo
Copy link
Contributor Author

Reviewer: nthiery,tscrim,chapoton

@thecaligarmo
Copy link
Contributor Author

Changed author from aram.dermenjian to Aram Dermenjian

@thecaligarmo
Copy link
Contributor Author

Changed reviewer from nthiery,tscrim,chapoton to Nicolas M. Thiéry,Travis Scrimshaw,Frédéric Chapoton

@thecaligarmo
Copy link
Contributor Author

Changed reviewer from Nicolas M. Thiéry,Travis Scrimshaw,Frédéric Chapoton to none

@tscrim
Copy link
Collaborator

tscrim commented Apr 22, 2017

comment:7

Some comments:

-I think the extra doctests should not be in the block below saying :trac:`17744`, but above it.

  • Instead of this complicated check for the long element and you already test self.is_finite(), so just do the default being the long element there. This is better locality of code.
  • A better error message would be infinite groups must specify a maximal element.
  • reflection_length needs a doctest.
  • Even though it is slight code duplication, it would be faster (and probably cleaner) to use code similar to bruhat_interval. While this could be done on a separate ticket, I think it would be better to do this here and now.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Apr 22, 2017

Branch pushed to git repo; I updated commit sha1. New commits:

edda1ffUpdate doctests and error messaging

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Apr 22, 2017

Changed commit from f64c494 to edda1ff

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Apr 22, 2017

Changed commit from edda1ff to bea06ba

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Apr 22, 2017

Branch pushed to git repo; I updated commit sha1. New commits:

bea06badoc tests

@thecaligarmo
Copy link
Contributor Author

comment:10

So all the above corrections have been made.

I didn't understand what you meant by replicating bruhat_interval in your last comment. Do you mean using a similar while loop in bruhat_group to find all potential additional chains? The issue here is that if the group is infinite we can't go through "all" the reflections to test things out. Hence why this method was used (and I kept it over from the current version). Unless you mean something different?


New commits:

edda1ffUpdate doctests and error messaging
bea06badoc tests

@tscrim
Copy link
Collaborator

tscrim commented Apr 22, 2017

comment:11

Actually, looking into this a bit more, I think we should have bruhat_graph be constructed from the transitive closure of the digraph of the Bruhat cover relations. This way we would not have to look at what is a reflection and what is not.

So what I would do is start with a hidden method _bruhat_covers_digraph, which builds the digraph of cover relations by using code from bruhat_interval. Then bruhat_graph would return self._bruhat_covers_digraph(x,y).transitive_closure(). Furthermore, bruhat_poset could be lifted and generalized to return Poset(self._bruhat_covers_digraph(x,y), cover_relations=True, facade=facade).

I can do this is if you want me to.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 10, 2017

Branch pushed to git repo; I updated commit sha1. New commits:

d5875c1Allow edge labels in Bruhat graph

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 10, 2017

Changed commit from bea06ba to d5875c1

@thecaligarmo
Copy link
Contributor Author

comment:13

So one reason transitive closure isn't a good idea is because I'd like to keep track of the reflection used to make that transition (as added in my latest commit). Also, I'm not exactly sure how the transitive closure would work in this case. Do you want to do a run with the poset and if it works as expected I can merge the two with Bruhat graph? (Or you can add it into Bruhat graph directly if you'd prefer)

@tscrim
Copy link
Collaborator

tscrim commented May 17, 2017

@tscrim
Copy link
Collaborator

tscrim commented May 17, 2017

Changed commit from d5875c1 to 33265f8

@tscrim
Copy link
Collaborator

tscrim commented May 17, 2017

Reviewer: Travis Scrimshaw

@tscrim
Copy link
Collaborator

tscrim commented May 17, 2017

comment:14

Actually, the transitive closure is too permissive as you can get differences that are products of reflections, which of course, are not always reflections. However, I was able to get a massive speed boost by sorting the bruhat_interval by length so we only have to do approx n^2 / 2 checks and not have to do the length checks each time.

I also added a bruhat_interval_poset, which goes slightly beyond the scope of the ticket but is in the spirit of it, instead of lifting up bruhat_poset to keep that reserved for the entire Bruhat order poset.


New commits:

9164839Merge branch 'u/aram.dermenjian/generalize_bruhat_graphs' of git://trac.sagemath.org/sage into public/combinat/extend_bruhat_graphs-22854
33265f8Add bruhat_interval_poset and speedup of bruhat_graph.

@tscrim
Copy link
Collaborator

tscrim commented May 29, 2017

comment:15

ping - Patchbot is (essentially) green.

@fchapoton
Copy link
Contributor

Changed reviewer from Travis Scrimshaw to Travis Scrimshaw, Frédéric Chapoton

@fchapoton
Copy link
Contributor

comment:16

ok, let it be (though I do not like that "reflection length" is not just an alias).

@thecaligarmo
Copy link
Contributor Author

comment:17

Looks good on my end too. I can always quickly alter reflection length to be an alias instead of a direct call if you'd prefer Chapoton. (I hadn't realised aliasing was possible) Just let me know and I'll quickly do it tonight.

@fchapoton
Copy link
Contributor

comment:18

No, let us keep things as they are, no need to re-open the ticket for that.

@vbraun
Copy link
Member

vbraun commented May 31, 2017

Changed branch from public/combinat/extend_bruhat_graphs-22854 to 33265f8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants