Subcrystals

These are the crystals that are subsets of a larger ambient crystal.

AUTHORS:

  • Travis Scrimshaw (2013-10-16): Initial implementation

class sage.combinat.crystals.subcrystal.Subcrystal(ambient, contained, generators, cartan_type, index_set, category)[source]

Bases: UniqueRepresentation, Parent

A subcrystal \(X\) of an ambient crystal \(Y\) is a crystal formed by taking a subset of \(Y\) and whose crystal structure is induced by \(Y\).

INPUT:

  • ambient – the ambient crystal

  • contained – (optional) a set (or function) which specifies when an element is contained in the subcrystal; the default is everything possible is included

  • generators – (optional) the generators for the subcrystal; the default is the generators for the ambient crystal

  • virtualization, scaling_factors – (optional) dictionaries whose key \(i\) corresponds to the sets \(\sigma_i\) and \(\gamma_i\) respectively used to define virtual crystals; see VirtualCrystal

  • cartan_type – (optional) the Cartan type for the subcrystal; the default is the Cartan type for the ambient crystal

  • index_set – (optional) the index set for the subcrystal; the default is the index set for the Cartan type

  • category – (optional) the category for the subcrystal; the default is the Crystals category

See also

subcrystal()

EXAMPLES:

We build out a subcrystal starting from an element and only going to the lowest weight:

sage: B = crystals.Tableaux(['A',3], shape=[2,1])
sage: S = B.subcrystal(generators=[B(3,1,2)], direction='lower')
sage: S.cardinality()
11
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(3)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=[B(Integer(3),Integer(1),Integer(2))], direction='lower')
>>> S.cardinality()
11

Here we build out in both directions starting from an element, but we also have restricted ourselves to type \(A_2\):

sage: T = B.subcrystal(index_set=[1,2], generators=[B(3,1,1)])
sage: T.cardinality()
8
sage: list(T)
[[[1, 1], [3]],
 [[1, 2], [3]],
 [[1, 1], [2]],
 [[2, 2], [3]],
 [[1, 2], [2]],
 [[2, 3], [3]],
 [[1, 3], [2]],
 [[1, 3], [3]]]
>>> from sage.all import *
>>> T = B.subcrystal(index_set=[Integer(1),Integer(2)], generators=[B(Integer(3),Integer(1),Integer(1))])
>>> T.cardinality()
8
>>> list(T)
[[[1, 1], [3]],
 [[1, 2], [3]],
 [[1, 1], [2]],
 [[2, 2], [3]],
 [[1, 2], [2]],
 [[2, 3], [3]],
 [[1, 3], [2]],
 [[1, 3], [3]]]

Now we take the crystal corresponding to the intersection of the previous two subcrystals:

sage: U = B.subcrystal(contained=lambda x: x in S and x in T, generators=B)
sage: list(U)
[[[2, 3], [3]], [[1, 2], [3]], [[2, 2], [3]]]
>>> from sage.all import *
>>> U = B.subcrystal(contained=lambda x: x in S and x in T, generators=B)
>>> list(U)
[[[2, 3], [3]], [[1, 2], [3]], [[2, 2], [3]]]

Todo

Include support for subcrystals which only contains certain arrows.

class Element[source]

Bases: ElementWrapper

An element of a subcrystal. Wraps an element in the ambient crystal.

e(i)[source]

Return \(e_i\) of self.

EXAMPLES:

sage: B = crystals.Tableaux(['A',4], shape=[2,1])
sage: S = B.subcrystal(generators=(B(2,1,1), B(5,2,4)), index_set=[1,2])
sage: mg = S.module_generators[1]
sage: mg.e(2)
sage: mg.e(1)
[[1, 4], [5]]
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(4)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=(B(Integer(2),Integer(1),Integer(1)), B(Integer(5),Integer(2),Integer(4))), index_set=[Integer(1),Integer(2)])
>>> mg = S.module_generators[Integer(1)]
>>> mg.e(Integer(2))
>>> mg.e(Integer(1))
[[1, 4], [5]]
epsilon(i)[source]

