Weyl Groups

class sage.categories.weyl_groups.WeylGroups[source]

Bases: Category_singleton

The category of Weyl groups.

See the Wikipedia page of Weyl Groups.

EXAMPLES:

sage: WeylGroups()
Category of Weyl groups
sage: WeylGroups().super_categories()
[Category of Coxeter groups]
>>> from sage.all import *
>>> WeylGroups()
Category of Weyl groups
>>> WeylGroups().super_categories()
[Category of Coxeter groups]
WeylGroups()
WeylGroups().super_categories()

Here are some examples:

sage: WeylGroups().example()            # todo: not implemented
sage: FiniteWeylGroups().example()
The symmetric group on {0, ..., 3}
sage: AffineWeylGroups().example()      # todo: not implemented
sage: WeylGroup(["B", 3])
Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
>>> from sage.all import *
>>> WeylGroups().example()            # todo: not implemented
>>> FiniteWeylGroups().example()
The symmetric group on {0, ..., 3}
>>> AffineWeylGroups().example()      # todo: not implemented
>>> WeylGroup(["B", Integer(3)])
Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
WeylGroups().example()            # todo: not implemented
FiniteWeylGroups().example()
AffineWeylGroups().example()      # todo: not implemented
WeylGroup(["B", 3])

This one will eventually be also in this category:

sage: SymmetricGroup(4)
Symmetric group of order 4! as a permutation group
>>> from sage.all import *
>>> SymmetricGroup(Integer(4))
Symmetric group of order 4! as a permutation group
SymmetricGroup(4)
class ElementMethods[source]

Bases: object

bruhat_lower_covers_coroots()[source]

Return all 2-tuples (v, α) where v is covered by self and α is the positive coroot such that self = v sα where sα is the reflection orthogonal to α.

ALGORITHM:

See bruhat_lower_covers() and bruhat_lower_covers_reflections() for Coxeter groups.

EXAMPLES:

sage: W = WeylGroup(['A',3], prefix='s')
sage: w = W.from_reduced_word([3,1,2,1])
sage: w.bruhat_lower_covers_coroots()
[(s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3]),
 (s3*s2*s1, alphacheck[2]), (s3*s1*s2, alphacheck[1])]
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(3)], prefix='s')
>>> w = W.from_reduced_word([Integer(3),Integer(1),Integer(2),Integer(1)])
>>> w.bruhat_lower_covers_coroots()
[(s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3]),
 (s3*s2*s1, alphacheck[2]), (s3*s1*s2, alphacheck[1])]
W = WeylGroup(['A',3], prefix='s')
w = W.from_reduced_word([3,1,2,1])
w.bruhat_lower_covers_coroots()
bruhat_upper_covers_coroots()[source]

Return all 2-tuples (v, α) where v is covers self and α is the positive coroot such that self = v sα where sα is the reflection orthogonal to α.

ALGORITHM:

See bruhat_upper_covers() and bruhat_upper_covers_reflections() for Coxeter groups.

EXAMPLES:

sage: W = WeylGroup(['A',4], prefix='s')
sage: w = W.from_reduced_word([3,1,2,1])
sage: w.bruhat_upper_covers_coroots()
[(s1*s2*s3*s2*s1, alphacheck[3]),
 (s2*s3*s1*s2*s1, alphacheck[2] + alphacheck[3]),
 (s3*s4*s1*s2*s1, alphacheck[4]),
 (s4*s3*s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3] + alphacheck[4])]
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(4)], prefix='s')
>>> w = W.from_reduced_word([Integer(3),Integer(1),Integer(2),Integer(1)])
>>> w.bruhat_upper_covers_coroots()
[(s1*s2*s3*s2*s1, alphacheck[3]),
 (s2*s3*s1*s2*s1, alphacheck[2] + alphacheck[3]),
 (s3*s4*s1*s2*s1, alphacheck[4]),
 (s4*s3*s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3] + alphacheck[4])]
W = WeylGroup(['A',4], prefix='s')
w = W.from_reduced_word([3,1,2,1])
w.bruhat_upper_covers_coroots()
inversion_arrangement(side='right')[source]

Return the inversion hyperplane arrangement of self.

INPUT:

  • side'right' (default) or 'left'

OUTPUT:

A (central) hyperplane arrangement whose hyperplanes correspond to the inversions of self given as roots.

The side parameter determines on which side to compute the inversions.

EXAMPLES:

sage: W = WeylGroup(['A',3])
sage: w = W.from_reduced_word([1, 2, 3, 1, 2])
sage: A = w.inversion_arrangement(); A
Arrangement of 5 hyperplanes of dimension 3 and rank 3
sage: A.hyperplanes()
(Hyperplane 0*a1 + 0*a2 + a3 + 0,
 Hyperplane 0*a1 + a2 + 0*a3 + 0,
 Hyperplane 0*a1 + a2 + a3 + 0,
 Hyperplane a1 + a2 + 0*a3 + 0,
 Hyperplane a1 + a2 + a3 + 0)
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(3)])
>>> w = W.from_reduced_word([Integer(1), Integer(2), Integer(3), Integer(1), Integer(2)])
>>> A = w.inversion_arrangement(); A
Arrangement of 5 hyperplanes of dimension 3 and rank 3
>>> A.hyperplanes()
(Hyperplane 0*a1 + 0*a2 + a3 + 0,
 Hyperplane 0*a1 + a2 + 0*a3 + 0,
 Hyperplane 0*a1 + a2 + a3 + 0,
 Hyperplane a1 + a2 + 0*a3 + 0,
 Hyperplane a1 + a2 + a3 + 0)
