Tensor Products of Crystal Elements¶
AUTHORS:
Anne Schilling, Nicolas Thiery (2007): Initial version
Ben Salisbury, Travis Scrimshaw (2013): Refactored tensor products to handle non-regular crystals and created new subclass to take advantage of the regularity
Travis Scrimshaw (2017): Cythonized element classes
Franco Saliola (2017): Tensor products for crystal of super algebras
Anne Schilling (2018): Tensor products for crystals of queer super algebras
- class sage.combinat.crystals.tensor_product_element.CrystalOfBKKTableauxElement[source]¶
Bases:
TensorProductOfSuperCrystalsElement
Element class for the crystal of tableaux for Lie superalgebras of [BKK2000].
- pp()[source]¶
Pretty print
self
.EXAMPLES:
sage: C = crystals.Tableaux(['A',[1,2]], shape=[1,1]) sage: c = C.an_element() sage: c.pp() -2 -1
>>> from sage.all import * >>> C = crystals.Tableaux(['A',[Integer(1),Integer(2)]], shape=[Integer(1),Integer(1)]) >>> c = C.an_element() >>> c.pp() -2 -1
- to_tableau()[source]¶
Return the
Tableau
object corresponding toself
.EXAMPLES:
sage: C = crystals.Tableaux(['A',[1,2]], shape=[1,1]) sage: c = C.an_element() sage: c.to_tableau() [[-2], [-1]] sage: type(c.to_tableau()) <class 'sage.combinat.tableau.Tableaux_all_with_category.element_class'> sage: type(c) <class 'sage.combinat.crystals.bkk_crystals.CrystalOfBKKTableaux_with_category.element_class'>
>>> from sage.all import * >>> C = crystals.Tableaux(['A',[Integer(1),Integer(2)]], shape=[Integer(1),Integer(1)]) >>> c = C.an_element() >>> c.to_tableau() [[-2], [-1]] >>> type(c.to_tableau()) <class 'sage.combinat.tableau.Tableaux_all_with_category.element_class'> >>> type(c) <class 'sage.combinat.crystals.bkk_crystals.CrystalOfBKKTableaux_with_category.element_class'>
- class sage.combinat.crystals.tensor_product_element.CrystalOfTableauxElement[source]¶
Bases:
TensorProductOfRegularCrystalsElement
Element in a crystal of tableaux.
- pp()[source]¶
EXAMPLES:
sage: T = crystals.Tableaux(['A',3], shape = [2,2]) sage: t = T(rows=[[1,2],[3,4]]) sage: t.pp() 1 2 3 4
>>> from sage.all import * >>> T = crystals.Tableaux(['A',Integer(3)], shape = [Integer(2),Integer(2)]) >>> t = T(rows=[[Integer(1),Integer(2)],[Integer(3),Integer(4)]]) >>> t.pp() 1 2 3 4
- promotion()[source]¶
Return the result of applying promotion on
self
.Promotion for type A crystals of tableaux of rectangular shape. This method only makes sense in type A with rectangular shapes.
EXAMPLES:
sage: C = crystals.Tableaux(["A",3], shape = [3,3,3]) sage: t = C(Tableau([[1,1,1],[2,2,3],[3,4,4]])) sage: t [[1, 1, 1], [2, 2, 3], [3, 4, 4]] sage: t.promotion() [[1, 1, 2], [2, 2, 3], [3, 4, 4]] sage: t.promotion().parent() The crystal of tableaux of type ['A', 3] and shape(s) [[3, 3, 3]]
>>> from sage.all import * >>> C = crystals.Tableaux(["A",Integer(3)], shape = [Integer(3),Integer(3),Integer(3)]) >>> t = C(Tableau([[Integer(1),Integer(1),Integer(1)],[Integer(2),Integer(2),Integer(3)],[Integer(3),Integer(4),Integer(4)]])) >>> t [[1, 1, 1], [2, 2, 3], [3, 4, 4]] >>> t.promotion() [[1, 1, 2], [2, 2, 3], [3, 4, 4]] >>> t.promotion().parent() The crystal of tableaux of type ['A', 3] and shape(s) [[3, 3, 3]]
- promotion_inverse()[source]¶
Return the result of applying inverse promotion on
self
.Inverse promotion for type A crystals of tableaux of rectangular shape. This method only makes sense in type A with rectangular shapes.
EXAMPLES:
sage: C = crystals.Tableaux(["A",3], shape = [3,3,3]) sage: t = C(Tableau([[1,1,1],[2,2,3],[3,4,4]])) sage: t [[1, 1, 1], [2, 2, 3], [3, 4, 4]] sage: t.promotion_inverse() [[1, 1, 2], [2, 3, 3], [4, 4, 4]] sage: t.promotion_inverse().parent() The crystal of tableaux of type ['A', 3] and shape(s) [[3, 3, 3]]
>>> from sage.all import * >>> C = crystals.Tableaux(["A",Integer(3)], shape = [Integer(3),Integer(3),Integer(3)]) >>> t = C(Tableau([[Integer(1),Integer(1),Integer(1)],[Integer(2),Integer(2),Integer(3)],[Integer(3),Integer(4),Integer(4)]])) >>> t [[1, 1, 1], [2, 2, 3], [3, 4, 4]] >>> t.promotion_inverse() [[1, 1, 2], [2, 3, 3], [4, 4, 4]] >>> t.promotion_inverse().parent() The crystal of tableaux of type ['A', 3] and shape(s) [[3, 3, 3]]
- shape()[source]¶
Return the shape of the tableau corresponding to
self
.OUTPUT: an instance of
Partition
See also
EXAMPLES:
sage: C = crystals.Tableaux(["A", 2], shape=[2,1]) sage: x = C.an_element() sage: x.to_tableau().shape() [2, 1] sage: x.shape() [2, 1]
>>> from sage.all import * >>> C = crystals.Tableaux(["A", Integer(2)], shape=[Integer(2),Integer(1)]) >>> x = C.an_element() >>> x.to_tableau().shape() [2, 1] >>> x.shape() [2, 1]
- to_tableau()[source]¶
Return the
Tableau
object corresponding toself
.EXAMPLES:
sage: T = crystals.Tableaux(['A',3], shape = [2,2]) sage: t = T(rows=[[1,2],[3,4]]).to_tableau(); t [[1, 2], [3, 4]] sage: type(t) <class 'sage.combinat.tableau.Tableaux_all_with_category.element_class'> sage: type(t[0][0]) <class 'int'> sage: T = crystals.Tableaux(['D',3], shape = [1,1]) sage: t=T(rows=[[-3],[3]]).to_tableau(); t [[-3], [3]] sage: t=T(rows=[[3],[-3]]).to_tableau(); t [[3], [-3]] sage: T = crystals.Tableaux(['B',2], shape = [1,1]) sage: t = T(rows=[[0],[0]]).to_tableau(); t [[0], [0]]
>>> from sage.all import * >>> T = crystals.Tableaux(['A',Integer(3)], shape = [Integer(2),Integer(2)]) >>> t = T(rows=[[Integer(1),Integer(2)],[Integer(3),Integer(4)]]).to_tableau(); t [[1, 2], [3, 4]] >>> type(t) <class 'sage.combinat.tableau.Tableaux_all_with_category.element_class'> >>> type(t[Integer(0)][Integer(0)]) <class 'int'> >>> T = crystals.Tableaux(['D',Integer(3)], shape = [Integer(1),Integer(1)]) >>> t=T(rows=[[-Integer(3)],[Integer(3)]]).to_tableau(); t [[-3], [3]] >>> t=T(rows=[[Integer(3)],[-Integer(3)]]).to_tableau(); t [[3], [-3]] >>> T = crystals.Tableaux(['B',Integer(2)], shape = [Integer(1),Integer(1)]) >>> t = T(rows=[[Integer(0)],[Integer(0)]]).to_tableau(); t [[0], [0]]
- class sage.combinat.crystals.tensor_product_element.ImmutableListWithParent[source]¶
Bases:
ClonableArray
A class for lists having a parent.
Specification: any subclass
C
should implement__init__
which accepts the following formC(parent, list=list)
- class sage.combinat.crystals.tensor_product_element.InfinityCrystalOfTableauxElement[source]¶
Bases:
CrystalOfTableauxElement
- e(i)[source]¶
Return the action of \(\widetilde{e}_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['B',3]) sage: b = B(rows=[[1,1,1,1,1,1,1,2,0,-3,-1,-1,-1,-1],[2,2,2,2,-2,-2],[3,-3,-3]]) sage: b.e(3).pp() 1 1 1 1 1 1 1 2 0 -3 -1 -1 -1 -1 2 2 2 2 -2 -2 3 0 -3 sage: b.e(1).pp() 1 1 1 1 1 1 1 0 -3 -1 -1 -1 -1 2 2 2 2 -2 -2 3 -3 -3
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['B',Integer(3)]) >>> b = B(rows=[[Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(1),Integer(2),Integer(0),-Integer(3),-Integer(1),-Integer(1),-Integer(1),-Integer(1)],[Integer(2),Integer(2),Integer(2),Integer(2),-Integer(2),-Integer(2)],[Integer(3),-Integer(3),-Integer(3)]]) >>> b.e(Integer(3)).pp() 1 1 1 1 1 1 1 2 0 -3 -1 -1 -1 -1 2 2 2 2 -2 -2 3 0 -3 >>> b.e(Integer(1)).pp() 1 1 1 1 1 1 1 0 -3 -1 -1 -1 -1 2 2 2 2 -2 -2 3 -3 -3
- f(i)[source]¶
Return the action of \(\widetilde{f}_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['C',4]) sage: b = B.highest_weight_vector() sage: b.f(1).pp() 1 1 1 1 2 2 2 2 3 3 4 sage: b.f(3).pp() 1 1 1 1 1 2 2 2 2 3 3 4 4 sage: b.f(3).f(4).pp() 1 1 1 1 1 2 2 2 2 3 3 -4 4
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['C',Integer(4)]) >>> b = B.highest_weight_vector() >>> b.f(Integer(1)).pp() 1 1 1 1 2 2 2 2 3 3 4 >>> b.f(Integer(3)).pp() 1 1 1 1 1 2 2 2 2 3 3 4 4 >>> b.f(Integer(3)).f(Integer(4)).pp() 1 1 1 1 1 2 2 2 2 3 3 -4 4
- class sage.combinat.crystals.tensor_product_element.InfinityCrystalOfTableauxElementTypeD[source]¶
Bases:
InfinityCrystalOfTableauxElement
- e(i)[source]¶
Return the action of \(\widetilde{e}_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['D',4]) sage: b = B.highest_weight_vector().f_string([1,4,3,1,2]); b.pp() 1 1 1 1 2 3 2 2 2 3 -3 sage: b.e(2).pp() 1 1 1 1 2 2 2 2 2 3 -3
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['D',Integer(4)]) >>> b = B.highest_weight_vector().f_string([Integer(1),Integer(4),Integer(3),Integer(1),Integer(2)]); b.pp() 1 1 1 1 2 3 2 2 2 3 -3 >>> b.e(Integer(2)).pp() 1 1 1 1 2 2 2 2 2 3 -3
- f(i)[source]¶
Return the action of \(\widetilde{f}_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['D',5]) sage: b = B.highest_weight_vector().f_string([1,4,3,1,5]); b.pp() 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 -5 4 5 sage: b.f(1).pp() 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 -5 4 5 sage: b.f(5).pp() 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 -5 4 -4
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['D',Integer(5)]) >>> b = B.highest_weight_vector().f_string([Integer(1),Integer(4),Integer(3),Integer(1),Integer(5)]); b.pp() 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 -5 4 5 >>> b.f(Integer(1)).pp() 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 -5 4 5 >>> b.f(Integer(5)).pp() 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 -5 4 -4
- class sage.combinat.crystals.tensor_product_element.InfinityQueerCrystalOfTableauxElement[source]¶
Bases:
TensorProductOfQueerSuperCrystalsElement
Initialize
self
.EXAMPLES:
sage: B = crystals.infinity.Tableaux(['Q',4]) sage: t = B([[4,4,4,4,2,1],[3,3,3],[2,2],[1]]) sage: t [[4, 4, 4, 4, 2, 1], [3, 3, 3], [2, 2], [1]] sage: TestSuite(t).run()
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['Q',Integer(4)]) >>> t = B([[Integer(4),Integer(4),Integer(4),Integer(4),Integer(2),Integer(1)],[Integer(3),Integer(3),Integer(3)],[Integer(2),Integer(2)],[Integer(1)]]) >>> t [[4, 4, 4, 4, 2, 1], [3, 3, 3], [2, 2], [1]] >>> TestSuite(t).run()
- e(i)[source]¶
Return the action of \(e_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['Q',4]) sage: t = B([[4,4,4,4,4,2,1],[3,3,3,3],[2,2,1],[1]]) sage: t.e(1) [[4, 4, 4, 4, 4, 4, 2, 1], [3, 3, 3, 3, 3], [2, 2, 1, 1], [1]] sage: t.e(3) [[4, 4, 4, 4, 4, 3, 2, 1], [3, 3, 3, 3], [2, 2, 1], [1]] sage: t.e(-1)
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['Q',Integer(4)]) >>> t = B([[Integer(4),Integer(4),Integer(4),Integer(4),Integer(4),Integer(2),Integer(1)],[Integer(3),Integer(3),Integer(3),Integer(3)],[Integer(2),Integer(2),Integer(1)],[Integer(1)]]) >>> t.e(Integer(1)) [[4, 4, 4, 4, 4, 4, 2, 1], [3, 3, 3, 3, 3], [2, 2, 1, 1], [1]] >>> t.e(Integer(3)) [[4, 4, 4, 4, 4, 3, 2, 1], [3, 3, 3, 3], [2, 2, 1], [1]] >>> t.e(-Integer(1))
- epsilon(i)[source]¶
Return \(\varepsilon_i\) of
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['Q',4]) sage: t = B([[4,4,4,4,4,2,1],[3,3,3,3],[2,2,1],[1]]) sage: [t.epsilon(i) for i in B.index_set()] [-1, 1, -2, 0]
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['Q',Integer(4)]) >>> t = B([[Integer(4),Integer(4),Integer(4),Integer(4),Integer(4),Integer(2),Integer(1)],[Integer(3),Integer(3),Integer(3),Integer(3)],[Integer(2),Integer(2),Integer(1)],[Integer(1)]]) >>> [t.epsilon(i) for i in B.index_set()] [-1, 1, -2, 0]
- f(i)[source]¶
Return the action of \(f_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['Q',4]) sage: t = B([[4,4,4,4,4,2,1],[3,3,3,3],[2,2,1],[1]]) sage: t.f(1) [[4, 4, 4, 4, 4, 2, 2], [3, 3, 3, 3], [2, 2, 1], [1]] sage: t.f(3) sage: t.f(-1) [[4, 4, 4, 4, 4, 2, 2], [3, 3, 3, 3], [2, 2, 1], [1]]
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['Q',Integer(4)]) >>> t = B([[Integer(4),Integer(4),Integer(4),Integer(4),Integer(4),Integer(2),Integer(1)],[Integer(3),Integer(3),Integer(3),Integer(3)],[Integer(2),Integer(2),Integer(1)],[Integer(1)]]) >>> t.f(Integer(1)) [[4, 4, 4, 4, 4, 2, 2], [3, 3, 3, 3], [2, 2, 1], [1]] >>> t.f(Integer(3)) >>> t.f(-Integer(1)) [[4, 4, 4, 4, 4, 2, 2], [3, 3, 3, 3], [2, 2, 1], [1]]
- rows()[source]¶
Return the list of rows of
self
.EXAMPLES:
sage: B = crystals.infinity.Tableaux(['Q',4]) sage: t = B([[4,4,4,4,4,2,1],[3,3,3,3],[2,2,1],[1]]) sage: t.rows() [[1, 2, 4, 4, 4, 4, 4], [3, 3, 3, 3], [1, 2, 2], [1]]
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['Q',Integer(4)]) >>> t = B([[Integer(4),Integer(4),Integer(4),Integer(4),Integer(4),Integer(2),Integer(1)],[Integer(3),Integer(3),Integer(3),Integer(3)],[Integer(2),Integer(2),Integer(1)],[Integer(1)]]) >>> t.rows() [[1, 2, 4, 4, 4, 4, 4], [3, 3, 3, 3], [1, 2, 2], [1]]
- weight()[source]¶
Return the weight of
self
.EXAMPLES:
sage: B = crystals.infinity.Tableaux(['Q',4]) sage: t = B([[4,4,4,4,4,2,1],[3,3,3,3],[2,2,1],[1]]) sage: t.weight() (4, 2, 2, 0)
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['Q',Integer(4)]) >>> t = B([[Integer(4),Integer(4),Integer(4),Integer(4),Integer(4),Integer(2),Integer(1)],[Integer(3),Integer(3),Integer(3),Integer(3)],[Integer(2),Integer(2),Integer(1)],[Integer(1)]]) >>> t.weight() (4, 2, 2, 0)
- class sage.combinat.crystals.tensor_product_element.TensorProductOfCrystalsElement[source]¶
Bases:
ImmutableListWithParent
A class for elements of tensor products of crystals.
- e(i)[source]¶
Return the action of \(e_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux("D4") sage: T = crystals.TensorProduct(B,B) sage: b1 = B.highest_weight_vector().f_string([1,4,3]) sage: b2 = B.highest_weight_vector().f_string([2,2,3,1,4]) sage: t = T(b2, b1) sage: t.e(1) [[[1, 1, 1, 1, 1], [2, 2, 3, -3], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]] sage: t.e(2) sage: t.e(3) [[[1, 1, 1, 1, 1, 2], [2, 2, 3, -4], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]] sage: t.e(4) [[[1, 1, 1, 1, 1, 2], [2, 2, 3, 4], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]]
>>> from sage.all import * >>> B = crystals.infinity.Tableaux("D4") >>> T = crystals.TensorProduct(B,B) >>> b1 = B.highest_weight_vector().f_string([Integer(1),Integer(4),Integer(3)]) >>> b2 = B.highest_weight_vector().f_string([Integer(2),Integer(2),Integer(3),Integer(1),Integer(4)]) >>> t = T(b2, b1) >>> t.e(Integer(1)) [[[1, 1, 1, 1, 1], [2, 2, 3, -3], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]] >>> t.e(Integer(2)) >>> t.e(Integer(3)) [[[1, 1, 1, 1, 1, 2], [2, 2, 3, -4], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]] >>> t.e(Integer(4)) [[[1, 1, 1, 1, 1, 2], [2, 2, 3, 4], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]]
- epsilon(i)[source]¶
Return \(\varepsilon_i\) of
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: B = crystals.infinity.Tableaux("G2") sage: T = crystals.TensorProduct(B,B) sage: b1 = B.highest_weight_vector().f(2) sage: b2 = B.highest_weight_vector().f_string([2,2,1]) sage: t = T(b2, b1) sage: [t.epsilon(i) for i in B.index_set()] [0, 3]
>>> from sage.all import * >>> B = crystals.infinity.Tableaux("G2") >>> T = crystals.TensorProduct(B,B) >>> b1 = B.highest_weight_vector().f(Integer(2)) >>> b2 = B.highest_weight_vector().f_string([Integer(2),Integer(2),Integer(1)]) >>> t = T(b2, b1) >>> [t.epsilon(i) for i in B.index_set()] [0, 3]
- f(i)[source]¶
Return the action of \(f_i\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights() sage: B = crystals.GeneralizedYoungWalls(3,La[0]) sage: T = crystals.TensorProduct(B,B,B) sage: b1 = B.highest_weight_vector().f_string([0,3]) sage: b2 = B.highest_weight_vector().f_string([0]) sage: b3 = B.highest_weight_vector() sage: t = T(b3, b2, b1) sage: t.f(0) [[[0]], [[0]], [[0, 3]]] sage: t.f(1) [[], [[0]], [[0, 3], [1]]] sage: t.f(2) [[], [[0]], [[0, 3, 2]]] sage: t.f(3) [[], [[0, 3]], [[0, 3]]]
>>> from sage.all import * >>> La = RootSystem(['A',Integer(3),Integer(1)]).weight_lattice(extended=True).fundamental_weights() >>> B = crystals.GeneralizedYoungWalls(Integer(3),La[Integer(0)]) >>> T = crystals.TensorProduct(B,B,B) >>> b1 = B.highest_weight_vector().f_string([Integer(0),Integer(3)]) >>> b2 = B.highest_weight_vector().f_string([Integer(0)]) >>> b3 = B.highest_weight_vector() >>> t = T(b3, b2, b1) >>> t.f(Integer(0)) [[[0]], [[0]], [[0, 3]]] >>> t.f(Integer(1)) [[], [[0]], [[0, 3], [1]]] >>> t.f(Integer(2)) [[], [[0]], [[0, 3, 2]]] >>> t.f(Integer(3)) [[], [[0, 3]], [[0, 3]]]
- phi(i)[source]¶
Return \(\varphi_i\) of
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights() sage: B = crystals.GeneralizedYoungWalls(2,La[0]+La[1]) sage: T = crystals.TensorProduct(B,B) sage: b1 = B.highest_weight_vector().f_string([1,0]) sage: b2 = B.highest_weight_vector().f_string([0,1]) sage: t = T(b2, b1) sage: [t.phi(i) for i in B.index_set()] [1, 1, 4]
>>> from sage.all import * >>> La = RootSystem(['A',Integer(2),Integer(1)]).weight_lattice(extended=True).fundamental_weights() >>> B = crystals.GeneralizedYoungWalls(Integer(2),La[Integer(0)]+La[Integer(1)]) >>> T = crystals.TensorProduct(B,B) >>> b1 = B.highest_weight_vector().f_string([Integer(1),Integer(0)]) >>> b2 = B.highest_weight_vector().f_string([Integer(0),Integer(1)]) >>> t = T(b2, b1) >>> [t.phi(i) for i in B.index_set()] [1, 1, 4]
- pp()[source]¶
Pretty print
self
.EXAMPLES:
sage: C = crystals.Tableaux(['A',3], shape=[3,1]) sage: D = crystals.Tableaux(['A',3], shape=[1]) sage: E = crystals.Tableaux(['A',3], shape=[2,2,2]) sage: T = crystals.TensorProduct(C,D,E) sage: T.module_generators[0].pp() 1 1 1 (X) 1 (X) 1 1 2 2 2 3 3
>>> from sage.all import * >>> C = crystals.Tableaux(['A',Integer(3)], shape=[Integer(3),Integer(1)]) >>> D = crystals.Tableaux(['A',Integer(3)], shape=[Integer(1)]) >>> E = crystals.Tableaux(['A',Integer(3)], shape=[Integer(2),Integer(2),Integer(2)]) >>> T = crystals.TensorProduct(C,D,E) >>> T.module_generators[Integer(0)].pp() 1 1 1 (X) 1 (X) 1 1 2 2 2 3 3
- weight()[source]¶
Return the weight of
self
.EXAMPLES:
sage: B = crystals.infinity.Tableaux("A3") sage: T = crystals.TensorProduct(B,B) sage: b1 = B.highest_weight_vector().f_string([2,1,3]) sage: b2 = B.highest_weight_vector().f(1) sage: t = T(b2, b1) sage: t [[[1, 1, 1, 2], [2, 2], [3]], [[1, 1, 1, 1, 2], [2, 2, 4], [3]]] sage: t.weight() (-2, 1, 0, 1)
>>> from sage.all import * >>> B = crystals.infinity.Tableaux("A3") >>> T = crystals.TensorProduct(B,B) >>> b1 = B.highest_weight_vector().f_string([Integer(2),Integer(1),Integer(3)]) >>> b2 = B.highest_weight_vector().f(Integer(1)) >>> t = T(b2, b1) >>> t [[[1, 1, 1, 2], [2, 2], [3]], [[1, 1, 1, 1, 2], [2, 2, 4], [3]]] >>> t.weight() (-2, 1, 0, 1)
sage: C = crystals.Letters(['A',3]) sage: T = crystals.TensorProduct(C,C) sage: T(C(1),C(2)).weight() (1, 1, 0, 0) sage: T = crystals.Tableaux(['D',4],shape=[]) sage: T.list()[0].weight() (0, 0, 0, 0)
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(3)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(1)),C(Integer(2))).weight() (1, 1, 0, 0) >>> T = crystals.Tableaux(['D',Integer(4)],shape=[]) >>> T.list()[Integer(0)].weight() (0, 0, 0, 0)
- class sage.combinat.crystals.tensor_product_element.TensorProductOfQueerSuperCrystalsElement[source]¶
Bases:
TensorProductOfRegularCrystalsElement
Element class for a tensor product of crystals for queer Lie superalgebras.
This implements the tensor product rule for crystals of Grantcharov et al. [GJK+2014]. Given crystals \(B_1\) and \(B_2\) of type \(\mathfrak{q}_{n+1}\), we define the tensor product \(b_1 \otimes b_2 \in B_1 \otimes B_2\), where \(b_1 \in B_1\) and \(b_2 \in B_2\), as the following:
In addition to the tensor product rule for type \(A_n\), the tensor product rule for \(e_{-1}\) and \(f_{-1}\) on \(b_1\otimes b_2\) are given by
\[\begin{split}\begin{aligned} e_{-1}(b_1\otimes b_2) &= \begin{cases} b_1 \otimes e_{-1}b_2 & \text{if } \operatorname{wt}(b_1)_1 = \operatorname{wt}(b_1)_2 = 0,\\ e_{-1}b_1 \otimes b_2 & \text{otherwise}, \end{cases} \\ f_{-1}(b_1\otimes b_2) &= \begin{cases} b_1 \otimes f_{-1}b_2 & \text{if } \operatorname{wt}(b_1)_1 = \operatorname{wt}(b_1)_2 = 0,\\ f_{-1}b_1 \otimes b_2 & \text{otherwise}. \end{cases} \end{aligned}\end{split}\]For \(1 < i \leq n\), the operators \(e_{-i}\) and \(f_{-i}\) are defined as
\[e_{-i} = s_{w^{-1}_i} e_{-1} s_{w_i}, \quad f_{-i} = s_{w^{-1}_i} f_{-1} s_{w_i}.\]Here, \(w_i = s_2 \cdots s_i s_1 \cdots s_{i-1}\) and \(s_i\) is the reflection along the \(i\)-string in the crystal. Moreover, for \(1<i\leq n\), we define the operators \(e_{-i'}\) and \(f_{-i'}\) as
\[e_{-i'} = s_{w_0} f_{-(n+1-i)} s_{w_0}, \quad f_{-i'} = s_{w_0} e_{-(n+1-i)} s_{w_0},\]where \(w_0\) is the longest element in the symmetric group \(S_{n+1}\) generated by \(s_1,\ldots,s_n\). In this implementation, we use the integers \(-2n, \ldots, -(n+1)\) to respectively denote the indices \(-n', \ldots, -1'\).
- e(i)[source]¶
Return \(e_i\) on
self
.EXAMPLES:
sage: Q = crystals.Letters(['Q', 3]) sage: T = tensor([Q,Q]) sage: t = T(Q(1),Q(1)) sage: t.e(-1) sage: t = T(Q(2),Q(1)) sage: t.e(-1) [1, 1] sage: T = tensor([Q,Q,Q,Q]) sage: t = T(Q(1),Q(3),Q(2),Q(1)) sage: t.e(-2) [2, 2, 1, 1]
>>> from sage.all import * >>> Q = crystals.Letters(['Q', Integer(3)]) >>> T = tensor([Q,Q]) >>> t = T(Q(Integer(1)),Q(Integer(1))) >>> t.e(-Integer(1)) >>> t = T(Q(Integer(2)),Q(Integer(1))) >>> t.e(-Integer(1)) [1, 1] >>> T = tensor([Q,Q,Q,Q]) >>> t = T(Q(Integer(1)),Q(Integer(3)),Q(Integer(2)),Q(Integer(1))) >>> t.e(-Integer(2)) [2, 2, 1, 1]
- epsilon(i)[source]¶
Return \(\varepsilon_i\) on
self
.EXAMPLES:
sage: Q = crystals.Letters(['Q', 3]) sage: T = tensor([Q, Q, Q, Q]) sage: t = T(Q(1), Q(3), Q(2), Q(1)) sage: t.epsilon(-2) 1
>>> from sage.all import * >>> Q = crystals.Letters(['Q', Integer(3)]) >>> T = tensor([Q, Q, Q, Q]) >>> t = T(Q(Integer(1)), Q(Integer(3)), Q(Integer(2)), Q(Integer(1))) >>> t.epsilon(-Integer(2)) 1
- f(i)[source]¶
Return \(f_i\) on
self
.EXAMPLES:
sage: Q = crystals.Letters(['Q', 3]) sage: T = tensor([Q, Q]) sage: t = T(Q(1), Q(1)) sage: t.f(-1) [2, 1]
>>> from sage.all import * >>> Q = crystals.Letters(['Q', Integer(3)]) >>> T = tensor([Q, Q]) >>> t = T(Q(Integer(1)), Q(Integer(1))) >>> t.f(-Integer(1)) [2, 1]
- phi(i)[source]¶
Return \(\varphi_i\) on
self
.EXAMPLES:
sage: Q = crystals.Letters(['Q', 3]) sage: T = tensor([Q, Q, Q, Q]) sage: t = T(Q(1), Q(3), Q(2), Q(1)) sage: t.phi(-2) 0 sage: t.phi(-1) 1
>>> from sage.all import * >>> Q = crystals.Letters(['Q', Integer(3)]) >>> T = tensor([Q, Q, Q, Q]) >>> t = T(Q(Integer(1)), Q(Integer(3)), Q(Integer(2)), Q(Integer(1))) >>> t.phi(-Integer(2)) 0 >>> t.phi(-Integer(1)) 1
- class sage.combinat.crystals.tensor_product_element.TensorProductOfRegularCrystalsElement[source]¶
Bases:
TensorProductOfCrystalsElement
Element class for a tensor product of regular crystals.
- e(i)[source]¶
Return the action of \(e_i\) on
self
.EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(1),C(2)).e(1) == T(C(1),C(1)) True sage: T(C(2),C(1)).e(1) is None True sage: T(C(2),C(2)).e(1) == T(C(1),C(2)) True
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(1)),C(Integer(2))).e(Integer(1)) == T(C(Integer(1)),C(Integer(1))) True >>> T(C(Integer(2)),C(Integer(1))).e(Integer(1)) is None True >>> T(C(Integer(2)),C(Integer(2))).e(Integer(1)) == T(C(Integer(1)),C(Integer(2))) True
- epsilon(i)[source]¶
Return \(\varepsilon_i\) of
self
.EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(1),C(1)).epsilon(1) 0 sage: T(C(1),C(2)).epsilon(1) 1 sage: T(C(2),C(1)).epsilon(1) 0
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(1)),C(Integer(1))).epsilon(Integer(1)) 0 >>> T(C(Integer(1)),C(Integer(2))).epsilon(Integer(1)) 1 >>> T(C(Integer(2)),C(Integer(1))).epsilon(Integer(1)) 0
- f(i)[source]¶
Return the action of \(f_i\) on
self
.EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(1),C(1)).f(1) [1, 2] sage: T(C(1),C(2)).f(1) [2, 2] sage: T(C(2),C(1)).f(1) is None True
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(1)),C(Integer(1))).f(Integer(1)) [1, 2] >>> T(C(Integer(1)),C(Integer(2))).f(Integer(1)) [2, 2] >>> T(C(Integer(2)),C(Integer(1))).f(Integer(1)) is None True
- phi(i)[source]¶
Return \(\varphi_i\) of
self
.EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(1),C(1)).phi(1) 2 sage: T(C(1),C(2)).phi(1) 1 sage: T(C(2),C(1)).phi(1) 0
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(1)),C(Integer(1))).phi(Integer(1)) 2 >>> T(C(Integer(1)),C(Integer(2))).phi(Integer(1)) 1 >>> T(C(Integer(2)),C(Integer(1))).phi(Integer(1)) 0
- position_of_first_unmatched_plus(i)[source]¶
Return the position of the first unmatched \(+\) or
None
if there is no unmatched \(+\).EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(2),C(1)).position_of_first_unmatched_plus(1) sage: T(C(1),C(2)).position_of_first_unmatched_plus(1) 1
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(2)),C(Integer(1))).position_of_first_unmatched_plus(Integer(1)) >>> T(C(Integer(1)),C(Integer(2))).position_of_first_unmatched_plus(Integer(1)) 1
- position_of_last_unmatched_minus(i)[source]¶
Return the position of the last unmatched \(-\) or
None
if there is no unmatched \(-\).EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(2),C(1)).position_of_last_unmatched_minus(1) sage: T(C(1),C(2)).position_of_last_unmatched_minus(1) 0
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(2)),C(Integer(1))).position_of_last_unmatched_minus(Integer(1)) >>> T(C(Integer(1)),C(Integer(2))).position_of_last_unmatched_minus(Integer(1)) 0
- positions_of_unmatched_minus(i, dual=False, reverse=False)[source]¶
EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(2),C(1)).positions_of_unmatched_minus(1) [] sage: T(C(1),C(2)).positions_of_unmatched_minus(1) [0]
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(2)),C(Integer(1))).positions_of_unmatched_minus(Integer(1)) [] >>> T(C(Integer(1)),C(Integer(2))).positions_of_unmatched_minus(Integer(1)) [0]
- positions_of_unmatched_plus(i)[source]¶
EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: T = crystals.TensorProduct(C,C) sage: T(C(2),C(1)).positions_of_unmatched_plus(1) [] sage: T(C(1),C(2)).positions_of_unmatched_plus(1) [1]
>>> from sage.all import * >>> C = crystals.Letters(['A',Integer(5)]) >>> T = crystals.TensorProduct(C,C) >>> T(C(Integer(2)),C(Integer(1))).positions_of_unmatched_plus(Integer(1)) [] >>> T(C(Integer(1)),C(Integer(2))).positions_of_unmatched_plus(Integer(1)) [1]
- class sage.combinat.crystals.tensor_product_element.TensorProductOfSuperCrystalsElement[source]¶
Bases:
TensorProductOfRegularCrystalsElement
Element class for a tensor product of crystals for Lie superalgebras.
This implements the tensor product rule for crystals of Lie superalgebras of [BKK2000].
- e(i)[source]¶
Return \(e_i\) on
self
.EXAMPLES:
sage: C = crystals.Letters(['A', [2, 1]]) sage: T = tensor([C,C]) sage: t = T(C(1),C(1)) sage: t.e(0) [-1, 1]
>>> from sage.all import * >>> C = crystals.Letters(['A', [Integer(2), Integer(1)]]) >>> T = tensor([C,C]) >>> t = T(C(Integer(1)),C(Integer(1))) >>> t.e(Integer(0)) [-1, 1]
- epsilon(i)[source]¶
Return \(\varepsilon_i\) on
self
.EXAMPLES:
sage: C = crystals.Letters(['A', [2, 1]]) sage: T = tensor([C,C]) sage: t = T(C(1),C(1)) sage: t.epsilon(0) 1
>>> from sage.all import * >>> C = crystals.Letters(['A', [Integer(2), Integer(1)]]) >>> T = tensor([C,C]) >>> t = T(C(Integer(1)),C(Integer(1))) >>> t.epsilon(Integer(0)) 1
- f(i)[source]¶
Return \(f_i\) on
self
.EXAMPLES:
sage: C = crystals.Letters(['A', [2, 1]]) sage: T = tensor([C,C]) sage: t = T(C(1),C(1)) sage: t.f(0) sage: t.f(1) [1, 2]
>>> from sage.all import * >>> C = crystals.Letters(['A', [Integer(2), Integer(1)]]) >>> T = tensor([C,C]) >>> t = T(C(Integer(1)),C(Integer(1))) >>> t.f(Integer(0)) >>> t.f(Integer(1)) [1, 2]
- phi(i)[source]¶
Return \(\varphi_i\) on
self
.EXAMPLES:
sage: C = crystals.Letters(['A', [2, 1]]) sage: T = tensor([C,C]) sage: t = T(C(1),C(1)) sage: t.phi(0) 0
>>> from sage.all import * >>> C = crystals.Letters(['A', [Integer(2), Integer(1)]]) >>> T = tensor([C,C]) >>> t = T(C(Integer(1)),C(Integer(1))) >>> t.phi(Integer(0)) 0