# Crystal of Bernstein-Zelevinsky Multisegments#

class sage.combinat.crystals.multisegments.InfinityCrystalOfMultisegments(n)[source]#

The type $$A_n^{(1)}$$ crystal $$B(\infty)$$ realized using Bernstein-Zelevinsky (BZ) multisegments.

Using (a modified version of the) notation from [JL2009], for $$\ell \in \ZZ_{>0}$$ and $$i \in \ZZ / (n+1)\ZZ$$, a segment of length $$\ell$$ and head $$i$$ is the sequence of consecutive residues $$[i,i+1,\dots,i+\ell-1]$$. The notation for a segment of length $$\ell$$ and head $$i$$ is simplified to $$[i; \ell)$$. Similarly, a segment of length $$\ell$$ and tail $$i$$ is the sequence of consecutive residues $$[i-\ell+1, \ldots, i-1, i]$$. The latter is denoted simply by $$(\ell;i]$$. Finally, a multisegment is a formal linear combination of segments, usually written in the form

$\begin{split}\psi = \sum_{\substack{i \in \ZZ/(n+1)\ZZ \\ \ell \in \ZZ_{>0}}} m_{(\ell;i]} (\ell; i].\end{split}$

Such a multisegment is called aperiodic if, for every $$\ell > 0$$, there exists some $$i \in \ZZ / (n+1)\ZZ$$ such that $$(\ell; i]$$ does not appear in $$\psi$$. Denote the set of all periodic multisegments, together with the empty multisegment $$\varnothing$$, by $$\Psi$$. We define a crystal structure on multisegments as follows. Set $$S_{\ell,i} = \sum_{k \ge \ell} (m_{(k;i-1]} - m_{(k;i]})$$ and let $$\ell_f$$ be the minimal $$\ell$$ that attains the value $$\min_{\ell > 0} S_{\ell,i}$$. Then we have

$\begin{split}f_i \psi = \begin{cases} \psi + (1;i] & \text{ if } \ell_f = 1,\\ \psi + (\ell_f;i] - (\ell_f-1;i-1] & \text{ if } \ell_f > 1. \end{cases}\end{split}$

Similarly, let $$\ell_e$$ be the maximal $$\ell$$ that attains the value $$\min_{\ell > 0} S_{\ell,i}$$. Then we have

$\begin{split}e_i \psi = \begin{cases} 0 & \text{ if } \min_{\ell > 0} S_{\ell,i} = 0, \\ \psi + (1; i] & \text{ if } \ell_e = 1,\\ \psi - (\ell_e; i] + (\ell_e-1; i-1] & \text{ if } \ell_e > 1. \end{cases}\end{split}$

Alternatively, the crystal operators may be defined using a signature rule, as detailed in Section 4 of [JL2009] (following [AJL2011]). For $$\psi \in \Psi$$ and $$i \in \ZZ/(n+1)\ZZ$$, encode all segments in $$\psi$$ with tail $$i$$ by the symbol $$R$$ and all segments in $$\psi$$ with tail $$i-1$$ by $$A$$. For $$\ell > 0$$, set $$w_{i,\ell} = R^{m_{(\ell;i]}} A^{m_{(\ell;i-1]}}$$ and $$w_i = \prod_{\ell\ge 1} w_{i,\ell}$$. By successively canceling out as many $$RA$$ factors as possible, set $$\widetilde{w}_i = A^{a_i(\psi)} R^{r_i(\psi)}$$. If $$a_i(\psi) > 0$$, denote by $$\ell_f > 0$$ the length of the rightmost segment $$A$$ in $$\widetilde{w}_i$$. If $$a_i(\psi) = 0$$, set $$\ell_f = 0$$. Then

$\begin{split}f_i \psi = \begin{cases} \psi + (1; i] & \text{ if } a_i(\psi) = 0,\\ \psi + (\ell_f; i] - (\ell_f-1; i-1] & \text{ if } a_i(\psi) > 0. \end{cases}\end{split}$

The rule for computing $$e_i \psi$$ is similar.

INPUT:

• n – for type $$A_n^{(1)}$$

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: x = B([(8,1),(6,0),(5,1),(5,0),(4,0),(4,1),(4,1),(3,0),(3,0),(3,1),(3,1),(1,0),(1,2),(1,2)]); x
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (1; 0] + 2 * (1; 2]
sage: x.f(1)
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (2; 1] + 2 * (1; 2]
sage: x.f(1).f(1)
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (2; 1] + (1; 1] + 2 * (1; 2]
sage: x.e(1)
(7; 0] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (1; 0] + 2 * (1; 2]
sage: x.e(1).e(1)
sage: x.f(0)
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (2; 0] + (1; 0] + (1; 2]

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> x = B([(Integer(8),Integer(1)),(Integer(6),Integer(0)),(Integer(5),Integer(1)),(Integer(5),Integer(0)),(Integer(4),Integer(0)),(Integer(4),Integer(1)),(Integer(4),Integer(1)),(Integer(3),Integer(0)),(Integer(3),Integer(0)),(Integer(3),Integer(1)),(Integer(3),Integer(1)),(Integer(1),Integer(0)),(Integer(1),Integer(2)),(Integer(1),Integer(2))]); x
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (1; 0] + 2 * (1; 2]
>>> x.f(Integer(1))
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (2; 1] + 2 * (1; 2]
>>> x.f(Integer(1)).f(Integer(1))
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (2; 1] + (1; 1] + 2 * (1; 2]
>>> x.e(Integer(1))
(7; 0] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (1; 0] + 2 * (1; 2]
>>> x.e(Integer(1)).e(Integer(1))
>>> x.f(Integer(0))
(8; 1] + (6; 0] + (5; 0] + (5; 1] + (4; 0] + 2 * (4; 1]
+ 2 * (3; 0] + 2 * (3; 1] + (2; 0] + (1; 0] + (1; 2]


