Opened 7 years ago

Closed 6 years ago

Last modified 6 years ago

#10446 closed enhancement (fixed)

Implementation of the Schuetzenberger involution, the Lusztig involution and the promotion operator

Reported by: ebeyerstedt Owned by: sage-combinat
Priority: major Milestone: sage-4.7.1
Component: combinatorics Keywords: schuetzenberger, words, crystals
Cc: aschilling, ilke, sage-combinat Merged in: sage-4.7.1.alpha0
Authors: Erin Beyerstedt, Ilke Canakci, Anne Schilling Reviewers: Jason Bandlow, Nicolas M. Thiéry
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description (last modified by aschilling)

This patch implements the Schuetzenberger involution on both words and tableaux. In addition it generalizes the promotion operator on tableaux to act not only on rectangular tableaux, but tableaux of any shape.

For crystals in the category ClassicalCrystals?, the Lusztig involution is implemented and tested in type A to give the same result as the Schuetzenberger involution.

A section about the Lusztig involution is added to the thematic tutorial on crystals. A copy of the html documentation built using

sage -docbuild thematic_tutorials html

is available here:

http://www.math.ucdavis.edu/~anne/sage/lie/crystals.html

(which might not always be completely up to date).

Apply trac_10446_schuetzenberger_involution-as.patch

Attachments (2)

trac_10446_schuetzenberger_involution.patch (2.9 KB) - added by ebeyerstedt 7 years ago.
Implementation of Schuetzenberger Involution on Words and Tableau
trac_10446_schuetzenberger_involution-as.patch (21.2 KB) - added by aschilling 6 years ago.

Download all attachments as: .zip

Change History (35)

comment:1 Changed 7 years ago by ebeyerstedt

  • Cc aschilling added

comment:2 Changed 7 years ago by aschilling

This already looks very good!

One suggestion I have is to check whether there is an alphabet associated to a given word 'self'. In this case it would be better to use the maximum of the alphabet instead of the maximum of the appearing letters. For example, if you inputted

sage: w=Word([1,2,3],alphabet=[1,2,3,4,5]) sage: w.alphabet() Ordered Alphabet [1, 2, 3, 4, 5]

then you would like the Schuetzenberger involution to return the word 345 instead of 123.

Anne

comment:3 Changed 7 years ago by ebeyerstedt

  • Cc ilke added
  • Status changed from new to needs_work

comment:4 Changed 7 years ago by ebeyerstedt

  • Summary changed from Schuetzenberger Involution to Schuetzenberger Involution on Words

comment:5 Changed 7 years ago by ebeyerstedt

  • Status changed from needs_work to needs_review

Changed 7 years ago by ebeyerstedt

Implementation of Schuetzenberger Involution on Words and Tableau

comment:6 Changed 7 years ago by ebeyerstedt

  • Description modified (diff)
  • Summary changed from Schuetzenberger Involution on Words to Schuetzenberger Involution

This patch now contains two functions, both of which define the schuetzenberger involution - one that works on the class of words and the other on tableau.

comment:7 follow-up: Changed 7 years ago by aschilling

  • Reviewers set to Anne Schilling

comment:8 in reply to: ↑ 7 Changed 7 years ago by aschilling

  • Description modified (diff)

Replying to aschilling:

This looks good and all tests pass! One suggestion I have is that it should be possible to pass the alphabet underlying a given tableau for the method schuetzenberger_involution for tableaux. Currently

