Kleshchev partitions


A partition (tuple) \(\mu\) is Kleshchev if it can be recursively obtained by adding a sequence of good nodes to the empty PartitionTuple of the same level() and multicharge. In this way, the set of Kleshchev multipartitions becomes a realization of a Kashiwara crystal sage.combinat.crystals.crystals for a irreducible integral highest weight representation of \(U_q(\widehat{\mathfrak{sl}}_e)\).

The Kleshchev multipartitions first appeared in the work of Ariki and Mathas [AM2000] where it was shown that they index the irreducible representations of the cyclotomic Hecke algebras of type \(A\) [AK1994]. Soon afterwards Ariki [Ariki2001] showed that the set of Kleshchev multipartitions naturally label the irreducible representations of these algebras. As a far reaching generalization of these ideas the Ariki-Brundan-Kleshchev categorification theorem [Ariki1996] [BK2009] says that these algebras categorify the irreducible integral highest weight representations of the quantum group \(U_q(\widehat{\mathfrak{sl}}_e)\) of the affine special linear group. Under this categorification, \(q\) corresponds to the grading shift on the cyclotomic Hecke algebras, where the grading from the Brundan-Kleshchev graded isomorphism theorem to the KLR algebras of type \(A\) [BK2009].

The group algebras of the symmetric group in characteristic \(p\) are an important special case of the cyclotomic Hecke algebras of type \(A\). In this case, depending on your prefer convention, the set of Kleshchev partitions is the set of `p`-regular or `p`-restricted Partitions. In this case, Kleshchev [Kle1995] proved that the modular branching rules were given by adding and removing good nodes; see good_cells(). Lascoux, Leclerc and Thibon [LLT1996] noticed that Kleshchev’s branching rules coincided with Kashiwara’s crystal operators for the fundamental representation of \(L(\Lambda_0)\) of \(U_q(\widehat{\mathfrak{sl}}_p)\) and their celebrated LLT conjecture said that decomposition matrices of the sage.algebras.iwahori_hecke_algebra.IwahoriHeckeAlgebra of the symmetric group should be computable using the canonical basis of \(L(\Lambda_0)\). This was proved and generalised to all cyclolotimc Hecke algebras of type \(A\) by Ariki [Ariki1996] and then further generalized to the graded setting by Brundan and Kleshchev [BK2009].

The main class for accessing Kleshchev partition (tuples) is KleshchevPartitions. Unfortunately, just as with the symmetric group, different authors use different conventions when defining Kleshchev partitions, which depends on whether you read components from left to right, or right to left, and whether you read the nodes in the partition in each component from top to bottom or bottom to top. The KleshchevPartitions class supports these four different conventions:

sage: KleshchevPartitions(2, [0,0], size=2, convention='left regular')[:]
[([1], [1]), ([2], [])]
sage: KleshchevPartitions(2, [0,0], size=2, convention='left restricted')[:]
[([1], [1]), ([], [1, 1])]
sage: KleshchevPartitions(2, [0,0], size=2, convention='right regular')[:]
[([1], [1]), ([], [2])]
sage: KleshchevPartitions(2, [0,0], size=2, convention='right restricted')[:]
[([1], [1]), ([1, 1], [])]

By default, the left restricted convention is used. As a shorthand, LG, LS, RG and RS, respectively, can be used to specify the convention With the left convention the partition tuples should be ordered with the most dominant partitions in the partition tuple on the left and with the right convention the most dominant partition is on the right.

The KleshchevPartitions class can automatically convert between these four different conventions:

sage: KPlg = KleshchevPartitions(2, [0,0], size=2, convention='left regular')
sage: KPls = KleshchevPartitions(2, [0,0], size=2, convention='left restricted')
sage: [KPlg(mu) for mu in KPls] # indirect doc test
[([1], [1]), ([2], [])]

AUTHORS:

  • Andrew Mathas and Travis Scrimshaw (2018-05-1): Initial version
class sage.combinat.partition_kleshchev.KleshchevCrystalMixin

Bases: object

Mixin class for the crystal structure of a Kleshchev partition.

Epsilon()

Return \(\varepsilon\) of self.

EXAMPLES:

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="left regular")
sage: x = C([[5,4,1],[3,2,1,1]])
sage: x.Epsilon()
3*Lambda[1]
Phi()

Return \(\phi\) of self.

EXAMPLES:

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="left regular")
sage: x = C([[5,4,1],[3,2,1,1]])
sage: x.Phi()
3*Lambda[0] + 2*Lambda[1]
epsilon(i)

Return the Kashiwara crystal operator \(\varepsilon_i\) applied to self.

