Pieri Factors

class sage.combinat.root_system.pieri_factors.PieriFactors

Bases: sage.structure.unique_representation.UniqueRepresentation, sage.structure.parent.Parent

An abstract class for sets of Pieri factors, used for constructing Stanley symmetric functions. The set of Pieri factors for a given type can be realized as an order ideal of the Bruhat order poset generated by a certain set of maximal elements.

EXAMPLES:

sage: W = WeylGroup(['A',4])
sage: PF = W.pieri_factors()
sage: PF.an_element().reduced_word()
[4, 3, 2, 1]
sage: Waff = WeylGroup(['A',4,1])
sage: PFaff = Waff.pieri_factors()
sage: Waff.from_reduced_word(PF.an_element().reduced_word()) in PFaff
True

sage: W = WeylGroup(['B',3,1])
sage: PF = W.pieri_factors()
sage: W.from_reduced_word([2,3,2]) in PF.elements()
True
sage: PF.cardinality()
47

sage: W = WeylGroup(['C',3,1])
sage: PF = W.pieri_factors()
sage: PF.generating_series()
6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
sage: [w.reduced_word() for w in PF if w.length() == 2]
[[2, 0], [0, 1], [2, 3], [1, 2], [3, 2], [3, 1], [2, 1], [3, 0], [1, 0]]

REFERENCES:

[FoSta1994]
  1. Fomin, R. Stanley. Schubert polynomials and the nilCoxeter algebra. Advances in Math., 1994.
[BH1994]
  1. Billey, M. Haiman. Schubert polynomials for the classical groups. J. Amer. Math. Soc., 1994.
[TKLam1996]T.K. Lam. B and D analogues of stable Schubert polynomials and related insertion algorithms. PhD Thesis, MIT, 1996.
[Lam2008]
  1. Lam. Schubert polynomials for the affine Grassmannian. J. Amer. Math. Soc., 2008.
[LSS2009]
  1. Lam, A. Schilling, M. Shimozono. Schubert polynomials for the affine Grassmannian of the symplectic group. Mathematische Zeitschrift 264(4) (2010) 765-811 (arXiv:0710.2720 [math.CO])
[Pon2010]
  1. Pon. Types B and D affine Stanley symmetric functions, unpublished PhD Thesis, UC Davis, 2010.
default_weight()

Returns the function i\mapsto z^i, where z is the generator of QQ['z'].

EXAMPLES:

sage: W = WeylGroup(["A", 3, 1])
sage: weight = W.pieri_factors().default_weight()
sage: weight(1)
z
sage: weight(5)
z^5

TESTS:

sage: weight(4) in QQ['z']
True
sage: weight(0) in QQ['z']
True
sage: weight(0).parent() == QQ['z']  # todo: not implemented
True
elements()

Returns the elements of self

Those are constructed as the elements below the maximal elements of self in Bruhat order.

OUTPUT: a TransitiveIdeal object

EXAMPLES:

sage: PF = WeylGroup(['A',3]).pieri_factors()
sage: [w.reduced_word() for w in PF.elements()]
[[3, 2, 1], [2, 1], [1], [], [3, 1], [3], [3, 2], [2]]

See also

maximal_elements()

Todo

Possibly remove this method and instead have this class inherit from TransitiveIdeal.

generating_series(weight=None)

Returns a length generating series for the elements of self

EXAMPLES:

sage: PF = WeylGroup(['C',3,1]).pieri_factors()
sage: PF.generating_series()
6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1

sage: PF = WeylGroup(['B',4]).pieri_factors()
sage: PF.generating_series()
z^7 + 6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
max_length()

Return the maximal length of a Pieri factor.

EXAMPLES:

In type A and A affine, this is n:

sage: WeylGroup(['A',5]).pieri_factors().max_length()
5
sage: WeylGroup(['A',5,1]).pieri_factors().max_length()
5

In type B and B affine, this is 2n-1:

