Super Partitions#

AUTHORS:

  • Mike Zabrocki

A super partition of size \(n\) and fermionic sector \(m\) is a pair consisting of a strict partition of some integer \(r\) of length \(m\) (that may end in a \(0\)) and an integer partition of \(n - r\).

This module provides tools for manipulating super partitions.

Super partitions are the indexing set for symmetric functions in super space.

Super partitions may be input in two different formats: one as a pair consisting of fermionic (strict partition) and a bosonic (partition) part and the other as a list of integer values where the negative entries come first and are listed in strict order followed by the positive values in weak order.

A super partition is displayed as two partitions separated by a semicolon as a default. Super partitions may also be displayed as a weakly increasing sequence of integers that are strict if the numbers are not positive.

These combinatorial objects index the space of symmetric polynomials in two sets of variables, one commuting and one anti-commuting, and they are known as symmetric functions in super space (hence the origin of the name super partitions).

EXAMPLES:

sage: SuperPartitions()
Super Partitions
sage: SuperPartitions(2)
Super Partitions of 2
sage: SuperPartitions(2).cardinality()
8
sage: SuperPartitions(4,2)
Super Partitions of 4 and of fermionic sector 2
sage: [[2,0],[1,1]] in SuperPartitions(4,2)
True
sage: [[1,0],[1,1]] in SuperPartitions(4,2)
False
sage: [[1,0],[2,1]] in SuperPartitions(4)
True
sage: [[1,0],[2,2,1]] in SuperPartitions(4)
False
sage: [[1,0],[2,1]] in SuperPartitions()
True
sage: [[1,1],[2,1]] in SuperPartitions()
False
sage: [-2, 0, 1, 1] in SuperPartitions(4,2)
True
sage: [-1, 0, 1, 1] in SuperPartitions(4,2)
False
sage: [-2, -2, 2, 1] in SuperPartitions(7,2)
False

REFERENCES:

class sage.combinat.superpartition.SuperPartition(parent, lst, check=True, immutable=True)#

Bases: ClonableArray

A super partition.

A super partition of size \(n\) and fermionic sector \(m\) is a pair consisting of a strict partition of some integer \(r\) of length \(m\) (that may end in a \(0\)) and an integer partition of \(n - r\).

EXAMPLES:

sage: sp = SuperPartition([[1,0],[2,2,1]]); sp
[1, 0; 2, 2, 1]
sage: sp[0]
(1, 0)
sage: sp[1]
(2, 2, 1)
sage: sp.fermionic_degree()
2
sage: sp.bosonic_degree()
6
sage: sp.length()
5
sage: sp.conjugate()
[4, 2; ]
a_part()#

The antisymmetric part as a list of strictly decreasing integers.

OUTPUT:

  • a list

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).antisymmetric_part()
[3, 1]
sage: SuperPartition([[2,1,0],[3,3]]).antisymmetric_part()
[2, 1, 0]
add_horizontal_border_strip_star(h)#

Return a list of super partitions that differ from self by a horizontal strip.

The notion of horizontal strip comes from the Pieri rule for the Schur-star basis of symmetric functions in super space (see Theorem 7 from [JL2016]).

INPUT:

  • h – number of cells in the horizontal strip

OUTPUT:

  • a list of super partitions

EXAMPLES:

sage: SuperPartition([[4,1],[3]]).add_horizontal_border_strip_star(3)
[[3, 1; 7],
 [4, 1; 6],
 [3, 0; 6, 2],
 [3, 1; 6, 1],
 [4, 0; 5, 2],
 [4, 1; 5, 1],
 [3, 0; 5, 3],
 [3, 1; 5, 2],
 [4, 0; 4, 3],
 [4, 1; 4, 2],
 [4, 1; 3, 3]]
sage: SuperPartition([[2,1],[3]]).add_horizontal_border_strip_star(2)
[[2, 1; 5], [2, 0; 4, 2], [2, 1; 4, 1], [2, 0; 3, 3], [2, 1; 3, 2]]
add_horizontal_border_strip_star_bar(h)#

List super partitions that differ from self by a horizontal strip.

The notion of horizontal strip comes from the Pieri rule for the Schur-star-bar basis of symmetric functions in super space (see Theorem 10 from [JL2016]).

INPUT:

  • h – number of cells in the horizontal strip

OUTPUT:

  • a list of super partitions

EXAMPLES:

sage: SuperPartition([[4,1],[5,4]]).add_horizontal_border_strip_star_bar(3)
[[4, 1; 8, 4],
 [4, 1; 7, 5],
 [4, 2; 7, 4],
 [4, 1; 7, 4, 1],
 [4, 2; 6, 5],
 [4, 1; 6, 5, 1],
 [4, 3; 6, 4],
 [4, 2; 6, 4, 1],
 [4, 1; 6, 4, 2],
 [4, 3; 5, 5],
 [4, 2; 5, 5, 1],
 [4, 1; 5, 5, 2],
 [4, 3; 5, 4, 1],
 [4, 1; 5, 4, 3]]
