diff --git a/src/sage/combinat/rigged_configurations/rigged_configuration_element.py b/src/sage/combinat/rigged_configurations/rigged_configuration_element.py index 265c0f885b6..41ea32545fb 100644 --- a/src/sage/combinat/rigged_configurations/rigged_configuration_element.py +++ b/src/sage/combinat/rigged_configurations/rigged_configuration_element.py @@ -28,6 +28,7 @@ from sage.misc.cachefunc import cached_method from sage.structure.list_clone import ClonableArray +from sage.rings.integer import Integer from sage.combinat.rigged_configurations.rigged_partition import RiggedPartition, \ RiggedPartitionTypeB @@ -778,7 +779,14 @@ def epsilon(self, a): EXAMPLES:: - sage: RC = RiggedConfigurations(['D', 4, 1], [[2, 2]]) + sage: La = RootSystem(['B',2]).weight_lattice().fundamental_weights() + sage: RC = crystals.RiggedConfigurations(La[1]+La[2]) + sage: I = RC.index_set() + sage: matrix([[rc.epsilon(i) for i in I] for rc in RC[:4]]) + [0 0] + [1 0] + [0 1] + [0 2] """ a = self.parent()._rc_index.index(a) if not self[a]: @@ -795,7 +803,14 @@ def phi(self, a): EXAMPLES:: - sage: RC = RiggedConfigurations(['D', 4, 1], [[2, 2]]) + sage: La = RootSystem(['B',2]).weight_lattice().fundamental_weights() + sage: RC = crystals.RiggedConfigurations(La[1]+La[2]) + sage: I = RC.index_set() + sage: matrix([[rc.phi(i) for i in I] for rc in RC[:4]]) + [1 1] + [0 3] + [0 2] + [1 1] """ a = self.parent()._rc_index.index(a) p_inf = self.parent()._calc_vacancy_number(self, a, None) @@ -1357,10 +1372,6 @@ def epsilon(self, a): r""" Return `\varepsilon_a` of ``self``. - Let `x_{\ell}` be the smallest string of `\nu^{(a)}` or `0` if - `\nu^{(a)} = \emptyset`, then we have - `\varepsilon_a = -\min(0, x_{\ell})`. - EXAMPLES:: sage: RC = RiggedConfigurations(['D', 4, 1], [[2, 2]]) @@ -1372,20 +1383,12 @@ def epsilon(self, a): """ if a == self.parent()._cartan_type.special_node(): return self.to_tensor_product_of_kirillov_reshetikhin_tableaux().epsilon(a) - - a = self.parent()._rc_index.index(a) - if not self[a]: - return 0 - return -min(0, min(self[a].rigging)) + return RiggedConfigurationElement.epsilon(self, a) def phi(self, a): r""" Return `\varphi_a` of ``self``. - Let `x_{\ell}` be the smallest string of `\nu^{(a)}` or `0` if - `\nu^{(a)} = \emptyset`, then we have - `\varepsilon_a = p_{\infty}^{(a)} - min(0, x_{\ell})`. - EXAMPLES:: sage: RC = RiggedConfigurations(['D', 4, 1], [[2, 2]]) @@ -1397,12 +1400,7 @@ def phi(self, a): """ if a == self.parent()._cartan_type.special_node(): return self.to_tensor_product_of_kirillov_reshetikhin_tableaux().phi(a) - - a = self.parent()._rc_index.index(a) - p_inf = self.parent()._calc_vacancy_number(self, a, None) - if not self[a]: - return p_inf - return p_inf - min(0, min(self[a].rigging)) + return RiggedConfigurationElement.phi(self, a) def weight(self): """ @@ -2088,3 +2086,66 @@ def cocharge(self): cc = cocharge +class KRRCTypeA2DualElement(KRRCNonSimplyLacedElement): + r""" + `U_q^{\prime}(\mathfrak{g})` rigged configurations in type + `A_{2n}^{(2)\dagger}`. + """ + def epsilon(self, a): + r""" + Return the value of `\varepsilon_a` of ``self``. + + Here we need to modify the usual definition by + `\varepsilon_n^{\prime} := 2 \varepsilon_n`. + + EXAMPLES:: + + sage: RC = RiggedConfigurations(CartanType(['A',4,2]).dual(), [[1,1], [2,2]]) + sage: def epsilon(x, i): + ....: x = x.e(i) + ....: eps = 0 + ....: while x is not None: + ....: x = x.e(i) + ....: eps = eps + 1 + ....: return eps + sage: all(epsilon(rc, 2) == rc.epsilon(2) for rc in RC) + True + """ + if a == self.parent()._cartan_type.special_node(): + return self.to_tensor_product_of_kirillov_reshetikhin_tableaux().epsilon(a) + + epsilon = Integer(KRRCNonSimplyLacedElement.epsilon(self, a)) + n = self.parent().cartan_type().classical().rank() + if self.parent()._rc_index.index(a) == n-1: # -1 for indexing + return 2 * epsilon + return epsilon + + def phi(self, a): + r""" + Return the value of `\varphi_a` of ``self``. + + Here we need to modify the usual definition by + `\varphi_n^{\prime} := 2 \varphi_n`. + + EXAMPLES:: + + sage: RC = RiggedConfigurations(CartanType(['A',4,2]).dual(), [[1,1], [2,2]]) + sage: def phi(x, i): + ....: x = x.f(i) + ....: ph = 0 + ....: while x is not None: + ....: x = x.f(i) + ....: ph = ph + 1 + ....: return ph + sage: all(phi(rc, 2) == rc.phi(2) for rc in RC) + True + """ + if a == self.parent()._cartan_type.special_node(): + return self.to_tensor_product_of_kirillov_reshetikhin_tableaux().phi(a) + + phi = Integer(KRRCNonSimplyLacedElement.phi(self, a)) + n = self.parent().cartan_type().classical().rank() + if self.parent()._rc_index.index(a) == n-1: # -1 for indexing + return 2 * phi + return phi + diff --git a/src/sage/combinat/rigged_configurations/rigged_configurations.py b/src/sage/combinat/rigged_configurations/rigged_configurations.py index dcb2709dcef..6fbccf0ce55 100644 --- a/src/sage/combinat/rigged_configurations/rigged_configurations.py +++ b/src/sage/combinat/rigged_configurations/rigged_configurations.py @@ -35,7 +35,8 @@ from sage.combinat.cartesian_product import CartesianProduct from sage.combinat.rigged_configurations.kleber_tree import KleberTree, VirtualKleberTree from sage.combinat.rigged_configurations.rigged_configuration_element import ( - RiggedConfigurationElement, KRRCSimplyLacedElement, KRRCNonSimplyLacedElement) + RiggedConfigurationElement, KRRCSimplyLacedElement, KRRCNonSimplyLacedElement, + KRRCTypeA2DualElement) RiggedConfigurationOptions=GlobalOptions(name='rigged configurations', doc=r""" @@ -1871,6 +1872,8 @@ def from_virtual(self, vrc): return self.element_class(self, partition_list=partitions, rigging_list=riggings, vacancy_numbers_list=vac_nums) + Element = KRRCTypeA2DualElement + def HighestWeightRiggedConfigurations(cartan_type, B): """ Deprecated in :trac:`13872`. Use instead the attribute