Elementary crystals - Combinatorics

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

# Elementary crystals

Let \(\lambda\) be a weight. The crystals \(T_{\lambda}\), \(R_{\lambda}\), \(B_i\), and \(C\) are important objects in the tensor category of crystals. For example, the crystal \(T_0\) is the neutral object in this category; i.e., \(T_0 \otimes B \cong B \otimes T_0 \cong B\) for any crystal \(B\). We list some other properties of these crystals:

- The crystal \(T_{\lambda} \otimes B(\infty)\) is the crystal of the Verma module with highest weight \(\lambda\), where \(\lambda\) is a dominant integral weight.

- Let \(u_{\infty}\) be the highest weight vector of \(B(\infty)\) and \(\lambda\) be a dominant integral weight. There is an embedding of crystals \(B(\lambda) \longrightarrow T_{\lambda} \otimes B(\infty)\) sending \(u_{\lambda} \mapsto t_{\lambda} \otimes u_{\infty}\) which is not strict, but the embedding \(B(\lambda) \longrightarrow C \otimes T_{\lambda} \otimes B(\infty)\) by \(u_{\lambda} \mapsto c \otimes t_{\lambda} \otimes u_{\infty}\) is a strict embedding.

- For any dominant integral weight \(\lambda\), there is a surjective crystal morphism \(\Psi_{\lambda} \colon R_{\lambda} \otimes B(\infty) \longrightarrow B(\lambda)\). More precisely, if \(B = \{r_{\lambda} \otimes b \in R_{\lambda} \otimes B(\infty) : \Psi_{\lambda}(r_{\lambda} \otimes b) \neq 0 \}\), then \(B \cong B(\lambda)\) as crystals.

- For all Cartan types and all weights \(\lambda\), we have \(R_{\lambda} \cong C \otimes T_{\lambda}\) as crystals.

- For each \(i\), there is a strict crystal morphism \(\Psi_i \colon B(\infty) \longrightarrow B_i \otimes B(\infty)\) defined by \(u_{\infty} \mapsto b_i(0) \otimes u_{\infty}\), where \(u_\infty\) is the highest weight vector of \(B(\infty)\).

For more information on \(B(\infty)\), see `InfinityCrystalOfTableaux`.

Note

As with `TensorProductOfCrystals`, we are using the opposite of Kashiwara’s convention.

AUTHORS:

- Ben Salisbury: Initial version

REFERENCES:

- [Ka1993]

- [NZ1997]

class sage.combinat.crystals.elementary_crystals.AbstractSingleCrystalElement

  Bases: `Element`

  Abstract base class for elements in crystals with a single element.

  e(i)

    Return \(e_i\) of `self`, which is `None` for all \(i\).

    INPUT:

    - `i` – an element of the index set

    EXAMPLES:

    Sage

        sage: ct = CartanType(['A',2])
        sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
        sage: T = crystals.elementary.T(ct,la[1])
        sage: t = T.highest_weight_vector()
        sage: t.e(1)
        sage: t.e(2)

    Python

        >>> from sage.all import *
        >>> ct = CartanType(['A',Integer(2)])
        >>> la = RootSystem(ct).weight_lattice().fundamental_weights()
        >>> T = crystals.elementary.T(ct,la[Integer(1)])
        >>> t = T.highest_weight_vector()
        >>> t.e(Integer(1))
        >>> t.e(Integer(2))

  f(i)

    Return \(f_i\) of `self`, which is `None` for all \(i\).

    INPUT:

    - `i` – an element of the index set

    EXAMPLES:

    Sage

        sage: ct = CartanType(['A',2])
        sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
        sage: T = crystals.elementary.T(ct,la[1])
        sage: t = T.highest_weight_vector()
        sage: t.f(1)
        sage: t.f(2)

    Python

        >>> from sage.all import *
        >>> ct = CartanType(['A',Integer(2)])
        >>> la = RootSystem(ct).weight_lattice().fundamental_weights()
        >>> T = crystals.elementary.T(ct,la[Integer(1)])
        >>> t = T.highest_weight_vector()
        >>> t.f(Integer(1))
        >>> t.f(Integer(2))