Return \(\varepsilon_i\) of self.

EXAMPLES:

sage: B = crystals.Tableaux(['A',4], shape=[2,1])
sage: S = B.subcrystal(generators=(B(2,1,1), B(5,2,4)), index_set=[1,2])
sage: mg = S.module_generators[1]
sage: mg.epsilon(1)
1
sage: mg.epsilon(2)
0
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(4)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=(B(Integer(2),Integer(1),Integer(1)), B(Integer(5),Integer(2),Integer(4))), index_set=[Integer(1),Integer(2)])
>>> mg = S.module_generators[Integer(1)]
>>> mg.epsilon(Integer(1))
1
>>> mg.epsilon(Integer(2))
0
f(i)[source]

Return \(f_i\) of self.

EXAMPLES:

sage: B = crystals.Tableaux(['A',4], shape=[2,1])
sage: S = B.subcrystal(generators=(B(2,1,1), B(5,2,4)), index_set=[1,2])
sage: mg = S.module_generators[1]
sage: mg.f(1)
sage: mg.f(2)
[[3, 4], [5]]
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(4)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=(B(Integer(2),Integer(1),Integer(1)), B(Integer(5),Integer(2),Integer(4))), index_set=[Integer(1),Integer(2)])
>>> mg = S.module_generators[Integer(1)]
>>> mg.f(Integer(1))
>>> mg.f(Integer(2))
[[3, 4], [5]]
phi(i)[source]

Return \(\varphi_i\) of self.

EXAMPLES:

sage: B = crystals.Tableaux(['A',4], shape=[2,1])
sage: S = B.subcrystal(generators=(B(2,1,1), B(5,2,4)), index_set=[1,2])
sage: mg = S.module_generators[1]
sage: mg.phi(1)
0
sage: mg.phi(2)
1
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(4)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=(B(Integer(2),Integer(1),Integer(1)), B(Integer(5),Integer(2),Integer(4))), index_set=[Integer(1),Integer(2)])
>>> mg = S.module_generators[Integer(1)]
>>> mg.phi(Integer(1))
0
>>> mg.phi(Integer(2))
1
weight()[source]

Return the weight of self.

EXAMPLES:

sage: B = crystals.Tableaux(['A',4], shape=[2,1])
sage: S = B.subcrystal(generators=(B(2,1,1), B(5,2,4)), index_set=[1,2])
sage: mg = S.module_generators[1]
sage: mg.weight()
(0, 1, 0, 1, 1)
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(4)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=(B(Integer(2),Integer(1),Integer(1)), B(Integer(5),Integer(2),Integer(4))), index_set=[Integer(1),Integer(2)])
>>> mg = S.module_generators[Integer(1)]
>>> mg.weight()
(0, 1, 0, 1, 1)
cardinality()[source]

Return the cardinality of self.

EXAMPLES:

sage: B = crystals.Tableaux(['A',4], shape=[2,1])
sage: S = B.subcrystal(generators=[B(2,1,1)], index_set=[1,2])
sage: S.cardinality()
8
sage: B = crystals.infinity.Tableaux(['A',2])
sage: S = B.subcrystal(max_depth=4)
sage: S.cardinality()
22
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(4)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=[B(Integer(2),Integer(1),Integer(1))], index_set=[Integer(1),Integer(2)])
>>> S.cardinality()
8
>>> B = crystals.infinity.Tableaux(['A',Integer(2)])
>>> S = B.subcrystal(max_depth=Integer(4))
>>> S.cardinality()
22
index_set()[source]

Return the index set of self.

EXAMPLES:

sage: B = crystals.Tableaux(['A',4], shape=[2,1])
sage: S = B.subcrystal(generators=(B(2,1,1), B(5,2,4)), index_set=[1,2])
sage: S.index_set()
(1, 2)
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(4)], shape=[Integer(2),Integer(1)])
>>> S = B.subcrystal(generators=(B(Integer(2),Integer(1),Integer(1)), B(Integer(5),Integer(2),Integer(4))), index_set=[Integer(1),Integer(2)])
>>> S.index_set()
(1, 2)