Supercrystals - Category Framework

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

# Supercrystals

class sage.categories.supercrystals.SuperCrystals

  Bases: `Category_singleton`

  class Finite(base_category)

    Bases: `CategoryWithAxiom_singleton`

    class ElementMethods

      Bases: `object`

      is_genuine_highest_weight(index_set=None)

        Return whether `self` is a genuine highest weight element.

        INPUT:

        - `index_set` – (optional) the index set of the (sub)crystal on which to check

        EXAMPLES:

        Sage

            sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
            sage: for b in B.highest_weight_vectors():
            ....:     print("{} {}".format(b, b.is_genuine_highest_weight()))
            [[-2, -2, -2], [-1, -1], [1]] True
            [[-2, -2, -2], [-1, 2], [1]] False
            [[-2, -2, 2], [-1, -1], [1]] False
            sage: [b for b in B if b.is_genuine_highest_weight([-1,0])]
            [[[-2, -2, -2], [-1, -1], [1]],
             [[-2, -2, -2], [-1, -1], [2]],
             [[-2, -2, -2], [-1, 2], [2]],
             [[-2, -2, 2], [-1, -1], [2]],
             [[-2, -2, 2], [-1, 2], [2]],
             [[-2, -2, -2], [-1, 2], [1]],
             [[-2, -2, 2], [-1, -1], [1]],
             [[-2, -2, 2], [-1, 2], [1]]]

        Python

            >>> from sage.all import *
            >>> B = crystals.Tableaux(['A', [Integer(1),Integer(1)]], shape=[Integer(3),Integer(2),Integer(1)])
            >>> for b in B.highest_weight_vectors():
            ...     print("{} {}".format(b, b.is_genuine_highest_weight()))
            [[-2, -2, -2], [-1, -1], [1]] True
            [[-2, -2, -2], [-1, 2], [1]] False
            [[-2, -2, 2], [-1, -1], [1]] False
            >>> [b for b in B if b.is_genuine_highest_weight([-Integer(1),Integer(0)])]
            [[[-2, -2, -2], [-1, -1], [1]],
             [[-2, -2, -2], [-1, -1], [2]],
             [[-2, -2, -2], [-1, 2], [2]],
             [[-2, -2, 2], [-1, -1], [2]],
             [[-2, -2, 2], [-1, 2], [2]],
             [[-2, -2, -2], [-1, 2], [1]],
             [[-2, -2, 2], [-1, -1], [1]],
             [[-2, -2, 2], [-1, 2], [1]]]

      is_genuine_lowest_weight(index_set=None)

        Return whether `self` is a genuine lowest weight element.

        INPUT:

        - `index_set` – (optional) the index set of the (sub)crystal on which to check

        EXAMPLES:

        Sage

            sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
            sage: for b in sorted(B.lowest_weight_vectors()):
            ....:     print("{} {}".format(b, b.is_genuine_lowest_weight()))
            [[-2, 1, 2], [-1, 2], [1]] False
            [[-2, 1, 2], [-1, 2], [2]] False
            [[-1, 1, 2], [1, 2], [2]] True
            sage: [b for b in B if b.is_genuine_lowest_weight([-1,0])]
            [[[-2, -1, 1], [-1, 1], [1]],
             [[-2, -1, 1], [-1, 1], [2]],
             [[-2, 1, 2], [-1, 1], [2]],
             [[-2, 1, 2], [-1, 1], [1]],
             [[-1, -1, 1], [1, 2], [2]],
             [[-1, -1, 1], [1, 2], [1]],
             [[-1, 1, 2], [1, 2], [2]],
             [[-1, 1, 2], [1, 2], [1]]]

        Python

            >>> from sage.all import *
            >>> B = crystals.Tableaux(['A', [Integer(1),Integer(1)]], shape=[Integer(3),Integer(2),Integer(1)])
            >>> for b in sorted(B.lowest_weight_vectors()):
            ...     print("{} {}".format(b, b.is_genuine_lowest_weight()))
            [[-2, 1, 2], [-1, 2], [1]] False
            [[-2, 1, 2], [-1, 2], [2]] False
            [[-1, 1, 2], [1, 2], [2]] True
            >>> [b for b in B if b.is_genuine_lowest_weight([-Integer(1),Integer(0)])]
            [[[-2, -1, 1], [-1, 1], [1]],
             [[-2, -1, 1], [-1, 1], [2]],
             [[-2, 1, 2], [-1, 1], [2]],
             [[-2, 1, 2], [-1, 1], [1]],
             [[-1, -1, 1], [1, 2], [2]],
             [[-1, -1, 1], [1, 2], [1]],
             [[-1, 1, 2], [1, 2], [2]],
             [[-1, 1, 2], [1, 2], [1]]]

    class ParentMethods

      Bases: `object`

      character()

        Return the character of `self`.

        Todo

        Once the \(WeylCharacterRing\) is implemented, make this consistent with the implementation in `sage.categories.classical_crystals.ClassicalCrystals.ParentMethods.character()`.

        EXAMPLES:

        Sage

            sage: B = crystals.Letters(['A',[1,2]])
            sage: B.character()
            B[(1, 0, 0, 0, 0)] + B[(0, 1, 0, 0, 0)] + B[(0, 0, 1, 0, 0)]
             + B[(0, 0, 0, 1, 0)] + B[(0, 0, 0, 0, 1)]

        Python

            >>> from sage.all import *
            >>> B = crystals.Letters(['A',[Integer(1),Integer(2)]])
            >>> B.character()
            B[(1, 0, 0, 0, 0)] + B[(0, 1, 0, 0, 0)] + B[(0, 0, 1, 0, 0)]
             + B[(0, 0, 0, 1, 0)] + B[(0, 0, 0, 0, 1)]

      connected_components()

        Return the connected components of `self` as subcrystals.

        EXAMPLES:

        Sage

            sage: B = crystals.Letters(['A', [1,2]])
            sage: B.connected_components()
            [Subcrystal of The crystal of letters for type ['A', [1, 2]]]

            sage: T = B.tensor(B)
            sage: T.connected_components()
            [Subcrystal of Full tensor product of the crystals
              [The crystal of letters for type ['A', [1, 2]],
               The crystal of letters for type ['A', [1, 2]]],
             Subcrystal of Full tensor product of the crystals
              [The crystal of letters for type ['A', [1, 2]],
               The crystal of letters for type ['A', [1, 2]]]]

        Python

            >>> from sage.all import *
            >>> B = crystals.Letters(['A', [Integer(1),Integer(2)]])
            >>> B.connected_components()
            [Subcrystal of The crystal of letters for type ['A', [1, 2]]]

            >>> T = B.tensor(B)
            >>> T.connected_components()
            [Subcrystal of Full tensor product of the crystals
              [The crystal of letters for type ['A', [1, 2]],
               The crystal of letters for type ['A', [1, 2]]],
             Subcrystal of Full tensor product of the crystals
              [The crystal of letters for type ['A', [1, 2]],
               The crystal of letters for type ['A', [1, 2]]]]

      connected_components_generators()

        alias of `genuine_highest_weight_vectors()`.

      digraph(index_set=None)

        Return the `DiGraph` associated to `self`.

        EXAMPLES:

        Sage

            sage: B = crystals.Letters(['A', [1,3]])
            sage: G = B.digraph(); G
            Multi-digraph on 6 vertices
            sage: Q = crystals.Letters(['Q',3])
            sage: G = Q.digraph(); G
            Multi-digraph on 3 vertices
            sage: G.edges(sort=True)
            [(1, 2, -1), (1, 2, 1), (2, 3, -2), (2, 3, 2)]

        Python

            >>> from sage.all import *
            >>> B = crystals.Letters(['A', [Integer(1),Integer(3)]])
            >>> G = B.digraph(); G
            Multi-digraph on 6 vertices
            >>> Q = crystals.Letters(['Q',Integer(3)])
            >>> G = Q.digraph(); G
            Multi-digraph on 3 vertices
            >>> G.edges(sort=True)
            [(1, 2, -1), (1, 2, 1), (2, 3, -2), (2, 3, 2)]

        The edges of the crystal graph are by default colored using blue for edge 1, red for edge 2, green for edge 3, and dashed with the corresponding color for barred edges. Edge 0 is dotted black:

        Sage

            sage: view(G)  # optional - dot2tex graphviz, not tested (opens external window)

        [Python]

            >>> from sage.all import *
            >>> view(G)  # optional - dot2tex graphviz, not tested (opens external window)

      genuine_highest_weight_vectors()

        Return the tuple of genuine highest weight elements of `self`.

        EXAMPLES:

        Sage

            sage: B = crystals.Letters(['A', [1,2]])
            sage: B.genuine_highest_weight_vectors()
            (-2,)

            sage: T = B.tensor(B)
            sage: T.genuine_highest_weight_vectors()
            ([-2, -1], [-2, -2])
            sage: s1, s2 = T.connected_components()
            sage: s = s1 + s2
            sage: s.genuine_highest_weight_vectors()
            ([-2, -1], [-2, -2])

        Python

            >>> from sage.all import *
            >>> B = crystals.Letters(['A', [Integer(1),Integer(2)]])
            >>> B.genuine_highest_weight_vectors()
            (-2,)

            >>> T = B.tensor(B)
            >>> T.genuine_highest_weight_vectors()
            ([-2, -1], [-2, -2])
            >>> s1, s2 = T.connected_components()
            >>> s = s1 + s2
            >>> s.genuine_highest_weight_vectors()
            ([-2, -1], [-2, -2])

      genuine_lowest_weight_vectors()

        Return the tuple of genuine lowest weight elements of `self`.

        EXAMPLES:

        Sage

            sage: B = crystals.Letters(['A', [1,2]])
            sage: B.genuine_lowest_weight_vectors()
            (3,)

            sage: T = B.tensor(B)
            sage: T.genuine_lowest_weight_vectors()
            ([3, 3], [3, 2])
            sage: s1, s2 = T.connected_components()
            sage: s = s1 + s2
            sage: s.genuine_lowest_weight_vectors()
            ([3, 3], [3, 2])

        Python

            >>> from sage.all import *
            >>> B = crystals.Letters(['A', [Integer(1),Integer(2)]])
            >>> B.genuine_lowest_weight_vectors()
            (3,)

            >>> T = B.tensor(B)
            >>> T.genuine_lowest_weight_vectors()
            ([3, 3], [3, 2])
            >>> s1, s2 = T.connected_components()
            >>> s = s1 + s2
            >>> s.genuine_lowest_weight_vectors()
            ([3, 3], [3, 2])

      highest_weight_vectors()

        Return the highest weight vectors of `self`.

        EXAMPLES:

        Sage

            sage: B = crystals.Letters(['A', [1,2]])
            sage: B.highest_weight_vectors()
            (-2,)

            sage: T = B.tensor(B)
            sage: T.highest_weight_vectors()
            ([-2, -2], [-2, -1])

        Python

            >>> from sage.all import *
            >>> B = crystals.Letters(['A', [Integer(1),Integer(2)]])
            >>> B.highest_weight_vectors()
            (-2,)

            >>> T = B.tensor(B)
            >>> T.highest_weight_vectors()
            ([-2, -2], [-2, -1])

        We give an example from [BKK2000] that has fake highest weight vectors:

        Sage

            sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
            sage: B.highest_weight_vectors()
            ([[-2, -2, -2], [-1, -1], [1]],
             [[-2, -2, -2], [-1, 2], [1]],
             [[-2, -2, 2], [-1, -1], [1]])
            sage: B.genuine_highest_weight_vectors()
            ([[-2, -2, -2], [-1, -1], [1]],)

        [Python]

            >>> from sage.all import *
            >>> B = crystals.Tableaux(['A', [Integer(1),Integer(1)]], shape=[Integer(3),Integer(2),Integer(1)])
            >>> B.highest_weight_vectors()
            ([[-2, -2, -2], [-1, -1], [1]],
             [[-2, -2, -2], [-1, 2], [1]],
             [[-2, -2, 2], [-1, -1], [1]])
            >>> B.genuine_highest_weight_vectors()
            ([[-2, -2, -2], [-1, -1], [1]],)

      lowest_weight_vectors()

        Return the lowest weight vectors of `self`.

        EXAMPLES:

        Sage

            sage: B = crystals.Letters(['A', [1,2]])
            sage: B.lowest_weight_vectors()
            (3,)

            sage: T = B.tensor(B)
            sage: sorted(T.lowest_weight_vectors())
            [[3, 2], [3, 3]]

        Python

            >>> from sage.all import *
            >>> B = crystals.Letters(['A', [Integer(1),Integer(2)]])
            >>> B.lowest_weight_vectors()
            (3,)

            >>> T = B.tensor(B)
            >>> sorted(T.lowest_weight_vectors())
            [[3, 2], [3, 3]]

        We give an example from [BKK2000] that has fake lowest weight vectors:

        Sage

            sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
            sage: sorted(B.lowest_weight_vectors())
            [[[-2, 1, 2], [-1, 2], [1]],
             [[-2, 1, 2], [-1, 2], [2]],
             [[-1, 1, 2], [1, 2], [2]]]
            sage: B.genuine_lowest_weight_vectors()
            ([[-1, 1, 2], [1, 2], [2]],)

        [Python]

            >>> from sage.all import *
            >>> B = crystals.Tableaux(['A', [Integer(1),Integer(1)]], shape=[Integer(3),Integer(2),Integer(1)])
            >>> sorted(B.lowest_weight_vectors())
            [[[-2, 1, 2], [-1, 2], [1]],
             [[-2, 1, 2], [-1, 2], [2]],
             [[-1, 1, 2], [1, 2], [2]]]
            >>> B.genuine_lowest_weight_vectors()
            ([[-1, 1, 2], [1, 2], [2]],)

  class ParentMethods

    Bases: `object`

    tensor(*crystals, **options)

      Return the tensor product of `self` with the crystals `B`.

      EXAMPLES:

      Sage

          sage: B = crystals.Letters(['A',[1,2]])
          sage: C = crystals.Tableaux(['A',[1,2]], shape = [2,1])
          sage: T = C.tensor(B); T
          Full tensor product of the crystals
           [Crystal of BKK tableaux of shape [2, 1] of gl(2|3),
            The crystal of letters for type ['A', [1, 2]]]
          sage: S = B.tensor(C); S
          Full tensor product of the crystals
           [The crystal of letters for type ['A', [1, 2]],
            Crystal of BKK tableaux of shape [2, 1] of gl(2|3)]
          sage: G = T.digraph()
          sage: H = S.digraph()
          sage: G.is_isomorphic(H, edge_labels=True)
          True

      Python

          >>> from sage.all import *
          >>> B = crystals.Letters(['A',[Integer(1),Integer(2)]])
          >>> C = crystals.Tableaux(['A',[Integer(1),Integer(2)]], shape = [Integer(2),Integer(1)])
          >>> T = C.tensor(B); T
          Full tensor product of the crystals
           [Crystal of BKK tableaux of shape [2, 1] of gl(2|3),
            The crystal of letters for type ['A', [1, 2]]]
          >>> S = B.tensor(C); S
          Full tensor product of the crystals
           [The crystal of letters for type ['A', [1, 2]],
            Crystal of BKK tableaux of shape [2, 1] of gl(2|3)]
          >>> G = T.digraph()
          >>> H = S.digraph()
          >>> G.is_isomorphic(H, edge_labels=True)
          True

  class TensorProducts(category, *args)

    Bases: `TensorProductsCategory`

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

    extra_super_categories()

      EXAMPLES:

      Sage

          sage: from sage.categories.supercrystals import SuperCrystals
          sage: SuperCrystals().TensorProducts().extra_super_categories()
          [Category of super crystals]

      Python

          >>> from sage.all import *
          >>> from sage.categories.supercrystals import SuperCrystals
          >>> SuperCrystals().TensorProducts().extra_super_categories()
          [Category of super crystals]

  super_categories()

    EXAMPLES:

    Sage

        sage: from sage.categories.supercrystals import SuperCrystals
        sage: C = SuperCrystals()
        sage: C.super_categories()
        [Category of crystals]

    Python

        >>> from sage.all import *
        >>> from sage.categories.supercrystals import SuperCrystals
        >>> C = SuperCrystals()
        >>> C.super_categories()
        [Category of crystals]