W = WeylGroup(['A',3])
w = W.from_reduced_word([1, 2, 3, 1, 2])
A = w.inversion_arrangement(); A
A.hyperplanes()

The identity element gives the empty arrangement:

sage: W = WeylGroup(['A',3])
sage: W.one().inversion_arrangement()
Empty hyperplane arrangement of dimension 3
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(3)])
>>> W.one().inversion_arrangement()
Empty hyperplane arrangement of dimension 3
W = WeylGroup(['A',3])
W.one().inversion_arrangement()
inversions(side='right', inversion_type='reflections')[source]

Return the set of inversions of self.

INPUT:

  • side – ‘right’ (default) or ‘left’

  • inversion_type – ‘reflections’ (default), ‘roots’, or ‘coroots’

OUTPUT:

For reflections, the set of reflections r in the Weyl group such that self r < self. For (co)roots, the set of positive (co)roots that are sent by self to negative (co)roots; their associated reflections are described above.

If side is ‘left’, the inverse Weyl group element is used.

EXAMPLES:

sage: W = WeylGroup(['C',2], prefix='s')
sage: w = W.from_reduced_word([1,2])
sage: w.inversions()
[s2, s2*s1*s2]
sage: w.inversions(inversion_type = 'reflections')
[s2, s2*s1*s2]
sage: w.inversions(inversion_type = 'roots')
[alpha[2], alpha[1] + alpha[2]]
sage: w.inversions(inversion_type = 'coroots')
[alphacheck[2], alphacheck[1] + 2*alphacheck[2]]
sage: w.inversions(side = 'left')
[s1, s1*s2*s1]
sage: w.inversions(side = 'left', inversion_type = 'roots')
[alpha[1], 2*alpha[1] + alpha[2]]
sage: w.inversions(side = 'left', inversion_type = 'coroots')
[alphacheck[1], alphacheck[1] + alphacheck[2]]
>>> from sage.all import *
>>> W = WeylGroup(['C',Integer(2)], prefix='s')
>>> w = W.from_reduced_word([Integer(1),Integer(2)])
>>> w.inversions()
[s2, s2*s1*s2]
>>> w.inversions(inversion_type = 'reflections')
[s2, s2*s1*s2]
>>> w.inversions(inversion_type = 'roots')
[alpha[2], alpha[1] + alpha[2]]
>>> w.inversions(inversion_type = 'coroots')
[alphacheck[2], alphacheck[1] + 2*alphacheck[2]]
>>> w.inversions(side = 'left')
[s1, s1*s2*s1]
>>> w.inversions(side = 'left', inversion_type = 'roots')
[alpha[1], 2*alpha[1] + alpha[2]]
>>> w.inversions(side = 'left', inversion_type = 'coroots')
[alphacheck[1], alphacheck[1] + alphacheck[2]]
W = WeylGroup(['C',2], prefix='s')
w = W.from_reduced_word([1,2])
w.inversions()
w.inversions(inversion_type = 'reflections')
w.inversions(inversion_type = 'roots')
w.inversions(inversion_type = 'coroots')
w.inversions(side = 'left')
w.inversions(side = 'left', inversion_type = 'roots')
w.inversions(side = 'left', inversion_type = 'coroots')
is_pieri_factor()[source]

Return whether self is a Pieri factor, as used for computing Stanley symmetric functions.

EXAMPLES:

sage: W = WeylGroup(['A',5,1])
sage: W.from_reduced_word([3,2,5]).is_pieri_factor()
True
sage: W.from_reduced_word([3,2,4,5]).is_pieri_factor()
False

sage: W = WeylGroup(['C',4,1])
sage: W.from_reduced_word([0,2,1]).is_pieri_factor()
True
sage: W.from_reduced_word([0,2,1,0]).is_pieri_factor()
False

sage: W = WeylGroup(['B',3])
sage: W.from_reduced_word([3,2,3]).is_pieri_factor()
False
sage: W.from_reduced_word([2,1,2]).is_pieri_factor()
True
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(5),Integer(1)])
>>> W.from_reduced_word([Integer(3),Integer(2),Integer(5)]).is_pieri_factor()
True
>>> W.from_reduced_word([Integer(3),Integer(2),Integer(4),Integer(5)]).is_pieri_factor()
False

>>> W = WeylGroup(['C',Integer(4),Integer(1)])
>>> W.from_reduced_word([Integer(0),Integer(2),Integer(1)]).is_pieri_factor()
True
>>> W.from_reduced_word([Integer(0),Integer(2),Integer(1),Integer(0)]).is_pieri_factor()
False

>>> W = WeylGroup(['B',Integer(3)])
>>> W.from_reduced_word([Integer(3),Integer(2),Integer(3)]).is_pieri_factor()
False
>>> W.from_reduced_word([Integer(2),Integer(1),Integer(2)]).is_pieri_factor()
True
W = WeylGroup(['A',5,1])
W.from_reduced_word([3,2,5]).is_pieri_factor()
W.from_reduced_word([3,2,4,5]).is_pieri_factor()
W = WeylGroup(['C',4,1])
W.from_reduced_word([0,2,1]).is_pieri_factor()
W.from_reduced_word([0,2,1,0]).is_pieri_factor()
W = WeylGroup(['B',3])
W.from_reduced_word([3,2,3]).is_pieri_factor()
W.from_reduced_word([2,1,2]).is_pieri_factor()
left_pieri_factorizations(max_length=None)[source]

