Direct sum of crystals - Combinatorics

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

# Direct sum of crystals

class sage.combinat.crystals.direct_sum.DirectSumOfCrystals(crystals, facade, keepkey, category, **options)

  Bases: `DisjointUnionEnumeratedSets`

  Direct sum of crystals.

  Given a list of crystals \(B_0, \ldots, B_k\) of the same Cartan type, one can form the direct sum \(B_0 \oplus \cdots \oplus B_k\).

  INPUT:

  - `crystals` – list of crystals of the same Cartan type

  - `keepkey` – boolean

  The option `keepkey` is by default set to `False`, assuming that the crystals are all distinct. In this case the elements of the direct sum are just represented by the elements in the crystals \(B_i\). If the crystals are not all distinct, one should set the `keepkey` option to `True`. In this case, the elements of the direct sum are represented as tuples \((i, b)\) where \(b \in B_i\).

  EXAMPLES:

  Sage

      sage: C = crystals.Letters(['A',2])
      sage: C1 = crystals.Tableaux(['A',2],shape=[1,1])
      sage: B = crystals.DirectSum([C,C1])
      sage: B.list()
      [1, 2, 3, [[1], [2]], [[1], [3]], [[2], [3]]]
      sage: [b.f(1) for b in B]
      [2, None, None, None, [[2], [3]], None]
      sage: B.module_generators
      (1, [[1], [2]])

  Python

      >>> from sage.all import *
      >>> C = crystals.Letters(['A',Integer(2)])
      >>> C1 = crystals.Tableaux(['A',Integer(2)],shape=[Integer(1),Integer(1)])
      >>> B = crystals.DirectSum([C,C1])
      >>> B.list()
      [1, 2, 3, [[1], [2]], [[1], [3]], [[2], [3]]]
      >>> [b.f(Integer(1)) for b in B]
      [2, None, None, None, [[2], [3]], None]
      >>> B.module_generators
      (1, [[1], [2]])

  Sage

      sage: B = crystals.DirectSum([C,C], keepkey=True)
      sage: B.list()
      [(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3)]
      sage: B.module_generators
      ((0, 1), (1, 1))
      sage: b = B( tuple([0,C(1)]) )
      sage: b
      (0, 1)
      sage: b.weight()
      (1, 0, 0)

  [Python]

      >>> from sage.all import *
      >>> B = crystals.DirectSum([C,C], keepkey=True)
      >>> B.list()
      [(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3)]
      >>> B.module_generators
      ((0, 1), (1, 1))
      >>> b = B( tuple([Integer(0),C(Integer(1))]) )
      >>> b
      (0, 1)
      >>> b.weight()
      (1, 0, 0)

  The following is required, because `DirectSumOfCrystals` takes the same arguments as `DisjointUnionEnumeratedSets` (which see for details).

  class Element

    Bases: `ElementWrapper`

    A class for elements of direct sums of crystals.

    e(i)

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

      EXAMPLES:

      Sage

          sage: C = crystals.Letters(['A',2])
          sage: B = crystals.DirectSum([C,C], keepkey=True)
          sage: [[b, b.e(2)] for b in B]
          [[(0, 1), None], [(0, 2), None], [(0, 3), (0, 2)], [(1, 1), None], [(1, 2), None], [(1, 3), (1, 2)]]

      Python

          >>> from sage.all import *
          >>> C = crystals.Letters(['A',Integer(2)])
          >>> B = crystals.DirectSum([C,C], keepkey=True)
          >>> [[b, b.e(Integer(2))] for b in B]
          [[(0, 1), None], [(0, 2), None], [(0, 3), (0, 2)], [(1, 1), None], [(1, 2), None], [(1, 3), (1, 2)]]

    epsilon(i)

      EXAMPLES:

      Sage

          sage: C = crystals.Letters(['A',2])
          sage: B = crystals.DirectSum([C,C], keepkey=True)
          sage: b = B( tuple([0,C(2)]) )
          sage: b.epsilon(2)
          0

      Python

          >>> from sage.all import *
          >>> C = crystals.Letters(['A',Integer(2)])
          >>> B = crystals.DirectSum([C,C], keepkey=True)
          >>> b = B( tuple([Integer(0),C(Integer(2))]) )
          >>> b.epsilon(Integer(2))
          0

    f(i)

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

      EXAMPLES:

      Sage

          sage: C = crystals.Letters(['A',2])
          sage: B = crystals.DirectSum([C,C], keepkey=True)
          sage: [[b,b.f(1)] for b in B]
          [[(0, 1), (0, 2)], [(0, 2), None], [(0, 3), None], [(1, 1), (1, 2)], [(1, 2), None], [(1, 3), None]]

      Python

          >>> from sage.all import *
          >>> C = crystals.Letters(['A',Integer(2)])
          >>> B = crystals.DirectSum([C,C], keepkey=True)
          >>> [[b,b.f(Integer(1))] for b in B]
          [[(0, 1), (0, 2)], [(0, 2), None], [(0, 3), None], [(1, 1), (1, 2)], [(1, 2), None], [(1, 3), None]]

    phi(i)

      EXAMPLES:

      Sage

          sage: C = crystals.Letters(['A',2])
          sage: B = crystals.DirectSum([C,C], keepkey=True)
          sage: b = B( tuple([0,C(2)]) )
          sage: b.phi(2)
          1

      Python

          >>> from sage.all import *
          >>> C = crystals.Letters(['A',Integer(2)])
          >>> B = crystals.DirectSum([C,C], keepkey=True)
          >>> b = B( tuple([Integer(0),C(Integer(2))]) )
          >>> b.phi(Integer(2))
          1

    weight()

      Return the weight of `self`.

      EXAMPLES:

      Sage

          sage: C = crystals.Letters(['A',2])
          sage: B = crystals.DirectSum([C,C], keepkey=True)
          sage: b = B( tuple([0,C(2)]) )
          sage: b
          (0, 2)
          sage: b.weight()
          (0, 1, 0)

      Python

          >>> from sage.all import *
          >>> C = crystals.Letters(['A',Integer(2)])
          >>> B = crystals.DirectSum([C,C], keepkey=True)
          >>> b = B( tuple([Integer(0),C(Integer(2))]) )
          >>> b
          (0, 2)
          >>> b.weight()
          (0, 1, 0)

  weight_lattice_realization()

    Return the weight lattice realization used to express weights.

    The weight lattice realization is the common parent which all weight lattice realizations of the crystals of `self` coerce into.

    EXAMPLES:

    Sage

        sage: LaZ = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
        sage: LaQ = RootSystem(['A',2,1]).weight_space(extended=True).fundamental_weights()
        sage: B = crystals.LSPaths(LaQ[1])
        sage: B.weight_lattice_realization()
        Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]
        sage: C = crystals.AlcovePaths(LaZ[1])
        sage: C.weight_lattice_realization()
        Extended weight lattice of the Root system of type ['A', 2, 1]
        sage: D = crystals.DirectSum([B,C])
        sage: D.weight_lattice_realization()
        Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]

    Python

        >>> from sage.all import *
        >>> LaZ = RootSystem(['A',Integer(2),Integer(1)]).weight_lattice(extended=True).fundamental_weights()
        >>> LaQ = RootSystem(['A',Integer(2),Integer(1)]).weight_space(extended=True).fundamental_weights()
        >>> B = crystals.LSPaths(LaQ[Integer(1)])
        >>> B.weight_lattice_realization()
        Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]
        >>> C = crystals.AlcovePaths(LaZ[Integer(1)])
        >>> C.weight_lattice_realization()
        Extended weight lattice of the Root system of type ['A', 2, 1]
        >>> D = crystals.DirectSum([B,C])
        >>> D.weight_lattice_realization()
        Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]