class sage.combinat.crystals.elementary_crystals.ComponentCrystal(cartan_type, P)

  Bases: `UniqueRepresentation`, `Parent`

  The component crystal.

  Defined in [Ka1993], the component crystal \(C = \{c\}\) is the single element crystal whose crystal structure is defined by

  \[\mathrm{wt}(c) = 0, \quad e_i c = f_i c = 0, \quad \varepsilon_i(c) = \varphi_i(c) = 0.\]

  Note \(C \cong B(0)\), where \(B(0)\) is the highest weight crystal of highest weight \(0\).

  INPUT:

  - `cartan_type` – a Cartan type

  class Element

    Bases: `AbstractSingleCrystalElement`

    Element of a component crystal.

    epsilon(i)

      Return \(\varepsilon_i\) of `self`, which is \(0\) for all \(i\).

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: C = crystals.elementary.Component("C5")
          sage: c = C.highest_weight_vector()
          sage: [c.epsilon(i) for i in C.index_set()]
          [0, 0, 0, 0, 0]

      Python

          >>> from sage.all import *
          >>> C = crystals.elementary.Component("C5")
          >>> c = C.highest_weight_vector()
          >>> [c.epsilon(i) for i in C.index_set()]
          [0, 0, 0, 0, 0]

    phi(i)

      Return \(\varphi_i\) of `self`, which is \(0\) for all \(i\).

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: C = crystals.elementary.Component("C5")
          sage: c = C.highest_weight_vector()
          sage: [c.phi(i) for i in C.index_set()]
          [0, 0, 0, 0, 0]

      Python

          >>> from sage.all import *
          >>> C = crystals.elementary.Component("C5")
          >>> c = C.highest_weight_vector()
          >>> [c.phi(i) for i in C.index_set()]
          [0, 0, 0, 0, 0]

    weight()

      Return the weight of `self`, which is always \(0\).

      EXAMPLES:

      Sage

          sage: C = crystals.elementary.Component("F4")
          sage: c = C.highest_weight_vector()
          sage: c.weight()
          (0, 0, 0, 0)

      Python

          >>> from sage.all import *
          >>> C = crystals.elementary.Component("F4")
          >>> c = C.highest_weight_vector()
          >>> c.weight()
          (0, 0, 0, 0)

  cardinality()

    Return the cardinality of `self`, which is always \(1\).

    EXAMPLES:

    Sage

        sage: C = crystals.elementary.Component("E6")
        sage: c = C.highest_weight_vector()
        sage: C.cardinality()
        1

    Python

        >>> from sage.all import *
        >>> C = crystals.elementary.Component("E6")
        >>> c = C.highest_weight_vector()
        >>> C.cardinality()
        1

  weight_lattice_realization()

    Return the weight lattice realization of `self`.

    EXAMPLES:

    Sage

        sage: C = crystals.elementary.Component("A2")
        sage: C.weight_lattice_realization()
        Ambient space of the Root system of type ['A', 2]

        sage: P = RootSystem(['A',2]).weight_lattice()
        sage: C = crystals.elementary.Component(P)
        sage: C.weight_lattice_realization() is P
        True

    Python

        >>> from sage.all import *
        >>> C = crystals.elementary.Component("A2")
        >>> C.weight_lattice_realization()
        Ambient space of the Root system of type ['A', 2]

        >>> P = RootSystem(['A',Integer(2)]).weight_lattice()
        >>> C = crystals.elementary.Component(P)
        >>> C.weight_lattice_realization() is P
        True