Return all factorizations of self as uv, where u is a Pieri factor and v is an element of the Weyl group.

EXAMPLES:

If we take w=w0 the maximal element of a strict parabolic subgroup of type An1××Ank, then the Pieri factorizations are in correspondence with all Pieri factors, and there are 2ni of them:

sage: W = WeylGroup(['A', 4, 1])
sage: W.from_reduced_word([]).left_pieri_factorizations().cardinality()
1
sage: W.from_reduced_word([1]).left_pieri_factorizations().cardinality()
2
sage: W.from_reduced_word([1,2,1]).left_pieri_factorizations().cardinality()
4
sage: W.from_reduced_word([1,2,3,1,2,1]).left_pieri_factorizations().cardinality()
8

sage: W.from_reduced_word([1,3]).left_pieri_factorizations().cardinality()
4
sage: W.from_reduced_word([1,3,4,3]).left_pieri_factorizations().cardinality()
8

sage: W.from_reduced_word([2,1]).left_pieri_factorizations().cardinality()
3
sage: W.from_reduced_word([1,2]).left_pieri_factorizations().cardinality()
2
sage: [W.from_reduced_word([1,2]).left_pieri_factorizations(max_length=i).cardinality()
....:  for i in [-1, 0, 1, 2]]
[0, 1, 2, 2]

sage: W = WeylGroup(['C',4,1])
sage: w = W.from_reduced_word([0,3,2,1,0])
sage: w.left_pieri_factorizations().cardinality()
7
sage: [(u.reduced_word(),v.reduced_word())
....:  for (u,v) in w.left_pieri_factorizations()]
[([], [3, 2, 0, 1, 0]),
([0], [3, 2, 1, 0]),
([3], [2, 0, 1, 0]),
([3, 0], [2, 1, 0]),
([3, 2], [0, 1, 0]),
([3, 2, 0], [1, 0]),
([3, 2, 0, 1], [0])]

sage: W = WeylGroup(['B',4,1])
sage: W.from_reduced_word([0,2,1,0]).left_pieri_factorizations().cardinality()
6
>>> from sage.all import *
>>> W = WeylGroup(['A', Integer(4), Integer(1)])
>>> W.from_reduced_word([]).left_pieri_factorizations().cardinality()
1
>>> W.from_reduced_word([Integer(1)]).left_pieri_factorizations().cardinality()
2
>>> W.from_reduced_word([Integer(1),Integer(2),Integer(1)]).left_pieri_factorizations().cardinality()
4
>>> W.from_reduced_word([Integer(1),Integer(2),Integer(3),Integer(1),Integer(2),Integer(1)]).left_pieri_factorizations().cardinality()
8

>>> W.from_reduced_word([Integer(1),Integer(3)]).left_pieri_factorizations().cardinality()
4
>>> W.from_reduced_word([Integer(1),Integer(3),Integer(4),Integer(3)]).left_pieri_factorizations().cardinality()
8

>>> W.from_reduced_word([Integer(2),Integer(1)]).left_pieri_factorizations().cardinality()
3
>>> W.from_reduced_word([Integer(1),Integer(2)]).left_pieri_factorizations().cardinality()
2
>>> [W.from_reduced_word([Integer(1),Integer(2)]).left_pieri_factorizations(max_length=i).cardinality()
...  for i in [-Integer(1), Integer(0), Integer(1), Integer(2)]]
[0, 1, 2, 2]

>>> W = WeylGroup(['C',Integer(4),Integer(1)])
>>> w = W.from_reduced_word([Integer(0),Integer(3),Integer(2),Integer(1),Integer(0)])
>>> w.left_pieri_factorizations().cardinality()
7
>>> [(u.reduced_word(),v.reduced_word())
...  for (u,v) in w.left_pieri_factorizations()]
[([], [3, 2, 0, 1, 0]),
([0], [3, 2, 1, 0]),
([3], [2, 0, 1, 0]),
([3, 0], [2, 1, 0]),
([3, 2], [0, 1, 0]),
([3, 2, 0], [1, 0]),
([3, 2, 0, 1], [0])]

>>> W = WeylGroup(['B',Integer(4),Integer(1)])
>>> W.from_reduced_word([Integer(0),Integer(2),Integer(1),Integer(0)]).left_pieri_factorizations().cardinality()
6
W = WeylGroup(['A', 4, 1])
W.from_reduced_word([]).left_pieri_factorizations().cardinality()
W.from_reduced_word([1]).left_pieri_factorizations().cardinality()
W.from_reduced_word([1,2,1]).left_pieri_factorizations().cardinality()
W.from_reduced_word([1,2,3,1,2,1]).left_pieri_factorizations().cardinality()
W.from_reduced_word([1,3]).left_pieri_factorizations().cardinality()
W.from_reduced_word([1,3,4,3]).left_pieri_factorizations().cardinality()
W.from_reduced_word([2,1]).left_pieri_factorizations().cardinality()
W.from_reduced_word([1,2]).left_pieri_factorizations().cardinality()
[W.from_reduced_word([1,2]).left_pieri_factorizations(max_length=i).cardinality()
 for i in [-1, 0, 1, 2]]
W = WeylGroup(['C',4,1])
w = W.from_reduced_word([0,3,2,1,0])
w.left_pieri_factorizations().cardinality()
[(u.reduced_word(),v.reduced_word())
 for (u,v) in w.left_pieri_factorizations()]