sage: WeylGroup(['B',5,1]).pieri_factors().max_length()
9
sage: WeylGroup(['B',5]).pieri_factors().max_length()
9

In type C affine this is 2n:

sage: WeylGroup(['C',5,1]).pieri_factors().max_length()
10

In type D affine this is 2n-2:

sage: WeylGroup(['D',5,1]).pieri_factors().max_length()
8
class sage.combinat.root_system.pieri_factors.PieriFactors_affine_type

Bases: sage.combinat.root_system.pieri_factors.PieriFactors

Base class for all parents.

Parents are the Sage/mathematical analogues of container objects in computer science.

INPUT:

  • base – An algebraic structure considered to be the “base” of this parent (e.g. the base field for a vector space).
  • category – a category or list/tuple of categories. The category in which this parent lies (or list or tuple thereof). Since categories support more general super-categories, this should be the most specific category possible. If category is a list or tuple, a JoinCategory is created out of them. If category is not specified, the category will be guessed (see CategoryObject), but won’t be used to inherit parent’s or element’s code from this category.
  • element_constructor – A class or function that creates elements of this Parent given appropriate input (can also be filled in later with _populate_coercion_lists_())
  • gens – Generators for this object (can also be filled in later with _populate_generators_())
  • names – Names of generators.
  • normalize – Whether to standardize the names (remove punctuation, etc)
  • facade – a parent, or tuple thereof, or True

If facade is specified, then Sets().Facade() is added to the categories of the parent. Furthermore, if facade is not True, the internal attribute _facade_for is set accordingly for use by Sets.Facade.ParentMethods.facade_for().

Internal invariants:

  • self._element_init_pass_parent == guess_pass_parent(self, self._element_constructor) Ensures that __call__() passes down the parent properly to _element_constructor(). See trac ticket #5979.

Todo

Eventually, category should be Sets by default.

TESTS:

We check that the facade option is compatible with specifying categories as a tuple:

sage: class MyClass(Parent): pass
sage: P = MyClass(facade = ZZ, category = (Monoids(), CommutativeAdditiveMonoids()))
sage: P.category()
Join of Category of monoids and Category of commutative additive monoids and Category of facade sets
__call__(x=0, *args, **kwds)

This is the generic call method for all parents.

When called, it will find a map based on the Parent (or type) of x. If a coercion exists, it will always be chosen. This map will then be called (with the arguments and keywords if any).

By default this will dispatch as quickly as possible to _element_constructor_() though faster pathways are possible if so desired.

TESTS:

We check that the invariant:

self._element_init_pass_parent == guess_pass_parent(self, self._element_constructor)

