#14641: Does the "promotion" method for tableaux really compute Schuetzenberger
promotion?
-----------------------------+----------------------------------------------
   Reporter:  darij          |             Owner:  tbd                          
                           
       Type:  defect         |            Status:  new                          
                           
   Priority:  major          |         Milestone:  sage-5.10                    
                           
  Component:  PLEASE CHANGE  |          Keywords:  tableaux, partitions, 
combinat, jeu de taquin, promotion
Work issues:                 |   Report Upstream:  N/A                          
                           
  Reviewers:                 |           Authors:                               
                           
  Merged in:                 |      Dependencies:                               
                           
   Stopgaps:                 |  
-----------------------------+----------------------------------------------
 Both {{{promotion}}} and {{{promotion_inverse}}} methods in
 {{{combinat/tableau.py}}} take two inputs: the tableau {{{self}}} and an
 integer {{{n}}}.

 What exactly does the {{{n}}} do? While {{{promotion}}} has some kind of
 docstring, I fail to understand it. The notion of promotion has an
 unfortunate wealth of different meanings, but I can't recognize any of
 them in what Sage computes. I expected the {{{n}}} to be the {{{i}}} in
 the {{{\delta_i}}} of Ayyer-Klee-Schilling
 http://arxiv.org/pdf/1205.7074v2.pdf (identifying standard Young tableaux
 with saturated chains on the partition lattice), but then I would expect
 that for {{{X}}} being a standard tableau, {{{X.promotion(n)}}} would
 still be a standard tableau. This is not the case:
 {{{
 sage: X = StandardTableau([[1,2],[3,4],[5]])
 sage: X.promotion(1)
 [[1, 2], [4, 5], [6]]
 }}}

 It seems to me that {{{X.promotion(n-1)}}}, where {{{n}}} is the size of
 the standard tableau {{{X}}}, computes the good old Schuetzenberger
 promotion of {{{X}}}; but I am not quite sure and this seems to contradict
 the docstring.

 When {{{X}}} is rectangular, the code works very differently and some
 completely strange things happen:
 {{{
 sage: S = StandardTableau([[1,3,5,6],[2,4,7,8]])
 sage: S.promotion(0)    # This should make perfect sense going by the
 docstring...
 ---------------------------------------------------------------------------
 IndexError                                Traceback (most recent call
 last)
 <ipython-input-95-23c3eab7210b> in <module>()
 ----> 1 S.promotion(Integer(0))    # This should make perfect sense going
 by the docstring...

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in promotion(self, n)
    1779             t = self.rotate_180()
    1780             t = [[n+2-i for i in row] for row in t.to_list()]
 -> 1781             t = Tableau(t).promotion_inverse(n)
    1782             t = [[n+2-i for i in row] for row in t.to_list()]
    1783             return Tableau(t).rotate_180()

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in promotion_inverse(self, n)
    1742         if l<s:
    1743             for i in range(l):
 -> 1744                 t[len(t)-1].append(n+1)
    1745         else:
    1746             t.append([n+1 for i in range(s)])

 IndexError: list index out of range
 sage: S.promotion(1)
 [[1, 2]]
 sage: S.promotion(2)
 ---------------------------------------------------------------------------
 ValueError                                Traceback (most recent call
 last)
 <ipython-input-97-6a4133c5e025> in <module>()
 ----> 1 S.promotion(Integer(2))

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in promotion(self, n)
    1779             t = self.rotate_180()
    1780             t = [[n+2-i for i in row] for row in t.to_list()]
 -> 1781             t = Tableau(t).promotion_inverse(n)
    1782             t = [[n+2-i for i in row] for row in t.to_list()]
    1783             return Tableau(t).rotate_180()

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in promotion_inverse(self, n)
    1745         else:
    1746             t.append([n+1 for i in range(s)])
 -> 1747         return Tableau(t)
    1748
    1749     def promotion(self, n):

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/misc/classcall_metaclass.so in
 sage.misc.classcall_metaclass.ClasscallMetaclass.__call__
 (sage/misc/classcall_metaclass.c:1208)()

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in __classcall_private__(self, t)
     258
     259         if not map(len,t) in sage.combinat.partition._Partitions:
 --> 260             raise ValueError("A tableau must be a list of lists of
 weakly decreasing length.")
     261
     262         return Tableaux_all().element_class(Tableaux_all(), t)

 ValueError: A tableau must be a list of lists of weakly decreasing length.
 sage: S.promotion(3)
 [[1, 2], [3, 4]]
 sage: S.promotion(4)
 ---------------------------------------------------------------------------
 ValueError                                Traceback (most recent call
 last)
 <ipython-input-99-9acbfaebd18c> in <module>()
 ----> 1 S.promotion(Integer(4))

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in promotion(self, n)
    1779             t = self.rotate_180()
    1780             t = [[n+2-i for i in row] for row in t.to_list()]
 -> 1781             t = Tableau(t).promotion_inverse(n)
    1782             t = [[n+2-i for i in row] for row in t.to_list()]
    1783             return Tableau(t).rotate_180()

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in promotion_inverse(self, n)
    1745         else:
    1746             t.append([n+1 for i in range(s)])
 -> 1747         return Tableau(t)
    1748
    1749     def promotion(self, n):

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/misc/classcall_metaclass.so in
 sage.misc.classcall_metaclass.ClasscallMetaclass.__call__
 (sage/misc/classcall_metaclass.c:1208)()

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in __classcall_private__(self, t)
     258
     259         if not map(len,t) in sage.combinat.partition._Partitions:
 --> 260             raise ValueError("A tableau must be a list of lists of
 weakly decreasing length.")
     261
     262         return Tableaux_all().element_class(Tableaux_all(), t)

 ValueError: A tableau must be a list of lists of weakly decreasing length.
 sage: S.promotion(5)
 [[1, 2, 4], [3, 5, 6]]
 sage: S.promotion(6)
 ---------------------------------------------------------------------------
 TypeError                                 Traceback (most recent call
 last)
 <ipython-input-101-ea0436786e82> in <module>()
 ----> 1 S.promotion(Integer(6))

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in promotion(self, n)
    1781             t = Tableau(t).promotion_inverse(n)
    1782             t = [[n+2-i for i in row] for row in t.to_list()]
 -> 1783             return Tableau(t).rotate_180()
    1784         p = self
    1785         for c in self.cells_containing(n+1):

 /home/darij/sage-5.10.beta2/local/lib/python2.7/site-
 packages/sage/combinat/tableau.pyc in rotate_180(self)
    1154         """
    1155         if not self.is_rectangular():
 -> 1156             raise TypeError, "the tableau must be rectangular to
 use verticl_flip()"
    1157
    1158         return Tableau([ [l for l in reversed(row)] for row in
 reversed(self) ])

 TypeError: the tableau must be rectangular to use verticl_flip()
 sage: S.promotion(7)
 [[1, 2, 4, 7], [3, 5, 6, 8]]
 sage: S.promotion(8)      # even fails, odd works?
 [[2, 4, 6, 7], [3, 5, 8, 9]]
 }}}

 The notion of promotion suffers from a wealth of different meanings, but
 what I am seeing here doesn't match any I know...

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14641>
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to