# Affine factorization crystal of type $$A$$¶

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

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
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)
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))
[[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]]