is preserved (see trac ticket #5979):

sage: class MyParent(Parent):
....:     def _element_constructor_(self, x):
....:         print self, x
....:         return sage.structure.element.Element(parent = self)
....:     def _repr_(self):
....:         return "my_parent"
....:
sage: my_parent = MyParent()
sage: x = my_parent("bla")
my_parent bla
sage: x.parent()         # indirect doctest
my_parent

sage: x = my_parent()    # shouldn't this one raise an error?
my_parent 0
sage: x = my_parent(3)   # todo: not implemented  why does this one fail???
my_parent 3
_populate_coercion_lists_(coerce_list=[], action_list=[], convert_list=[], embedding=None, convert_method_name=None, element_constructor=None, init_no_parent=None, unpickling=False)

This function allows one to specify coercions, actions, conversions and embeddings involving this parent.

IT SHOULD ONLY BE CALLED DURING THE __INIT__ method, often at the end.

INPUT:

  • coerce_list – a list of coercion Morphisms to self and parents with canonical coercions to self

  • action_list – a list of actions on and by self

  • convert_list – a list of conversion Maps to self and

    parents with conversions to self

  • embedding – a single Morphism from self

  • convert_method_name – a name to look for that other elements can implement to create elements of self (e.g. _integer_)

  • element_constructor – A callable object used by the __call__ method to construct new elements. Typically the element class or a bound method (defaults to self._element_constructor_).

  • init_no_parent – if True omit passing self in as the first argument of element_constructor for conversion. This is useful if parents are unique, or element_constructor is a bound method (this latter case can be detected automatically).

__mul__(x)

This is a multiplication method that more or less directly calls another attribute _mul_ (single underscore). This is because __mul__ can not be implemented via inheritance from the parent methods of the category, but _mul_ can be inherited. This is, e.g., used when creating twosided ideals of matrix algebras. See trac ticket #7797.

EXAMPLE:

sage: MS = MatrixSpace(QQ,2,2)

This matrix space is in fact an algebra, and in particular it is a ring, from the point of view of categories:

sage: MS.category()
Category of algebras over quotient fields
sage: MS in Rings()
True

However, its class does not inherit from the base class Ring:

sage: isinstance(MS,Ring)
False

Its _mul_ method is inherited from the category, and can be used to create a left or right ideal:

sage: MS._mul_.__module__
'sage.categories.rings'
sage: MS*MS.1      # indirect doctest
Left Ideal
(
  [0 1]
  [0 0]
)
 of Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: MS*[MS.1,2]
Left Ideal
(
  [0 1]
  [0 0],

  [2 0]
  [0 2]
)
 of Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: MS.1*MS
Right Ideal
(
  [0 1]
  [0 0]
)
 of Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: [MS.1,2]*MS
Right Ideal
(
  [0 1]
  [0 0],

  [2 0]
  [0 2]
)
 of Full MatrixSpace of 2 by 2 dense matrices over Rational Field
__contains__(w)

EXAMPLES:

sage: W = WeylGroup(['C',3,1])
sage: w = W.from_reduced_word([3,2,1,0])
sage: PF = W.pieri_factors()
sage: w in PF
True
sage: w = W.from_reduced_word([1,0,1])
sage: w in PF
True
sage: w = W.from_reduced_word([1,0,1,0])
sage: w in PF
False
sage: w = W.from_reduced_word([0,1,2,3,2,1,0])
sage: w in PF
False
sage: w = W.from_reduced_word([2,0,3,2,1])
sage: w in PF
True

sage: W = WeylGroup(['B',4,1])
sage: PF = W.pieri_factors()
sage: w = W.from_reduced_word([1,2,4,3,1])
sage: w in PF
True
sage: w = W.from_reduced_word([1,2,4,3,1,0])
sage: w in PF
False
sage: w = W.from_reduced_word([2,3,4,3,2,1,0])
sage: w in PF
True

sage: W = WeylGroup(['A',4])
sage: PF = W.pieri_factors()
sage: W.from_reduced_word([4,3,1]) in PF
True
sage: W.from_reduced_word([1,2]) in PF
False
_coerce_map_from_(S)

Override this method to specify coercions beyond those specified in coerce_list.

If no such coercion exists, return None or False. Otherwise, it may return either an actual Map to use for the coercion, a callable (in which case it will be wrapped in a Map), or True (in which case a generic map will be provided).

_convert_map_from_(S)

Override this method to provide additional conversions beyond those given in convert_list.

This function is called after coercions are attempted. If there is a coercion morphism in the opposite direction, one should consider adding a section method to that.

This MUST return a Map from S to self, or None. If None is returned then a generic map will be provided.

_get_action_(S, op, self_on_left)

Override this method to provide an action of self on S or S on self beyond what was specified in action_list.

This must return an action which accepts an element of self and an element of S (in the order specified by self_on_left).

_an_element_()

Returns an element of self. Want it in sufficient generality that poorly-written functions won’t work when they’re not supposed to. This is cached so doesn’t have to be super fast.

EXAMPLES:

sage: QQ._an_element_()
1/2
sage: ZZ['x,y,z']._an_element_()
x

TESTS:

Since Parent comes before the parent classes provided by categories in the hierarchy of classes, we make sure that this default implementation of _an_element_() does not override some provided by the categories. Eventually, this default implementation should be moved into the categories to avoid this workaround:

sage: S = FiniteEnumeratedSet([1,2,3])
sage: S.category()
Category of facade finite enumerated sets
sage: super(Parent, S)._an_element_
Cached version of <function _an_element_from_iterator at ...>
sage: S._an_element_()
1
sage: S = FiniteEnumeratedSet([])
sage: S._an_element_()
Traceback (most recent call last):
...
EmptySetError
_repr_option(key)

Metadata about the _repr_() output.

INPUT:

  • key – string. A key for different metadata informations that can be inquired about.

Valid key arguments are:

  • 'ascii_art': The _repr_() output is multi-line ascii art and each line must be printed starting at the same column, or the meaning is lost.
  • 'element_ascii_art': same but for the output of the elements. Used in sage.repl.display.formatter.
  • 'element_is_atomic': the elements print atomically, that is, parenthesis are not required when printing out any of x - y, x + y, x^y and x/y.

OUTPUT:

Boolean.

EXAMPLES:

sage: ZZ._repr_option('ascii_art')
False
sage: MatrixSpace(ZZ, 2)._repr_option('element_ascii_art')
True
_init_category_(category)

Initialize the category framework

Most parents initialize their category upon construction, and this is the recommended behavior. For example, this happens when the constructor calls Parent.__init__() directly or indirectly. However, some parents defer this for performance reasons. For example, sage.matrix.matrix_space.MatrixSpace does not.

EXAMPLES:

sage: P = Parent()
sage: P.category()
Category of sets
sage: class MyParent(Parent):
....:     def __init__(self):
....:         self._init_category_(Groups())
sage: MyParent().category()
Category of groups
maximal_elements()

Return the maximal elements of self with respect to Bruhat order.

The current implementation is via a conjectural type-free formula. Use maximal_elements_combinatorial() for proven type-specific implementations. To compare type-free and type-specific (combinatorial) implementations, use method _test_maximal_elements().

EXAMPLES:

sage: W = WeylGroup(['A',4,1])
sage: PF = W.pieri_factors()
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
[[0, 4, 3, 2], [1, 0, 4, 3], [2, 1, 0, 4], [3, 2, 1, 0], [4, 3, 2, 1]]

sage: W = WeylGroup(RootSystem(["C",3,1]).weight_space())
sage: PF = W.pieri_factors()
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
[[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
 [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]

sage: W = WeylGroup(RootSystem(["B",3,1]).weight_space())
sage: PF = W.pieri_factors()
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
[[0, 2, 3, 2, 0], [1, 0, 2, 3, 2], [1, 2, 3, 2, 1],
 [2, 1, 0, 2, 3], [2, 3, 2, 1, 0], [3, 2, 1, 0, 2]]

sage: W = WeylGroup(['D',4,1])
sage: PF = W.pieri_factors()
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
[[0, 2, 4, 3, 2, 0], [1, 0, 2, 4, 3, 2], [1, 2, 4, 3, 2, 1],
 [2, 1, 0, 2, 4, 3], [2, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3],
 [4, 2, 1, 0, 2, 4], [4, 3, 2, 1, 0, 2]]
class sage.combinat.root_system.pieri_factors.PieriFactors_finite_type

Bases: sage.combinat.root_system.pieri_factors.PieriFactors

The Pieri factors of finite type A are the restriction of the Pieri factors of affine type A to finite permutations (under the canonical embedding of finite type A into the affine Weyl group), and the Pieri factors of finite type B are the restriction of the Pieri factors of affine type C. The finite type D Pieri factors are (weakly) conjectured to be the restriction of the Pieri factors of affine type D.

maximal_elements()

The current algorithm uses the fact that the maximal Pieri factors of affine type A,B,C, or D either contain a finite Weyl group element, or contain an affine Weyl group element whose reflection by s_0 gets a finite Weyl group element, and that either of these finite group elements will serve as a maximal element for finite Pieri factors. A better algorithm is desirable.

EXAMPLES:

sage: PF = WeylGroup(['A',5]).pieri_factors()
sage: [v.reduced_word() for v in PF.maximal_elements()]
[[5, 4, 3, 2, 1]]

sage: WeylGroup(['B',4]).pieri_factors().maximal_elements()
[
[-1  0  0  0]
[ 0  1  0  0]
[ 0  0  1  0]
[ 0  0  0  1]
]
class sage.combinat.root_system.pieri_factors.PieriFactors_type_A(W)

Bases: sage.combinat.root_system.pieri_factors.PieriFactors_finite_type

The set of Pieri factors for finite type A.

This is the set of elements of the Weyl group that have a reduced word that is strictly decreasing. May also be viewed as the restriction of affine type A Pieri factors to finite Weyl group elements.

maximal_elements_combinatorial()

Returns the maximal Pieri factors, using the type A combinatorial description

EXAMPLES:

sage: W = WeylGroup(['A',4])
sage: PF = W.pieri_factors()
sage: PF.maximal_elements_combinatorial()[0].reduced_word()
[4, 3, 2, 1]
stanley_symm_poly_weight(w)

EXAMPLES:

sage: W = WeylGroup(['A',4])
sage: PF = W.pieri_factors()
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1]))
0
class sage.combinat.root_system.pieri_factors.PieriFactors_type_A_affine(W, min_length, max_length, min_support, max_support)