We check an $$\widehat{\mathfrak{sl}}_2$$ example against the generalized Young walls:

sage: B = crystals.infinity.Multisegments(1)
sage: G = B.subcrystal(max_depth=4).digraph()
sage: C = crystals.infinity.GeneralizedYoungWalls(1)
sage: GC = C.subcrystal(max_depth=4).digraph()
sage: G.is_isomorphic(GC, edge_labels=True)
True

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(1))
>>> G = B.subcrystal(max_depth=Integer(4)).digraph()
>>> C = crystals.infinity.GeneralizedYoungWalls(Integer(1))
>>> GC = C.subcrystal(max_depth=Integer(4)).digraph()
>>> G.is_isomorphic(GC, edge_labels=True)
True


REFERENCES:

class Element(parent, value)[source]#

Bases: ElementWrapper

An element in a BZ multisegments crystal.

e(i)[source]#

Return the action of $$e_i$$ on self.

INPUT:

• i – an element of the index set

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: b = B([(4,2), (3,0), (3,1), (1,1), (1,0)])
sage: b.e(0)
(4; 2] + (3; 0] + (3; 1] + (1; 1]
sage: b.e(1)
sage: b.e(2)
(3; 0] + 2 * (3; 1] + (1; 0] + (1; 1]

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> b = B([(Integer(4),Integer(2)), (Integer(3),Integer(0)), (Integer(3),Integer(1)), (Integer(1),Integer(1)), (Integer(1),Integer(0))])
>>> b.e(Integer(0))
(4; 2] + (3; 0] + (3; 1] + (1; 1]
>>> b.e(Integer(1))
>>> b.e(Integer(2))
(3; 0] + 2 * (3; 1] + (1; 0] + (1; 1]

epsilon(i)[source]#

Return $$\varepsilon_i$$ of self.

INPUT:

• i – an element of the index set

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: b = B([(4,2), (3,0), (3,1), (1,1), (1,0)])
sage: b.epsilon(0)
1
sage: b.epsilon(1)
0
sage: b.epsilon(2)
1

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> b = B([(Integer(4),Integer(2)), (Integer(3),Integer(0)), (Integer(3),Integer(1)), (Integer(1),Integer(1)), (Integer(1),Integer(0))])
>>> b.epsilon(Integer(0))
1
>>> b.epsilon(Integer(1))
0
>>> b.epsilon(Integer(2))
1

f(i)[source]#

Return the action of $$f_i$$ on self.

INPUT:

• i – an element of the index set

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: b = B([(4,2), (3,0), (3,1), (1,1), (1,0)])
sage: b.f(0)
(4; 2] + (3; 0] + (3; 1] + 2 * (1; 0] + (1; 1]
sage: b.f(1)
(4; 2] + (3; 0] + (3; 1] + (1; 0] + 2 * (1; 1]
sage: b.f(2)
2 * (4; 2] + (3; 0] + (1; 0] + (1; 1]

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> b = B([(Integer(4),Integer(2)), (Integer(3),Integer(0)), (Integer(3),Integer(1)), (Integer(1),Integer(1)), (Integer(1),Integer(0))])
>>> b.f(Integer(0))
(4; 2] + (3; 0] + (3; 1] + 2 * (1; 0] + (1; 1]
>>> b.f(Integer(1))
(4; 2] + (3; 0] + (3; 1] + (1; 0] + 2 * (1; 1]
>>> b.f(Integer(2))
2 * (4; 2] + (3; 0] + (1; 0] + (1; 1]

phi(i)[source]#

Return $$\varphi_i$$ of self.

Let $$\psi \in \Psi$$. Define $$\varphi_i(\psi) := \varepsilon_i(\psi) + \langle h_i, \mathrm{wt}(\psi) \rangle$$, where $$h_i$$ is the $$i$$-th simple coroot and $$\mathrm{wt}(\psi)$$ is the weight() of $$\psi$$.

INPUT:

• i – an element of the index set

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: b = B([(4,2), (3,0), (3,1), (1,1), (1,0)])
sage: b.phi(0)
1
sage: b.phi(1)
0
sage: mg = B.highest_weight_vector()
sage: mg.f(1).phi(0)
1

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> b = B([(Integer(4),Integer(2)), (Integer(3),Integer(0)), (Integer(3),Integer(1)), (Integer(1),Integer(1)), (Integer(1),Integer(0))])
>>> b.phi(Integer(0))
1
>>> b.phi(Integer(1))
0
>>> mg = B.highest_weight_vector()
>>> mg.f(Integer(1)).phi(Integer(0))
1

weight()[source]#

Return the weight of self.

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: b = B([(4,2), (3,0), (3,1), (1,1), (1,0)])
sage: b.weight()
-4*delta

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> b = B([(Integer(4),Integer(2)), (Integer(3),Integer(0)), (Integer(3),Integer(1)), (Integer(1),Integer(1)), (Integer(1),Integer(0))])
>>> b.weight()
-4*delta

highest_weight_vector()[source]#

Return the highest weight vector of self.

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: B.highest_weight_vector()
0

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> B.highest_weight_vector()
0

weight_lattice_realization()[source]#

Return a realization of the weight lattice of self.

EXAMPLES:

sage: B = crystals.infinity.Multisegments(2)
sage: B.weight_lattice_realization()
Extended weight lattice of the Root system of type ['A', 2, 1]

>>> from sage.all import *
>>> B = crystals.infinity.Multisegments(Integer(2))
>>> B.weight_lattice_realization()
Extended weight lattice of the Root system of type ['A', 2, 1]