class sage.combinat.crystals.elementary_crystals.ElementaryCrystal(cartan_type, i)

  Bases: `UniqueRepresentation`, `Parent`

  The elementary crystal \(B_i\).

  For \(i\) an element of the index set of type \(X\), the crystal \(B_i\) of type \(X\) is the set

  \[B_i = \{ b_i(m) : m \in \ZZ \},\]

  where the crystal structure is given by

  \[\begin{split}\begin{aligned} \mathrm{wt}\bigl(b_i(m)\bigr) &= m\alpha_i \\ \varphi_j\bigl(b_i(m)\bigr) &= \begin{cases} m & \text{ if } j=i, \\ -\infty & \text{ if } j\neq i, \end{cases} \\ \varepsilon_j\bigl(b_i(m)\bigr) &= \begin{cases} -m & \text{ if } j=i, \\ -\infty & \text{ if } j\neq i, \end{cases} \\ e_j b_i(m) &= \begin{cases} b_i(m+1) & \text{ if } j=i, \\ 0 & \text{ if } j\neq i, \end{cases} \\ f_j b_i(m) &= \begin{cases} b_i(m-1) & \text{ if } j=i, \\ 0 & \text{ if } j\neq i. \end{cases} \end{aligned}\end{split}\]

  The Kashiwara embedding theorem asserts there is a unique strict crystal embedding of crystals

  \[B(\infty) \hookrightarrow B_i \otimes B(\infty),\]

  satisfying certain properties (see [Ka1993]). The above embedding may be iterated to obtain a new embedding

  \[B(\infty) \hookrightarrow B_{i_N} \otimes B_{i_{N-1}} \otimes \cdots \otimes B_{i_2} \otimes B_{i_1} \otimes B(\infty),\]

  which is a foundational object in the study of polyhedral realizations of crystals (see, for example, [NZ1997]).

  class Element(parent, m)

    Bases: `Element`

    Element of a \(B_i\) crystal.

    e(i)

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

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: B = crystals.elementary.Elementary(['E',7],1)
          sage: B(3).e(1)
          4
          sage: B(172).e_string([1]*171)
          343
          sage: B(0).e(2)

      Python

          >>> from sage.all import *
          >>> B = crystals.elementary.Elementary(['E',Integer(7)],Integer(1))
          >>> B(Integer(3)).e(Integer(1))
          4
          >>> B(Integer(172)).e_string([Integer(1)]*Integer(171))
          343
          >>> B(Integer(0)).e(Integer(2))

    epsilon(i)

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

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: B = crystals.elementary.Elementary(['F',4],3)
          sage: [[B(j).epsilon(i) for i in B.index_set()] for j in range(5)]
          [[-inf, -inf, 0, -inf],
           [-inf, -inf, -1, -inf],
           [-inf, -inf, -2, -inf],
           [-inf, -inf, -3, -inf],
           [-inf, -inf, -4, -inf]]

      Python

          >>> from sage.all import *
          >>> B = crystals.elementary.Elementary(['F',Integer(4)],Integer(3))
          >>> [[B(j).epsilon(i) for i in B.index_set()] for j in range(Integer(5))]
          [[-inf, -inf, 0, -inf],
           [-inf, -inf, -1, -inf],
           [-inf, -inf, -2, -inf],
           [-inf, -inf, -3, -inf],
           [-inf, -inf, -4, -inf]]

    f(i)

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

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: B = crystals.elementary.Elementary(['E',7],1)
          sage: B(3).f(1)
          2
          sage: B(172).f_string([1]*171)
          1
          sage: B(0).e(2)

      Python

          >>> from sage.all import *
          >>> B = crystals.elementary.Elementary(['E',Integer(7)],Integer(1))
          >>> B(Integer(3)).f(Integer(1))
          2
          >>> B(Integer(172)).f_string([Integer(1)]*Integer(171))
          1
          >>> B(Integer(0)).e(Integer(2))

    phi(i)

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

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: B = crystals.elementary.Elementary(['E',8,1],4)
          sage: [[B(m).phi(j) for j in B.index_set()] for m in range(44,49)]
          [[-inf, -inf, -inf, -inf, 44, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 45, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 46, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 47, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 48, -inf, -inf, -inf, -inf]]

      Python

          >>> from sage.all import *
          >>> B = crystals.elementary.Elementary(['E',Integer(8),Integer(1)],Integer(4))
          >>> [[B(m).phi(j) for j in B.index_set()] for m in range(Integer(44),Integer(49))]
          [[-inf, -inf, -inf, -inf, 44, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 45, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 46, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 47, -inf, -inf, -inf, -inf],
           [-inf, -inf, -inf, -inf, 48, -inf, -inf, -inf, -inf]]

    weight()

      Return the weight of `self`.

      EXAMPLES:

      Sage

          sage: B = crystals.elementary.Elementary(['C',14],12)
          sage: B(-385).weight()
          -385*alpha[12]

      Python

          >>> from sage.all import *
          >>> B = crystals.elementary.Elementary(['C',Integer(14)],Integer(12))
          >>> B(-Integer(385)).weight()
          -385*alpha[12]

  weight_lattice_realization()

    Return a realization of the lattice containing the weights of `self`.

    EXAMPLES:

    Sage

        sage: B = crystals.elementary.Elementary(['A',4, 1], 2)
        sage: B.weight_lattice_realization()
        Root lattice of the Root system of type ['A', 4, 1]

    Python

        >>> from sage.all import *
        >>> B = crystals.elementary.Elementary(['A',Integer(4), Integer(1)], Integer(2))
        >>> B.weight_lattice_realization()
        Root lattice of the Root system of type ['A', 4, 1]