Bases: sage.combinat.root_system.pieri_factors.PieriFactors_affine_type

The set of Pieri factors for type A affine, that is the set of elements of the Weyl Group which are cyclically decreasing.

Those are used for constructing (affine) Stanley symmetric functions.

The Pieri factors are in bijection with the proper subsets of the index_set. The bijection is given by the support. Namely, let f be a Pieri factor, and red a reduced word for f. No simple reflection appears twice in red, and the support S of red (that is the i such that s_i appears in red) does not depend on the reduced word).

cardinality()

EXAMPLES:

sage: WeylGroup(["A", 3, 1]).pieri_factors().cardinality()
15
generating_series(weight=None)

Returns a length generating series for the elements of self

EXAMPLES:

sage: W = WeylGroup(["A", 3, 1])
sage: W.pieri_factors().cardinality()
15
sage: W.pieri_factors().generating_series()
4*z^3 + 6*z^2 + 4*z + 1
maximal_elements_combinatorial()

Returns the maximal Pieri factors, using the affine type A combinatorial description

EXAMPLES:

sage: W = WeylGroup(['A',4,1])
sage: PF = W.pieri_factors()
sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
[[3, 2, 1, 0], [2, 1, 0, 4], [1, 0, 4, 3], [0, 4, 3, 2], [4, 3, 2, 1]]
stanley_symm_poly_weight(w)