INPUT:

  • i – an element of the index set

EXAMPLES:

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="left regular")
sage: x = C([[5,4,1],[3,2,1,1]])
sage: [x.epsilon(i) for i in C.index_set()]
[0, 3, 0]
phi(i)

Return the Kashiwara crystal operator \(\varphi_i\) applied to self.

INPUT:

  • i – an element of the index set

EXAMPLES:

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="left regular")
sage: x = C([[5,4,1],[3,2,1,1]])
sage: [x.phi(i) for i in C.index_set()]
[3, 2, 0]
weight()

Return the weight of self.

EXAMPLES:

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="left regular")
sage: x = C([[5,4,1], [3,2,1,1]])
sage: x.weight()
3*Lambda[0] - Lambda[1] - 5*delta
sage: x.Phi() - x.Epsilon()
3*Lambda[0] - Lambda[1]

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="right regular")
sage: y = C([[5,1,1], [4,2,2,1,1]])
sage: y.weight()
6*Lambda[0] - 4*Lambda[1] - 4*delta
sage: y.Phi() - y.Epsilon()
6*Lambda[0] - 4*Lambda[1]

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="left regular")
sage: y = C([[5,1,1], [4,2,2,1,1]])
sage: y.weight()
6*Lambda[0] - 4*Lambda[1] - 4*delta
sage: y.Phi() - y.Epsilon()
6*Lambda[0] - 4*Lambda[1]
sage.combinat.partition_kleshchev.KleshchevPartition

Abstract base class for Kleshchev partitions. See KleshchevPartitions.

sage.combinat.partition_kleshchev.KleshchevPartitionCrystal

Kleshchev partition with the crystal structure.

sage.combinat.partition_kleshchev.KleshchevPartitionTuple

Abstract base class for Kleshchev partition tuples. See KleshchevPartitions.

sage.combinat.partition_kleshchev.KleshchevPartitionTupleCrystal

Kleshchev partition tuple with the crystal structure.

sage.combinat.partition_kleshchev.KleshchevPartitions

Kleshchev partitions

A partition (tuple) \(\mu\) is Kleshchev if it can be recursively obtained by adding a sequence of good nodes to the empty PartitionTuple of the same level() and multicharge.

There are four different conventions that are used in the literature for Kleshchev partitions, depending on whether we read partitions from top to bottom (regular) or bottom to top (restricted) and whether we read partition tuples from left to right or right to left. All of these conventions are supported:

sage: KleshchevPartitions(2, [0,0], size=2, convention='left regular')[:]
[([1], [1]), ([2], [])]
sage: KleshchevPartitions(2, [0,0], size=2, convention='left restricted')[:]
[([1], [1]), ([], [1, 1])]
sage: KleshchevPartitions(2, [0,0], size=2, convention='right regular')[:]
[([1], [1]), ([], [2])]
sage: KleshchevPartitions(2, [0,0], size=2, convention='right restricted')[:]
[([1], [1]), ([1, 1], [])]

By default, the left restricted convention is used. As a shorthand, LG, LS, RG and RS, respectively, can be used to specify the convention. With the left convention the partition tuples should be ordered with the most dominant partitions in the partition tuple on the left and with the right convention the most dominant partition is on the right.

The KleshchevPartitions class will automatically convert between these four different conventions:

sage: KPlg = KleshchevPartitions(2, [0,0], size=2, convention='left regular')
sage: KPls = KleshchevPartitions(2, [0,0], size=2, convention='left restricted')
sage: [KPlg(mu) for mu in KPls]
[([1], [1]), ([2], [])]

EXAMPLES:

sage: sorted(KleshchevPartitions(5,[3,2,1],1, convention='RS'))
[([], [], [1]), ([], [1], []), ([1], [], [])]
sage: sorted(KleshchevPartitions(5, [3,2,1], 1, convention='LS'))
[([], [], [1]), ([], [1], []), ([1], [], [])]
sage: sorted(KleshchevPartitions(5, [3,2,1], 3))
[([], [], [1, 1, 1]),
 ([], [], [2, 1]),
 ([], [], [3]),
 ([], [1], [1, 1]),
 ([], [1], [2]),
 ([], [1, 1], [1]),
 ([], [2], [1]),
 ([], [3], []),
 ([1], [], [1, 1]),
 ([1], [], [2]),
 ([1], [1], [1]),
 ([1], [2], []),
 ([1, 1], [1], []),
 ([2], [], [1]),
 ([2], [1], []),
 ([3], [], [])]