class sage.combinat.crystals.elementary_crystals.RCrystal(cartan_type, weight, dual)

  Bases: `UniqueRepresentation`, `Parent`

  The crystal \(R_{\lambda}\).

  For a fixed weight \(\lambda\), the crystal \(R_{\lambda} = \{ r_{\lambda} \}\) is a single element crystal with the crystal structure defined by

  \[\mathrm{wt}(r_{\lambda}) = \lambda, \quad e_i r_{\lambda} = f_i r_{\lambda} = 0, \quad \varepsilon_i(r_{\lambda}) = -\langle h_i, \lambda\rangle, \quad \varphi_i(r_{\lambda}) = 0,\]

  where \(\{h_i\}\) are the simple coroots.

  Tensoring \(R_{\lambda}\) with a crystal \(B\) results in shifting the weights of the vertices in \(B\) by \(\lambda\) and may also cut a subset out of the original graph of \(B\). That is, \(\mathrm{wt}(r_{\lambda} \otimes b) = \mathrm{wt}(b) + \lambda\), where \(b \in B\), provided \(r_{\lambda} \otimes b \neq 0\). For example, the crystal graph of \(B(\lambda)\) is the same as the crystal graph of \(R_{\lambda} \otimes B(\infty)\) generated from the component \(r_{\lambda} \otimes u_{\infty}\).

  There is also a dual version of this crystal given by \(R^{\vee}_{\lambda} = \{ r^{\vee}_{\lambda} \}\) with the crystal structure defined by

  \[\mathrm{wt}(r^{\vee}_{\lambda}) = \lambda, \quad e_i r^{\vee}_{\lambda} = f_i r^{\vee}_{\lambda} = 0, \quad \varepsilon_i(r^{\vee}_{\lambda}) = 0, \quad \varphi_i(r^{\vee}_{\lambda}) = \langle h_i, \lambda\rangle.\]

  INPUT:

  - `cartan_type` – a Cartan type

  - `weight` – an element of the weight lattice of type `cartan_type`

  - `dual` – boolean (default: `False`)

  EXAMPLES:

  We check by tensoring \(R_{\lambda}\) with \(B(\infty)\) results in a component of \(B(\lambda)\):

  Sage

      sage: B = crystals.infinity.Tableaux("A2")
      sage: R = crystals.elementary.R("A2", B.Lambda()[1]+B.Lambda()[2])
      sage: T = crystals.TensorProduct(R, B)
      sage: mg = T(R.highest_weight_vector(), B.highest_weight_vector())
      sage: S = T.subcrystal(generators=[mg])
      sage: sorted([x.weight() for x in S], key=str)
      [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
       (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
      sage: C = crystals.Tableaux("A2", shape=[2,1])
      sage: sorted([x.weight() for x in C], key=str)
      [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
       (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
      sage: GT = T.digraph(subset=S)
      sage: GC = C.digraph()
      sage: GT.is_isomorphic(GC, edge_labels=True)
      True

  Python

      >>> from sage.all import *
      >>> B = crystals.infinity.Tableaux("A2")
      >>> R = crystals.elementary.R("A2", B.Lambda()[Integer(1)]+B.Lambda()[Integer(2)])
      >>> T = crystals.TensorProduct(R, B)
      >>> mg = T(R.highest_weight_vector(), B.highest_weight_vector())
      >>> S = T.subcrystal(generators=[mg])
      >>> sorted([x.weight() for x in S], key=str)
      [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
       (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
      >>> C = crystals.Tableaux("A2", shape=[Integer(2),Integer(1)])
      >>> sorted([x.weight() for x in C], key=str)
      [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
       (1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
      >>> GT = T.digraph(subset=S)
      >>> GC = C.digraph()
      >>> GT.is_isomorphic(GC, edge_labels=True)
      True

  class Element

    Bases: `AbstractSingleCrystalElement`

    Element of a \(R_{\lambda}\) crystal.

    epsilon(i)

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

      We have \(\varepsilon_i(r_{\lambda}) = -\langle h_i, \lambda \rangle\) for all \(i\), where \(h_i\) is a simple coroot.

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: la = RootSystem(['A',2]).weight_lattice().fundamental_weights()
          sage: R = crystals.elementary.R("A2", la[1])
          sage: r = R.highest_weight_vector()
          sage: [r.epsilon(i) for i in R.index_set()]
          [-1, 0]

          sage: R = crystals.elementary.R("A2", la[1], dual=True)
          sage: r = R.highest_weight_vector()
          sage: [r.epsilon(i) for i in R.index_set()]
          [0, 0]

      Python

          >>> from sage.all import *
          >>> la = RootSystem(['A',Integer(2)]).weight_lattice().fundamental_weights()
          >>> R = crystals.elementary.R("A2", la[Integer(1)])
          >>> r = R.highest_weight_vector()
          >>> [r.epsilon(i) for i in R.index_set()]
          [-1, 0]

          >>> R = crystals.elementary.R("A2", la[Integer(1)], dual=True)
          >>> r = R.highest_weight_vector()
          >>> [r.epsilon(i) for i in R.index_set()]
          [0, 0]

    phi(i)

      Return \(\varphi_i\) of `self`, which is \(0\) for all \(i\).

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: la = RootSystem("C5").weight_lattice().fundamental_weights()
          sage: R = crystals.elementary.R("C5", la[4]+la[5])
          sage: r = R.highest_weight_vector()
          sage: [r.phi(i) for i in R.index_set()]
          [0, 0, 0, 0, 0]

          sage: R = crystals.elementary.R("C5", la[4]+la[5], dual=True)
          sage: r = R.highest_weight_vector()
          sage: [r.phi(i) for i in R.index_set()]
          [0, 0, 0, 1, 1]

      Python

          >>> from sage.all import *
          >>> la = RootSystem("C5").weight_lattice().fundamental_weights()
          >>> R = crystals.elementary.R("C5", la[Integer(4)]+la[Integer(5)])
          >>> r = R.highest_weight_vector()
          >>> [r.phi(i) for i in R.index_set()]
          [0, 0, 0, 0, 0]

          >>> R = crystals.elementary.R("C5", la[Integer(4)]+la[Integer(5)], dual=True)
          >>> r = R.highest_weight_vector()
          >>> [r.phi(i) for i in R.index_set()]
          [0, 0, 0, 1, 1]

    weight()

      Return the weight of `self`, which is always \(\lambda\).

      EXAMPLES:

      Sage

          sage: ct = CartanType(['C',5])
          sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
          sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
          sage: t = T.highest_weight_vector()
          sage: t.weight()
          -Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]

      Python

          >>> from sage.all import *
          >>> ct = CartanType(['C',Integer(5)])
          >>> la = RootSystem(ct).weight_lattice().fundamental_weights()
          >>> T = crystals.elementary.T(ct,la[Integer(4)]+la[Integer(5)]-la[Integer(1)]-la[Integer(2)])
          >>> t = T.highest_weight_vector()
          >>> t.weight()
          -Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]

  cardinality()

    Return the cardinality of `self`, which is always \(1\).

    EXAMPLES:

    Sage

        sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
        sage: R = crystals.elementary.R(['C',12],La[9])
        sage: R.cardinality()
        1

    Python

        >>> from sage.all import *
        >>> La = RootSystem(['C',Integer(12)]).weight_lattice().fundamental_weights()
        >>> R = crystals.elementary.R(['C',Integer(12)],La[Integer(9)])
        >>> R.cardinality()
        1

  weight_lattice_realization()

    Return a realization of the lattice containing the weights of `self`.

    EXAMPLES:

    Sage

        sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
        sage: R = crystals.elementary.R(['C',12], La[9])
        sage: R.weight_lattice_realization()
        Weight lattice of the Root system of type ['C', 12]

        sage: ct = CartanMatrix([[2, -4], [-5, 2]])
        sage: La = RootSystem(ct).weight_lattice().fundamental_weights()
        sage: R = crystals.elementary.R(ct, La[1])
        sage: R.weight_lattice_realization()
        Weight lattice of the Root system of type
        [ 2 -4]
        [-5  2]

    Python

        >>> from sage.all import *
        >>> La = RootSystem(['C',Integer(12)]).weight_lattice().fundamental_weights()
        >>> R = crystals.elementary.R(['C',Integer(12)], La[Integer(9)])
        >>> R.weight_lattice_realization()
        Weight lattice of the Root system of type ['C', 12]

        >>> ct = CartanMatrix([[Integer(2), -Integer(4)], [-Integer(5), Integer(2)]])
        >>> La = RootSystem(ct).weight_lattice().fundamental_weights()
        >>> R = crystals.elementary.R(ct, La[Integer(1)])
        >>> R.weight_lattice_realization()
        Weight lattice of the Root system of type
        [ 2 -4]
        [-5  2]

class sage.combinat.crystals.elementary_crystals.TCrystal(cartan_type, weight)

  Bases: `UniqueRepresentation`, `Parent`

  The crystal \(T_{\lambda}\).

  Let \(\lambda\) be a weight. As defined in [Ka1993] the crystal \(T_{\lambda} = \{ t_{\lambda} \}\) is a single element crystal with the crystal structure defined by

  \[\mathrm{wt}(t_\lambda) = \lambda, \quad e_i t_{\lambda} = f_i t_{\lambda} = 0, \quad \varepsilon_i(t_{\lambda}) = \varphi_i(t_{\lambda}) = -\infty.\]

  The crystal \(T_{\lambda}\) shifts the weights of the vertices in a crystal \(B\) by \(\lambda\) when tensored with \(B\), but leaves the graph structure of \(B\) unchanged. That is to say, for all \(b \in B\), we have \(\mathrm{wt}(b \otimes t_{\lambda}) = \mathrm{wt}(b) + \lambda\).

  INPUT:

  - `cartan_type` – a Cartan type

  - `weight` – an element of the weight lattice of type `cartan_type`

  EXAMPLES:

  Sage

      sage: ct = CartanType(['A',2])
      sage: C = crystals.Tableaux(ct, shape=[1])
      sage: for x in C: x.weight()
      (1, 0, 0)
      (0, 1, 0)
      (0, 0, 1)
      sage: La = RootSystem(ct).ambient_space().fundamental_weights()
      sage: TLa = crystals.elementary.T(ct, 3*(La[1] + La[2]))
      sage: TP = crystals.TensorProduct(TLa, C)
      sage: for x in TP: x.weight()
      (7, 3, 0)
      (6, 4, 0)
      (6, 3, 1)
      sage: G = C.digraph()
      sage: H = TP.digraph()
      sage: G.is_isomorphic(H,edge_labels=True)
      True

  Python

      >>> from sage.all import *
      >>> ct = CartanType(['A',Integer(2)])
      >>> C = crystals.Tableaux(ct, shape=[Integer(1)])
      >>> for x in C: x.weight()
      (1, 0, 0)
      (0, 1, 0)
      (0, 0, 1)
      >>> La = RootSystem(ct).ambient_space().fundamental_weights()
      >>> TLa = crystals.elementary.T(ct, Integer(3)*(La[Integer(1)] + La[Integer(2)]))
      >>> TP = crystals.TensorProduct(TLa, C)
      >>> for x in TP: x.weight()
      (7, 3, 0)
      (6, 4, 0)
      (6, 3, 1)
      >>> G = C.digraph()
      >>> H = TP.digraph()
      >>> G.is_isomorphic(H,edge_labels=True)
      True

  class Element

    Bases: `AbstractSingleCrystalElement`

    Element of a \(T_{\lambda}\) crystal.

    epsilon(i)

      Return \(\varepsilon_i\) of `self`, which is \(-\infty\) for all \(i\).

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: ct = CartanType(['C',5])
          sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
          sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
          sage: t = T.highest_weight_vector()
          sage: [t.epsilon(i) for i in T.index_set()]
          [-inf, -inf, -inf, -inf, -inf]

      Python

          >>> from sage.all import *
          >>> ct = CartanType(['C',Integer(5)])
          >>> la = RootSystem(ct).weight_lattice().fundamental_weights()
          >>> T = crystals.elementary.T(ct,la[Integer(4)]+la[Integer(5)]-la[Integer(1)]-la[Integer(2)])
          >>> t = T.highest_weight_vector()
          >>> [t.epsilon(i) for i in T.index_set()]
          [-inf, -inf, -inf, -inf, -inf]

    phi(i)

      Return \(\varphi_i\) of `self`, which is \(-\infty\) for all \(i\).

      INPUT:

      - `i` – an element of the index set

      EXAMPLES:

      Sage

          sage: ct = CartanType(['C',5])
          sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
          sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
          sage: t = T.highest_weight_vector()
          sage: [t.phi(i) for i in T.index_set()]
          [-inf, -inf, -inf, -inf, -inf]

      Python

          >>> from sage.all import *
          >>> ct = CartanType(['C',Integer(5)])
          >>> la = RootSystem(ct).weight_lattice().fundamental_weights()
          >>> T = crystals.elementary.T(ct,la[Integer(4)]+la[Integer(5)]-la[Integer(1)]-la[Integer(2)])
          >>> t = T.highest_weight_vector()
          >>> [t.phi(i) for i in T.index_set()]
          [-inf, -inf, -inf, -inf, -inf]

    weight()

      Return the weight of `self`, which is always \(\lambda\).

      EXAMPLES:

      Sage

          sage: ct = CartanType(['C',5])
          sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
          sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
          sage: t = T.highest_weight_vector()
          sage: t.weight()
          -Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]

      Python

          >>> from sage.all import *
          >>> ct = CartanType(['C',Integer(5)])
          >>> la = RootSystem(ct).weight_lattice().fundamental_weights()
          >>> T = crystals.elementary.T(ct,la[Integer(4)]+la[Integer(5)]-la[Integer(1)]-la[Integer(2)])
          >>> t = T.highest_weight_vector()
          >>> t.weight()
          -Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]

  cardinality()

    Return the cardinality of `self`, which is always \(1\).

    EXAMPLES:

    Sage

        sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
        sage: T = crystals.elementary.T(['C',12], La[9])
        sage: T.cardinality()
        1

    Python

        >>> from sage.all import *
        >>> La = RootSystem(['C',Integer(12)]).weight_lattice().fundamental_weights()
        >>> T = crystals.elementary.T(['C',Integer(12)], La[Integer(9)])
        >>> T.cardinality()
        1

  weight_lattice_realization()

    Return a realization of the lattice containing the weights of `self`.

    EXAMPLES:

    Sage

        sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
        sage: T = crystals.elementary.T(['C',12], La[9])
        sage: T.weight_lattice_realization()
        Weight lattice of the Root system of type ['C', 12]

        sage: ct = CartanMatrix([[2, -4], [-5, 2]])
        sage: La = RootSystem(ct).weight_lattice().fundamental_weights()
        sage: T = crystals.elementary.T(ct, La[1])
        sage: T.weight_lattice_realization()
        Weight lattice of the Root system of type
        [ 2 -4]
        [-5  2]

    Python

        >>> from sage.all import *
        >>> La = RootSystem(['C',Integer(12)]).weight_lattice().fundamental_weights()
        >>> T = crystals.elementary.T(['C',Integer(12)], La[Integer(9)])
        >>> T.weight_lattice_realization()
        Weight lattice of the Root system of type ['C', 12]

        >>> ct = CartanMatrix([[Integer(2), -Integer(4)], [-Integer(5), Integer(2)]])
        >>> La = RootSystem(ct).weight_lattice().fundamental_weights()
        >>> T = crystals.elementary.T(ct, La[Integer(1)])
        >>> T.weight_lattice_realization()
        Weight lattice of the Root system of type
        [ 2 -4]
        [-5  2]