Polyhedral realization of \(B(\infty)\) - Combinatorics

Skip to content
Back to top
View this page
Edit this page

# Polyhedral realization of \(B(\infty)\)

class sage.combinat.crystals.polyhedral_realization.InfinityCrystalAsPolyhedralRealization(cartan_type, seq)

  Bases: `TensorProductOfCrystals`

  The polyhedral realization of \(B(\infty)\).

  Note

  Here we are using anti-Kashiwara notation and might differ from some of the literature.

  Consider a Kac-Moody algebra \(\mathfrak{g}\) of Cartan type \(X\) with index set \(I\), and consider a finite sequence \(J = (j_1, j_2, \ldots, j_m)\) whose support equals \(I\). We extend this to an infinite sequence by taking \(\bar{J} = J \cdot J \cdot J \cdots\), where \(\cdot\) denotes concatenation of sequences. Let

  \[B_J = B_{j_m} \otimes \cdots \otimes B_{j_2} \otimes B_{j_1},\]

  where \(B_i\) is an `ElementaryCrystal`.

  As given in Theorem 2.1.1 of [Ka1993], there exists a strict crystal embedding \(\Psi_i \colon B(\infty) \to B_i \otimes B(\infty)\) defined by \(u_{\infty} \mapsto b_i(0) \otimes u_{\infty}\), where \(b_i(0) \in B_i\) and \(u_{\infty}\) is the (unique) highest weight element in \(B(\infty)\). This is sometimes known as the Kashiwara embedding [NZ1997] (though, in [NZ1997], the target of this map is denoted by \(\ZZ_J^\infty\)). By iterating this embedding by taking \(\Psi_J = \Psi_{j_n} \circ \Psi_{j_{n-1}} \circ \cdots \circ \Psi_{j_1}\), we obtain the following strict crystal embedding:

  \[\Psi_J^n \colon B(\infty) \to B_J^{\otimes n} \otimes B(\infty).\]

  We note there is a natural analog of Lemma 10.6.2 in [HK2002] that for any \(b \in B(\infty)\), there exists a positive integer \(N\) such that

  \[\Psi^N_J(b) = \left( \bigotimes_{k=1}^N b^{(k)} \right) \otimes u_{\infty}.\]

  Therefore we can model elements \(b \in B(\infty)\) by considering an infinite list of elements \(b^{(k)} \in B_J\) and defining the crystal structure by:

  \[\begin{split}\begin{aligned} \mathrm{wt}(b) & = \sum_{k=1}^N \mathrm{wt}(b^{(k)}) \\ e_i(b) & = e_i\left( \left( \bigotimes_{k=1}^N b^{(k)} \right) \right) \otimes u_{\infty}, \\ f_i(b) & = f_i\left( \left( \bigotimes_{k=1}^N b^{(k)} \right) \right) \otimes u_{\infty}, \\ \varepsilon_i(b) & = \max_{ e_i^k(b) \neq 0 } k, \\ \varphi_i(b) & = \varepsilon_i(b) - \langle \mathrm{wt}(b), h_i^{\vee} \rangle. \end{aligned}\end{split}\]

  To translate this into a finite list, we consider a finite sequence \(b_1 \otimes \cdots \otimes b_N\) and if

  \[f_i\left( b^{(1)} \otimes \cdots b^{(N-1)} \otimes b^{(N)} \right) = b^{(1)} \otimes \cdots \otimes b^{(N-1)} \otimes f_i\left( b^{(N)} \right),\]

  then we take the image as \(b^{(1)} \otimes \cdots \otimes f_i\left( b^{(N)} \right) \otimes b^{(N+1)}\). Similarly we remove \(b^{(N)}\) if we have \(b^{(N)} = \bigotimes_{k=1}^m b_{j_k}(0)\). Additionally if

  \[e_i\left( b^{(1)} \otimes \cdots \otimes b^{(N-1)} \otimes b^{(N)} \right) = b^{(1)} \otimes \cdots \otimes b^{(N-1)} \otimes e_i\left( b^{(N)} \right),\]

  then we consider this to be \(0\).

  INPUT:

  - `cartan_type` – a Cartan type

  - `seq` – (default: `None`) a finite sequence whose support equals the index set of the Cartan type; if `None`, then this is the index set

  EXAMPLES:

  Sage

      sage: B = crystals.infinity.PolyhedralRealization(['A',2])
      sage: mg = B.module_generators[0]; mg
      [0, 0]
      sage: mg.f_string([2,1,2,2])
      [0, -3, -1, 0, 0, 0]

  Python

      >>> from sage.all import *
      >>> B = crystals.infinity.PolyhedralRealization(['A',Integer(2)])
      >>> mg = B.module_generators[Integer(0)]; mg
      [0, 0]
      >>> mg.f_string([Integer(2),Integer(1),Integer(2),Integer(2)])
      [0, -3, -1, 0, 0, 0]

  An example of type \(B_2\):

  Sage

      sage: B = crystals.infinity.PolyhedralRealization(['B',2])
      sage: mg = B.module_generators[0]; mg
      [0, 0]
      sage: mg.f_string([2,1,2,2])
      [0, -2, -1, -1, 0, 0]

  [Python]

      >>> from sage.all import *
      >>> B = crystals.infinity.PolyhedralRealization(['B',Integer(2)])
      >>> mg = B.module_generators[Integer(0)]; mg
      [0, 0]
      >>> mg.f_string([Integer(2),Integer(1),Integer(2),Integer(2)])
      [0, -2, -1, -1, 0, 0]

  An example of type \(G_2\):

  Sage

      sage: B = crystals.infinity.PolyhedralRealization(['G',2])
      sage: mg = B.module_generators[0]; mg
      [0, 0]
      sage: mg.f_string([2,1,2,2])
      [0, -3, -1, 0, 0, 0]

  Python

      >>> from sage.all import *
      >>> B = crystals.infinity.PolyhedralRealization(['G',Integer(2)])
      >>> mg = B.module_generators[Integer(0)]; mg
      [0, 0]
      >>> mg.f_string([Integer(2),Integer(1),Integer(2),Integer(2)])
      [0, -3, -1, 0, 0, 0]

  class Element

    Bases: `TensorProductOfCrystalsElement`

    An element in the polyhedral realization of \(B(\infty)\).

    e(i)

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

      EXAMPLES:

      Sage

          sage: B = crystals.infinity.PolyhedralRealization(['A',2])
          sage: mg = B.module_generators[0]
          sage: all(mg.e(i) is None for i in B.index_set())
          True
          sage: mg.f(1).e(1) == mg
          True

      Python

          >>> from sage.all import *
          >>> B = crystals.infinity.PolyhedralRealization(['A',Integer(2)])
          >>> mg = B.module_generators[Integer(0)]
          >>> all(mg.e(i) is None for i in B.index_set())
          True
          >>> mg.f(Integer(1)).e(Integer(1)) == mg
          True

    epsilon(i)

      Return \(\varepsilon_i\) of `self`.

      EXAMPLES:

      Sage

          sage: B = crystals.infinity.PolyhedralRealization(['A',2,1])
          sage: mg = B.module_generators[0]
          sage: [mg.epsilon(i) for i in B.index_set()]
          [0, 0, 0]
          sage: elt = mg.f(0)
          sage: [elt.epsilon(i) for i in B.index_set()]
          [1, 0, 0]
          sage: elt = mg.f_string([0,1,2])
          sage: [elt.epsilon(i) for i in B.index_set()]
          [0, 0, 1]
          sage: elt = mg.f_string([0,1,2,2])
          sage: [elt.epsilon(i) for i in B.index_set()]
          [0, 0, 2]

      Python

          >>> from sage.all import *
          >>> B = crystals.infinity.PolyhedralRealization(['A',Integer(2),Integer(1)])
          >>> mg = B.module_generators[Integer(0)]
          >>> [mg.epsilon(i) for i in B.index_set()]
          [0, 0, 0]
          >>> elt = mg.f(Integer(0))
          >>> [elt.epsilon(i) for i in B.index_set()]
          [1, 0, 0]
          >>> elt = mg.f_string([Integer(0),Integer(1),Integer(2)])
          >>> [elt.epsilon(i) for i in B.index_set()]
          [0, 0, 1]
          >>> elt = mg.f_string([Integer(0),Integer(1),Integer(2),Integer(2)])
          >>> [elt.epsilon(i) for i in B.index_set()]
          [0, 0, 2]

    f(i)

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

      EXAMPLES:

      Sage

          sage: B = crystals.infinity.PolyhedralRealization(['A',2])
          sage: mg = B.module_generators[0]
          sage: mg.f(1)
          [-1, 0, 0, 0]
          sage: mg.f_string([1,2,2,1])
          [-1, -2, -1, 0, 0, 0]

      Python

          >>> from sage.all import *
          >>> B = crystals.infinity.PolyhedralRealization(['A',Integer(2)])
          >>> mg = B.module_generators[Integer(0)]
          >>> mg.f(Integer(1))
          [-1, 0, 0, 0]
          >>> mg.f_string([Integer(1),Integer(2),Integer(2),Integer(1)])
          [-1, -2, -1, 0, 0, 0]

    phi(i)

      Return \(\varphi_i\) of `self`.

      EXAMPLES:

      Sage

          sage: B = crystals.infinity.PolyhedralRealization(['A',2,1])
          sage: mg = B.module_generators[0]
          sage: [mg.phi(i) for i in B.index_set()]
          [0, 0, 0]
          sage: elt = mg.f(0)
          sage: [elt.phi(i) for i in B.index_set()]
          [-1, 1, 1]
          sage: elt = mg.f_string([0,1])
          sage: [elt.phi(i) for i in B.index_set()]
          [-1, 0, 2]
          sage: elt = mg.f_string([0,1,2,2])
          sage: [elt.phi(i) for i in B.index_set()]
          [1, 1, 0]

      Python

          >>> from sage.all import *
          >>> B = crystals.infinity.PolyhedralRealization(['A',Integer(2),Integer(1)])
          >>> mg = B.module_generators[Integer(0)]
          >>> [mg.phi(i) for i in B.index_set()]
          [0, 0, 0]
          >>> elt = mg.f(Integer(0))
          >>> [elt.phi(i) for i in B.index_set()]
          [-1, 1, 1]
          >>> elt = mg.f_string([Integer(0),Integer(1)])
          >>> [elt.phi(i) for i in B.index_set()]
          [-1, 0, 2]
          >>> elt = mg.f_string([Integer(0),Integer(1),Integer(2),Integer(2)])
          >>> [elt.phi(i) for i in B.index_set()]
          [1, 1, 0]

    truncate(k=None)

      Truncate `self` to have length `k` and return as an element in a (finite) tensor product of crystals.

      INPUT:

      - `k` – (optional) the length of the truncation; if not specified, then returns one more than the current non-ground-state elements (i.e. the current list in `self`)

      EXAMPLES:

      Sage

          sage: B = crystals.infinity.PolyhedralRealization(['A',2])
          sage: mg = B.module_generators[0]
          sage: elt = mg.f_string([1,2,2,1]); elt
          [-1, -2, -1, 0, 0, 0]
          sage: t = elt.truncate(); t
          [-1, -2, -1, 0, 0, 0]
          sage: t.parent() is B.finite_tensor_product(6)
          True
          sage: elt.truncate(2)
          [-1, -2]
          sage: elt.truncate(10)
          [-1, -2, -1, 0, 0, 0, 0, 0, 0, 0]

      Python

          >>> from sage.all import *
          >>> B = crystals.infinity.PolyhedralRealization(['A',Integer(2)])
          >>> mg = B.module_generators[Integer(0)]
          >>> elt = mg.f_string([Integer(1),Integer(2),Integer(2),Integer(1)]); elt
          [-1, -2, -1, 0, 0, 0]
          >>> t = elt.truncate(); t
          [-1, -2, -1, 0, 0, 0]
          >>> t.parent() is B.finite_tensor_product(Integer(6))
          True
          >>> elt.truncate(Integer(2))
          [-1, -2]
          >>> elt.truncate(Integer(10))
          [-1, -2, -1, 0, 0, 0, 0, 0, 0, 0]

  finite_tensor_product(k)

    Return the finite tensor product of crystals of length `k` by truncating `self`.

    EXAMPLES:

    Sage

        sage: B = crystals.infinity.PolyhedralRealization(['A',2])
        sage: B.finite_tensor_product(5)
        Full tensor product of the crystals
         [The 1-elementary crystal of type ['A', 2],
          The 2-elementary crystal of type ['A', 2],
          The 1-elementary crystal of type ['A', 2],
          The 2-elementary crystal of type ['A', 2],
          The 1-elementary crystal of type ['A', 2]]

    Python

        >>> from sage.all import *
        >>> B = crystals.infinity.PolyhedralRealization(['A',Integer(2)])
        >>> B.finite_tensor_product(Integer(5))
        Full tensor product of the crystals
         [The 1-elementary crystal of type ['A', 2],
          The 2-elementary crystal of type ['A', 2],
          The 1-elementary crystal of type ['A', 2],
          The 2-elementary crystal of type ['A', 2],
          The 1-elementary crystal of type ['A', 2]]