W = WeylGroup(['B',4,1])
W.from_reduced_word([0,2,1,0]).left_pieri_factorizations().cardinality()
quantum_bruhat_successors(index_set=None, roots=False, quantum_only=False)[source]

Return the successors of self in the quantum Bruhat graph on the parabolic quotient of the Weyl group determined by the subset of Dynkin nodes index_set.

INPUT:

  • self – a Weyl group element, which is assumed to be of minimum length in its coset with respect to the parabolic subgroup

  • index_set – (default: None) indicates the set of simple reflections used to generate the parabolic subgroup; the default value indicates that the subgroup is the identity

  • roots – boolean (default: False); if True, returns the list of 2-tuples (w, α) where w is a successor and α is the positive root associated with the successor relation

  • quantum_only – boolean (default: False); if True, returns only the quantum successors

EXAMPLES:

sage: W = WeylGroup(['A',3], prefix='s')
sage: w = W.from_reduced_word([3,1,2])
sage: w.quantum_bruhat_successors([1], roots = True)
[(s3, alpha[2]), (s1*s2*s3*s2, alpha[3]),
 (s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
sage: w.quantum_bruhat_successors([1,3])
[1, s2*s3*s1*s2]
sage: w.quantum_bruhat_successors(roots = True)
[(s3*s1*s2*s1, alpha[1]),
 (s3*s1, alpha[2]),
 (s1*s2*s3*s2, alpha[3]),
 (s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
sage: w.quantum_bruhat_successors()
[s3*s1*s2*s1, s3*s1, s1*s2*s3*s2, s2*s3*s1*s2]
sage: w.quantum_bruhat_successors(quantum_only = True)
[s3*s1]
sage: w = W.from_reduced_word([2,3])
sage: w.quantum_bruhat_successors([1,3])
Traceback (most recent call last):
...
ValueError: s2*s3 is not of minimum length in its coset
of the parabolic subgroup generated by the reflections (1, 3)
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(3)], prefix='s')
>>> w = W.from_reduced_word([Integer(3),Integer(1),Integer(2)])
>>> w.quantum_bruhat_successors([Integer(1)], roots = True)
[(s3, alpha[2]), (s1*s2*s3*s2, alpha[3]),
 (s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
>>> w.quantum_bruhat_successors([Integer(1),Integer(3)])
[1, s2*s3*s1*s2]
>>> w.quantum_bruhat_successors(roots = True)
[(s3*s1*s2*s1, alpha[1]),
 (s3*s1, alpha[2]),
 (s1*s2*s3*s2, alpha[3]),
 (s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
>>> w.quantum_bruhat_successors()
[s3*s1*s2*s1, s3*s1, s1*s2*s3*s2, s2*s3*s1*s2]
>>> w.quantum_bruhat_successors(quantum_only = True)
[s3*s1]
>>> w = W.from_reduced_word([Integer(2),Integer(3)])
>>> w.quantum_bruhat_successors([Integer(1),Integer(3)])
Traceback (most recent call last):
...
ValueError: s2*s3 is not of minimum length in its coset
of the parabolic subgroup generated by the reflections (1, 3)
W = WeylGroup(['A',3], prefix='s')
w = W.from_reduced_word([3,1,2])
w.quantum_bruhat_successors([1], roots = True)
w.quantum_bruhat_successors([1,3])
w.quantum_bruhat_successors(roots = True)
w.quantum_bruhat_successors()
w.quantum_bruhat_successors(quantum_only = True)
w = W.from_reduced_word([2,3])
w.quantum_bruhat_successors([1,3])
reflection_to_coroot()[source]

Return the coroot associated with the reflection self.

EXAMPLES:

sage: W = WeylGroup(['C',2], prefix='s')
sage: W.from_reduced_word([1,2,1]).reflection_to_coroot()
alphacheck[1] + alphacheck[2]
sage: W.from_reduced_word([1,2]).reflection_to_coroot()
Traceback (most recent call last):
...
ValueError: s1*s2 is not a reflection
sage: W.long_element().reflection_to_coroot()
Traceback (most recent call last):
...
ValueError: s2*s1*s2*s1 is not a reflection
>>> from sage.all import *
>>> W = WeylGroup(['C',Integer(2)], prefix='s')
>>> W.from_reduced_word([Integer(1),Integer(2),Integer(1)]).reflection_to_coroot()
alphacheck[1] + alphacheck[2]
>>> W.from_reduced_word([Integer(1),Integer(2)]).reflection_to_coroot()
Traceback (most recent call last):
...
ValueError: s1*s2 is not a reflection
>>> W.long_element().reflection_to_coroot()
Traceback (most recent call last):
...
ValueError: s2*s1*s2*s1 is not a reflection
W = WeylGroup(['C',2], prefix='s')
W.from_reduced_word([1,2,1]).reflection_to_coroot()
W.from_reduced_word([1,2]).reflection_to_coroot()
W.long_element().reflection_to_coroot()
reflection_to_root()[source]

Return the root associated with the reflection self.

EXAMPLES:

sage: W = WeylGroup(['C',2], prefix='s')
sage: W.from_reduced_word([1,2,1]).reflection_to_root()
2*alpha[1] + alpha[2]
sage: W.from_reduced_word([1,2]).reflection_to_root()
Traceback (most recent call last):
...
ValueError: s1*s2 is not a reflection
sage: W.long_element().reflection_to_root()
Traceback (most recent call last):
...
ValueError: s2*s1*s2*s1 is not a reflection
>>> from sage.all import *
>>> W = WeylGroup(['C',Integer(2)], prefix='s')
>>> W.from_reduced_word([Integer(1),Integer(2),Integer(1)]).reflection_to_root()
2*alpha[1] + alpha[2]
>>> W.from_reduced_word([Integer(1),Integer(2)]).reflection_to_root()
Traceback (most recent call last):
...
ValueError: s1*s2 is not a reflection
>>> W.long_element().reflection_to_root()
Traceback (most recent call last):
...
ValueError: s2*s1*s2*s1 is not a reflection
W = WeylGroup(['C',2], prefix='s')
W.from_reduced_word([1,2,1]).reflection_to_root()
W.from_reduced_word([1,2]).reflection_to_root()
W.long_element().reflection_to_root()
stanley_symmetric_function()[source]

Return the affine Stanley symmetric function indexed by self.

INPUT:

  • self – an element w of a Weyl group

Returns the affine Stanley symmetric function indexed by w. Stanley symmetric functions are defined as generating series of the factorizations of w into Pieri factors and weighted by a statistic on Pieri factors.

EXAMPLES:

sage: W = WeylGroup(['A', 3, 1])
sage: W.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
+ 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]
sage: A = AffinePermutationGroup(['A',3,1])
sage: A.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
+ 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]

sage: W = WeylGroup(['C',3,1])
sage: W.from_reduced_word([0,2,1,0]).stanley_symmetric_function()
32*m[1, 1, 1, 1] + 16*m[2, 1, 1] + 8*m[2, 2] + 4*m[3, 1]

sage: W = WeylGroup(['B',3,1])
sage: W.from_reduced_word([3,2,1]).stanley_symmetric_function()
2*m[1, 1, 1] + m[2, 1] + 1/2*m[3]

sage: W = WeylGroup(['B',4])
sage: w = W.from_reduced_word([3,2,3,1])
sage: w.stanley_symmetric_function()  # long time (6s on sage.math, 2011)
48*m[1, 1, 1, 1] + 24*m[2, 1, 1] + 12*m[2, 2] + 8*m[3, 1] + 2*m[4]

sage: A = AffinePermutationGroup(['A',4,1])
sage: a = A([-2,0,1,4,12])
sage: a.stanley_symmetric_function()
6*m[1, 1, 1, 1, 1, 1, 1, 1] + 5*m[2, 1, 1, 1, 1, 1, 1]
+ 4*m[2, 2, 1, 1, 1, 1] + 3*m[2, 2, 2, 1, 1] + 2*m[2, 2, 2, 2]
+ 4*m[3, 1, 1, 1, 1, 1] + 3*m[3, 2, 1, 1, 1] + 2*m[3, 2, 2, 1]
+ 2*m[3, 3, 1, 1] + m[3, 3, 2] + 3*m[4, 1, 1, 1, 1]
+ 2*m[4, 2, 1, 1] + m[4, 2, 2] + m[4, 3, 1]
>>> from sage.all import *
>>> W = WeylGroup(['A', Integer(3), Integer(1)])
>>> W.from_reduced_word([Integer(3),Integer(1),Integer(2),Integer(0),Integer(3),Integer(1),Integer(0)]).stanley_symmetric_function()
8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
+ 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]
>>> A = AffinePermutationGroup(['A',Integer(3),Integer(1)])
>>> A.from_reduced_word([Integer(3),Integer(1),Integer(2),Integer(0),Integer(3),Integer(1),Integer(0)]).stanley_symmetric_function()
8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
+ 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]

>>> W = WeylGroup(['C',Integer(3),Integer(1)])
>>> W.from_reduced_word([Integer(0),Integer(2),Integer(1),Integer(0)]).stanley_symmetric_function()
32*m[1, 1, 1, 1] + 16*m[2, 1, 1] + 8*m[2, 2] + 4*m[3, 1]

>>> W = WeylGroup(['B',Integer(3),Integer(1)])
>>> W.from_reduced_word([Integer(3),Integer(2),Integer(1)]).stanley_symmetric_function()
2*m[1, 1, 1] + m[2, 1] + 1/2*m[3]

>>> W = WeylGroup(['B',Integer(4)])
>>> w = W.from_reduced_word([Integer(3),Integer(2),Integer(3),Integer(1)])
>>> w.stanley_symmetric_function()  # long time (6s on sage.math, 2011)
48*m[1, 1, 1, 1] + 24*m[2, 1, 1] + 12*m[2, 2] + 8*m[3, 1] + 2*m[4]

>>> A = AffinePermutationGroup(['A',Integer(4),Integer(1)])
>>> a = A([-Integer(2),Integer(0),Integer(1),Integer(4),Integer(12)])
>>> a.stanley_symmetric_function()
6*m[1, 1, 1, 1, 1, 1, 1, 1] + 5*m[2, 1, 1, 1, 1, 1, 1]
+ 4*m[2, 2, 1, 1, 1, 1] + 3*m[2, 2, 2, 1, 1] + 2*m[2, 2, 2, 2]
+ 4*m[3, 1, 1, 1, 1, 1] + 3*m[3, 2, 1, 1, 1] + 2*m[3, 2, 2, 1]
+ 2*m[3, 3, 1, 1] + m[3, 3, 2] + 3*m[4, 1, 1, 1, 1]
+ 2*m[4, 2, 1, 1] + m[4, 2, 2] + m[4, 3, 1]
W = WeylGroup(['A', 3, 1])
W.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
A = AffinePermutationGroup(['A',3,1])
A.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
W = WeylGroup(['C',3,1])
W.from_reduced_word([0,2,1,0]).stanley_symmetric_function()
W = WeylGroup(['B',3,1])
W.from_reduced_word([3,2,1]).stanley_symmetric_function()
W = WeylGroup(['B',4])
w = W.from_reduced_word([3,2,3,1])
w.stanley_symmetric_function()  # long time (6s on sage.math, 2011)
A = AffinePermutationGroup(['A',4,1])
a = A([-2,0,1,4,12])
a.stanley_symmetric_function()

One more example (Issue #14095):

sage: G = SymmetricGroup(4)
sage: w = G.from_reduced_word([3,2,3,1])
sage: w.stanley_symmetric_function()
3*m[1, 1, 1, 1] + 2*m[2, 1, 1] + m[2, 2] + m[3, 1]
>>> from sage.all import *
>>> G = SymmetricGroup(Integer(4))
>>> w = G.from_reduced_word([Integer(3),Integer(2),Integer(3),Integer(1)])
>>> w.stanley_symmetric_function()
3*m[1, 1, 1, 1] + 2*m[2, 1, 1] + m[2, 2] + m[3, 1]
G = SymmetricGroup(4)
w = G.from_reduced_word([3,2,3,1])
w.stanley_symmetric_function()

REFERENCES:

stanley_symmetric_function_as_polynomial(max_length=None)[source]

Return a multivariate generating function for the number of factorizations of a Weyl group element into Pieri factors of decreasing length, weighted by a statistic on Pieri factors.

INPUT:

  • self – an element w of a Weyl group W

  • max_length – nonnegative integer or infinity (default: infinity)

Returns the generating series for the Pieri factorizations w=u1uk, where ui is a Pieri factor for all i, l(w)=i=1kl(ui) and max_length l(u1)l(uk).

A factorization u1uk contributes a monomial of the form ixl(ui), with coefficient given by i2c(ui), where c is a type-dependent statistic on Pieri factors, as returned by the method u[i].stanley_symm_poly_weight().

EXAMPLES:

sage: W = WeylGroup(['A', 3, 1])
sage: W.from_reduced_word([]).stanley_symmetric_function_as_polynomial()
1
sage: W.from_reduced_word([1]).stanley_symmetric_function_as_polynomial()
x1
sage: W.from_reduced_word([1,2]).stanley_symmetric_function_as_polynomial()
x1^2
sage: W.from_reduced_word([2,1]).stanley_symmetric_function_as_polynomial()
x1^2 + x2
sage: W.from_reduced_word([1,2,1]).stanley_symmetric_function_as_polynomial()
2*x1^3 + x1*x2
sage: W.from_reduced_word([1,2,1,0]).stanley_symmetric_function_as_polynomial()
3*x1^4 + 2*x1^2*x2 + x2^2 + x1*x3
sage: x = W.from_reduced_word([1,2,3,1,2,1,0])
sage: x.stanley_symmetric_function_as_polynomial()  # long time
22*x1^7 + 11*x1^5*x2 + 5*x1^3*x2^2 + 3*x1^4*x3 + 2*x1*x2^3 + x1^2*x2*x3
sage: y = W.from_reduced_word([3,1,2,0,3,1,0])
sage: y.stanley_symmetric_function_as_polynomial()  # long time
8*x1^7 + 4*x1^5*x2 + 2*x1^3*x2^2 + x1*x2^3

sage: W = WeylGroup(['C',3,1])
sage: W.from_reduced_word([0,2,1,0]).stanley_symmetric_function_as_polynomial()
32*x1^4 + 16*x1^2*x2 + 8*x2^2 + 4*x1*x3

sage: W = WeylGroup(['B',3,1])
sage: W.from_reduced_word([3,2,1]).stanley_symmetric_function_as_polynomial()
2*x1^3 + x1*x2 + 1/2*x3
>>> from sage.all import *
>>> W = WeylGroup(['A', Integer(3), Integer(1)])
>>> W.from_reduced_word([]).stanley_symmetric_function_as_polynomial()
1
>>> W.from_reduced_word([Integer(1)]).stanley_symmetric_function_as_polynomial()
x1
>>> W.from_reduced_word([Integer(1),Integer(2)]).stanley_symmetric_function_as_polynomial()
x1^2
>>> W.from_reduced_word([Integer(2),Integer(1)]).stanley_symmetric_function_as_polynomial()
x1^2 + x2
>>> W.from_reduced_word([Integer(1),Integer(2),Integer(1)]).stanley_symmetric_function_as_polynomial()
2*x1^3 + x1*x2
>>> W.from_reduced_word([Integer(1),Integer(2),Integer(1),Integer(0)]).stanley_symmetric_function_as_polynomial()
3*x1^4 + 2*x1^2*x2 + x2^2 + x1*x3
>>> x = W.from_reduced_word([Integer(1),Integer(2),Integer(3),Integer(1),Integer(2),Integer(1),Integer(0)])
>>> x.stanley_symmetric_function_as_polynomial()  # long time
22*x1^7 + 11*x1^5*x2 + 5*x1^3*x2^2 + 3*x1^4*x3 + 2*x1*x2^3 + x1^2*x2*x3
>>> y = W.from_reduced_word([Integer(3),Integer(1),Integer(2),Integer(0),Integer(3),Integer(1),Integer(0)])
>>> y.stanley_symmetric_function_as_polynomial()  # long time
8*x1^7 + 4*x1^5*x2 + 2*x1^3*x2^2 + x1*x2^3

>>> W = WeylGroup(['C',Integer(3),Integer(1)])
>>> W.from_reduced_word([Integer(0),Integer(2),Integer(1),Integer(0)]).stanley_symmetric_function_as_polynomial()
32*x1^4 + 16*x1^2*x2 + 8*x2^2 + 4*x1*x3

>>> W = WeylGroup(['B',Integer(3),Integer(1)])
>>> W.from_reduced_word([Integer(3),Integer(2),Integer(1)]).stanley_symmetric_function_as_polynomial()
2*x1^3 + x1*x2 + 1/2*x3
W = WeylGroup(['A', 3, 1])
W.from_reduced_word([]).stanley_symmetric_function_as_polynomial()
W.from_reduced_word([1]).stanley_symmetric_function_as_polynomial()
W.from_reduced_word([1,2]).stanley_symmetric_function_as_polynomial()
W.from_reduced_word([2,1]).stanley_symmetric_function_as_polynomial()
W.from_reduced_word([1,2,1]).stanley_symmetric_function_as_polynomial()
W.from_reduced_word([1,2,1,0]).stanley_symmetric_function_as_polynomial()
x = W.from_reduced_word([1,2,3,1,2,1,0])
x.stanley_symmetric_function_as_polynomial()  # long time
y = W.from_reduced_word([3,1,2,0,3,1,0])
y.stanley_symmetric_function_as_polynomial()  # long time
W = WeylGroup(['C',3,1])
W.from_reduced_word([0,2,1,0]).stanley_symmetric_function_as_polynomial()
W = WeylGroup(['B',3,1])
W.from_reduced_word([3,2,1]).stanley_symmetric_function_as_polynomial()

Algorithm: Induction on the left Pieri factors. Note that this induction preserves subsets of W which are stable by taking right factors, and in particular Grassmanian elements.

Finite[source]

alias of FiniteWeylGroups

class ParentMethods[source]

Bases: object

bruhat_cone(x, y, side='upper', backend='cdd')[source]

Return the (upper or lower) Bruhat cone associated to the interval [x,y].

To a cover relation vw in strong Bruhat order you can assign a positive root β given by the unique reflection sβ such that sβv=w.

The upper Bruhat cone of the interval [x,y] is the non-empty, polyhedral cone generated by the roots corresponding to xa for all atoms a in the interval. The lower Bruhat cone of the interval [x,y] is the non-empty, polyhedral cone generated by the roots corresponding to cy for all coatoms c in the interval.

INPUT:

  • x – an element in the group W

  • y – an element in the group W

  • side – (default: 'upper') must be one of the following:

    • 'upper' – return the upper Bruhat cone of the interval [x, y]

    • 'lower' – return the lower Bruhat cone of the interval [x, y]

  • backend – string (default: 'cdd'); the backend to use to create the polyhedron

EXAMPLES:

sage: W = WeylGroup(['A',2])
sage: x = W.from_reduced_word([1])
sage: y = W.w0
sage: W.bruhat_cone(x, y)
A 2-dimensional polyhedron in QQ^3
 defined as the convex hull of 1 vertex and 2 rays

sage: W = WeylGroup(['E',6])
sage: x = W.one()
sage: y = W.w0
sage: W.bruhat_cone(x, y, side='lower')
A 6-dimensional polyhedron in QQ^8
 defined as the convex hull of 1 vertex and 6 rays
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(2)])
>>> x = W.from_reduced_word([Integer(1)])
>>> y = W.w0
>>> W.bruhat_cone(x, y)
A 2-dimensional polyhedron in QQ^3
 defined as the convex hull of 1 vertex and 2 rays

>>> W = WeylGroup(['E',Integer(6)])
>>> x = W.one()
>>> y = W.w0
>>> W.bruhat_cone(x, y, side='lower')
A 6-dimensional polyhedron in QQ^8
 defined as the convex hull of 1 vertex and 6 rays
W = WeylGroup(['A',2])
x = W.from_reduced_word([1])
y = W.w0
W.bruhat_cone(x, y)
W = WeylGroup(['E',6])
x = W.one()
y = W.w0
W.bruhat_cone(x, y, side='lower')

REFERENCES:

coxeter_matrix()[source]

Return the Coxeter matrix associated to self.

EXAMPLES:

sage: G = WeylGroup(['A',3])
sage: G.coxeter_matrix()
[1 3 2]
[3 1 3]
[2 3 1]
>>> from sage.all import *
>>> G = WeylGroup(['A',Integer(3)])
>>> G.coxeter_matrix()
[1 3 2]
[3 1 3]
[2 3 1]
G = WeylGroup(['A',3])
G.coxeter_matrix()
pieri_factors(*args, **keywords)[source]

Return the set of Pieri factors in this Weyl group.

For any type, the set of Pieri factors forms a lower ideal in Bruhat order, generated by all the conjugates of some special element of the Weyl group. In type An, this special element is sns1, and the conjugates are obtained by rotating around this reduced word.

These are used to compute Stanley symmetric functions.

EXAMPLES:

sage: W = WeylGroup(['A',5,1])
sage: PF = W.pieri_factors()
sage: PF.cardinality()
63

sage: W = WeylGroup(['B',3])
sage: PF = W.pieri_factors()
sage: sorted([w.reduced_word() for w in PF])
[[],
 [1],
 [1, 2],
 [1, 2, 1],
 [1, 2, 3],
 [1, 2, 3, 1],
 [1, 2, 3, 2],
 [1, 2, 3, 2, 1],
 [2],
 [2, 1],
 [2, 3],
 [2, 3, 1],
 [2, 3, 2],
 [2, 3, 2, 1],
 [3],
 [3, 1],
 [3, 1, 2],
 [3, 1, 2, 1],
 [3, 2],
 [3, 2, 1]]
sage: W = WeylGroup(['C',4,1])
sage: PF = W.pieri_factors()
sage: W.from_reduced_word([3,2,0]) in PF
True
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(5),Integer(1)])
>>> PF = W.pieri_factors()
>>> PF.cardinality()
63