Weight used in computing (affine) Stanley symmetric polynomials for affine type A.

EXAMPLES:

sage: W = WeylGroup(['A',5,1])
sage: PF = W.pieri_factors()
sage: PF.stanley_symm_poly_weight(W.one())
0
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,4,2,1,0]))
0
subset(length)
INPUT:
  • length – a non-negative integer

Returns the subset of the elements of self of length length

sage: PF = WeylGroup([“A”, 3, 1]).pieri_factors(); PF Pieri factors for Weyl Group of type [‘A’, 3, 1] (as a matrix group acting on the root space) sage: PF3 = PF.subset(length = 2) sage: PF3.cardinality() 6

TESTS:

We check that there is no reference effect (there was at some point!):

sage: PF.cardinality()
15
class sage.combinat.root_system.pieri_factors.PieriFactors_type_B(W)

Bases: sage.combinat.root_system.pieri_factors.PieriFactors_finite_type

The type B finite Pieri factors are realized as the set of elements that have a reduced word that is a subword of 12...(n-1)n(n-1)...21. They are the restriction of the type C affine Pieri factors to the set of finite Weyl group elements under the usual embedding.

maximal_elements_combinatorial()

Returns the maximal Pieri factors, using the type B combinatorial description

EXAMPLES:

sage: PF = WeylGroup(['B',4]).pieri_factors()
sage: PF.maximal_elements_combinatorial()[0].reduced_word()
[1, 2, 3, 4, 3, 2, 1]
stanley_symm_poly_weight(w)