sage: sorted(KleshchevPartitions(5, [3,2,1], 3, convention="left regular"))
[([], [], [1, 1, 1]),
 ([], [1], [1, 1]),
 ([], [1], [2]),
 ([], [1, 1], [1]),
 ([], [1, 1, 1], []),
 ([1], [], [1, 1]),
 ([1], [1], [1]),
 ([1], [1, 1], []),
 ([1], [2], []),
 ([1, 1], [], [1]),
 ([1, 1], [1], []),
 ([1, 1, 1], [], []),
 ([2], [], [1]),
 ([2], [1], []),
 ([2, 1], [], []),
 ([3], [], [])]

REFERENCES:

sage.combinat.partition_kleshchev.KleshchevPartitions_all

Class of all Kleshchev partitions.

Crystal structure

We consider type \(A_{e-1}^{(1)}\) crystals, and let \(r = (r_i | r_i \in \ZZ / e \ZZ)\) be a finite sequence of length \(k\), which is the level, and \(\lambda = \sum_i \Lambda_{r_i}\). We will model the highest weight \(U_q(\mathfrak{g})\)-crystal \(B(\lambda)\) by a particular subset of partition tuples of level \(k\).

Consider a partition tuple \(\mu\) with multicharge \(r\). We define \(e_i(\mu)\) as the partition tuple obtained after the deletion of the \(i\)-good cell to \(\mu\) and \(0\) if there is no \(i\)-good cell. We define \(f_i(\mu)\) as the partition tuple obtained by the addition of the \(i\)-cogood cell to \(\mu\) and \(0\) if there is no \(i\)-good cell.

The crystal \(B(\lambda)\) is the crystal generated by the empty partition tuple. We can compute the weight of an element \(\mu\) by taking \(\lambda - \sum_{i=0}^n c_i \alpha_i\) where \(c_i\) is the number of cells of \(n\)-residue \(i\) in \(\mu\). Partition tuples in the crystal are known as Kleshchev partitions.

Note

We can describe normal (not restricted) Kleshchev partition tuples in \(B(\lambda)\) as partition tuples \(\mu\) such that \(\mu^{(t)}_{r_t - r_{t+1} + x} < \mu^{(t+1)}_x\) for all \(x \geq 1\) and \(1 \leq t \leq k - 1\).

INPUT:

  • e – for type \(A_{e-1}^{(1)}\) or \(0\)
  • multicharge – the multicharge sequence \(r\)
  • convention – (default: 'LS') the reading convention

EXAMPLES:

We first do an example of a level 1 crystal:

sage: C = crystals.KleshchevPartitions(3, [0], convention="left restricted")
sage: C
Kleshchev partitions with e=3
sage: mg = C.highest_weight_vector()
sage: mg
[]
sage: mg.f(0)
[1]
sage: mg.f(1)
sage: mg.f(2)
sage: mg.f_string([0,2,1,0])
[1, 1, 1, 1]
sage: mg.f_string([0,1,2,0])
[2, 2]
sage: GC = C.subcrystal(max_depth=5).digraph()
sage: B = crystals.LSPaths(['A',2,1], [1,0,0])
sage: GB = B.subcrystal(max_depth=5).digraph()
sage: GC.is_isomorphic(GB, edge_labels=True)
True

Now a higher level crystal:

sage: C = crystals.KleshchevPartitions(3, [0,2], convention="right restricted")
sage: mg = C.highest_weight_vector()
sage: mg
([], [])
sage: mg.f(0)
([1], [])
sage: mg.f(2)
([], [1])
sage: mg.f_string([0,1,2,0])
([2, 2], [])
sage: mg.f_string([0,2,1,0])
([1, 1, 1, 1], [])
sage: mg.f_string([2,0,1,0])
([2], [2])
sage: GC = C.subcrystal(max_depth=5).digraph()
sage: B = crystals.LSPaths(['A',2,1], [1,0,1])
sage: GB = B.subcrystal(max_depth=5).digraph()
sage: GC.is_isomorphic(GB, edge_labels=True)
True

The ordering of the residues gives a different representation of the higher level crystals (but it is still isomorphic):

sage: C2 = crystals.KleshchevPartitions(3, [2,0], convention="right restricted")
sage: mg2 = C2.highest_weight_vector()
sage: mg2.f_string([0,1,2,0])
([2], [2])
sage: mg2.f_string([0,2,1,0])
([1, 1, 1], [1])
sage: mg2.f_string([2,0,1,0])
([2, 1], [1])
sage: GC2 = C2.subcrystal(max_depth=5).digraph()
sage: GC.is_isomorphic(GC2, edge_labels=True)
True

REFERENCES:

sage.combinat.partition_kleshchev.KleshchevPartitions_size

Kleshchev partitions of a fixed size.