>>> W = WeylGroup(['B',Integer(3)])
>>> PF = W.pieri_factors()
>>> sorted([w.reduced_word() for w in PF])
[[],
 [1],
 [1, 2],
 [1, 2, 1],
 [1, 2, 3],
 [1, 2, 3, 1],
 [1, 2, 3, 2],
 [1, 2, 3, 2, 1],
 [2],
 [2, 1],
 [2, 3],
 [2, 3, 1],
 [2, 3, 2],
 [2, 3, 2, 1],
 [3],
 [3, 1],
 [3, 1, 2],
 [3, 1, 2, 1],
 [3, 2],
 [3, 2, 1]]
>>> W = WeylGroup(['C',Integer(4),Integer(1)])
>>> PF = W.pieri_factors()
>>> W.from_reduced_word([Integer(3),Integer(2),Integer(0)]) in PF
True
W = WeylGroup(['A',5,1])
PF = W.pieri_factors()
PF.cardinality()
W = WeylGroup(['B',3])
PF = W.pieri_factors()
sorted([w.reduced_word() for w in PF])
W = WeylGroup(['C',4,1])
PF = W.pieri_factors()
W.from_reduced_word([3,2,0]) in PF
quantum_bruhat_graph(index_set=())[source]

Return the quantum Bruhat graph of the quotient of the Weyl group by a parabolic subgroup WJ.