Weight used in computing Stanley symmetric polynomials of type B. The weight for finite type B is the number of components of the support of an element minus the number of occurrences of n in a reduced word.

EXAMPLES:

sage: W = WeylGroup(['B',5])
sage: PF = W.pieri_factors()
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1,5]))
2
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,4,5]))
0
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,2,3,4,5,4]))
0
class sage.combinat.root_system.pieri_factors.PieriFactors_type_B_affine(W)

Bases: sage.combinat.root_system.pieri_factors.PieriFactors_affine_type

The type B affine Pieri factors are realized as the order ideal (in Bruhat order) generated by the following elements:

  • cyclic rotations of the element with reduced word 234...(n-1)n(n-1)...3210, except for 123...n...320 and 023...n...321.
  • 123...(n-1)n(n-1)...321
  • 023...(n-1)n(n-1)...320

EXAMPLES:

sage: W = WeylGroup(['B',4,1])
sage: PF = W.pieri_factors()
sage: W.from_reduced_word([2,3,4,3,2,1,0]) in PF.maximal_elements()
True
sage: W.from_reduced_word([0,2,3,4,3,2,1]) in PF.maximal_elements()
False
sage: W.from_reduced_word([1,0,2,3,4,3,2]) in PF.maximal_elements()
True
sage: W.from_reduced_word([0,2,3,4,3,2,0]) in PF.maximal_elements()
True
sage: W.from_reduced_word([0,2,0]) in PF
True
maximal_elements_combinatorial()

Returns the maximal Pieri factors, using the affine type B combinatorial description

EXAMPLES:

sage: W = WeylGroup(['B',4,1])
sage: [u.reduced_word() for u in W.pieri_factors().maximal_elements_combinatorial()]
[[1, 0, 2, 3, 4, 3, 2], [2, 1, 0, 2, 3, 4, 3], [3, 2, 1, 0, 2, 3, 4], [4, 3, 2, 1, 0, 2, 3], [3, 4, 3, 2, 1, 0, 2], [2, 3, 4, 3, 2, 1, 0], [1, 2, 3, 4, 3, 2, 1], [0, 2, 3, 4, 3, 2, 0]]
stanley_symm_poly_weight(w)

Returns the weight of a Pieri factor to be used in the definition of Stanley symmetric functions. For type B, this weight involves the number of components of the complement of the support of an element, where we consider 0 and 1 to be one node – if 1 is in the support, then we pretend 0 in the support, and vice versa. We also consider 0 and 1 to be one node for the purpose of counting components of the complement (as if the Dynkin diagram were that of type C). Let n be the rank of the affine Weyl group in question (if type [‘B’,k,1] then we have n = k+1). Let chi(v.length() < n-1) be the indicator function that is 1 if the length of v is smaller than n-1, and 0 if the length of v is greater than or equal to n-1. If we say c’(v) = the number of components of the complement of the support of v, then the type B weight is given by weight = c’(v) - chi(v.length() < n-1).

EXAMPLES:

sage: W = WeylGroup(['B',5,1])
sage: PF = W.pieri_factors()
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,3]))
1
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,1,3]))
1
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3]))
1
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3,4,5]))
0
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,5]))
0
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,5,4,3,0]))
-1
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([4,5,4,3,0]))
0
class sage.combinat.root_system.pieri_factors.PieriFactors_type_C_affine(W)

Bases: sage.combinat.root_system.pieri_factors.PieriFactors_affine_type

The type C affine Pieri factors are realized as the order ideal (in Bruhat order) generated by cyclic rotations of the element with unique reduced word 123...(n-1)n(n-1)...3210.

EXAMPLES:

