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,ParentA 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 crystalcontained– (optional) a set (or function) which specifies when an element is contained in the subcrystal; the default is everything possible is includedgenerators– (optional) the generators for the subcrystal; the default is the generators for the ambient crystalvirtualization,scaling_factors– (optional) dictionaries whose key \(i\) corresponds to the sets \(\sigma_i\) and \(\gamma_i\) respectively used to define virtual crystals; seeVirtualCrystalcartan_type– (optional) the Cartan type for the subcrystal; the default is the Cartan type for the ambient crystalindex_set– (optional) the index set for the subcrystal; the default is the index set for the Cartan typecategory– (optional) the category for the subcrystal; the default is theCrystalscategory
See also
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:
ElementWrapperAn 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)