INPUT:

  • index_set – (default: ()) a tuple J of nodes of the Dynkin diagram

By default, the value for index_set indicates that the subgroup is trivial and the quotient is the full Weyl group.

EXAMPLES:

sage: W = WeylGroup(['A',3], prefix='s')
sage: g = W.quantum_bruhat_graph((1,3))
sage: g
Parabolic Quantum Bruhat Graph of Weyl Group of type ['A', 3]
 (as a matrix group acting on the ambient space)
 for nodes (1, 3): Digraph on 6 vertices
sage: g.vertices(sort=True)
[s2*s3*s1*s2, s3*s1*s2, s1*s2, s3*s2, s2, 1]
sage: g.edges(sort=True)
[(s2*s3*s1*s2, s2, alpha[2]),
 (s3*s1*s2, s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3]),
 (s3*s1*s2, 1, alpha[2]),
 (s1*s2, s3*s1*s2, alpha[2] + alpha[3]),
 (s3*s2, s3*s1*s2, alpha[1] + alpha[2]),
 (s2, s1*s2, alpha[1] + alpha[2]),
 (s2, s3*s2, alpha[2] + alpha[3]),
 (1, s2, alpha[2])]
sage: W = WeylGroup(['A',3,1], prefix='s')
sage: g = W.quantum_bruhat_graph()
Traceback (most recent call last):
...
ValueError: the Cartan type ['A', 3, 1] is not finite
>>> from sage.all import *
>>> W = WeylGroup(['A',Integer(3)], prefix='s')
>>> g = W.quantum_bruhat_graph((Integer(1),Integer(3)))
>>> g
Parabolic Quantum Bruhat Graph of Weyl Group of type ['A', 3]
 (as a matrix group acting on the ambient space)
 for nodes (1, 3): Digraph on 6 vertices