sage: W = WeylGroup(['C',3,1])
sage: PF = W.pieri_factors()
sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
[[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
 [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]
maximal_elements_combinatorial()

Returns the maximal Pieri factors, using the affine type C combinatorial description

EXAMPLES:

sage: PF = WeylGroup(['C',3,1]).pieri_factors()
sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
[[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [2, 1, 0, 1, 2, 3], [3, 2, 1, 0, 1, 2], [2, 3, 2, 1, 0, 1], [1, 2, 3, 2, 1, 0]]
stanley_symm_poly_weight(w)

Returns the weight of a Pieri factor to be used in the definition of Stanley symmetric functions. For type C, this weight is the number of connected components of the support (the indices appearing in a reduced word) of an element.

EXAMPLES:

sage: W = WeylGroup(['C',5,1])
sage: PF = W.pieri_factors()
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3]))
2
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3,2,0]))
1
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,3,0]))
3
sage: PF.stanley_symm_poly_weight(W.one())
0
class sage.combinat.root_system.pieri_factors.PieriFactors_type_D_affine(W)

Bases: sage.combinat.root_system.pieri_factors.PieriFactors_affine_type

The type D affine Pieri factors are realized as the order ideal (in Bruhat order) generated by the following elements:

  • cyclic rotations of the element with reduced word 234...(n-2)n(n-1)(n-2)...3210 such that 1 and 0 are always adjacent and (n-1) and n are always adjacent.
  • 123...(n-2)n(n-1)(n-2)...321
  • 023...(n-2)n(n-1)(n-2)...320
  • n(n-2)...2102...(n-2)n
  • (n-1)(n-2)...2102...(n-2)(n-1)

EXAMPLES:

sage: W = WeylGroup(['D',5,1])
sage: PF = W.pieri_factors()
sage: W.from_reduced_word([3,2,1,0]) in PF
True
sage: W.from_reduced_word([0,3,2,1]) in PF
False
sage: W.from_reduced_word([0,1,3,2]) in PF
True
sage: W.from_reduced_word([2,0,1,3]) in PF
True
sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
[[0, 2, 3, 5, 4, 3, 2, 0], [1, 0, 2, 3, 5, 4, 3, 2], [1, 2, 3, 5, 4, 3, 2, 1],
 [2, 1, 0, 2, 3, 5, 4, 3], [2, 3, 5, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3, 5, 4],
 [3, 5, 4, 3, 2, 1, 0, 2], [4, 3, 2, 1, 0, 2, 3, 4], [5, 3, 2, 1, 0, 2, 3, 5],
 [5, 4, 3, 2, 1, 0, 2, 3]]
maximal_elements_combinatorial()

Returns the maximal Pieri factors, using the affine type D combinatorial description

EXAMPLES:

sage: W = WeylGroup(['D',5,1])
sage: PF = W.pieri_factors()
sage: set(PF.maximal_elements_combinatorial()) == set(PF.maximal_elements())
True
stanley_symm_poly_weight(w)
INPUT:
  • w – a pieri factor for this type

Returns the weight of w, to be used in the definition of Stanley symmetric functions. For type D, this weight involves the number of components of the complement of the support of an element, where we consider 0 and 1 to be one node – if 1 is in the support, then we pretend 0 in the support, and vice versa. Similarly with n-1 and n. We also consider 0 and 1, n-1 and n to be one node for the purpose of counting components of the complement (as if the Dynkin diagram were that of type C).

Type D Stanley symmetric polynomial weights are still conjectural. The given weight comes from conditions on elements of the affine Fomin-Stanley subalgebra, but work is needed to show this weight is correct for affine Stanley symmetric functions – see [LSS2009, Pon2010] for details.

EXAMPLES:

sage: W = WeylGroup(['D', 5, 1])
sage: PF = W.pieri_factors()
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1]))
0
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1,0]))
0
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2]))
1
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([]))
0

sage: W = WeylGroup(['D',7,1])
sage: PF = W.pieri_factors()
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,6]))
2

Previous topic

Nonsymmetric Macdonald polynomials

Next topic

Tutorial: visualizing root systems

This Page