sage: t = Tableau(1,1,4],[2?) sage: t.schuetzenberger_involution() 1, 3, 4], [4?

but if the underlying alphabet is different, the answer would be different. This would require to change the method to_word in tableau.py.

Also, for words it would be good to add a test that shows that one can have repeated letters:

sage: w = Word([2,1,1,4], alphabet=[1,2,3,4,5,6]) sage: w.schuetzenberger_involution() word: 3665

Thanks so much for your work on this!

Anne

comment:9 Changed 7 years ago by aschilling

  • Status changed from needs_review to needs_work

comment:10 Changed 6 years ago by aschilling

  • Authors changed from Erin Beyerstedt, Ilke Canakci to Erin Beyerstedt, Ilke Canakci, Anne Schilling
  • Cc sage-combinat added
  • Description modified (diff)
  • Milestone set to sage-4.7
  • Reviewers Anne Schilling deleted
  • Status changed from needs_work to needs_review
  • Summary changed from Schuetzenberger Involution to Schuetzenberger involution and promotion operator
  • Type changed from task to enhancement

comment:11 Changed 6 years ago by aschilling

I just fixed the issues with the Schuetzenberger involution that were still bothering me and also added a new implementation of the promotion operator that can now act on tableaux of any shape.

Apply trac_10446_schuetzenberger_involution-as.patch

comment:12 follow-up: Changed 6 years ago by jbandlow

  • Status changed from needs_review to needs_work

Hi Anne,

Thanks for the patch! I am happy to review this. The biggest issue I have right now is the name of the function 'has_letter'. I think that a function with that name should just return True or False. I think what I would prefer is for the method 'cells' to include an optional parameter. So, something like the following behavior:

    sage: t = Tableau([[1,2],[2]])
    sage: t.cells()
    [(0, 0), (0, 1), (1, 0)]
    sage: t.cells(2)
    [(0, 1), (1, 0)]

What do you think?

comment:13 in reply to: ↑ 12 ; follow-up: Changed 6 years ago by nthiery

Replying to jbandlow:

Thanks for the patch! I am happy to review this. The biggest issue I have right now is the name of the function 'has_letter'. I think that a function with that name should just return True or False. I think what I would prefer is for the method 'cells' to include an optional parameter. So, something like the following behavior:

    sage: t = Tableau([[1,2],[2]])
    sage: t.cells()
    [(0, 0), (0, 1), (1, 0)]
    sage: t.cells(2)
    [(0, 1), (1, 0)]

What do you think?

What about:

    sage: t.cells_containing(2)
    [(0,1), (1,0)]

to not pollute cells with more logic?

comment:14 in reply to: ↑ 13 Changed 6 years ago by jbandlow

Replying to nthiery:

What about:

    sage: t.cells_containing(2)
    [(0,1), (1,0)]

to not pollute cells with more logic?

Sounds good to me.

comment:15 Changed 6 years ago by aschilling

  • Description modified (diff)
  • Reviewers set to Jason Bandlow
  • Status changed from needs_work to needs_review
  • Summary changed from Schuetzenberger involution and promotion operator to Implementation of the Schuetzenberger involution, the Lusztig involution and the promotion operator

A new version of the patch is attached. The method has_letter is now called cells_containing. In addition, in CrystalsOfTableaux? the new method lusztig_involution is added. It is tested that for type A it gives the same answer as the Schuetzenberger involution on tableaux.

comment:16 Changed 6 years ago by aschilling

  • Keywords crystals added; involution removed

comment:17 Changed 6 years ago by aschilling

Just posted a new version of the patch including Dan's suggestion that the star map should be created as a dictionary when the crystal is created.

comment:18 Changed 6 years ago by aschilling

A new version of the patch is attached, where I changed the map i->i* to a cached method rather than an attribute of the crystal according to Nicolas' suggestion on the sage-combinat mailing list.

Cheers,

Anne

comment:19 Changed 6 years ago by aschilling

  • Description modified (diff)

comment:20 Changed 6 years ago by aschilling

Following Dan's suggestions, the Lustzig involution is now a method of ClassicalCrystals?. It also works for finite-dimensional highest weight crystals of type E_6 for example. A section on the Lusztig involution is added to the thematic tutorial.

I hope this is now finally ready!

Anne

comment:21 Changed 6 years ago by aschilling

  • Description modified (diff)

comment:22 Changed 6 years ago by aschilling

  • Reviewers changed from Jason Bandlow to Jason Bandlow, Nicolas Thiery

Posted a slightly revised version incorporating Nicolas' review patch. Jason, could you give it a final review?

Anne

comment:23 Changed 6 years ago by jbandlow

  • Status changed from needs_review to needs_work

Hi Anne,

The code looks good to me, but it fails to apply for me to a clean 4.6.2. Are there dependencies?

-Jason

comment:24 Changed 6 years ago by aschilling

  • Status changed from needs_work to needs_review

Hi Jason,

You need to apply this patch to the latest version sage-4.7.alpha4, not sage-4.6.2, since there were a couple of crystal patches merged into sage such as #10632 and #10485.

Cheers,

Anne

comment:25 Changed 6 years ago by jbandlow

  • Status changed from needs_review to positive_review

Hi Anne,

I don't have the latest alpha, but I tested the patch on the sage-combinat queue, as well as looked carefully at the code, and it looks good to me.

Thanks!

comment:26 Changed 6 years ago by aschilling

Apply trac_10446_schuetzenberger_involution-as.patch

comment:27 follow-up: Changed 6 years ago by aschilling

Hi Jeroen,

Would it be possible to get this patch into sage-4.7 for Sage Days 30?

Thank you,

Anne

comment:28 Changed 6 years ago by jdemeyer

  • Milestone changed from sage-4.7 to sage-4.7.1

comment:29 in reply to: ↑ 27 Changed 6 years ago by jdemeyer

Replying to aschilling:

Hi Jeroen,

Would it be possible to get this patch into sage-4.7 for Sage Days 30?

Well, I kind of made sage-4.7 "feature-complete" already, so I prefer not to do this. Normally, it should go into sage-4.7.1.alpha0 in time for Sage Days 30.

comment:30 follow-up: Changed 6 years ago by jdemeyer

Could you remove the following part from the commit message, which doesn't really serve any purpose:

A section about the Lusztig involution is added to the thematic tutorial on crystals.
A copy of the html documentation built using

{{{
sage -docbuild thematic_tutorials html
}}}

is available here:

http://www.math.ucdavis.edu/~anne/sage/lie/crystals.html

(which might not always be completely up to date).

Changed 6 years ago by aschilling

comment:31 in reply to: ↑ 30 Changed 6 years ago by aschilling

Replying to jdemeyer:

Could you remove the following part from the commit message, which doesn't really serve any purpose:

Done. I left the first sentence since it does serve a purpose.

comment:32 Changed 6 years ago by jdemeyer

  • Merged in set to sage-4.7.1.alpha0
  • Resolution set to fixed
  • Status changed from positive_review to closed

comment:33 Changed 6 years ago by jdemeyer

  • Reviewers changed from Jason Bandlow, Nicolas Thiery to Jason Bandlow, Nicolas M. Thiéry
Note: See TracTickets for help on using tickets.