Fully commutative stable Grothendieck crystal#

AUTHORS:

  • Jianping Pan (2020-08-31): initial version

  • Wencin Poh (2020-08-31): initial version

  • Anne Schilling (2020-08-31): initial version

class sage.combinat.crystals.fully_commutative_stable_grothendieck.DecreasingHeckeFactorization(parent, t)[source]#

Bases: Element

Class of decreasing factorizations in the 0-Hecke monoid.

INPUT:

  • t – decreasing factorization inputted as list of lists

  • max_value – maximal value of entries

EXAMPLES:

sage: from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
sage: t = [[3, 2], [], [2, 1]]
sage: h = DecreasingHeckeFactorization(t, 3); h
(3, 2)()(2, 1)
sage: h.excess
1
sage: h.factors
3
sage: h.max_value
3
sage: h.value
((3, 2), (), (2, 1))

sage: u = [[3, 2, 1], [3], [2, 1]]
sage: h = DecreasingHeckeFactorization(u); h
(3, 2, 1)(3)(2, 1)
sage: h.weight()
(2, 1, 3)
sage: h.parent()
Decreasing Hecke factorizations with 3 factors associated to [2, 1, 3, 2, 1] with excess 1
>>> from sage.all import *
>>> from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
>>> t = [[Integer(3), Integer(2)], [], [Integer(2), Integer(1)]]
>>> h = DecreasingHeckeFactorization(t, Integer(3)); h
(3, 2)()(2, 1)
>>> h.excess
1
>>> h.factors
3
>>> h.max_value
3
>>> h.value
((3, 2), (), (2, 1))

>>> u = [[Integer(3), Integer(2), Integer(1)], [Integer(3)], [Integer(2), Integer(1)]]
>>> h = DecreasingHeckeFactorization(u); h
(3, 2, 1)(3)(2, 1)
>>> h.weight()
(2, 1, 3)
>>> h.parent()
Decreasing Hecke factorizations with 3 factors associated to [2, 1, 3, 2, 1] with excess 1
to_increasing_hecke_biword()[source]#

Return the associated increasing Hecke biword of self.

EXAMPLES:

sage: from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
sage: t = [[2], [], [2, 1],[4, 3, 1]]
sage: h = DecreasingHeckeFactorization(t, 4)
sage: h.to_increasing_hecke_biword()
[[1, 1, 1, 2, 2, 4], [1, 3, 4, 1, 2, 2]]
>>> from sage.all import *
>>> from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
>>> t = [[Integer(2)], [], [Integer(2), Integer(1)],[Integer(4), Integer(3), Integer(1)]]
>>> h = DecreasingHeckeFactorization(t, Integer(4))
>>> h.to_increasing_hecke_biword()
[[1, 1, 1, 2, 2, 4], [1, 3, 4, 1, 2, 2]]
to_word()[source]#

Return the word associated to self in the 0-Hecke monoid.

EXAMPLES:

sage: from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
sage: t = [[2], [], [2, 1], [4, 3, 1]]
sage: h = DecreasingHeckeFactorization(t)
sage: h.to_word()
[2, 2, 1, 4, 3, 1]
>>> from sage.all import *
>>> from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
>>> t = [[Integer(2)], [], [Integer(2), Integer(1)], [Integer(4), Integer(3), Integer(1)]]
>>> h = DecreasingHeckeFactorization(t)
>>> h.to_word()
[2, 2, 1, 4, 3, 1]
weight()[source]#

Return the weight of self.

EXAMPLES:

sage: from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
sage: t = [[2], [2, 1], [], [4, 3, 1]]
sage: h = DecreasingHeckeFactorization(t, 6)
sage: h.weight()
(3, 0, 2, 1)
>>> from sage.all import *
>>> from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
>>> t = [[Integer(2)], [Integer(2), Integer(1)], [], [Integer(4), Integer(3), Integer(1)]]
>>> h = DecreasingHeckeFactorization(t, Integer(6))
>>> h.weight()
(3, 0, 2, 1)
class sage.combinat.crystals.fully_commutative_stable_grothendieck.DecreasingHeckeFactorizations(w, factors, excess)[source]#

Bases: UniqueRepresentation, Parent

Set of decreasing factorizations in the 0-Hecke monoid.

