Star-Crystal Structure On \(B(\infty)\)#
AUTHORS:
Ben Salisbury: Initial version
Travis Scrimshaw: Initial version
- class sage.combinat.crystals.star_crystal.StarCrystal(Binf)[source]#
Bases:
UniqueRepresentation
,Parent
The star-crystal or \(*\)-crystal version of a highest weight crystal.
The \(*\)-crystal structure on \(B(\infty)\) is the structure induced by the algebra antiautomorphism \(* \colon U_q(\mathfrak{g}) \longrightarrow U_q(\mathfrak{g})\) that stabilizes the negative half \(U_q^-(\mathfrak{g})\). It is defined by
\[E_i^* = E_i , \ \ \ F_i^* = F_i , \ \ \ q^* = q, \ \ \ (q^h)^* = q^{-h},\]where \(E_i\) and \(F_i\) are the Chevalley generators of \(U_q(\mathfrak{g})\) and \(h\) is an element of the Cartan subalgebra.
The induced operation on the crystal \(B(\infty)\) is called the Kashiwara involution. Its implementation here is based on the recursive algorithm from Theorem 2.2.1 of [Ka1993], which states that for any \(i \in I\) there is a unique strict crystal embedding
\[\Psi_i\colon B(\infty) \longrightarrow B_i \otimes B(\infty)\]such that
\(u_{\infty} \mapsto b_i(0) \otimes u_{\infty}\), where \(u_{\infty}\) is the highest weight vector in \(B(\infty)\);
if \(\Psi_i(b) = f_i^mb_i(0) \otimes b_0\), then \(\Psi_i(f_i^*b) =f_i^{m+1}b_i(0) \otimes b_0\) and \(\varepsilon_i(b^*) = m\);
the image of \(\Psi_i\) is \(\{f_i^mb_i(0)\otimes b : \varepsilon_i(b^*) = 0, \ m\ge 0\}\).
Here, \(B_i\) is the \(i\)-th elementary crystal. See
ElementaryCrystal
for more information.INPUT:
Binf
– a crystal fromcatalog_infinity_crystals
EXAMPLES:
sage: B = crystals.infinity.Tableaux(['A',2]) sage: Bstar = crystals.infinity.Star(B) sage: mg = Bstar.highest_weight_vector() sage: mg [[1, 1], [2]] sage: mg.f_string([1,2,1,2,2]) [[1, 1, 1, 1, 1, 2, 2], [2, 3, 3, 3]]
>>> from sage.all import * >>> B = crystals.infinity.Tableaux(['A',Integer(2)]) >>> Bstar = crystals.infinity.Star(B) >>> mg = Bstar.highest_weight_vector() >>> mg [[1, 1], [2]] >>> mg.f_string([Integer(1),Integer(2),Integer(1),Integer(2),Integer(2)]) [[1, 1, 1, 1, 1, 2, 2], [2, 3, 3, 3]]
- class Element[source]#
Bases:
ElementWrapper
- e(i)[source]#
Return the action of \(e_i^*\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: RC = crystals.infinity.RiggedConfigurations(['E',6,1]) sage: RCstar = crystals.infinity.Star(RC) sage: nuJ = RCstar.module_generators[0].f_string([0,4,6,1,2]) sage: ascii_art(nuJ.e(1)) -1[ ]-1 (/) 0[ ]1 (/) -1[ ]-1 (/) -2[ ]-1 sage: M = crystals.infinity.NakajimaMonomials(['B',2,1]) sage: Mstar = crystals.infinity.Star(M) sage: m = Mstar.module_generators[0].f_string([0,1,2,2,1,0]) sage: m.e(1) Y(0,0)^-1 Y(0,2)^-1 Y(1,1) Y(1,2)^-1 Y(2,1)^2
>>> from sage.all import * >>> RC = crystals.infinity.RiggedConfigurations(['E',Integer(6),Integer(1)]) >>> RCstar = crystals.infinity.Star(RC) >>> nuJ = RCstar.module_generators[Integer(0)].f_string([Integer(0),Integer(4),Integer(6),Integer(1),Integer(2)]) >>> ascii_art(nuJ.e(Integer(1))) -1[ ]-1 (/) 0[ ]1 (/) -1[ ]-1 (/) -2[ ]-1 >>> M = crystals.infinity.NakajimaMonomials(['B',Integer(2),Integer(1)]) >>> Mstar = crystals.infinity.Star(M) >>> m = Mstar.module_generators[Integer(0)].f_string([Integer(0),Integer(1),Integer(2),Integer(2),Integer(1),Integer(0)]) >>> m.e(Integer(1)) Y(0,0)^-1 Y(0,2)^-1 Y(1,1) Y(1,2)^-1 Y(2,1)^2
- epsilon(i)[source]#
Return \(\varepsilon_i^*\) of
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: Y = crystals.infinity.GeneralizedYoungWalls(3) sage: Ystar = crystals.infinity.Star(Y) sage: y = Ystar.module_generators[0].f_string([0,1,3,2,1,0]) sage: [y.epsilon(i) for i in y.index_set()] [1, 0, 1, 0] sage: RC = crystals.infinity.RiggedConfigurations(['E',6,1]) sage: RCstar = crystals.infinity.Star(RC) sage: nuJ = RCstar.module_generators[0].f_string([0,4,6,1,2]) sage: [nuJ.epsilon(i) for i in nuJ.index_set()] [0, 1, 1, 0, 0, 0, 1]
>>> from sage.all import * >>> Y = crystals.infinity.GeneralizedYoungWalls(Integer(3)) >>> Ystar = crystals.infinity.Star(Y) >>> y = Ystar.module_generators[Integer(0)].f_string([Integer(0),Integer(1),Integer(3),Integer(2),Integer(1),Integer(0)]) >>> [y.epsilon(i) for i in y.index_set()] [1, 0, 1, 0] >>> RC = crystals.infinity.RiggedConfigurations(['E',Integer(6),Integer(1)]) >>> RCstar = crystals.infinity.Star(RC) >>> nuJ = RCstar.module_generators[Integer(0)].f_string([Integer(0),Integer(4),Integer(6),Integer(1),Integer(2)]) >>> [nuJ.epsilon(i) for i in nuJ.index_set()] [0, 1, 1, 0, 0, 0, 1]
- f(i)[source]#
Return the action of \(f_i^*\) on
self
.INPUT:
i
– an element of the index set
EXAMPLES:
sage: T = crystals.infinity.Tableaux("G2") sage: Tstar = crystals.infinity.Star(T) sage: t = Tstar.module_generators[0].f_string([1,2,1,1,2]) sage: t [[1, 1, 1, 2, 0], [2, 3]] sage: M = crystals.infinity.NakajimaMonomials(['B',2,1]) sage: Mstar = crystals.infinity.Star(M) sage: m = Mstar.module_generators[0].f_string([0,1,2,2,1,0]) sage: m Y(0,0)^-1 Y(0,2)^-1 Y(1,0)^-1 Y(1,2)^-1 Y(2,0)^2 Y(2,1)^2
>>> from sage.all import * >>> T = crystals.infinity.Tableaux("G2") >>> Tstar = crystals.infinity.Star(T) >>> t = Tstar.module_generators[Integer(0)].f_string([Integer(1),Integer(2),Integer(1),Integer(1),Integer(2)]) >>> t [[1, 1, 1, 2, 0], [2, 3]] >>> M = crystals.infinity.NakajimaMonomials(['B',Integer(2),Integer(1)]) >>> Mstar = crystals.infinity.Star(M) >>> m = Mstar.module_generators[Integer(0)].f_string([Integer(0),Integer(1),Integer(2),Integer(2),Integer(1),Integer(0)]) >>> m Y(0,0)^-1 Y(0,2)^-1 Y(1,0)^-1 Y(1,2)^-1 Y(2,0)^2 Y(2,1)^2
- jump(i)[source]#
Return the \(i\)-jump of
self
.For \(b \in B(\infty)\),
\[\operatorname{jump}_i(b) = \varepsilon_i(b) + \varepsilon_i^*(b) + \langle h_i, \mathrm{wt}(b) \rangle,\]where \(h_i\) is a simple coroot.
INPUT:
i
– an element of the index set
EXAMPLES:
sage: RC = crystals.infinity.RiggedConfigurations("D4") sage: RCstar = crystals.infinity.Star(RC) sage: nu0star = RCstar.module_generators[0] sage: nustar = nu0star.f_string([2,1,3,4,2]) sage: [nustar.jump(i) for i in RC.index_set()] [0, 1, 0, 0] sage: nustar = nu0star.f_string([2,1,3,4,2,2,1,3,2]) # long time sage: [nustar.jump(i) for i in RC.index_set()] # long time [1, 0, 1, 2]
>>> from sage.all import * >>> RC = crystals.infinity.RiggedConfigurations("D4") >>> RCstar = crystals.infinity.Star(RC) >>> nu0star = RCstar.module_generators[Integer(0)] >>> nustar = nu0star.f_string([Integer(2),Integer(1),Integer(3),Integer(4),Integer(2)]) >>> [nustar.jump(i) for i in RC.index_set()] [0, 1, 0, 0] >>> nustar = nu0star.f_string([Integer(2),Integer(1),Integer(3),Integer(4),Integer(2),Integer(2),Integer(1),Integer(3),Integer(2)]) # long time >>> [nustar.jump(i) for i in RC.index_set()] # long time [1, 0, 1, 2]
- phi(i)[source]#
Return \(\varphi_i^*\) of
self
.For \(b \in B(\infty)\),
\[\varphi_i^*(b) = \varepsilon_i^*(b) + \langle h_i, \mathrm{wt}(b) \rangle,\]where \(h_i\) is a simple coroot.
INPUT:
i
– an element of the index set
EXAMPLES:
sage: T = crystals.infinity.Tableaux("A2") sage: Tstar = crystals.infinity.Star(T) sage: t = Tstar.module_generators[0].f_string([1,2,1,1,2]) sage: [t.phi(i) for i in t.index_set()] [-3, 1] sage: M = crystals.infinity.NakajimaMonomials(['B',2,1]) sage: Mstar = crystals.infinity.Star(M) sage: m = Mstar.module_generators[0].f_string([0,1,2,2,1,0]) sage: [m.phi(i) for i in m.index_set()] [-1, -1, 4]
>>> from sage.all import * >>> T = crystals.infinity.Tableaux("A2") >>> Tstar = crystals.infinity.Star(T) >>> t = Tstar.module_generators[Integer(0)].f_string([Integer(1),Integer(2),Integer(1),Integer(1),Integer(2)]) >>> [t.phi(i) for i in t.index_set()] [-3, 1] >>> M = crystals.infinity.NakajimaMonomials(['B',Integer(2),Integer(1)]) >>> Mstar = crystals.infinity.Star(M) >>> m = Mstar.module_generators[Integer(0)].f_string([Integer(0),Integer(1),Integer(2),Integer(2),Integer(1),Integer(0)]) >>> [m.phi(i) for i in m.index_set()] [-1, -1, 4]
- weight()[source]#
Return the weight of
self
.EXAMPLES:
sage: RC = crystals.infinity.RiggedConfigurations(['E',6,1]) sage: RCstar = crystals.infinity.Star(RC) sage: nuJ = RCstar.module_generators[0].f_string([0,4,6,1,2]) sage: nuJ.weight() -Lambda[0] - 2*Lambda[1] + 2*Lambda[3] - Lambda[4] + 2*Lambda[5] - 2*Lambda[6] - delta
>>> from sage.all import * >>> RC = crystals.infinity.RiggedConfigurations(['E',Integer(6),Integer(1)]) >>> RCstar = crystals.infinity.Star(RC) >>> nuJ = RCstar.module_generators[Integer(0)].f_string([Integer(0),Integer(4),Integer(6),Integer(1),Integer(2)]) >>> nuJ.weight() -Lambda[0] - 2*Lambda[1] + 2*Lambda[3] - Lambda[4] + 2*Lambda[5] - 2*Lambda[6] - delta