Affine Crystals¶
- class sage.combinat.crystals.affine.AffineCrystalFromClassical(cartan_type, classical_crystal, category=None)¶
Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
This abstract class can be used for affine crystals that are constructed from a classical crystal. The zero arrows can be implemented using different methods (for example using a Dynkin diagram automorphisms or virtual crystals).
This is a helper class, mostly used to implement Kirillov-Reshetikhin crystals (see:
KirillovReshetikhinCrystal()
).For general information about crystals see
sage.combinat.crystals
.INPUT:
cartan_type
– the Cartan type of the resulting affine crystalclassical_crystal
– instance of a classical crystal
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: A.list() [[[1]], [[2]], [[3]]] sage: A.cartan_type() ['A', 2, 1] sage: A.index_set() (0, 1, 2) sage: b = A(rows=[[1]]) sage: b.weight() -Lambda[0] + Lambda[1] sage: b.classical_weight() (1, 0, 0) sage: [x.s(0) for x in A.list()] [[[3]], [[2]], [[1]]] sage: [x.s(1) for x in A.list()] [[[2]], [[1]], [[3]]]
- Element¶
alias of
AffineCrystalFromClassicalElement
- cardinality()¶
Return the cardinality of
self
.EXAMPLES:
sage: C = crystals.Tableaux(['A',3],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',3,1],C,pr,pr_inverse,1) sage: A.cardinality() == C.cardinality() True
- lift(affine_elt)¶
Lift an affine crystal element to the corresponding classical crystal element.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A.list()[0] sage: A.lift(b) [[1]] sage: A.lift(b).parent() The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
- retract(classical_elt)¶
Transform a classical crystal element to the corresponding affine crystal element.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: t = C(rows=[[1]]) sage: t.parent() The crystal of tableaux of type ['A', 2] and shape(s) [[1]] sage: A.retract(t) [[1]] sage: A.retract(t).parent() is A True
- class sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotion(cartan_type, classical_crystal, p_automorphism, p_inverse_automorphism, dynkin_node, category=None)¶
Bases:
sage.combinat.crystals.affine.AffineCrystalFromClassical
Crystals that are constructed from a classical crystal and a Dynkin diagram automorphism \(\sigma\). In type \(A_n\), the Dynkin diagram automorphism is \(i \to i+1 \pmod n+1\) and the corresponding map on the crystal is the promotion operation \(\mathrm{pr}\) on tableaux. The affine crystal operators are given by \(f_0= \mathrm{pr}^{-1} f_{\sigma(0)} \mathrm{pr}\).
INPUT:
cartan_type
– the Cartan type of the resulting affine crystalclassical_crystal
– instance of a classical crystalautomorphism, inverse_automorphism
– a function on the elements of theclassical_crystal
dynkin_node
– an integer specifying the classical node in the image of the zero node under the automorphism sigma
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: A.list() [[[1]], [[2]], [[3]]] sage: A.cartan_type() ['A', 2, 1] sage: A.index_set() (0, 1, 2) sage: b = A(rows=[[1]]) sage: b.weight() -Lambda[0] + Lambda[1] sage: b.classical_weight() (1, 0, 0) sage: [x.s(0) for x in A.list()] [[[3]], [[2]], [[1]]] sage: [x.s(1) for x in A.list()] [[[2]], [[1]], [[3]]]
- Element¶
- automorphism(x)¶
Give the analogue of the affine Dynkin diagram automorphism on the level of crystals.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A.list()[0] sage: A.automorphism(b) [[2]]
- inverse_automorphism(x)¶
Give the analogue of the inverse of the affine Dynkin diagram automorphism on the level of crystals.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A.list()[0] sage: A.inverse_automorphism(b) [[3]]
- class sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotionElement¶
Bases:
sage.combinat.crystals.affine.AffineCrystalFromClassicalElement
Elements of crystals that are constructed from a classical crystal and a Dynkin diagram automorphism. In type \(A\), the automorphism is the promotion operation on tableaux.
This class is not instantiated directly but rather
__call__
-ed fromAffineCrystalFromClassicalAndPromotion
. The syntax of this is governed by the (classical) crystal.Since this class inherits from
AffineCrystalFromClassicalElement
, the methods that need to be implemented aree0()
,f0()
and possiblyepsilon0()
andphi0()
if more efficient algorithms exist.EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A(rows=[[1]]) sage: b._repr_() '[[1]]'
- e0()¶
Implement \(e_0\) using the automorphism as \(e_0 = \operatorname{pr}^{-1} e_{dynkin_node} \operatorname{pr}\)
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A(rows=[[1]]) sage: b.e0() [[3]]
- epsilon0()¶
Implement \(epsilon_0\) using the automorphism.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: [x.epsilon0() for x in A.list()] [1, 0, 0]
- f0()¶
Implement \(f_0\) using the automorphism as \(f_0 = \operatorname{pr}^{-1} f_{dynkin_node} \operatorname{pr}\)
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A(rows=[[3]]) sage: b.f0() [[1]]
- phi0()¶
Implement \(phi_0\) using the automorphism.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: [x.phi0() for x in A.list()] [0, 0, 1]
- class sage.combinat.crystals.affine.AffineCrystalFromClassicalElement¶
Bases:
sage.structure.element_wrapper.ElementWrapper
Elements of crystals that are constructed from a classical crystal.
The elements inherit many of their methods from the classical crystal using lift and retract.
This class is not instantiated directly but rather
__call__
-ed fromAffineCrystalFromClassical
. The syntax of this is governed by the (classical) crystal.EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A(rows=[[1]]) sage: b._repr_() '[[1]]'
- classical_weight()¶
Return the classical weight corresponding to
self
.EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A(rows=[[1]]) sage: b.classical_weight() (1, 0, 0)
- e(i)¶
Return the action of \(e_i\) on
self
.EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A(rows=[[1]]) sage: b.e(0) [[3]] sage: b.e(1)
- e0()¶
Assumes that \(e_0\) is implemented separately.
- epsilon(i)¶
Return the maximal time the crystal operator \(e_i\) can be applied to
self
.EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: [x.epsilon(0) for x in A.list()] [1, 0, 0] sage: [x.epsilon(1) for x in A.list()] [0, 1, 0]
- epsilon0()¶
Uses \(\varepsilon_0\) from the super class, but should be implemented if a faster implementation exists.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: [x.epsilon0() for x in A.list()] [1, 0, 0]
- f(i)¶
Return the action of \(f_i\) on
self
.EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A(rows=[[3]]) sage: b.f(0) [[1]] sage: b.f(2)
- f0()¶
Assumes that \(f_0\) is implemented separately.
- lift()¶
Lift an affine crystal element to the corresponding classical crystal element.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: b = A.list()[0] sage: b.lift() [[1]] sage: b.lift().parent() The crystal of tableaux of type ['A', 2] and shape(s) [[1]]
- phi(i)¶
Returns the maximal time the crystal operator \(f_i\) can be applied to self.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: [x.phi(0) for x in A.list()] [0, 0, 1] sage: [x.phi(1) for x in A.list()] [1, 0, 0]
- phi0()¶
Uses \(\varphi_0\) from the super class, but should be implemented if a faster implementation exists.
EXAMPLES:
sage: n = 2 sage: C = crystals.Tableaux(['A',n],shape=[1]) sage: pr = attrcall("promotion") sage: pr_inverse = attrcall("promotion_inverse") sage: A = crystals.AffineFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) sage: [x.phi0() for x in A.list()] [0, 0, 1]
- pp()¶
Method for pretty printing.
EXAMPLES:
sage: K = crystals.KirillovReshetikhin(['D',3,2],1,1) sage: t=K(rows=[[1]]) sage: t.pp() 1