INPUT:

  • w – an element in the symmetric group

  • factors – the number of factors in the factorization

  • excess – the total number of letters in the factorization minus the length of a reduced word for w

EXAMPLES:

sage: from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorizations
sage: S = SymmetricGroup(3+1)
sage: w = S.from_reduced_word([1, 3, 2, 1])
sage: F = DecreasingHeckeFactorizations(w, 3, 3); F
Decreasing Hecke factorizations with 3 factors associated to [1, 3, 2, 1] with excess 3
sage: F.list()
[(3, 1)(3, 1)(3, 2, 1), (3, 1)(3, 2, 1)(2, 1), (3, 2, 1)(2, 1)(2, 1)]
>>> from sage.all import *
>>> from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorizations
>>> S = SymmetricGroup(Integer(3)+Integer(1))
>>> w = S.from_reduced_word([Integer(1), Integer(3), Integer(2), Integer(1)])
>>> F = DecreasingHeckeFactorizations(w, Integer(3), Integer(3)); F
Decreasing Hecke factorizations with 3 factors associated to [1, 3, 2, 1] with excess 3
>>> F.list()
[(3, 1)(3, 1)(3, 2, 1), (3, 1)(3, 2, 1)(2, 1), (3, 2, 1)(2, 1)(2, 1)]
Element[source]#

alias of DecreasingHeckeFactorization

list()[source]#

Return list of all elements of self.

EXAMPLES:

sage: from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorizations
sage: S = SymmetricGroup(3+1)
sage: w = S.from_reduced_word([1, 3, 2, 1])
sage: F = DecreasingHeckeFactorizations(w, 3, 3)
sage: F.list()
[(3, 1)(3, 1)(3, 2, 1), (3, 1)(3, 2, 1)(2, 1), (3, 2, 1)(2, 1)(2, 1)]
>>> from sage.all import *
>>> from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorizations
>>> S = SymmetricGroup(Integer(3)+Integer(1))
>>> w = S.from_reduced_word([Integer(1), Integer(3), Integer(2), Integer(1)])
>>> F = DecreasingHeckeFactorizations(w, Integer(3), Integer(3))
>>> F.list()
[(3, 1)(3, 1)(3, 2, 1), (3, 1)(3, 2, 1)(2, 1), (3, 2, 1)(2, 1)(2, 1)]
class sage.combinat.crystals.fully_commutative_stable_grothendieck.FullyCommutativeStableGrothendieckCrystal(w, factors, excess)[source]#

Bases: UniqueRepresentation, Parent

The crystal on fully commutative decreasing factorizations in the 0-Hecke monoid, as introduced by [MPPS2020].

INPUT:

  • w – an element in the symmetric group or a (skew) shape

  • factors – the number of factors in the factorization

  • excess – the total number of letters in the factorization minus the length of a reduced word for w

  • shape – (default: False) indicator for input w, True if w is entered as a (skew) shape and False otherwise.

EXAMPLES:

sage: S = SymmetricGroup(3+1)
sage: w = S.from_reduced_word([1, 3, 2])
sage: B = crystals.FullyCommutativeStableGrothendieck(w, 3, 2); B
Fully commutative stable Grothendieck crystal of type A_2 associated to [1, 3, 2] with excess 2
sage: B.list()
[(1)(3, 1)(3, 2),
 (3, 1)(1)(3, 2),
 (3, 1)(3, 1)(2),
 (3)(3, 1)(3, 2),
 (3, 1)(3)(3, 2),
 (3, 1)(3, 2)(2)]
>>> from sage.all import *
>>> S = SymmetricGroup(Integer(3)+Integer(1))
>>> w = S.from_reduced_word([Integer(1), Integer(3), Integer(2)])
>>> B = crystals.FullyCommutativeStableGrothendieck(w, Integer(3), Integer(2)); B
Fully commutative stable Grothendieck crystal of type A_2 associated to [1, 3, 2] with excess 2
>>> B.list()
[(1)(3, 1)(3, 2),
 (3, 1)(1)(3, 2),
 (3, 1)(3, 1)(2),
 (3)(3, 1)(3, 2),
 (3, 1)(3)(3, 2),
 (3, 1)(3, 2)(2)]

