### Navigation

- index
- modules |
- next |
- previous |
- Category Theory »

# Regular Crystals

class `sage.categories.regular_crystals.``RegularCrystals`(s=None)

  Bases: `sage.categories.category_singleton.Category_singleton`

  The category of regular crystals.

  A crystal is called regular if:

  \[\epsilon_i(b) = \max\{ k \mid e_i^k(b) \neq 0 \} \quad \text{and} \quad \phi_i(b) = \max\{ k \mid f_i^k(b) \neq 0 \}.\]

  Note

  Regular crystals are sometimes referred to as normal. When only one of the conditions (on either \(\phi_i\) or \(epsilon_i\)) holds, these crystals are sometimes called seminormal or semiregular.

  EXAMPLES:

      sage: C = RegularCrystals()
      sage: C
      Category of regular crystals
      sage: C.super_categories()
      [Category of crystals]
      sage: C.example()
      Highest weight crystal of type A_3 of highest weight omega_1

  TESTS:

      sage: TestSuite(C).run()
      sage: B = RegularCrystals().example()
      sage: TestSuite(B).run(verbose = True)
      running ._test_an_element() . . . pass
      running ._test_category() . . . pass
      running ._test_elements() . . .
        Running the test suite of self.an_element()
        running ._test_category() . . . pass
        running ._test_eq() . . . pass
        running ._test_not_implemented_methods() . . . pass
        running ._test_pickling() . . . pass
        running ._test_stembridge_local_axioms() . . . pass
        pass
      running ._test_elements_eq_reflexive() . . . pass
      running ._test_elements_eq_symmetric() . . . pass
      running ._test_elements_eq_transitive() . . . pass
      running ._test_elements_neq() . . . pass
      running ._test_enumerated_set_contains() . . . pass
      running ._test_enumerated_set_iter_cardinality() . . . pass
      running ._test_enumerated_set_iter_list() . . . pass
      running ._test_eq() . . . pass
      running ._test_fast_iter() . . . pass
      running ._test_not_implemented_methods() . . . pass
      running ._test_pickling() . . . pass
      running ._test_some_elements() . . . pass
      running ._test_stembridge_local_axioms() . . . pass

  class `ElementMethods`
    `demazure_operator_simple`(i, ring=None)

      Return the Demazure operator \(D_i\) applied to `self`.

      INPUT:

      - `i` – an element of the index set of the underlying crystal
      - `ring` – (default: `QQ`) a ring

      OUTPUT:

      An element of the `ring`-free module indexed by the underlying crystal.

      Let \(r = \langle \mathrm{wt}(b), \alpha^{\vee}_i \rangle\), then \(D_i(b)\) is defined as follows:

      - If \(r \geq 0\), this returns the sum of the elements obtained from `self` by application of \(f_i^k\) for \(0 \leq k \leq r\).
      - If \(r < 0\), this returns the opposite of the sum of the elements obtained by application of \(e_i^k\) for \(0 < k < -r\).

      REFERENCES:

      [L1995] | Peter Littelmann, Crystal graphs and Young tableaux, J. Algebra 175 (1995), no. 1, 65–87.

      [K1993] | Masaki Kashiwara, The crystal base and Littelmann’s refined Demazure character formula, Duke Math. J. 71 (1993), no. 3, 839–858.

      EXAMPLES:

          sage: T = crystals.Tableaux(['A',2], shape=[2,1])
          sage: t = T(rows=[[1,2],[2]])
          sage: t.demazure_operator_simple(2)
          B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 3], [3]]]
          sage: t.demazure_operator_simple(2).parent()
          Free module generated by The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]] over Integer Ring

          sage: t.demazure_operator_simple(1)
          0

          sage: K = crystals.KirillovReshetikhin(['A',2,1],2,1)
          sage: t = K(rows=[[3],[2]])
          sage: t.demazure_operator_simple(0)
          B[[[2, 3]]] + B[[[1, 2]]]

      TESTS:

          sage: K = crystals.KirillovReshetikhin(['A',2,1],1,1)
          sage: x = K.an_element(); x
          [[1]]
          sage: x.demazure_operator_simple(0)
          0
          sage: x.demazure_operator_simple(0, ring = QQ).parent()
          Free module generated by Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1) over Rational Field

    `epsilon`(i)

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

      EXAMPLES:

          sage: C = crystals.Letters(['A',5])
          sage: C(1).epsilon(1)
          0
          sage: C(2).epsilon(1)
          1

    `phi`(i)

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

      EXAMPLES:

          sage: C = crystals.Letters(['A',5])
          sage: C(1).phi(1)
          1
          sage: C(2).phi(1)
          0

    `stembridgeDel_depth`(i, j)

      Return the difference in the \(j\)-depth of `self` and \(f_i\) of `self`, where \(i\) and \(j\) are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

      The \(i\)-depth of a crystal node \(x\) is \(\varepsilon_i(x)\).

      EXAMPLES:

          sage: T = crystals.Tableaux(['A',2], shape=[2,1])
          sage: t=T(rows=[[1,1],[2]])
          sage: t.stembridgeDel_depth(1,2)
          0
          sage: s=T(rows=[[1,3],[3]])
          sage: s.stembridgeDel_depth(1,2)
          -1

    `stembridgeDel_rise`(i, j)

      Return the difference in the \(j\)-rise of `self` and \(f_i\) of `self`, where \(i\) and \(j\) are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

      The \(i\)-rise of a crystal node \(x\) is \(\varphi_i(x)\).

      EXAMPLES:

          sage: T = crystals.Tableaux(['A',2], shape=[2,1])
          sage: t=T(rows=[[1,1],[2]])
          sage: t.stembridgeDel_rise(1,2)
          -1
          sage: s=T(rows=[[1,3],[3]])
          sage: s.stembridgeDel_rise(1,2)
          0

    `stembridgeDelta_depth`(i, j)

      Return the difference in the \(j\)-depth of `self` and \(e_i\) of `self`, where \(i\) and \(j\) are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

      The \(i\)-depth of a crystal node \(x\) is \(-\varepsilon_i(x)\).

      EXAMPLES:

          sage: T = crystals.Tableaux(['A',2], shape=[2,1])
          sage: t=T(rows=[[1,2],[2]])
          sage: t.stembridgeDelta_depth(1,2)
          0
          sage: s=T(rows=[[2,3],[3]])
          sage: s.stembridgeDelta_depth(1,2)
          -1

    `stembridgeDelta_rise`(i, j)

      Return the difference in the \(j\)-rise of `self` and \(e_i\) of `self`, where \(i\) and \(j\) are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

      The \(i\)-rise of a crystal node \(x\) is \(\varphi_i(x)\).

      EXAMPLES:

          sage: T = crystals.Tableaux(['A',2], shape=[2,1])
          sage: t=T(rows=[[1,2],[2]])
          sage: t.stembridgeDelta_rise(1,2)
          -1
          sage: s=T(rows=[[2,3],[3]])
          sage: s.stembridgeDelta_rise(1,2)
          0

    `stembridgeTriple`(i, j)

      Let \(A\) be the Cartan matrix of the crystal, \(x\) a crystal element, and let \(i\) and \(j\) be in the index set of the crystal. Further, set `b=stembridgeDelta_depth(x,i,j)`, and `c=stembridgeDelta_rise(x,i,j))`. If `x.e(i)` is non-empty, this function returns the triple \(( A_{ij}, b, c )\); otherwise it returns `None`. By the Stembridge local characterization of crystal bases, one should have \(A_{ij}=b+c\).

      EXAMPLES:

          sage: T = crystals.Tableaux(['A',2], shape=[2,1])
          sage: t=T(rows=[[1,1],[2]])
          sage: t.stembridgeTriple(1,2)
          sage: s=T(rows=[[1,2],[2]])
          sage: s.stembridgeTriple(1,2)
          (-1, 0, -1)

          sage: T = crystals.Tableaux(['B',2], shape=[2,1])
          sage: t=T(rows=[[1,2],[2]])
          sage: t.stembridgeTriple(1,2)
          (-2, 0, -2)
          sage: s=T(rows=[[-1,-1],[0]])
          sage: s.stembridgeTriple(1,2)
          (-2, -2, 0)
          sage: u=T(rows=[[0,2],[1]])
          sage: u.stembridgeTriple(1,2)
          (-2, -1, -1)

    `weight`()

      Return the weight of this crystal element.

      EXAMPLES:

          sage: C = crystals.Letters(['A',5])
          sage: C(1).weight()
          (1, 0, 0, 0, 0, 0)

  class `RegularCrystals.``ParentMethods`
    `demazure_operator`(element, reduced_word)

      Returns the application of Demazure operators \(D_i\) for \(i\) from `reduced_word` on `element`.

      INPUT:

      - `element` – an element of a free module indexed by the underlying crystal
      - `reduced_word` – a reduced word of the Weyl group of the same type as the underlying crystal

      OUTPUT:

      - an element of the free module indexed by the underlying crystal

      EXAMPLES:

          sage: T = crystals.Tableaux(['A',2], shape=[2,1])
          sage: C = CombinatorialFreeModule(QQ,T)
          sage: t = T.highest_weight_vector()
          sage: b = 2*C(t)
          sage: T.demazure_operator(b,[1,2,1])
          2*B[[[1, 1], [2]]] + 2*B[[[1, 2], [2]]] + 2*B[[[1, 3], [2]]] + 2*B[[[1, 1], [3]]]
          + 2*B[[[1, 2], [3]]] + 2*B[[[1, 3], [3]]] + 2*B[[[2, 2], [3]]] + 2*B[[[2, 3], [3]]]

      The Demazure operator is idempotent:

          sage: T = crystals.Tableaux("A1",shape=[4])
          sage: C = CombinatorialFreeModule(QQ,T)
          sage: b = C(T.module_generators[0]); b
          B[[[1, 1, 1, 1]]]
          sage: e = T.demazure_operator(b,[1]); e
          B[[[1, 1, 1, 1]]] + B[[[1, 1, 1, 2]]] + B[[[1, 1, 2, 2]]] + B[[[1, 2, 2, 2]]] + B[[[2, 2, 2, 2]]]
          sage: e == T.demazure_operator(e,[1])
          True

          sage: all(T.demazure_operator(T.demazure_operator(C(t),[1]),[1]) == T.demazure_operator(C(t),[1]) for t in T)
          True

  class `RegularCrystals.``TensorProducts`(category, *args)

    Bases: `sage.categories.tensor.TensorProductsCategory`

    The category of regular crystals constructed by tensor product of regular crystals.

    `extra_super_categories`()

      EXAMPLES:

          sage: RegularCrystals().TensorProducts().extra_super_categories()
          [Category of regular crystals]

  `RegularCrystals.``additional_structure`()

    Return `None`.

    Indeed, the category of regular crystals defines no new structure: it only relates \(\varepsilon_a\) and \(\varphi_a\) to \(e_a\) and \(f_a\) respectively.

    See also

    `Category.additional_structure()`

    Todo

    Should this category be a `CategoryWithAxiom`?

    EXAMPLES:

        sage: RegularCrystals().additional_structure()

  `RegularCrystals.``example`(n=3)

    Returns an example of highest weight crystals, as per `Category.example()`.

    EXAMPLES:

        sage: B = RegularCrystals().example(); B
        Highest weight crystal of type A_3 of highest weight omega_1

  `RegularCrystals.``super_categories`()

    EXAMPLES:

        sage: RegularCrystals().super_categories()
        [Category of crystals]

### Navigation

- index
- modules |
- next |
- previous |
- Category Theory »