sage: SuperPartition([[3,1],[5]]).add_horizontal_border_strip_star_bar(2)
[[3, 1; 7],
 [4, 1; 6],
 [3, 2; 6],
 [3, 1; 6, 1],
 [4, 2; 5],
 [4, 1; 5, 1],
 [3, 2; 5, 1],
 [3, 1; 5, 2]]
antisymmetric_part()#

The antisymmetric part as a list of strictly decreasing integers.

OUTPUT:

  • a list

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).antisymmetric_part()
[3, 1]
sage: SuperPartition([[2,1,0],[3,3]]).antisymmetric_part()
[2, 1, 0]
bi_degree()#

Return the bidegree of self, which is a pair consisting of the bosonic and fermionic degree.

OUTPUT:

  • a tuple of two integers

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).bi_degree()
(9, 2)
sage: SuperPartition([[2,1,0],[3,3]]).bi_degree()
(9, 3)
bosonic_degree()#

Return the bosonic degree of self.

The bosonic degree is the sum of the sizes of the antisymmetric and symmetric parts.

OUTPUT:

  • an integer

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).bosonic_degree()
9
sage: SuperPartition([[2,1,0],[3,3]]).bosonic_degree()
9
bosonic_length()#

Return the length of the partition of the symmetric part.

OUTPUT:

  • an integer

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).bosonic_length()
3
sage: SuperPartition([[2,1,0],[3,3]]).bosonic_length()
2
check()#

Check that self is a valid super partition.

EXAMPLES:

sage: SP = SuperPartition([[1],[1]])
sage: SP.check()
conjugate()#

Conjugate of a super partition.

The conjugate of a super partition is defined by conjugating the circled diagram.

OUTPUT:

EXAMPLES:

sage: SuperPartition([[3, 1, 0], [4, 3, 2, 1]]).conjugate()
[6, 4, 1; 3]
sage: all(sp == sp.conjugate().conjugate() for sp in SuperPartitions(4))
True
sage: all(sp.conjugate() in SuperPartitions(3,2) for sp in SuperPartitions(3,2))
True
degree()#

Return the bosonic degree of self.

The bosonic degree is the sum of the sizes of the antisymmetric and symmetric parts.

OUTPUT:

  • an integer

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).bosonic_degree()
9
sage: SuperPartition([[2,1,0],[3,3]]).bosonic_degree()
9
dominates(other)#

Return True if and only if self dominates other.

If the symmetric and anti-symmetric parts of self and other are not the same size then the result is False.

EXAMPLES:

sage: LA = SuperPartition([[2,1],[2,1,1]])
sage: LA.dominates([[2,1],[3,1]])
False
sage: LA.dominates([[2,1],[1,1,1,1]])
True
sage: LA.dominates([[3],[2,1,1]])
False
sage: LA.dominates([[1],[1]*6])
False
fermionic_degree()#

Return the fermionic degree of self.

The fermionic degree is the length of the antisymmetric part.

OUTPUT:

  • an integer

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).fermionic_degree()
2
sage: SuperPartition([[2,1,0],[3,3]]).fermionic_degree()
3
fermionic_sector()#

Return the fermionic degree of self.

The fermionic degree is the length of the antisymmetric part.

OUTPUT:

  • an integer

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).fermionic_degree()
2
sage: SuperPartition([[2,1,0],[3,3]]).fermionic_degree()
3
static from_circled_diagram(shape, corners)#

Construct a super partition from a circled diagram.

A circled diagram consists of a partition of the concatenation of the antisymmetric and symmetric parts and a list of addable cells of the partition which indicate the location of the circled cells.

INPUT:

  • shape – a partition or list of integers

  • corners – a list of removable cells of shape

OUTPUT:

EXAMPLES:

sage: SuperPartition.from_circled_diagram([3, 2, 2, 1, 1], [(0, 3), (3, 1)])
[3, 1; 2, 2, 1]
sage: SuperPartition.from_circled_diagram([3, 3, 2, 1], [(2, 2), (3, 1), (4, 0)])
[2, 1, 0; 3, 3]
sage: from_cd = SuperPartition.from_circled_diagram
sage: all(sp == from_cd(*sp.to_circled_diagram()) for sp in SuperPartitions(4))
True
length()#

Return the length of self, which is the sum of the lengths of the antisymmetric and symmetric part.

OUTPUT:

  • an integer

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).length()
5
sage: SuperPartition([[2,1,0],[3,3]]).length()
5
s_part()#

The symmetric part as a list of weakly decreasing integers.

OUTPUT:

  • a list

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).symmetric_part()
[2, 2, 1]
sage: SuperPartition([[2,1,0],[3,3]]).symmetric_part()
[3, 3]
shape_circled_diagram()#

