Descent Algebras¶
AUTHORS:
Travis Scrimshaw (2013-07-28): Initial version
- class sage.combinat.descent_algebra.DescentAlgebra(R, n)[source]¶
Bases:
UniqueRepresentation
,Parent
Solomon’s descent algebra.
The descent algebra
over a ring is a subalgebra of the symmetric group algebra . (The product in the latter algebra is defined by for any two permutations and in and every . The algebra inherits this product.)There are three bases currently implemented for
:the standard basis
of (sums of) descent classes, indexed by subsets of ,the subset basis
, indexed by compositions of ,the idempotent basis
, indexed by compositions of , which is used to construct the mutually orthogonal idempotents of the symmetric group algebra.
The idempotent basis is only defined when
is a -algebra.We follow the notations and conventions in [GR1989], apart from the order of multiplication being different from the one used in that article. Schocker’s exposition [Sch2004], in turn, uses the same order of multiplication as we are, but has different notations for the bases.
INPUT:
R
– the base ringn
– nonnegative integer
REFERENCES:
EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: D = DA.D(); D Descent algebra of 4 over Rational Field in the standard basis sage: B = DA.B(); B Descent algebra of 4 over Rational Field in the subset basis sage: I = DA.I(); I Descent algebra of 4 over Rational Field in the idempotent basis sage: basis_B = B.basis() sage: elt = basis_B[Composition([1,2,1])] + 4*basis_B[Composition([1,3])]; elt B[1, 2, 1] + 4*B[1, 3] sage: D(elt) 5*D{} + 5*D{1} + D{1, 3} + D{3} sage: I(elt) 7/6*I[1, 1, 1, 1] + 2*I[1, 1, 2] + 3*I[1, 2, 1] + 4*I[1, 3]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> D = DA.D(); D Descent algebra of 4 over Rational Field in the standard basis >>> B = DA.B(); B Descent algebra of 4 over Rational Field in the subset basis >>> I = DA.I(); I Descent algebra of 4 over Rational Field in the idempotent basis >>> basis_B = B.basis() >>> elt = basis_B[Composition([Integer(1),Integer(2),Integer(1)])] + Integer(4)*basis_B[Composition([Integer(1),Integer(3)])]; elt B[1, 2, 1] + 4*B[1, 3] >>> D(elt) 5*D{} + 5*D{1} + D{1, 3} + D{3} >>> I(elt) 7/6*I[1, 1, 1, 1] + 2*I[1, 1, 2] + 3*I[1, 2, 1] + 4*I[1, 3]
DA = DescentAlgebra(QQ, 4) D = DA.D(); D B = DA.B(); B I = DA.I(); I basis_B = B.basis() elt = basis_B[Composition([1,2,1])] + 4*basis_B[Composition([1,3])]; elt D(elt) I(elt)
As syntactic sugar, one can use the notation
D[i,...,l]
to construct elements of the basis; note that for the empty set one must useD[[]]
due to Python’s syntax:sage: D[[]] + D[2] + 2*D[1,2] D{} + 2*D{1, 2} + D{2}
>>> from sage.all import * >>> D[[]] + D[Integer(2)] + Integer(2)*D[Integer(1),Integer(2)] D{} + 2*D{1, 2} + D{2}
D[[]] + D[2] + 2*D[1,2]
The same syntax works for the other bases:
sage: I[1,2,1] + 3*I[4] + 2*I[3,1] I[1, 2, 1] + 2*I[3, 1] + 3*I[4]
>>> from sage.all import * >>> I[Integer(1),Integer(2),Integer(1)] + Integer(3)*I[Integer(4)] + Integer(2)*I[Integer(3),Integer(1)] I[1, 2, 1] + 2*I[3, 1] + 3*I[4]
I[1,2,1] + 3*I[4] + 2*I[3,1]
- class B(alg, prefix='B')[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The subset basis of a descent algebra (indexed by compositions).
The subset basis
of is formed bywhere
is thestandard basis
. However it is more natural to index the subset basis by compositions of under the bijection (where ), which is what Sage uses to index the basis.The basis element
is denoted in [Sch2004].By using compositions of
, the product becomes a sum over the nonnegative-integer matrices with row sum and column sum . The summand corresponding to is , where is the composition obtained by reading row-by-row from left-to-right and top-to-bottom and removing all zeroes. This multiplication rule is commonly called “Solomon’s Mackey formula”.EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: B = DA.B() sage: list(B.basis()) [B[1, 1, 1, 1], B[1, 1, 2], B[1, 2, 1], B[1, 3], B[2, 1, 1], B[2, 2], B[3, 1], B[4]]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> B = DA.B() >>> list(B.basis()) [B[1, 1, 1, 1], B[1, 1, 2], B[1, 2, 1], B[1, 3], B[2, 1, 1], B[2, 2], B[3, 1], B[4]]
DA = DescentAlgebra(QQ, 4) B = DA.B() list(B.basis())
- one_basis()[source]¶
Return the identity element which is the composition
, as perAlgebrasWithBasis.ParentMethods.one_basis
.EXAMPLES:
sage: DescentAlgebra(QQ, 4).B().one_basis() [4] sage: DescentAlgebra(QQ, 0).B().one_basis() [] sage: all( U * DescentAlgebra(QQ, 3).B().one() == U ....: for U in DescentAlgebra(QQ, 3).B().basis() ) True
>>> from sage.all import * >>> DescentAlgebra(QQ, Integer(4)).B().one_basis() [4] >>> DescentAlgebra(QQ, Integer(0)).B().one_basis() [] >>> all( U * DescentAlgebra(QQ, Integer(3)).B().one() == U ... for U in DescentAlgebra(QQ, Integer(3)).B().basis() ) True
DescentAlgebra(QQ, 4).B().one_basis() DescentAlgebra(QQ, 0).B().one_basis() all( U * DescentAlgebra(QQ, 3).B().one() == U for U in DescentAlgebra(QQ, 3).B().basis() )
- product_on_basis(p, q)[source]¶
Return
, where and are compositions of .EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: B = DA.B() sage: p = Composition([1,2,1]) sage: q = Composition([3,1]) sage: B.product_on_basis(p, q) B[1, 1, 1, 1] + 2*B[1, 2, 1]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> B = DA.B() >>> p = Composition([Integer(1),Integer(2),Integer(1)]) >>> q = Composition([Integer(3),Integer(1)]) >>> B.product_on_basis(p, q) B[1, 1, 1, 1] + 2*B[1, 2, 1]
DA = DescentAlgebra(QQ, 4) B = DA.B() p = Composition([1,2,1]) q = Composition([3,1]) B.product_on_basis(p, q)
- to_D_basis(p)[source]¶
Return
as a linear combination of -basis elements.EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: B = DA.B() sage: D = DA.D() sage: list(map(D, B.basis())) # indirect doctest [D{} + D{1} + D{1, 2} + D{1, 2, 3} + D{1, 3} + D{2} + D{2, 3} + D{3}, D{} + D{1} + D{1, 2} + D{2}, D{} + D{1} + D{1, 3} + D{3}, D{} + D{1}, D{} + D{2} + D{2, 3} + D{3}, D{} + D{2}, D{} + D{3}, D{}]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> B = DA.B() >>> D = DA.D() >>> list(map(D, B.basis())) # indirect doctest [D{} + D{1} + D{1, 2} + D{1, 2, 3} + D{1, 3} + D{2} + D{2, 3} + D{3}, D{} + D{1} + D{1, 2} + D{2}, D{} + D{1} + D{1, 3} + D{3}, D{} + D{1}, D{} + D{2} + D{2, 3} + D{3}, D{} + D{2}, D{} + D{3}, D{}]
DA = DescentAlgebra(QQ, 4) B = DA.B() D = DA.D() list(map(D, B.basis())) # indirect doctest
- to_I_basis(p)[source]¶
Return
as a linear combination of -basis elements.This is done using the formula
where
is the refinement order and is defined as follows: When , we can write as a concatenation with each being a composition of the -th entry of , and then we set to be , where denotes the number of parts of any composition .EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: B = DA.B() sage: I = DA.I() sage: list(map(I, B.basis())) # indirect doctest [I[1, 1, 1, 1], 1/2*I[1, 1, 1, 1] + I[1, 1, 2], 1/2*I[1, 1, 1, 1] + I[1, 2, 1], 1/6*I[1, 1, 1, 1] + 1/2*I[1, 1, 2] + 1/2*I[1, 2, 1] + I[1, 3], 1/2*I[1, 1, 1, 1] + I[2, 1, 1], 1/4*I[1, 1, 1, 1] + 1/2*I[1, 1, 2] + 1/2*I[2, 1, 1] + I[2, 2], 1/6*I[1, 1, 1, 1] + 1/2*I[1, 2, 1] + 1/2*I[2, 1, 1] + I[3, 1], 1/24*I[1, 1, 1, 1] + 1/6*I[1, 1, 2] + 1/6*I[1, 2, 1] + 1/2*I[1, 3] + 1/6*I[2, 1, 1] + 1/2*I[2, 2] + 1/2*I[3, 1] + I[4]]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> B = DA.B() >>> I = DA.I() >>> list(map(I, B.basis())) # indirect doctest [I[1, 1, 1, 1], 1/2*I[1, 1, 1, 1] + I[1, 1, 2], 1/2*I[1, 1, 1, 1] + I[1, 2, 1], 1/6*I[1, 1, 1, 1] + 1/2*I[1, 1, 2] + 1/2*I[1, 2, 1] + I[1, 3], 1/2*I[1, 1, 1, 1] + I[2, 1, 1], 1/4*I[1, 1, 1, 1] + 1/2*I[1, 1, 2] + 1/2*I[2, 1, 1] + I[2, 2], 1/6*I[1, 1, 1, 1] + 1/2*I[1, 2, 1] + 1/2*I[2, 1, 1] + I[3, 1], 1/24*I[1, 1, 1, 1] + 1/6*I[1, 1, 2] + 1/6*I[1, 2, 1] + 1/2*I[1, 3] + 1/6*I[2, 1, 1] + 1/2*I[2, 2] + 1/2*I[3, 1] + I[4]]
DA = DescentAlgebra(QQ, 4) B = DA.B() I = DA.I() list(map(I, B.basis())) # indirect doctest
- to_nsym(p)[source]¶
Return
as an element in , the non-commutative symmetric functions.This maps
to where denotes the Complete basis of .EXAMPLES:
sage: B = DescentAlgebra(QQ, 4).B() sage: S = NonCommutativeSymmetricFunctions(QQ).Complete() sage: list(map(S, B.basis())) # indirect doctest [S[1, 1, 1, 1], S[1, 1, 2], S[1, 2, 1], S[1, 3], S[2, 1, 1], S[2, 2], S[3, 1], S[4]]
>>> from sage.all import * >>> B = DescentAlgebra(QQ, Integer(4)).B() >>> S = NonCommutativeSymmetricFunctions(QQ).Complete() >>> list(map(S, B.basis())) # indirect doctest [S[1, 1, 1, 1], S[1, 1, 2], S[1, 2, 1], S[1, 3], S[2, 1, 1], S[2, 2], S[3, 1], S[4]]
B = DescentAlgebra(QQ, 4).B() S = NonCommutativeSymmetricFunctions(QQ).Complete() list(map(S, B.basis())) # indirect doctest
- class D(alg, prefix='D')[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The standard basis of a descent algebra.
This basis is indexed by
, and the basis vector indexed by is the sum of all permutations, taken in the symmetric group algebra , whose descent set is . We denote this basis vector by .Occasionally this basis appears in literature but indexed by compositions of
rather than subsets of . The equivalence between these two indexings is owed to the bijection from the power set of to the set of all compositions of which sends every subset of (with ) to the composition .The basis element corresponding to a composition
(or to the subset of ) is denoted in [Sch2004].EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: D = DA.D() sage: list(D.basis()) [D{}, D{1}, D{2}, D{3}, D{1, 2}, D{1, 3}, D{2, 3}, D{1, 2, 3}] sage: DA = DescentAlgebra(QQ, 0) sage: D = DA.D() sage: list(D.basis()) [D{}]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> D = DA.D() >>> list(D.basis()) [D{}, D{1}, D{2}, D{3}, D{1, 2}, D{1, 3}, D{2, 3}, D{1, 2, 3}] >>> DA = DescentAlgebra(QQ, Integer(0)) >>> D = DA.D() >>> list(D.basis()) [D{}]
DA = DescentAlgebra(QQ, 4) D = DA.D() list(D.basis()) DA = DescentAlgebra(QQ, 0) D = DA.D() list(D.basis())
- one_basis()[source]¶
Return the identity element, as per
AlgebrasWithBasis.ParentMethods.one_basis
.EXAMPLES:
sage: DescentAlgebra(QQ, 4).D().one_basis() () sage: DescentAlgebra(QQ, 0).D().one_basis() () sage: all( U * DescentAlgebra(QQ, 3).D().one() == U ....: for U in DescentAlgebra(QQ, 3).D().basis() ) True
>>> from sage.all import * >>> DescentAlgebra(QQ, Integer(4)).D().one_basis() () >>> DescentAlgebra(QQ, Integer(0)).D().one_basis() () >>> all( U * DescentAlgebra(QQ, Integer(3)).D().one() == U ... for U in DescentAlgebra(QQ, Integer(3)).D().basis() ) True
DescentAlgebra(QQ, 4).D().one_basis() DescentAlgebra(QQ, 0).D().one_basis() all( U * DescentAlgebra(QQ, 3).D().one() == U for U in DescentAlgebra(QQ, 3).D().basis() )
- product_on_basis(S, T)[source]¶
Return
, where and are subsets of .EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: D = DA.D() sage: D.product_on_basis((1, 3), (2,)) D{} + D{1} + D{1, 2} + 2*D{1, 2, 3} + D{1, 3} + D{2} + D{2, 3} + D{3}
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> D = DA.D() >>> D.product_on_basis((Integer(1), Integer(3)), (Integer(2),)) D{} + D{1} + D{1, 2} + 2*D{1, 2, 3} + D{1, 3} + D{2} + D{2, 3} + D{3}
DA = DescentAlgebra(QQ, 4) D = DA.D() D.product_on_basis((1, 3), (2,))
- to_B_basis(S)[source]¶
Return
as a linear combination of -basis elements.EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: D = DA.D() sage: B = DA.B() sage: list(map(B, D.basis())) # indirect doctest [B[4], B[1, 3] - B[4], B[2, 2] - B[4], B[3, 1] - B[4], B[1, 1, 2] - B[1, 3] - B[2, 2] + B[4], B[1, 2, 1] - B[1, 3] - B[3, 1] + B[4], B[2, 1, 1] - B[2, 2] - B[3, 1] + B[4], B[1, 1, 1, 1] - B[1, 1, 2] - B[1, 2, 1] + B[1, 3] - B[2, 1, 1] + B[2, 2] + B[3, 1] - B[4]]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> D = DA.D() >>> B = DA.B() >>> list(map(B, D.basis())) # indirect doctest [B[4], B[1, 3] - B[4], B[2, 2] - B[4], B[3, 1] - B[4], B[1, 1, 2] - B[1, 3] - B[2, 2] + B[4], B[1, 2, 1] - B[1, 3] - B[3, 1] + B[4], B[2, 1, 1] - B[2, 2] - B[3, 1] + B[4], B[1, 1, 1, 1] - B[1, 1, 2] - B[1, 2, 1] + B[1, 3] - B[2, 1, 1] + B[2, 2] + B[3, 1] - B[4]]
DA = DescentAlgebra(QQ, 4) D = DA.D() B = DA.B() list(map(B, D.basis())) # indirect doctest
- to_symmetric_group_algebra_on_basis(S)[source]¶
Return
as a linear combination of basis elements in the symmetric group algebra.EXAMPLES:
sage: D = DescentAlgebra(QQ, 4).D() sage: [D.to_symmetric_group_algebra_on_basis(tuple(b)) ....: for b in Subsets(3)] [[1, 2, 3, 4], [2, 1, 3, 4] + [3, 1, 2, 4] + [4, 1, 2, 3], [1, 3, 2, 4] + [1, 4, 2, 3] + [2, 3, 1, 4] + [2, 4, 1, 3] + [3, 4, 1, 2], [1, 2, 4, 3] + [1, 3, 4, 2] + [2, 3, 4, 1], [3, 2, 1, 4] + [4, 2, 1, 3] + [4, 3, 1, 2], [2, 1, 4, 3] + [3, 1, 4, 2] + [3, 2, 4, 1] + [4, 1, 3, 2] + [4, 2, 3, 1], [1, 4, 3, 2] + [2, 4, 3, 1] + [3, 4, 2, 1], [4, 3, 2, 1]]
>>> from sage.all import * >>> D = DescentAlgebra(QQ, Integer(4)).D() >>> [D.to_symmetric_group_algebra_on_basis(tuple(b)) ... for b in Subsets(Integer(3))] [[1, 2, 3, 4], [2, 1, 3, 4] + [3, 1, 2, 4] + [4, 1, 2, 3], [1, 3, 2, 4] + [1, 4, 2, 3] + [2, 3, 1, 4] + [2, 4, 1, 3] + [3, 4, 1, 2], [1, 2, 4, 3] + [1, 3, 4, 2] + [2, 3, 4, 1], [3, 2, 1, 4] + [4, 2, 1, 3] + [4, 3, 1, 2], [2, 1, 4, 3] + [3, 1, 4, 2] + [3, 2, 4, 1] + [4, 1, 3, 2] + [4, 2, 3, 1], [1, 4, 3, 2] + [2, 4, 3, 1] + [3, 4, 2, 1], [4, 3, 2, 1]]
D = DescentAlgebra(QQ, 4).D() [D.to_symmetric_group_algebra_on_basis(tuple(b)) for b in Subsets(3)]
- class I(alg, prefix='I')[source]¶
Bases:
CombinatorialFreeModule
,BindableClass
The idempotent basis of a descent algebra.
The idempotent basis
is a basis for whenever the ground ring is a -algebra. One way to compute it is using the formula (Theorem 3.3 in [GR1989])where
is the refinement order and denotes the number of parts of any composition , and where is defined as follows: When , we can write as a concatenation with each being a composition of the -th entry of , and then we set to be the product .Let
denote the partition obtained from a composition by sorting. This basis is called the idempotent basis since for any such that , we have:where
denotes , and where is the stabilizer of in . (This is part of Theorem 4.2 in [GR1989].)It is also straightforward to compute the idempotents
for the symmetric group algebra by the formula (Theorem 3.2 in [GR1989]):Note
The basis elements are not orthogonal idempotents.
EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: I = DA.I() sage: list(I.basis()) [I[1, 1, 1, 1], I[1, 1, 2], I[1, 2, 1], I[1, 3], I[2, 1, 1], I[2, 2], I[3, 1], I[4]]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> I = DA.I() >>> list(I.basis()) [I[1, 1, 1, 1], I[1, 1, 2], I[1, 2, 1], I[1, 3], I[2, 1, 1], I[2, 2], I[3, 1], I[4]]
DA = DescentAlgebra(QQ, 4) I = DA.I() list(I.basis())
- idempotent(la)[source]¶
Return the idempotent corresponding to the partition
la
of .EXAMPLES:
sage: I = DescentAlgebra(QQ, 4).I() sage: E = I.idempotent([3,1]); E 1/2*I[1, 3] + 1/2*I[3, 1] sage: E*E == E True sage: E2 = I.idempotent([2,1,1]); E2 1/6*I[1, 1, 2] + 1/6*I[1, 2, 1] + 1/6*I[2, 1, 1] sage: E2*E2 == E2 True sage: E*E2 == I.zero() True
>>> from sage.all import * >>> I = DescentAlgebra(QQ, Integer(4)).I() >>> E = I.idempotent([Integer(3),Integer(1)]); E 1/2*I[1, 3] + 1/2*I[3, 1] >>> E*E == E True >>> E2 = I.idempotent([Integer(2),Integer(1),Integer(1)]); E2 1/6*I[1, 1, 2] + 1/6*I[1, 2, 1] + 1/6*I[2, 1, 1] >>> E2*E2 == E2 True >>> E*E2 == I.zero() True
I = DescentAlgebra(QQ, 4).I() E = I.idempotent([3,1]); E E*E == E E2 = I.idempotent([2,1,1]); E2 E2*E2 == E2 E*E2 == I.zero()
- one()[source]¶
Return the identity element, which is
, in the basis.EXAMPLES:
sage: DescentAlgebra(QQ, 4).I().one() 1/24*I[1, 1, 1, 1] + 1/6*I[1, 1, 2] + 1/6*I[1, 2, 1] + 1/2*I[1, 3] + 1/6*I[2, 1, 1] + 1/2*I[2, 2] + 1/2*I[3, 1] + I[4] sage: DescentAlgebra(QQ, 0).I().one() I[]
>>> from sage.all import * >>> DescentAlgebra(QQ, Integer(4)).I().one() 1/24*I[1, 1, 1, 1] + 1/6*I[1, 1, 2] + 1/6*I[1, 2, 1] + 1/2*I[1, 3] + 1/6*I[2, 1, 1] + 1/2*I[2, 2] + 1/2*I[3, 1] + I[4] >>> DescentAlgebra(QQ, Integer(0)).I().one() I[]
DescentAlgebra(QQ, 4).I().one() DescentAlgebra(QQ, 0).I().one()
- one_basis()[source]¶
The element
is not (generally) a basis vector in the basis, thus this raises aTypeError
.EXAMPLES:
sage: DescentAlgebra(QQ, 4).I().one_basis() Traceback (most recent call last): ... TypeError: 1 is not a basis element in the I basis
>>> from sage.all import * >>> DescentAlgebra(QQ, Integer(4)).I().one_basis() Traceback (most recent call last): ... TypeError: 1 is not a basis element in the I basis
DescentAlgebra(QQ, 4).I().one_basis()
- product_on_basis(p, q)[source]¶
Return
, where and are compositions of .EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: I = DA.I() sage: p = Composition([1,2,1]) sage: q = Composition([3,1]) sage: I.product_on_basis(p, q) 0 sage: I.product_on_basis(p, p) 2*I[1, 2, 1]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> I = DA.I() >>> p = Composition([Integer(1),Integer(2),Integer(1)]) >>> q = Composition([Integer(3),Integer(1)]) >>> I.product_on_basis(p, q) 0 >>> I.product_on_basis(p, p) 2*I[1, 2, 1]
DA = DescentAlgebra(QQ, 4) I = DA.I() p = Composition([1,2,1]) q = Composition([3,1]) I.product_on_basis(p, q) I.product_on_basis(p, p)
- to_B_basis(p)[source]¶
Return
as a linear combination of -basis elements.This is computed using the formula (Theorem 3.3 in [GR1989])
where
is the refinement order and denotes the number of parts of any composition , and where is defined as follows: When , we can write as a concatenation with each being a composition of the -th entry of , and then we set to be .EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: B = DA.B() sage: I = DA.I() sage: list(map(B, I.basis())) # indirect doctest [B[1, 1, 1, 1], -1/2*B[1, 1, 1, 1] + B[1, 1, 2], -1/2*B[1, 1, 1, 1] + B[1, 2, 1], 1/3*B[1, 1, 1, 1] - 1/2*B[1, 1, 2] - 1/2*B[1, 2, 1] + B[1, 3], -1/2*B[1, 1, 1, 1] + B[2, 1, 1], 1/4*B[1, 1, 1, 1] - 1/2*B[1, 1, 2] - 1/2*B[2, 1, 1] + B[2, 2], 1/3*B[1, 1, 1, 1] - 1/2*B[1, 2, 1] - 1/2*B[2, 1, 1] + B[3, 1], -1/4*B[1, 1, 1, 1] + 1/3*B[1, 1, 2] + 1/3*B[1, 2, 1] - 1/2*B[1, 3] + 1/3*B[2, 1, 1] - 1/2*B[2, 2] - 1/2*B[3, 1] + B[4]]
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> B = DA.B() >>> I = DA.I() >>> list(map(B, I.basis())) # indirect doctest [B[1, 1, 1, 1], -1/2*B[1, 1, 1, 1] + B[1, 1, 2], -1/2*B[1, 1, 1, 1] + B[1, 2, 1], 1/3*B[1, 1, 1, 1] - 1/2*B[1, 1, 2] - 1/2*B[1, 2, 1] + B[1, 3], -1/2*B[1, 1, 1, 1] + B[2, 1, 1], 1/4*B[1, 1, 1, 1] - 1/2*B[1, 1, 2] - 1/2*B[2, 1, 1] + B[2, 2], 1/3*B[1, 1, 1, 1] - 1/2*B[1, 2, 1] - 1/2*B[2, 1, 1] + B[3, 1], -1/4*B[1, 1, 1, 1] + 1/3*B[1, 1, 2] + 1/3*B[1, 2, 1] - 1/2*B[1, 3] + 1/3*B[2, 1, 1] - 1/2*B[2, 2] - 1/2*B[3, 1] + B[4]]
DA = DescentAlgebra(QQ, 4) B = DA.B() I = DA.I() list(map(B, I.basis())) # indirect doctest
- a_realization()[source]¶
Return a particular realization of
self
(the -basis).EXAMPLES:
sage: DA = DescentAlgebra(QQ, 4) sage: DA.a_realization() Descent algebra of 4 over Rational Field in the subset basis
>>> from sage.all import * >>> DA = DescentAlgebra(QQ, Integer(4)) >>> DA.a_realization() Descent algebra of 4 over Rational Field in the subset basis
DA = DescentAlgebra(QQ, 4) DA.a_realization()
- class sage.combinat.descent_algebra.DescentAlgebraBases(base)[source]¶
Bases:
Category_realization_of_parent
The category of bases of a descent algebra.
- class ElementMethods[source]¶
Bases:
object
- to_symmetric_group_algebra()[source]¶
Return
self
in the symmetric group algebra.EXAMPLES:
sage: B = DescentAlgebra(QQ, 4).B() sage: B[1,3].to_symmetric_group_algebra() [1, 2, 3, 4] + [2, 1, 3, 4] + [3, 1, 2, 4] + [4, 1, 2, 3] sage: I = DescentAlgebra(QQ, 4).I() sage: elt = I(B[1,3]) sage: elt.to_symmetric_group_algebra() [1, 2, 3, 4] + [2, 1, 3, 4] + [3, 1, 2, 4] + [4, 1, 2, 3]
>>> from sage.all import * >>> B = DescentAlgebra(QQ, Integer(4)).B() >>> B[Integer(1),Integer(3)].to_symmetric_group_algebra() [1, 2, 3, 4] + [2, 1, 3, 4] + [3, 1, 2, 4] + [4, 1, 2, 3] >>> I = DescentAlgebra(QQ, Integer(4)).I() >>> elt = I(B[Integer(1),Integer(3)]) >>> elt.to_symmetric_group_algebra() [1, 2, 3, 4] + [2, 1, 3, 4] + [3, 1, 2, 4] + [4, 1, 2, 3]
B = DescentAlgebra(QQ, 4).B() B[1,3].to_symmetric_group_algebra() I = DescentAlgebra(QQ, 4).I() elt = I(B[1,3]) elt.to_symmetric_group_algebra()
- class ParentMethods[source]¶
Bases:
object
- to_symmetric_group_algebra()[source]¶
Morphism from
self
to the symmetric group algebra.EXAMPLES:
sage: D = DescentAlgebra(QQ, 4).D() sage: D.to_symmetric_group_algebra(D[1,3]) [2, 1, 4, 3] + [3, 1, 4, 2] + [3, 2, 4, 1] + [4, 1, 3, 2] + [4, 2, 3, 1] sage: B = DescentAlgebra(QQ, 4).B() sage: B.to_symmetric_group_algebra(B[1,2,1]) [1, 2, 3, 4] + [1, 2, 4, 3] + [1, 3, 4, 2] + [2, 1, 3, 4] + [2, 1, 4, 3] + [2, 3, 4, 1] + [3, 1, 2, 4] + [3, 1, 4, 2] + [3, 2, 4, 1] + [4, 1, 2, 3] + [4, 1, 3, 2] + [4, 2, 3, 1]
>>> from sage.all import * >>> D = DescentAlgebra(QQ, Integer(4)).D() >>> D.to_symmetric_group_algebra(D[Integer(1),Integer(3)]) [2, 1, 4, 3] + [3, 1, 4, 2] + [3, 2, 4, 1] + [4, 1, 3, 2] + [4, 2, 3, 1] >>> B = DescentAlgebra(QQ, Integer(4)).B() >>> B.to_symmetric_group_algebra(B[Integer(1),Integer(2),Integer(1)]) [1, 2, 3, 4] + [1, 2, 4, 3] + [1, 3, 4, 2] + [2, 1, 3, 4] + [2, 1, 4, 3] + [2, 3, 4, 1] + [3, 1, 2, 4] + [3, 1, 4, 2] + [3, 2, 4, 1] + [4, 1, 2, 3] + [4, 1, 3, 2] + [4, 2, 3, 1]
D = DescentAlgebra(QQ, 4).D() D.to_symmetric_group_algebra(D[1,3]) B = DescentAlgebra(QQ, 4).B() B.to_symmetric_group_algebra(B[1,2,1])
- to_symmetric_group_algebra_on_basis(S)[source]¶
Return the basis element index by
S
as a linear combination of basis elements in the symmetric group algebra.EXAMPLES:
sage: B = DescentAlgebra(QQ, 3).B() sage: [B.to_symmetric_group_algebra_on_basis(c) ....: for c in Compositions(3)] [[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1], [1, 2, 3] + [2, 1, 3] + [3, 1, 2], [1, 2, 3] + [1, 3, 2] + [2, 3, 1], [1, 2, 3]] sage: I = DescentAlgebra(QQ, 3).I() sage: [I.to_symmetric_group_algebra_on_basis(c) ....: for c in Compositions(3)] [[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1], 1/2*[1, 2, 3] - 1/2*[1, 3, 2] + 1/2*[2, 1, 3] - 1/2*[2, 3, 1] + 1/2*[3, 1, 2] - 1/2*[3, 2, 1], 1/2*[1, 2, 3] + 1/2*[1, 3, 2] - 1/2*[2, 1, 3] + 1/2*[2, 3, 1] - 1/2*[3, 1, 2] - 1/2*[3, 2, 1], 1/3*[1, 2, 3] - 1/6*[1, 3, 2] - 1/6*[2, 1, 3] - 1/6*[2, 3, 1] - 1/6*[3, 1, 2] + 1/3*[3, 2, 1]]
>>> from sage.all import * >>> B = DescentAlgebra(QQ, Integer(3)).B() >>> [B.to_symmetric_group_algebra_on_basis(c) ... for c in Compositions(Integer(3))] [[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1], [1, 2, 3] + [2, 1, 3] + [3, 1, 2], [1, 2, 3] + [1, 3, 2] + [2, 3, 1], [1, 2, 3]] >>> I = DescentAlgebra(QQ, Integer(3)).I() >>> [I.to_symmetric_group_algebra_on_basis(c) ... for c in Compositions(Integer(3))] [[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1], 1/2*[1, 2, 3] - 1/2*[1, 3, 2] + 1/2*[2, 1, 3] - 1/2*[2, 3, 1] + 1/2*[3, 1, 2] - 1/2*[3, 2, 1], 1/2*[1, 2, 3] + 1/2*[1, 3, 2] - 1/2*[2, 1, 3] + 1/2*[2, 3, 1] - 1/2*[3, 1, 2] - 1/2*[3, 2, 1], 1/3*[1, 2, 3] - 1/6*[1, 3, 2] - 1/6*[2, 1, 3] - 1/6*[2, 3, 1] - 1/6*[3, 1, 2] + 1/3*[3, 2, 1]]
B = DescentAlgebra(QQ, 3).B() [B.to_symmetric_group_algebra_on_basis(c) for c in Compositions(3)] I = DescentAlgebra(QQ, 3).I() [I.to_symmetric_group_algebra_on_basis(c) for c in Compositions(3)]
- super_categories()[source]¶
The super categories of
self
.EXAMPLES:
sage: from sage.combinat.descent_algebra import DescentAlgebraBases sage: DA = DescentAlgebra(QQ, 4) sage: bases = DescentAlgebraBases(DA) sage: bases.super_categories() [Category of finite dimensional algebras with basis over Rational Field, Category of realizations of Descent algebra of 4 over Rational Field]
>>> from sage.all import * >>> from sage.combinat.descent_algebra import DescentAlgebraBases >>> DA = DescentAlgebra(QQ, Integer(4)) >>> bases = DescentAlgebraBases(DA) >>> bases.super_categories() [Category of finite dimensional algebras with basis over Rational Field, Category of realizations of Descent algebra of 4 over Rational Field]
from sage.combinat.descent_algebra import DescentAlgebraBases DA = DescentAlgebra(QQ, 4) bases = DescentAlgebraBases(DA) bases.super_categories()