We can also access the crystal by specifying a skew shape:

sage: crystals.FullyCommutativeStableGrothendieck([[2, 2], [1]], 4, 1, shape=True)
Fully commutative stable Grothendieck crystal of type A_3 associated to [2, 1, 3] with excess 1
>>> from sage.all import *
>>> crystals.FullyCommutativeStableGrothendieck([[Integer(2), Integer(2)], [Integer(1)]], Integer(4), Integer(1), shape=True)
Fully commutative stable Grothendieck crystal of type A_3 associated to [2, 1, 3] with excess 1

We can compute the highest weight elements:

sage: hw = [w for w in B if w.is_highest_weight()]
sage: hw
[(1)(3, 1)(3, 2), (3)(3, 1)(3, 2)]
sage: hw[0].weight()
(2, 2, 1)
>>> from sage.all import *
>>> hw = [w for w in B if w.is_highest_weight()]
>>> hw
[(1)(3, 1)(3, 2), (3)(3, 1)(3, 2)]
>>> hw[Integer(0)].weight()
(2, 2, 1)

The crystal operators themselves move elements between adjacent factors:

sage: b = hw[0]; b
(1)(3, 1)(3, 2)
sage: b.f(2)
(3, 1)(1)(3, 2)
>>> from sage.all import *
>>> b = hw[Integer(0)]; b
(1)(3, 1)(3, 2)
>>> b.f(Integer(2))
(3, 1)(1)(3, 2)
class Element(parent, t)[source]#

Bases: DecreasingHeckeFactorization

Create an instance self of element t.

This method takes into account the constraints on the word, the number of factors, and excess statistic associated to the parent class.

EXAMPLES:

sage: S = SymmetricGroup(3+1)
sage: w = S.from_reduced_word([1, 3, 2])
sage: B = crystals.FullyCommutativeStableGrothendieck(w, 3, 2)
sage: from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
sage: h = DecreasingHeckeFactorization([[3, 1], [3], [3, 2]], 4)
sage: u = B(h); u.value
((3, 1), (3,), (3, 2))
sage: v = B([[3, 1], [3], [3, 2]]); v.value
((3, 1), (3,), (3, 2))
>>> from sage.all import *
>>> S = SymmetricGroup(Integer(3)+Integer(1))
>>> w = S.from_reduced_word([Integer(1), Integer(3), Integer(2)])
>>> B = crystals.FullyCommutativeStableGrothendieck(w, Integer(3), Integer(2))
>>> from sage.combinat.crystals.fully_commutative_stable_grothendieck import DecreasingHeckeFactorization
>>> h = DecreasingHeckeFactorization([[Integer(3), Integer(1)], [Integer(3)], [Integer(3), Integer(2)]], Integer(4))
>>> u = B(h); u.value
((3, 1), (3,), (3, 2))
>>> v = B([[Integer(3), Integer(1)], [Integer(3)], [Integer(3), Integer(2)]]); v.value
((3, 1), (3,), (3, 2))
bracketing(i)[source]#

Remove all bracketed letters between \(i\)-th and \((i+1)\)-th entry.

EXAMPLES:

sage: S = SymmetricGroup(4+1)
sage: w = S.from_reduced_word([3, 2, 1, 4, 3])
sage: B = crystals.FullyCommutativeStableGrothendieck(w, 3, 2)
sage: h = B([[3], [4, 2, 1], [4, 3, 1]])
sage: h.bracketing(1)
[[], []]
sage: h.bracketing(2)
[[], [2, 1]]
>>> from sage.all import *
>>> S = SymmetricGroup(Integer(4)+Integer(1))
>>> w = S.from_reduced_word([Integer(3), Integer(2), Integer(1), Integer(4), Integer(3)])
>>> B = crystals.FullyCommutativeStableGrothendieck(w, Integer(3), Integer(2))
>>> h = B([[Integer(3)], [Integer(4), Integer(2), Integer(1)], [Integer(4), Integer(3), Integer(1)]])
>>> h.bracketing(Integer(1))
[[], []]
>>> h.bracketing(Integer(2))
[[], [2, 1]]
e(i)[source]#

Return the action of \(e_i\) on self using the rules described in [MPPS2020].

EXAMPLES:

sage: S = SymmetricGroup(4+1)
sage: w = S.from_reduced_word([2, 1, 4, 3, 2])
sage: B = crystals.FullyCommutativeStableGrothendieck(w, 4, 3)
sage: h = B([[4, 2], [4, 2, 1], [3, 2], [2]]); h
(4, 2)(4, 2, 1)(3, 2)(2)
sage: h.e(1)
(4, 2)(4, 2, 1)(3)(3, 2)
sage: h.e(2)
(4, 2)(2, 1)(4, 3, 2)(2)
sage: h.e(3)
>>> from sage.all import *
>>> S = SymmetricGroup(Integer(4)+Integer(1))
>>> w = S.from_reduced_word([Integer(2), Integer(1), Integer(4), Integer(3), Integer(2)])
>>> B = crystals.FullyCommutativeStableGrothendieck(w, Integer(4), Integer(3))
>>> h = B([[Integer(4), Integer(2)], [Integer(4), Integer(2), Integer(1)], [Integer(3), Integer(2)], [Integer(2)]]); h
(4, 2)(4, 2, 1)(3, 2)(2)
>>> h.e(Integer(1))
(4, 2)(4, 2, 1)(3)(3, 2)
>>> h.e(Integer(2))
(4, 2)(2, 1)(4, 3, 2)(2)
>>> h.e(Integer(3))
f(i)[source]#

Return the action of \(f_i\) on self using the rules described in [MPPS2020].

EXAMPLES:

sage: S = SymmetricGroup(4+1)
sage: w = S.from_reduced_word([3, 2, 1, 4, 3])
sage: B = crystals.FullyCommutativeStableGrothendieck(w, 4, 3)
sage: h = B([[3, 2], [2, 1], [4, 3], [3, 1]]); h
(3, 2)(2, 1)(4, 3)(3, 1)
sage: h.f(1)
(3, 2)(2, 1)(4, 3, 1)(3)
sage: h.f(2)
sage: h.f(3)
(3, 2, 1)(1)(4, 3)(3, 1)
>>> from sage.all import *
>>> S = SymmetricGroup(Integer(4)+Integer(1))
>>> w = S.from_reduced_word([Integer(3), Integer(2), Integer(1), Integer(4), Integer(3)])
>>> B = crystals.FullyCommutativeStableGrothendieck(w, Integer(4), Integer(3))
>>> h = B([[Integer(3), Integer(2)], [Integer(2), Integer(1)], [Integer(4), Integer(3)], [Integer(3), Integer(1)]]); h
(3, 2)(2, 1)(4, 3)(3, 1)
>>> h.f(Integer(1))
(3, 2)(2, 1)(4, 3, 1)(3)
>>> h.f(Integer(2))
>>> h.f(Integer(3))
(3, 2, 1)(1)(4, 3)(3, 1)
module_generators()[source]#

Return generators for self as a crystal.

EXAMPLES:

sage: S = SymmetricGroup(3+1)
sage: w = S.from_reduced_word([1, 3, 2])
sage: B = crystals.FullyCommutativeStableGrothendieck(w, 3, 2)
sage: B.module_generators
((1)(3, 1)(3, 2), (3)(3, 1)(3, 2))
sage: C = crystals.FullyCommutativeStableGrothendieck(w, 4, 2)
sage: C.module_generators
(()(1)(3, 1)(3, 2),
 ()(3)(3, 1)(3, 2),
 (1)(1)(1)(3, 2),
 (1)(1)(3)(3, 2),
 (1)(3)(3)(3, 2))
>>> from sage.all import *
>>> S = SymmetricGroup(Integer(3)+Integer(1))
>>> w = S.from_reduced_word([Integer(1), Integer(3), Integer(2)])
>>> B = crystals.FullyCommutativeStableGrothendieck(w, Integer(3), Integer(2))
>>> B.module_generators
((1)(3, 1)(3, 2), (3)(3, 1)(3, 2))
>>> C = crystals.FullyCommutativeStableGrothendieck(w, Integer(4), Integer(2))
>>> C.module_generators
(()(1)(3, 1)(3, 2),
 ()(3)(3, 1)(3, 2),
 (1)(1)(1)(3, 2),
 (1)(1)(3)(3, 2),
 (1)(3)(3)(3, 2))