>>> g.vertices(sort=True)
[s2*s3*s1*s2, s3*s1*s2, s1*s2, s3*s2, s2, 1]
>>> g.edges(sort=True)
[(s2*s3*s1*s2, s2, alpha[2]),
 (s3*s1*s2, s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3]),
 (s3*s1*s2, 1, alpha[2]),
 (s1*s2, s3*s1*s2, alpha[2] + alpha[3]),
 (s3*s2, s3*s1*s2, alpha[1] + alpha[2]),
 (s2, s1*s2, alpha[1] + alpha[2]),
 (s2, s3*s2, alpha[2] + alpha[3]),
 (1, s2, alpha[2])]
>>> W = WeylGroup(['A',Integer(3),Integer(1)], prefix='s')
>>> g = W.quantum_bruhat_graph()
Traceback (most recent call last):
...
ValueError: the Cartan type ['A', 3, 1] is not finite
W = WeylGroup(['A',3], prefix='s')
g = W.quantum_bruhat_graph((1,3))
g
g.vertices(sort=True)
g.edges(sort=True)
W = WeylGroup(['A',3,1], prefix='s')
g = W.quantum_bruhat_graph()
additional_structure()[source]

Return None.

Indeed, the category of Weyl groups defines no additional structure: Weyl groups are a special class of Coxeter groups.

Todo

Should this category be a CategoryWithAxiom?

EXAMPLES:

sage: WeylGroups().additional_structure()
>>> from sage.all import *
>>> WeylGroups().additional_structure()
WeylGroups().additional_structure()
super_categories()[source]

EXAMPLES:

sage: WeylGroups().super_categories()
[Category of Coxeter groups]
>>> from sage.all import *
>>> WeylGroups().super_categories()
[Category of Coxeter groups]
WeylGroups().super_categories()