Affine factorization crystal of type \(A\)#

class sage.combinat.crystals.affine_factorization.AffineFactorizationCrystal(w, n, x=None)#

Bases: UniqueRepresentation, Parent

The crystal on affine factorizations with a cut-point, as introduced by [MS2015].

INPUT:

  • w – an element in an (affine) Weyl group or a skew shape of \(k\)-bounded partitions (if \(k\) was specified)

  • n – the number of factors in the factorization

  • x – (default: None) the cut point; if not specified it is determined as the minimal missing residue in w

  • k – (default: None) positive integer, specifies that w is \(k\)-bounded or a \(k+1\)-core when specified

EXAMPLES:

sage: W = WeylGroup(['A',3,1], prefix='s')
sage: w = W.from_reduced_word([2,3,2,1])
sage: B = crystals.AffineFactorization(w,3); B
Crystal on affine factorizations of type A2 associated to s2*s3*s2*s1
sage: B.list()
[(1, s2, s3*s2*s1),
 (1, s3*s2, s3*s1),
 (1, s3*s2*s1, s3),
 (s3, s2, s3*s1),
 (s3, s2*s1, s3),
 (s3*s2, s1, s3),
 (s3*s2*s1, 1, s3),
 (s3*s2*s1, s3, 1),
 (s3*s2, 1, s3*s1),
 (s3*s2, s3, s1),
 (s3*s2, s3*s1, 1),
 (s2, 1, s3*s2*s1),
 (s2, s3, s2*s1),
 (s2, s3*s2, s1),
 (s2, s3*s2*s1, 1)]

We can also access the crystal by specifying a skew shape in terms of \(k\)-bounded partitions:

sage: crystals.AffineFactorization([[3,1,1],[1]], 3, k=3)
Crystal on affine factorizations of type A2 associated to s2*s3*s2*s1

We can compute the highest weight elements:

sage: hw = [w for w in B if w.is_highest_weight()]
sage: hw
[(1, s2, s3*s2*s1)]
sage: hw[0].weight()
(3, 1, 0)

And show that this crystal is isomorphic to the tableau model of the same weight:

sage: C = crystals.Tableaux(['A',2],shape=[3,1])
sage: GC = C.digraph()
sage: GB = B.digraph()
sage: GC.is_isomorphic(GB, edge_labels=True)
True

The crystal operators themselves move elements between adjacent factors:

sage: b = hw[0];b
(1, s2, s3*s2*s1)
sage: b.f(1)
(1, s3*s2, s3*s1)

The cut point \(x\) is not supposed to occur in the reduced words for \(w\):

sage: B = crystals.AffineFactorization([[3,2],[2]],4,x=0,k=3)
Traceback (most recent call last):
...
ValueError: x cannot be in reduced word of s0*s3*s2
class Element#

Bases: ElementWrapper

bracketing(i)#

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

EXAMPLES:

sage: B = crystals.AffineFactorization([[3,1],[1]], 3, k=3, x=4)
sage: W = B.w.parent()
sage: t = B((W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
(1, s3, s2*s1)
sage: t.bracketing(1)
[[3], [2, 1]]
e(i)#

Return the action of \(e_i\) on self.

EXAMPLES:

sage: B = crystals.AffineFactorization([[3,1],[1]], 4, k=3)
sage: W = B.w.parent()
sage: t = B((W.one(),W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
(1, 1, s3, s2*s1)
sage: t.e(1)
(1, 1, 1, s3*s2*s1)
f(i)#

Return the action of \(f_i\) on self.

EXAMPLES:

sage: B = crystals.AffineFactorization([[3,1],[1]], 4, k=3)
sage: W = B.w.parent()
sage: t = B((W.one(),W.one(),W.from_reduced_word([3]),W.from_reduced_word([2,1]))); t
(1, 1, s3, s2*s1)
sage: t.f(2)
(1, s3, 1, s2*s1)
sage: t.f(1)
(1, 1, s3*s2, s1)
to_tableau()#

Return the tableau representation of self.

Uses the recording tableau of a minor variation of Edelman-Greene insertion. See Theorem 4.11 in [MS2015].

EXAMPLES:

sage: W = WeylGroup(['A',3,1], prefix='s')
sage: w = W.from_reduced_word([2,1,3,2])
sage: B = crystals.AffineFactorization(w,3)
sage: for x in B:
....:     x
....:     x.to_tableau().pp()
(1, s2*s1, s3*s2)
  1  1
  2  2
(s2, s1, s3*s2)
  1  1
  2  3
(s2, s3*s1, s2)
  1  2
  2  3
(s2*s1, 1, s3*s2)
  1  1
  3  3
(s2*s1, s3, s2)
  1  2
  3  3
(s2*s1, s3*s2, 1)
  2  2
  3  3
class sage.combinat.crystals.affine_factorization.FactorizationToTableaux(parent, cartan_type=None, virtualization=None, scaling_factors=None)#

Bases: CrystalMorphism

is_embedding()#

Return True as this is an isomorphism.

EXAMPLES:

sage: W = WeylGroup(['A',3,1], prefix='s')
sage: w = W.from_reduced_word([2,1,3,2])
sage: B = crystals.AffineFactorization(w,3)
sage: phi = B._tableaux_isomorphism
sage: phi.is_isomorphism()
True
is_isomorphism()#

Return True as this is an isomorphism.

EXAMPLES:

sage: W = WeylGroup(['A',3,1], prefix='s')
sage: w = W.from_reduced_word([2,1,3,2])
sage: B = crystals.AffineFactorization(w,3)
sage: phi = B._tableaux_isomorphism
sage: phi.is_isomorphism()
True
is_surjective()#

Return True as this is an isomorphism.

EXAMPLES:

sage: W = WeylGroup(['A',3,1], prefix='s')
sage: w = W.from_reduced_word([2,1,3,2])
sage: B = crystals.AffineFactorization(w,3)
sage: phi = B._tableaux_isomorphism
sage: phi.is_isomorphism()
True
sage.combinat.crystals.affine_factorization.affine_factorizations(w, l, weight=None)#

Return all factorizations of w into l factors or of weight weight.

INPUT:

  • w – an (affine) permutation or element of the (affine) Weyl group

  • l – nonnegative integer

  • weight – (default: None) tuple of nonnegative integers specifying the length of the factors

EXAMPLES:

sage: W = WeylGroup(['A',3,1], prefix='s')
sage: w = W.from_reduced_word([3,2,3,1,0,1])
sage: from sage.combinat.crystals.affine_factorization import affine_factorizations
sage: affine_factorizations(w,4)
[[s2, s3, s0, s2*s1*s0],
[s2, s3, s2*s0, s1*s0],
[s2, s3, s2*s1*s0, s1],
[s2, s3*s2, s0, s1*s0],
[s2, s3*s2, s1*s0, s1],
[s2, s3*s2*s1, s0, s1],
[s3*s2, s3, s0, s1*s0],
[s3*s2, s3, s1*s0, s1],
[s3*s2, s3*s1, s0, s1],
[s3*s2*s1, s3, s0, s1]]

sage: W = WeylGroup(['A',2], prefix='s')
sage: w0 = W.long_element()
sage: affine_factorizations(w0,3)
[[1, s1, s2*s1],
[1, s2*s1, s2],
[s1, 1, s2*s1],
[s1, s2, s1],
[s1, s2*s1, 1],
[s2, s1, s2],
[s2*s1, 1, s2],
[s2*s1, s2, 1]]
sage: affine_factorizations(w0,3,(0,1,2))
[[1, s1, s2*s1]]
sage: affine_factorizations(w0,3,(1,1,1))
[[s1, s2, s1], [s2, s1, s2]]
sage: W = WeylGroup(['A',3], prefix='s')
sage: w0 = W.long_element()
sage: affine_factorizations(w0,6,(1,1,1,1,1,1))  # long time
[[s1, s2, s1, s3, s2, s1],
[s1, s2, s3, s1, s2, s1],
[s1, s2, s3, s2, s1, s2],
[s1, s3, s2, s1, s3, s2],
[s1, s3, s2, s3, s1, s2],
[s2, s1, s2, s3, s2, s1],
[s2, s1, s3, s2, s1, s3],
[s2, s1, s3, s2, s3, s1],
[s2, s3, s1, s2, s1, s3],
[s2, s3, s1, s2, s3, s1],
[s2, s3, s2, s1, s2, s3],
[s3, s1, s2, s1, s3, s2],
[s3, s1, s2, s3, s1, s2],
[s3, s2, s1, s2, s3, s2],
[s3, s2, s1, s3, s2, s3],
[s3, s2, s3, s1, s2, s3]]
sage: affine_factorizations(w0,6,(0,0,0,1,2,3))
[[1, 1, 1, s1, s2*s1, s3*s2*s1]]