Bases: sage.categories.category_singleton.Category_singleton
The category of Weyl groups
See: http://en.wikipedia.org/wiki/Weyl_groups
EXAMPLES:
sage: WeylGroups() # todo: uppercase for Weyl
Category of weyl groups
sage: WeylGroups().super_categories()
[Category of coxeter groups]
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)
This one will eventually be also in this category:
sage: SymmetricGroup(4)
Symmetric group of order 4! as a permutation group
TESTS:
sage: C = WeylGroups()
sage: TestSuite(C).run()
Returns all 2-tuples (v, ) where v is covered by self and
is the positive coroot such that self = v
where
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])]
Returns all 2-tuples (v, ) where v is covers self and
is the positive coroot such that self = v
where
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])]
Returns the set of inversions of self.
INPUT:
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]]
Returns whether self is a Pieri factor, as used for computing Stanley symmetric functions.
See also:
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
Returns all factorizations of self as , where
is a Pieri factor and
is an element of the Weyl group.
See also:
- WeylGroups.ParentMethods.pieri_factors()
- sage.combinat.root_system.pieri_factors
EXAMPLES:
If we take the maximal element of a strict parabolic
subgroup of type
, then the Pieri
factorizations are in correspondence with all Pieri factors, and
there are
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
Returns the successors of self in the parabolic quantum Bruhat graph.
INPUT:
self – a Weyl group element, which is assumed to be of minimum length in its coset with respect to the parabolic subgroup
the default value indicates that the subgroup is the identity
successor and is the positive root associated with the successor relation.
quantum_only – (default: False) if True, returns only the quantum successors
Returns 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.
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]
Returns the coroot associated with the reflection self.
EXAMPLES:
sage: W=WeylGroup(['C',2],prefix="s")
sage: r=W.from_reduced_word([1,2,1])
sage: r.reflection_to_coroot()
alphacheck[1] + alphacheck[2]
sage: r=W.from_reduced_word([1,2])
sage: r.reflection_to_coroot()
Traceback (most recent call last):
...
ValueError: s1*s2 is not a reflection
Returns the root associated with the reflection self.
EXAMPLES:
sage: W=WeylGroup(['C',2],prefix="s")
sage: r=W.from_reduced_word([1,2,1])
sage: r.reflection_to_root()
2*alpha[1] + alpha[2]
sage: r=W.from_reduced_word([1,2])
sage: r.reflection_to_root()
Traceback (most recent call last):
...
ValueError: s1*s2 is not a reflection
Returns the affine Stanley symmetric function indexed by
. Stanley symmetric functions are defined as generating
series of the factorizations of
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: 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]
* :meth:stanley_symmetric_function_as_polynomial`
* :meth:`WeylGroups.ParentMethods.pieri_factors`
* :mod:`sage.combinat.root_system.pieri_factors`
REFERENCES:
[BH1994]
- Billey, M. Haiman. Schubert polynomials for the classical groups. J. Amer. Math. Soc., 1994.
[Lam2008]
- Lam. Schubert polynomials for the affine Grassmannian. J. Amer. Math. Soc., 2008.
[LSS2009]
- 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]
- Pon. Types B and D affine Stanley symmetric functions, unpublished PhD Thesis, UC Davis, 2010.
Returns 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
of a Weyl group
- max_length – a non negative integer or infinity (default: infinity)
Returns the generating series for the Pieri factorizations
, where
is a Pieri factor for
all
,
and
max_length`geq l(u_1) geq dots geq l(u_k)`.
A factorization contributes a monomial of
the form
, with coefficient given by
, where
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: W.from_reduced_word([1,2,3,1,2,1,0]).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: W.from_reduced_word([3,1,2,0,3,1,0]).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
Algorithm: Induction on the left Pieri factors. Note that
this induction preserves subsets of which are stable
by taking right factors, and in particular Grassmanian
elements.
Returns 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 , this
special element is
, and the conjugates are
obtained by rotating around this reduced word.
These are used to compute Stanley symmetric functions.
See also:
- :meth:WeylGroups.ElementMethods.stanley_symmetric_function`
- sage.combinat.root_system.pieri_factors
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: [w.reduced_word() for w in PF]
[[1, 2, 3, 2, 1], [1, 2, 3, 2], [2, 3, 2], [2, 3], [3, 1, 2, 1], [1, 2, 1], [2], [1, 2], [1], [], [2, 1], [3, 2, 1], [3, 1], [2, 3, 2, 1], [3], [3, 2], [1, 2, 3], [1, 2, 3, 1], [3, 1, 2], [2, 3, 1]]
sage: W = WeylGroup(['C',4,1])
sage: PF = W.pieri_factors()
sage: W.from_reduced_word([3,2,0]) in PF
True
Returns the quantum Bruhat graph of the quotient of the Weyl group by a parabolic subgroup.
INPUT:
the default value indicates that the subgroup is trivial and the quotient is the 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()
[s2*s3*s1*s2, s3*s1*s2, s1*s2, s3*s2, s2, 1]
sage: g.edges()
[(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
EXAMPLES:
sage: WeylGroups().super_categories()
[Category of coxeter groups]