A concatenated partition with an extra cell for each antisymmetric part

OUTPUT:

  • a partition

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).shape_circled_diagram()
[4, 2, 2, 2, 1]
sage: SuperPartition([[2,1,0],[3,3]]).shape_circled_diagram()
[3, 3, 3, 2, 1]
sign()#

Return the sign of a permutation of cycle type the symmetric part of self.

OUTPUT:

  • either \(1\) or \(-1\)

EXAMPLES:

sage: SuperPartition([[1,0],[3,1,1]]).sign()
-1
sage: SuperPartition([[1,0],[3,2,1]]).sign()
1
sage: sum(sp.sign()/sp.zee() for sp in SuperPartitions(6,0))
0
symmetric_part()#

The symmetric part as a list of weakly decreasing integers.

OUTPUT:

  • a list

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).symmetric_part()
[2, 2, 1]
sage: SuperPartition([[2,1,0],[3,3]]).symmetric_part()
[3, 3]
to_circled_diagram()#

The shape of the circled diagram and a list of addable cells

A circled diagram consists of a partition for the outer shape and a list of removable cells of the partition indicating the location of the circled cells

OUTPUT:

  • a list consisting of a partition and a list of pairs of integers

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).to_circled_diagram()
[[3, 2, 2, 1, 1], [(0, 3), (3, 1)]]
sage: SuperPartition([[2,1,0],[3,3]]).to_circled_diagram()
[[3, 3, 2, 1], [(2, 2), (3, 1), (4, 0)]]
sage: from_cd = SuperPartition.from_circled_diagram
sage: all(sp == from_cd(*sp.to_circled_diagram()) for sp in SuperPartitions(4))
True
to_composition()#

Concatenate the antisymmetric and symmetric parts to a composition.

OUTPUT:

  • a (possibly weak) composition

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).to_composition()
[3, 1, 2, 2, 1]
sage: SuperPartition([[2,1,0],[3,3]]).to_composition()
[2, 1, 0, 3, 3]
sage: SuperPartition([[2,1,0],[3,3]]).to_composition().parent()
Compositions of non-negative integers
to_list()#

The list of two lists with the antisymmetric and symmetric parts.

EXAMPLES:

sage: SuperPartition([[1],[1]]).to_list()
[[1], [1]]
sage: SuperPartition([[],[1]]).to_list()
[[], [1]]
to_partition()#

Concatenate and sort the antisymmetric and symmetric parts to a partition.

OUTPUT:

  • a partition

EXAMPLES:

sage: SuperPartition([[3,1],[2,2,1]]).to_partition()
[3, 2, 2, 1, 1]
sage: SuperPartition([[2,1,0],[3,3]]).to_partition()
[3, 3, 2, 1]
sage: SuperPartition([[2,1,0],[3,3]]).to_partition().parent()
Partitions
zee()#

Return the centralizer size of a permutation of cycle type symmetric part of self.

OUTPUT:

  • a positive integer

EXAMPLES:

sage: SuperPartition([[1,0],[3,1,1]]).zee()
6
sage: SuperPartition([[1],[2,2,1]]).zee()
8
sage: sum(1/sp.zee() for sp in SuperPartitions(6,0))
1
class sage.combinat.superpartition.SuperPartitions(is_infinite=False)#

Bases: UniqueRepresentation, Parent

Super partitions.

A super partition of size \(n\) and fermionic sector \(m\) is a pair consisting of a strict partition of some integer \(r\) of length \(m\) (that may end in a \(0\)) and an integer partition of \(n - r\).

INPUT:

  • n – an integer (optional: default None)

  • m – if n is specified, an integer (optional: default None)

Super partitions are the indexing set for symmetric functions in super space.

EXAMPLES:

sage: SuperPartitions()
Super Partitions
sage: SuperPartitions(2)
Super Partitions of 2
sage: SuperPartitions(2).cardinality()
8
sage: SuperPartitions(4,2)
Super Partitions of 4 and of fermionic sector 2
sage: [[2,0],[1,1]] in SuperPartitions(4,2)
True
sage: [[1,0],[1,1]] in SuperPartitions(4,2)
False
sage: [[1,0],[2,1]] in SuperPartitions(4)
True
sage: [[1,0],[2,2,1]] in SuperPartitions(4)
False
sage: [[1,0],[2,1]] in SuperPartitions()
True
sage: [[1,1],[2,1]] in SuperPartitions()
False
Element#

alias of SuperPartition

options = Current options for SuperPartition   - display: default#
class sage.combinat.superpartition.SuperPartitions_all#

Bases: SuperPartitions

Initialize self.

class sage.combinat.superpartition.SuperPartitions_n(n)#

Bases: SuperPartitions

Initialize self.

class sage.combinat.superpartition.SuperPartitions_n_m(n, m)#

Bases: SuperPartitions

Initialize self.