Non-Commutative Symmetric Functions¶
- class sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions(R)¶
Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
The abstract algebra of non-commutative symmetric functions.
We construct the abstract algebra of non-commutative symmetric functions over the rational numbers:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: NCSF Non-Commutative Symmetric Functions over the Rational Field sage: S = NCSF.complete() sage: R = NCSF.ribbon() sage: S[2,1]*R[1,2] S[2, 1, 1, 2] - S[2, 1, 3]
NCSF is the unique free (non-commutative!) graded connected algebra with one generator in each degree:
sage: NCSF.category() Join of Category of hopf algebras over Rational Field and Category of graded algebras over Rational Field and Category of monoids with realizations and Category of graded coalgebras over Rational Field and Category of coalgebras over Rational Field with realizations and Category of cocommutative coalgebras over Rational Field sage: [S[i].degree() for i in range(10)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
We use the Sage standard renaming idiom to get shorter outputs:
sage: NCSF.rename("NCSF") sage: NCSF NCSF
NCSF has many representations as a concrete algebra. Each of them has a distinguished basis, and its elements are expanded in this basis. Here is the Ψ (
Psi
) representation:sage: Psi = NCSF.Psi() sage: Psi NCSF in the Psi basis
Elements of
Psi
are linear combinations of basis elements indexed by compositions:sage: Psi.an_element() 2*Psi[] + 2*Psi[1] + 3*Psi[1, 1]
The basis itself is accessible through:
sage: Psi.basis() Lazy family (Term map from Compositions of non-negative integers... sage: Psi.basis().keys() Compositions of non-negative integers
To construct an element one can therefore do:
sage: Psi.basis()[Composition([2,1,3])] Psi[2, 1, 3]
As this is rather cumbersome, the following abuses of notation are allowed:
sage: Psi[Composition([2, 1, 3])] Psi[2, 1, 3] sage: Psi[[2, 1, 3]] Psi[2, 1, 3] sage: Psi[2, 1, 3] Psi[2, 1, 3]
or even:
sage: Psi[(i for i in [2, 1, 3])] Psi[2, 1, 3]
Unfortunately, due to a limitation in Python syntax, one cannot use:
sage: Psi[] # not implemented
Instead, you can use:
sage: Psi[[]] Psi[]
Now, we can construct linear combinations of basis elements:
sage: Psi[2,1,3] + 2 * (Psi[4] + Psi[2,1]) 2*Psi[2, 1] + Psi[2, 1, 3] + 2*Psi[4]
Algebra structure
To start with,
Psi
is a graded algebra, the grading being induced by the size of compositions. The one is the basis element indexed by the empty composition:sage: Psi.one() Psi[] sage: S.one() S[] sage: R.one() R[]
As we have seen above, the
Psi
basis is multiplicative; that is multiplication is induced by linearity from the concatenation of compositions:sage: Psi[1,3] * Psi[2,1] Psi[1, 3, 2, 1] sage: (Psi.one() + 2 * Psi[1,3]) * Psi[2, 4] 2*Psi[1, 3, 2, 4] + Psi[2, 4]
Hopf algebra structure
Psi
is further endowed with a coalgebra structure. The coproduct is an algebra morphism, and therefore determined by its values on the generators; those are primitive:sage: Psi[1].coproduct() Psi[] # Psi[1] + Psi[1] # Psi[] sage: Psi[2].coproduct() Psi[] # Psi[2] + Psi[2] # Psi[]
The coproduct, being cocommutative on the generators, is cocommutative everywhere:
sage: Psi[1,2].coproduct() Psi[] # Psi[1, 2] + Psi[1] # Psi[2] + Psi[1, 2] # Psi[] + Psi[2] # Psi[1]
The algebra and coalgebra structures on
Psi
combine to form a bialgebra structure, which cooperates with the grading to form a connected graded bialgebra. Thus, as any connected graded bialgebra,Psi
is a Hopf algebra. OverQQ
(or any other Q-algebra), this Hopf algebraPsi
is isomorphic to the tensor algebra of its space of primitive elements.The antipode is an anti-algebra morphism; in the
Psi
basis, it sends the generators to their opposites and changes their sign if they are of odd degree:sage: Psi[3].antipode() -Psi[3] sage: Psi[1,3,2].antipode() -Psi[2, 3, 1] sage: Psi[1,3,2].coproduct().apply_multilinear_morphism(lambda be,ga: Psi(be)*Psi(ga).antipode()) 0
The counit is defined by sending all elements of positive degree to zero:
sage: S[3].degree(), S[3,1,2].degree(), S.one().degree() (3, 6, 0) sage: S[3].counit() 0 sage: S[3,1,2].counit() 0 sage: S.one().counit() 1 sage: (S[3] - 2*S[3,1,2] + 7).counit() 7 sage: (R[3] - 2*R[3,1,2] + 7).counit() 7
It is possible to change the prefix used to display the basis elements using the method
print_options()
. Say that for instance one wanted to display theComplete
basis as having a prefixH
instead of the defaultS
:sage: H = NCSF.complete() sage: H.an_element() 2*S[] + 2*S[1] + 3*S[1, 1] sage: H.print_options(prefix='H') sage: H.an_element() 2*H[] + 2*H[1] + 3*H[1, 1] sage: H.print_options(prefix='S') #restore to 'S'
Concrete representations
NCSF admits the concrete realizations defined in [NCSF1]:
sage: Phi = NCSF.Phi() sage: Psi = NCSF.Psi() sage: ribbon = NCSF.ribbon() sage: complete = NCSF.complete() sage: elementary = NCSF.elementary()
To change from one basis to another, one simply does:
sage: Phi(Psi[1]) Phi[1] sage: Phi(Psi[3]) -1/4*Phi[1, 2] + 1/4*Phi[2, 1] + Phi[3]
In general, one can mix up different bases in computations:
sage: Phi[1] * Psi[1] Phi[1, 1]
Some of the changes of basis are easy to guess:
sage: ribbon(complete[1,3,2]) R[1, 3, 2] + R[1, 5] + R[4, 2] + R[6]
This is the sum of all fatter compositions. Using the usual Möbius function for the boolean lattice, the inverse change of basis is given by the alternating sum of all fatter compositions:
sage: complete(ribbon[1,3,2]) S[1, 3, 2] - S[1, 5] - S[4, 2] + S[6]
The analogue of the elementary basis is the sum over all finer compositions than the ‘complement’ of the composition in the ribbon basis:
sage: Composition([1,3,2]).complement() [2, 1, 2, 1] sage: ribbon(elementary([1,3,2])) R[1, 1, 1, 1, 1, 1] + R[1, 1, 1, 2, 1] + R[2, 1, 1, 1, 1] + R[2, 1, 2, 1]
By Möbius inversion on the composition poset, the ribbon basis element corresponding to a composition I is then the alternating sum over all compositions fatter than the complement composition of I in the elementary basis:
sage: elementary(ribbon[2,1,2,1]) L[1, 3, 2] - L[1, 5] - L[4, 2] + L[6]
The Φ (
Phi
) and Ψ bases are computed by changing to and from theComplete
basis. The expansion of Ψ basis is given in Proposition 4.5 of [NCSF1] by the formulaeSI=∑J≥I1πu(J,I)ΨJand
ΨI=∑J≥I(−1)ℓ(J)−ℓ(I)lp(J,I)SJwhere the coefficients πu(J,I) and lp(J,I) are coefficients in the methods
coeff_pi()
andcoeff_lp()
respectively. For example:sage: Psi(complete[3]) 1/6*Psi[1, 1, 1] + 1/3*Psi[1, 2] + 1/6*Psi[2, 1] + 1/3*Psi[3] sage: complete(Psi[3]) S[1, 1, 1] - 2*S[1, 2] - S[2, 1] + 3*S[3]
The
Phi
basis is another analogue of the power sum basis from the algebra of symmetric functions and the expansion in the Complete basis is given in Proposition 4.9 of [NCSF1] by the formulaeSI=∑J≥I1sp(J,I)ΦJand
ΦI=∑J≥I(−1)ℓ(J)−ℓ(I)∏iIiℓ(J,I)SJwhere the coefficients sp(J,I) and ℓ(J,I) are coefficients in the methods
coeff_sp()
andcoeff_ell()
respectively. For example:sage: Phi(complete[3]) 1/6*Phi[1, 1, 1] + 1/4*Phi[1, 2] + 1/4*Phi[2, 1] + 1/3*Phi[3] sage: complete(Phi[3]) S[1, 1, 1] - 3/2*S[1, 2] - 3/2*S[2, 1] + 3*S[3]
Here is how to fetch the conversion morphisms:
sage: f = complete.coerce_map_from(elementary); f Generic morphism: From: NCSF in the Elementary basis To: NCSF in the Complete basis sage: g = elementary.coerce_map_from(complete); g Generic morphism: From: NCSF in the Complete basis To: NCSF in the Elementary basis sage: f.category() Category of homsets of unital magmas and right modules over Rational Field and left modules over Rational Field sage: f(elementary[1,2,2]) S[1, 1, 1, 1, 1] - S[1, 1, 1, 2] - S[1, 2, 1, 1] + S[1, 2, 2] sage: g(complete[1,2,2]) L[1, 1, 1, 1, 1] - L[1, 1, 1, 2] - L[1, 2, 1, 1] + L[1, 2, 2] sage: h = f*g; h Composite map: From: NCSF in the Complete basis To: NCSF in the Complete basis Defn: Generic morphism: From: NCSF in the Complete basis To: NCSF in the Elementary basis then Generic morphism: From: NCSF in the Elementary basis To: NCSF in the Complete basis sage: h(complete[1,3,2]) S[1, 3, 2]
Additional concrete representations
NCSF has some additional bases which appear in the literature:
sage: Monomial = NCSF.Monomial() sage: Immaculate = NCSF.Immaculate() sage: dualQuasisymmetric_Schur = NCSF.dualQuasisymmetric_Schur()
The
Monomial
basis was introduced in [Tev2007] and theImmaculate
basis was introduced in [BBSSZ2012]. TheQuasisymmetric_Schur
were defined in [QSCHUR] and the dual basis is implemented here asdualQuasisymmetric_Schur
. Refer to the documentation for the use and definition of these bases.Todo
implement fundamental, forgotten, and simple (coming from the simple modules of HS_n) bases.
We revert back to the original name from our custom short name NCSF:
sage: NCSF NCSF sage: NCSF.rename() sage: NCSF Non-Commutative Symmetric Functions over the Rational Field
- class Bases(parent_with_realization)¶
Bases:
sage.categories.realizations.Category_realization_of_parent
Category of bases of non-commutative symmetric functions.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: N.Bases() Category of bases of Non-Commutative Symmetric Functions over the Rational Field sage: R = N.Ribbon() sage: R in N.Bases() True
- class ElementMethods¶
Bases:
object
- bernstein_creation_operator(n)¶
Return the image of
self
under the n-th Bernstein creation operator.Let n be an integer. The n-th Bernstein creation operator Bn is defined as the endomorphism of the space NSym of noncommutative symmetric functions which sends every f to
∑i≥0(−1)iHn+iF⊥1i,where usual notations are in place (the letter H stands for the complete basis of NSym, the letter F stands for the fundamental basis of the algebra QSym of quasisymmetric functions, and F⊥1i means skewing (
skew_by()
) by F1i). Notice that F1i is nothing other than the elementary symmetric function ei.This has been introduced in [BBSSZ2012], section 3.1, in analogy to the Bernstein creation operators on the symmetric functions (
bernstein_creation_operator()
), and studied further in [BBSSZ2012], mainly in the context of immaculate functions (Immaculate
). In fact, if (α1,α2,…,αm) is an m-tuple of integers, thenBnI(α1,α2,…,αm)=I(n,α1,α2,…,αm),where I(α1,α2,…,αm) is the immaculate function associated to the m-tuple (α1,α2,…,αm) (see
immaculate_function()
).EXAMPLES:
We get the immaculate functions by repeated application of Bernstein creation operators:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: I = NSym.I() sage: S = NSym.S() sage: def immaculate_by_bernstein(xs): ....: # immaculate function corresponding to integer ....: # tuple ``xs``, computed by iterated application ....: # of Bernstein creation operators. ....: res = S.one() ....: for i in reversed(xs): ....: res = res.bernstein_creation_operator(i) ....: return res sage: import itertools sage: all( immaculate_by_bernstein(p) == I.immaculate_function(p) ....: for p in itertools.product(range(-1, 3), repeat=3)) True
Some examples:
sage: S[3,2].bernstein_creation_operator(-2) S[2, 1] sage: S[3,2].bernstein_creation_operator(-1) S[1, 2, 1] - S[2, 2] - S[3, 1] sage: S[3,2].bernstein_creation_operator(0) -S[1, 2, 2] - S[1, 3, 1] + S[2, 2, 1] + S[3, 2] sage: S[3,2].bernstein_creation_operator(1) S[1, 3, 2] - S[2, 2, 2] - S[2, 3, 1] + S[3, 2, 1] sage: S[3,2].bernstein_creation_operator(2) S[2, 3, 2] - S[3, 2, 2] - S[3, 3, 1] + S[4, 2, 1]
- chi()¶
Return the commutative image of a non-commutative symmetric function.
OUTPUT:
The commutative image of
self
. This will be a symmetric function.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: R = N.ribbon() sage: x = R.an_element(); x 2*R[] + 2*R[1] + 3*R[1, 1] sage: x.to_symmetric_function() 2*s[] + 2*s[1] + 3*s[1, 1] sage: y = N.Phi()[1,3] sage: y.to_symmetric_function() h[1, 1, 1, 1] - 3*h[2, 1, 1] + 3*h[3, 1]
- expand(n, alphabet='x')¶
Expand the noncommutative symmetric function into an element of a free algebra in
n
indeterminates of an alphabet, which by default is'x'
.INPUT:
n
– a nonnegative integer; the number of variables in the expansionalphabet
– (default:'x'
); the alphabet in whichself
is to be expanded
OUTPUT:
An expansion of
self
into then
variables specified byalphabet
.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: S = NSym.S() sage: S[3].expand(3) x0^3 + x0^2*x1 + x0^2*x2 + x0*x1^2 + x0*x1*x2 + x0*x2^2 + x1^3 + x1^2*x2 + x1*x2^2 + x2^3 sage: L = NSym.L() sage: L[3].expand(3) x2*x1*x0 sage: L[2].expand(3) x1*x0 + x2*x0 + x2*x1 sage: L[3].expand(4) x2*x1*x0 + x3*x1*x0 + x3*x2*x0 + x3*x2*x1 sage: Psi = NSym.Psi() sage: Psi[2, 1].expand(3) x0^3 + x0^2*x1 + x0^2*x2 + x0*x1*x0 + x0*x1^2 + x0*x1*x2 + x0*x2*x0 + x0*x2*x1 + x0*x2^2 - x1*x0^2 - x1*x0*x1 - x1*x0*x2 + x1^2*x0 + x1^3 + x1^2*x2 + x1*x2*x0 + x1*x2*x1 + x1*x2^2 - x2*x0^2 - x2*x0*x1 - x2*x0*x2 - x2*x1*x0 - x2*x1^2 - x2*x1*x2 + x2^2*x0 + x2^2*x1 + x2^3
One can use a different set of variables by adding an optional argument
alphabet=...
:sage: L[3].expand(4, alphabet="y") y2*y1*y0 + y3*y1*y0 + y3*y2*y0 + y3*y2*y1
Todo
So far this is only implemented on the elementary basis, and everything else goes through coercion. Maybe it is worth shortcutting some of the other bases?
- left_padded_kronecker_product(x)¶
Return the left-padded Kronecker product of
self
andx
in the basis ofself
.The left-padded Kronecker product is a bilinear map mapping two non-commutative symmetric functions to another, not necessarily preserving degree. It can be defined as follows: Let ∗ denote the internal product (
internal_product()
) on the space of non-commutative symmetric functions. For any composition I, let SI denote the complete homogeneous symmetric function indexed by I. For any compositions α, β, γ, let gγα,β denote the coefficient of Sγ in the internal product Sα∗Sβ. For every composition I=(i1,i2,…,ik) and every integer n>|I|, define the `n`-completion of `I` to be the composition (n−|I|,i1,i2,…,ik); this n-completion is denoted by I[n]. Then, for any compositions α and β and every integer n>|α|+|β|, we can write the internal product Sα[n]∗Sβ[n] in the formSα[n]∗Sβ[n]=∑γgγ[n]α[n],β[n]Sγ[n]with γ ranging over all compositions. The coefficients gγ[n]α[n],β[n] are independent on n. These coefficients gγ[n]α[n],β[n] are denoted by ˜gγα,β, and the non-commutative symmetric function
∑γ˜gγα,βSγis said to be the left-padded Kronecker product of Sα and Sβ. By bilinearity, this extends to a definition of a left-padded Kronecker product of any two non-commutative symmetric functions.
The left-padded Kronecker product on the non-commutative symmetric functions lifts the left-padded Kronecker product on the symmetric functions. More precisely: Let π denote the canonical projection (
to_symmetric_function()
) from the non-commutative symmetric functions to the symmetric functions. Then, any two non-commutative symmetric functions f and g satisfyπ(f¯∗g)=π(f)¯∗π(g),where the ¯∗ on the left-hand side denotes the left-padded Kronecker product on the non-commutative symmetric functions, and the ¯∗ on the right-hand side denotes the left-padded Kronecker product on the symmetric functions.
INPUT:
x
– element of the ring of non-commutative symmetric functions over the same base ring asself
OUTPUT:
the left-padded Kronecker product of
self
withx
(an element of the ring of non-commutative symmetric functions in the same basis asself
)
AUTHORS:
Darij Grinberg (15 Mar 2014)
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: S = NSym.S() sage: S[2,1].left_padded_kronecker_product(S[3]) S[1, 1, 1, 1] + S[1, 2, 1] + S[2, 1] + S[2, 1, 1, 1] + S[2, 2, 1] + S[3, 2, 1] sage: S[2,1].left_padded_kronecker_product(S[1]) S[1, 1, 1] + S[1, 2, 1] + S[2, 1] sage: S[1].left_padded_kronecker_product(S[2,1]) S[1, 1, 1] + S[2, 1] + S[2, 1, 1] sage: S[1,1].left_padded_kronecker_product(S[2]) S[1, 1] + 2*S[1, 1, 1] + S[2, 1, 1] sage: S[1].left_padded_kronecker_product(S[1,2,1]) S[1, 1, 1, 1] + S[1, 2, 1] + S[1, 2, 1, 1] + S[2, 1, 1] sage: S[2].left_padded_kronecker_product(S[3]) S[1, 2] + S[2, 1, 1] + S[3, 2]
Taking the left-padded Kronecker product with 1=S\empty is the identity map on the ring of non-commutative symmetric functions:
sage: all( S[Composition([])].left_padded_kronecker_product(S[lam]) ....: == S[lam].left_padded_kronecker_product(S[Composition([])]) ....: == S[lam] for i in range(4) ....: for lam in Compositions(i) ) True
Here is a rule for the left-padded Kronecker product of S1 (this is the same as S(1)) with any complete homogeneous function: Let I be a composition. Then, the left-padded Kronecker product of S1 and SI is ∑KaKSK, where the sum runs over all compositions K, and the coefficient aK is defined as the number of ways to obtain K from I by one of the following two operations:
Insert a 1 at the end of I.
Subtract 1 from one of the entries of I (and remove the entry if it thus becomes 0), and insert a 1 at the end of I.
We check this for compositions of size ≤4:
sage: def mults1(I): ....: # Left left-padded Kronecker multiplication by S[1]. ....: res = S[I[:] + [1]] ....: for k in range(len(I)): ....: I2 = I[:] ....: if I2[k] == 1: ....: I2 = I2[:k] + I2[k+1:] ....: else: ....: I2[k] -= 1 ....: res += S[I2 + [1]] ....: return res sage: all( mults1(I) == S[1].left_padded_kronecker_product(S[I]) ....: for i in range(5) for I in Compositions(i) ) True
A similar rule can be made for the left-padded Kronecker product of any complete homogeneous function with S1: Let I be a composition. Then, the left-padded Kronecker product of SI and S1 is ∑KbKSK, where the sum runs over all compositions K, and the coefficient bK is defined as the number of ways to obtain K from I by one of the following two operations:
Insert a 1 at the front of I.
Subtract 1 from one of the entries of I (and remove the entry if it thus becomes 0), and insert a 1 right after this entry.
We check this for compositions of size ≤4:
sage: def mults2(I): ....: # Left left-padded Kronecker multiplication by S[1]. ....: res = S[[1] + I[:]] ....: for k in range(len(I)): ....: I2 = I[:] ....: i2k = I2[k] ....: if i2k != 1: ....: I2 = I2[:k] + [i2k-1, 1] + I2[k+1:] ....: res += S[I2] ....: return res sage: all( mults2(I) == S[I].left_padded_kronecker_product(S[1]) ....: for i in range(5) for I in Compositions(i) ) True
Checking the π(f¯∗g)=π(f)¯∗π(g) equality:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: R = NSym.R() sage: def testpi(n): ....: for I in Compositions(n): ....: for J in Compositions(n): ....: a = R[I].to_symmetric_function() ....: b = R[J].to_symmetric_function() ....: x = a.left_padded_kronecker_product(b) ....: y = R[I].left_padded_kronecker_product(R[J]) ....: y = y.to_symmetric_function() ....: if x != y: ....: return False ....: return True sage: testpi(3) True
- omega_involution()¶
Return the image of the noncommutative symmetric function
self
under the omega involution.The omega involution is defined as the algebra antihomomorphism NCSF→NCSF which, for every positive integer n, sends the n-th complete non-commutative symmetric function Sn to the n-th elementary non-commutative symmetric function Λn. This omega involution is denoted by ω. It can be shown that every composition I satisfies
ω(SI)=ΛIr,ω(ΛI)=SIr,ω(RI)=RIt,ω(ΦI)=(−1)|I|−ℓ(I)ΦIr,ω(ΨI)=(−1)|I|−ℓ(I)ΨIr,where Ir denotes the reversed composition of I, and It denotes the conjugate composition of I, and ℓ(I) denotes the length of the composition I, and standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, R for the ribbon basis, Φ for that of the power-sums of the second kind, and Ψ for that of the power-sums of the first kind). More generally, if f is a homogeneous element of NCSF of degree n, then
ω(f)=(−1)nS(f),where S denotes the antipode of NCSF.
The omega involution ω is an involution and a coalgebra automorphism of NCSF. It is an automorphism of the graded vector space NCSF. If π denotes the projection from NCSF to the ring of symmetric functions (
to_symmetric_function()
), then π(ω(f))=ω(π(f)) for every f∈NCSF, where the ω on the right hand side denotes the omega automorphism of Sym.The omega involution on NCSF is adjoint to the omega involution on QSym by the standard adjunction between NCSF and QSym.
The omega involution has been denoted by ω in [LMvW13], section 3.6. See [NCSF1], section 3.1 for the properties of this map.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: S = NSym.S() sage: L = NSym.L() sage: L(S[3,2].omega_involution()) L[2, 3] sage: L(S[6,3].omega_involution()) L[3, 6] sage: L(S[1,3].omega_involution()) L[3, 1] sage: L((S[9,1] - S[8,2] + 2*S[6,4] - 3*S[3] + 4*S[[]]).omega_involution()) # long time 4*L[] + L[1, 9] - L[2, 8] - 3*L[3] + 2*L[4, 6] sage: L((S[3,3] - 2*S[2]).omega_involution()) -2*L[2] + L[3, 3] sage: L(S([4,2]).omega_involution()) L[2, 4] sage: R = NSym.R() sage: R([4,2]).omega_involution() R[1, 2, 1, 1, 1] sage: R.zero().omega_involution() 0 sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: Phi = NSym.Phi() sage: Phi([2,1]).omega_involution() -Phi[1, 2] sage: Psi = NSym.Psi() sage: Psi([2,1]).omega_involution() -Psi[1, 2] sage: Psi([3,1]).omega_involution() Psi[1, 3]
Testing the π(ω(f))=ω(π(f)) relation noticed above:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: R = NSym.R() sage: all( R(I).omega_involution().to_symmetric_function() ....: == R(I).to_symmetric_function().omega_involution() ....: for I in Compositions(4) ) True
The omega involution on QSym is adjoint to the omega involution on NSym with respect to the duality pairing:
sage: QSym = QuasiSymmetricFunctions(QQ) sage: M = QSym.M() sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: S = NSym.S() sage: all( all( M(I).omega_involution().duality_pairing(S(J)) ....: == M(I).duality_pairing(S(J).omega_involution()) ....: for I in Compositions(2) ) ....: for J in Compositions(3) ) True
- psi_involution()¶
Return the image of the noncommutative symmetric function
self
under the involution ψ.The involution ψ is defined as the linear map NCSF→NCSF which, for every composition I, sends the complete noncommutative symmetric function SI to the elementary noncommutative symmetric function ΛI. It can be shown that every composition I satisfies
ψ(RI)=RIc,ψ(SI)=ΛI,ψ(ΛI)=SI,ψ(ΦI)=(−1)|I|−ℓ(I)ΦIwhere Ic denotes the complement of the composition I, and ℓ(I) denotes the length of I, and where standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, Φ for the basis of the power sums of the second kind, and R for the ribbon basis). The map ψ is an involution and a graded Hopf algebra automorphism of NCSF. If π denotes the projection from NCSF to the ring of symmetric functions (
to_symmetric_function()
), then π(ψ(f))=ω(π(f)) for every f∈NCSF, where the ω on the right hand side denotes the omega automorphism of Sym.The involution ψ of NCSF is adjoint to the involution ψ of QSym by the standard adjunction between NCSF and QSym.
The involution ψ has been denoted by ψ in [LMvW13], section 3.6.
See also
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: R = NSym.R() sage: R[3,2].psi_involution() R[1, 1, 2, 1] sage: R[6,3].psi_involution() R[1, 1, 1, 1, 1, 2, 1, 1] sage: (R[9,1] - R[8,2] + 2*R[2,4] - 3*R[3] + 4*R[[]]).psi_involution() 4*R[] - 3*R[1, 1, 1] + R[1, 1, 1, 1, 1, 1, 1, 1, 2] - R[1, 1, 1, 1, 1, 1, 1, 2, 1] + 2*R[1, 2, 1, 1, 1] sage: (R[3,3] - 2*R[2]).psi_involution() -2*R[1, 1] + R[1, 1, 2, 1, 1] sage: R([2,1,1]).psi_involution() R[1, 3] sage: S = NSym.S() sage: S([2,1]).psi_involution() S[1, 1, 1] - S[2, 1] sage: S.zero().psi_involution() 0 sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: Phi = NSym.Phi() sage: Phi([2,1]).psi_involution() -Phi[2, 1] sage: Phi([3,1]).psi_involution() Phi[3, 1]
The Psi basis doesn’t behave as nicely:
sage: Psi = NSym.Psi() sage: Psi([2,1]).psi_involution() -Psi[2, 1] sage: Psi([3,1]).psi_involution() 1/2*Psi[1, 2, 1] - 1/2*Psi[2, 1, 1] + Psi[3, 1]
The involution ψ commutes with the antipode:
sage: all( R(I).psi_involution().antipode() ....: == R(I).antipode().psi_involution() ....: for I in Compositions(4) ) True
Testing the π(ψ(f))=ω(π(f)) relation noticed above:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: R = NSym.R() sage: all( R(I).psi_involution().to_symmetric_function() ....: == R(I).to_symmetric_function().omega() ....: for I in Compositions(4) ) True
The involution ψ of QSym is adjoint to the involution ψ of NSym with respect to the duality pairing:
sage: QSym = QuasiSymmetricFunctions(QQ) sage: M = QSym.M() sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: S = NSym.S() sage: all( all( M(I).psi_involution().duality_pairing(S(J)) ....: == M(I).duality_pairing(S(J).psi_involution()) ....: for I in Compositions(2) ) ....: for J in Compositions(3) ) True
- star_involution()¶
Return the image of the noncommutative symmetric function
self
under the star involution.The star involution is defined as the algebra antihomomorphism NCSF→NCSF which, for every positive integer n, sends the n-th complete non-commutative symmetric function Sn to Sn. Denoting by f∗ the image of an element f∈NCSF under this star involution, it can be shown that every composition I satisfies
(SI)∗=SIr,(ΛI)∗=ΛIr,R∗I=RIr,(ΦI)∗=ΦIr,where Ir denotes the reversed composition of I, and standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, R for the ribbon basis, and Φ for that of the power-sums of the second kind). The star involution is an involution and a coalgebra automorphism of NCSF. It is an automorphism of the graded vector space NCSF. Under the canonical isomorphism between the n-th graded component of NCSF and the descent algebra of the symmetric group Sn (see
to_descent_algebra()
), the star involution (restricted to the n-th graded component) corresponds to the automorphism of the descent algebra given by x↦ωnxωn, where ωn is the permutation (n,n−1,…,1)∈Sn (written here in one-line notation). If π denotes the projection from NCSF to the ring of symmetric functions (to_symmetric_function()
), then π(f∗)=π(f) for every f∈NCSF.The star involution on NCSF is adjoint to the star involution on QSym by the standard adjunction between NCSF and QSym.
The star involution has been denoted by ρ in [LMvW13], section 3.6. See [NCSF2], section 2.3 for the properties of this map.
See also
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: S = NSym.S() sage: S[3,2].star_involution() S[2, 3] sage: S[6,3].star_involution() S[3, 6] sage: (S[9,1] - S[8,2] + 2*S[6,4] - 3*S[3] + 4*S[[]]).star_involution() 4*S[] + S[1, 9] - S[2, 8] - 3*S[3] + 2*S[4, 6] sage: (S[3,3] - 2*S[2]).star_involution() -2*S[2] + S[3, 3] sage: S([4,2]).star_involution() S[2, 4] sage: R = NSym.R() sage: R([4,2]).star_involution() R[2, 4] sage: R.zero().star_involution() 0 sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: Phi = NSym.Phi() sage: Phi([2,1]).star_involution() Phi[1, 2]
The Psi basis doesn’t behave as nicely:
sage: Psi = NSym.Psi() sage: Psi([2,1]).star_involution() Psi[1, 2] sage: Psi([3,1]).star_involution() 1/2*Psi[1, 1, 2] - 1/2*Psi[1, 2, 1] + Psi[1, 3]
The star involution commutes with the antipode:
sage: all( R(I).star_involution().antipode() ....: == R(I).antipode().star_involution() ....: for I in Compositions(4) ) True
Checking the relation with the descent algebra described above:
sage: def descent_test(n): ....: DA = DescentAlgebra(QQ, n) ....: NSym = NonCommutativeSymmetricFunctions(QQ) ....: S = NSym.S() ....: DAD = DA.D() ....: w_n = DAD(set(range(1, n))) ....: for I in Compositions(n): ....: if not (S[I].star_involution() ....: == w_n * S[I].to_descent_algebra(n) * w_n): ....: return False ....: return True sage: all( descent_test(i) for i in range(4) ) True sage: all( descent_test(i) for i in range(6) ) # long time True
Testing the π(f∗)=π(f) relation noticed above:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: R = NSym.R() sage: all( R(I).star_involution().to_symmetric_function() ....: == R(I).to_symmetric_function() ....: for I in Compositions(4) ) True
The star involution on QSym is adjoint to the star involution on NSym with respect to the duality pairing:
sage: QSym = QuasiSymmetricFunctions(QQ) sage: M = QSym.M() sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: S = NSym.S() sage: all( all( M(I).star_involution().duality_pairing(S(J)) ....: == M(I).duality_pairing(S(J).star_involution()) ....: for I in Compositions(2) ) ....: for J in Compositions(3) ) True
- to_descent_algebra(n=None)¶
Return the image of the
n
-th degree homogeneous component ofself
in the descent algebra of Sn over the same base ring asself
.This is based upon the canonical isomorphism from the n-th degree homogeneous component of the algebra of noncommutative symmetric functions to the descent algebra of Sn. This isomorphism maps the inner product of noncommutative symmetric functions either to the product in the descent algebra of Sn or to its opposite (depending on how the latter is defined).
If
n
is not specified, it will be taken to be the highest homogeneous component ofself
.OUTPUT:
The image of the
n
-th homogeneous component ofself
under the isomorphism into the descent algebra of Sn over the same base ring asself
.
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(ZZ).S() sage: S[2,1].to_descent_algebra(3) B[2, 1] sage: (S[1,2,1] - 3 * S[1,1,2]).to_descent_algebra(4) -3*B[1, 1, 2] + B[1, 2, 1] sage: S[2,1].to_descent_algebra(2) 0 sage: S[2,1].to_descent_algebra() B[2, 1] sage: S.zero().to_descent_algebra().parent() Descent algebra of 0 over Integer Ring in the subset basis sage: (S[1,2,1] - 3 * S[1,1,2]).to_descent_algebra(1) 0
- to_fqsym()¶
Return the image of the non-commutative symmetric function
self
under the morphism ι:NSym→FQSym.This morphism is the injective algebra homomorphism NSym→FQSym that sends each Complete generator Sn to F[1,2,…,n]. It is the inclusion map, if we regard both NSym and FQSym as rings of noncommutative power series.
See also
FreeQuasisymmetricFunctions
for a definition of FQSym.EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: R = N.ribbon() sage: x = 2*R[[]] + 2*R[1] + 3*R[2] sage: x.to_fqsym() 2*F[] + 2*F[1] + 3*F[1, 2] sage: R[2,1].to_fqsym() F[1, 3, 2] + F[3, 1, 2] sage: x = R.an_element(); x 2*R[] + 2*R[1] + 3*R[1, 1] sage: x.to_fqsym() 2*F[] + 2*F[1] + 3*F[2, 1] sage: y = N.Phi()[1,2] sage: y.to_fqsym() F[1, 2, 3] - F[1, 3, 2] + F[2, 1, 3] + F[2, 3, 1] - F[3, 1, 2] - F[3, 2, 1] sage: S = NonCommutativeSymmetricFunctions(QQ).S() sage: S[2].to_fqsym() F[1, 2] sage: S[1,2].to_fqsym() F[1, 2, 3] + F[2, 1, 3] + F[2, 3, 1] sage: S[2,1].to_fqsym() F[1, 2, 3] + F[1, 3, 2] + F[3, 1, 2] sage: S[1,2,1].to_fqsym() F[1, 2, 3, 4] + F[1, 2, 4, 3] + F[1, 4, 2, 3] + F[2, 1, 3, 4] + F[2, 1, 4, 3] + F[2, 3, 1, 4] + F[2, 3, 4, 1] + F[2, 4, 1, 3] + F[2, 4, 3, 1] + F[4, 1, 2, 3] + F[4, 2, 1, 3] + F[4, 2, 3, 1]
- to_fsym()¶
Return the image of
self
under the natural map to FSym.There is an injective Hopf algebra morphism from NSym to FSym (see
FreeSymmetricFunctions
), which maps the ribbon Rα indexed by a composition α to the sum of all tableaux whose descent composition is α. If we regard NSym as a Hopf subalgebra of FQSym via the morphism ι:NSym→FQSym (implemented asto_fqsym()
), then this injective morphism is just the inclusion map.EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: R = N.ribbon() sage: x = 2*R[[]] + 2*R[1] + 3*R[2] sage: x.to_fsym() 2*G[] + 2*G[1] + 3*G[12] sage: R[2,1].to_fsym() G[12|3] sage: R[1,2].to_fsym() G[13|2] sage: R[2,1,2].to_fsym() G[12|35|4] + G[125|3|4] sage: x = R.an_element(); x 2*R[] + 2*R[1] + 3*R[1, 1] sage: x.to_fsym() 2*G[] + 2*G[1] + 3*G[1|2] sage: y = N.Phi()[1,2] sage: y.to_fsym() -G[1|2|3] - G[12|3] + G[123] + G[13|2] sage: S = NonCommutativeSymmetricFunctions(QQ).S() sage: S[2].to_fsym() G[12] sage: S[2,1].to_fsym() G[12|3] + G[123]
- to_ncsym()¶
Return the image of
self
under the injective algebra homomorphism κ:NSym→NCSym that fixes the symmetric functions.As usual, NCSym denotes the ring of symmetric functions in non-commuting variables. Let Sn denote a generator of the complete basis. The algebra homomorphism κ:NSym→NCSym is defined by
Sn↦∑A⊢[n]λ(A)!λ(A)!n!mA.It has the property that the canonical maps χ:NCSym→Sym and ρ:NSym→Sym satisfy χ∘κ=ρ.
Note
A remark in [BRRZ08] makes it clear that the embedding of NSym into NCSym that preserves the projection into the symmetric functions is not unique. While this seems to be a natural embedding, any free set of algebraic generators of NSym can be sent to a set of free elements in NCSym to form another embedding.
See also
NonCommutativeSymmetricFunctions
for a definition of NCSym.EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: S = N.complete() sage: S[2].to_ncsym() 1/2*m{{1}, {2}} + m{{1, 2}} sage: S[1,2,1].to_ncsym() 1/2*m{{1}, {2}, {3}, {4}} + 1/2*m{{1}, {2}, {3, 4}} + m{{1}, {2, 3}, {4}} + m{{1}, {2, 3, 4}} + 1/2*m{{1}, {2, 4}, {3}} + 1/2*m{{1, 2}, {3}, {4}} + 1/2*m{{1, 2}, {3, 4}} + m{{1, 2, 3}, {4}} + m{{1, 2, 3, 4}} + 1/2*m{{1, 2, 4}, {3}} + 1/2*m{{1, 3}, {2}, {4}} + 1/2*m{{1, 3}, {2, 4}} + 1/2*m{{1, 3, 4}, {2}} + 1/2*m{{1, 4}, {2}, {3}} + m{{1, 4}, {2, 3}} sage: S[1,2].to_ncsym() 1/2*m{{1}, {2}, {3}} + m{{1}, {2, 3}} + 1/2*m{{1, 2}, {3}} + m{{1, 2, 3}} + 1/2*m{{1, 3}, {2}} sage: S[[]].to_ncsym() m{} sage: R = N.ribbon() sage: x = R.an_element(); x 2*R[] + 2*R[1] + 3*R[1, 1] sage: x.to_ncsym() 2*m{} + 2*m{{1}} + 3/2*m{{1}, {2}} sage: R[2,1].to_ncsym() 1/3*m{{1}, {2}, {3}} + 1/6*m{{1}, {2, 3}} + 2/3*m{{1, 2}, {3}} + 1/6*m{{1, 3}, {2}} sage: Phi = N.Phi() sage: Phi[1,2].to_ncsym() m{{1}, {2, 3}} + m{{1, 2, 3}} sage: Phi[1,3].to_ncsym() -1/4*m{{1}, {2}, {3, 4}} - 1/4*m{{1}, {2, 3}, {4}} + m{{1}, {2, 3, 4}} + 1/2*m{{1}, {2, 4}, {3}} - 1/4*m{{1, 2}, {3, 4}} - 1/4*m{{1, 2, 3}, {4}} + m{{1, 2, 3, 4}} + 1/2*m{{1, 2, 4}, {3}} + 1/2*m{{1, 3}, {2, 4}} - 1/4*m{{1, 3, 4}, {2}} - 1/4*m{{1, 4}, {2, 3}}
- to_symmetric_function()¶
Return the commutative image of a non-commutative symmetric function.
OUTPUT:
The commutative image of
self
. This will be a symmetric function.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: R = N.ribbon() sage: x = R.an_element(); x 2*R[] + 2*R[1] + 3*R[1, 1] sage: x.to_symmetric_function() 2*s[] + 2*s[1] + 3*s[1, 1] sage: y = N.Phi()[1,3] sage: y.to_symmetric_function() h[1, 1, 1, 1] - 3*h[2, 1, 1] + 3*h[3, 1]
- to_symmetric_group_algebra()¶
Return the image of a non-commutative symmetric function into the symmetric group algebra where the ribbon basis element indexed by a composition is associated with the sum of all permutations which have descent set equal to said composition. In compliance with the anti- isomorphism between the descent algebra and the non-commutative symmetric functions, we index descent positions by the reversed composition.
OUTPUT:
The image of
self
under the embedding of the n-th degree homogeneous component of the non-commutative symmetric functions in the symmetric group algebra of Sn. This can behave unexpectedly whenself
is not homogeneous.
EXAMPLES:
sage: R=NonCommutativeSymmetricFunctions(QQ).R() sage: R[2,1].to_symmetric_group_algebra() [1, 3, 2] + [2, 3, 1] sage: R([]).to_symmetric_group_algebra() []
- verschiebung(n)¶
Return the image of the noncommutative symmetric function
self
under the n-th Verschiebung operator.The n-th Verschiebung operator Vn is defined to be the map from the k-algebra of noncommutative symmetric functions to itself that sends the complete function SI indexed by a composition I=(i1,i2,…,ik) to S(i1/n,i2/n,…,ik/n) if all of the numbers i1,i2,…,ik are divisible by n, and to 0 otherwise. This operator Vn is a Hopf algebra endomorphism. For every positive integer r with n∣r, it satisfies
Vn(Sr)=Sr/n,Vn(Λr)=(−1)r−r/nΛr/n,Vn(Ψr)=nΨr/n,Vn(Φr)=nΦr/n(where Sr denotes the r-th complete non-commutative symmetric function, Λr denotes the r-th elementary non-commutative symmetric function, Ψr denotes the r-th power-sum non-commutative symmetric function of the first kind, and Φr denotes the r-th power-sum non-commutative symmetric function of the second kind). For every positive integer r with n∤r, it satisfes
Vn(Sr)=Vn(Λr)=Vn(Ψr)=Vn(Φr)=0.The n-th Verschiebung operator is also called the n-th Verschiebung endomorphism.
It is a lift of the n-th Verschiebung operator on the ring of symmetric functions (
verschiebung()
) to the ring of noncommutative symmetric functions.The action of the n-th Verschiebung operator can also be described on the ribbon Schur functions. Namely, every composition I of size nℓ satisfies
Vn(RI)=(−1)ℓ(I)−ℓ(J)⋅RJ/n,where J denotes the meet of the compositions I and (n,n,…,n⏟|I|/n times), where ℓ(I) is the length of I, and where J/n denotes the composition obtained by dividing every entry of J by n. For a composition I of size not divisible by n, we have Vn(RI)=0.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the n-th Verschiebung operator (on the ring of noncommutative symmetric functions) to
self
.EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: S = NSym.S() sage: S[3,2].verschiebung(2) 0 sage: S[6,4].verschiebung(2) S[3, 2] sage: (S[9,1] - S[8,2] + 2*S[6,4] - 3*S[3] + 4*S[[]]).verschiebung(2) 4*S[] + 2*S[3, 2] - S[4, 1] sage: (S[3,3] - 2*S[2]).verschiebung(3) S[1, 1] sage: S([4,2]).verschiebung(1) S[4, 2] sage: R = NSym.R() sage: R([4,2]).verschiebung(2) R[2, 1]
Being Hopf algebra endomorphisms, the Verschiebung operators commute with the antipode:
sage: all( R(I).verschiebung(2).antipode() ....: == R(I).antipode().verschiebung(2) ....: for I in Compositions(4) ) True
They lift the Verschiebung operators of the ring of symmetric functions:
sage: all( S(I).verschiebung(2).to_symmetric_function() ....: == S(I).to_symmetric_function().verschiebung(2) ....: for I in Compositions(4) ) True
The Frobenius operators on QSym are adjoint to the Verschiebung operators on NSym with respect to the duality pairing:
sage: QSym = QuasiSymmetricFunctions(ZZ) sage: M = QSym.M() sage: all( all( M(I).frobenius(3).duality_pairing(S(J)) ....: == M(I).duality_pairing(S(J).verschiebung(3)) ....: for I in Compositions(2) ) ....: for J in Compositions(3) ) True
- class ParentMethods¶
Bases:
object
- immaculate_function(xs)¶
Return the immaculate function corresponding to the integer vector
xs
, written in the basisself
.If α is any integer vector – i.e., an element of Zm for some m∈N –, the immaculate function corresponding to α is a non-commutative symmetric function denoted by Sα. One way to define this function is by setting
Sα=∑σ∈Sm(−1)σSα1+σ(1)−1Sα2+σ(2)−2⋯Sαm+σ(m)−m,where α is written in the form (α1,α2,…,αm), and where S stands for the complete basis (
Complete
).The immaculate function Sα first appeared in [BBSSZ2012] (where it was defined differently, but the definition we gave above appeared as Theorem 3.27).
The immaculate functions Sα for α running over all compositions (i.e., finite sequences of positive integers) form a basis of NCSF. This is the immaculate basis (
Immaculate
).INPUT:
xs
– list (or tuple or any iterable – possibly a composition) of integers
OUTPUT:
The immaculate function Sxs written in the basis
self
.EXAMPLES:
Let us first check that, for
xs
a composition, we get the same as the result ofself.realization_of().I()[xs]
:sage: def test_comp(xs): ....: NSym = NonCommutativeSymmetricFunctions(QQ) ....: I = NSym.I() ....: return I[xs] == I.immaculate_function(xs) sage: def test_allcomp(n): ....: return all( test_comp(c) for c in Compositions(n) ) sage: test_allcomp(1) True sage: test_allcomp(2) True sage: test_allcomp(3) True
Now some examples of non-composition immaculate functions:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: I = NSym.I() sage: I.immaculate_function([0, 1]) 0 sage: I.immaculate_function([0, 2]) -I[1, 1] sage: I.immaculate_function([-1, 1]) -I[] sage: I.immaculate_function([2, -1]) 0 sage: I.immaculate_function([2, 0]) I[2] sage: I.immaculate_function([2, 0, 1]) 0 sage: I.immaculate_function([1, 0, 2]) -I[1, 1, 1] sage: I.immaculate_function([2, 0, 2]) -I[2, 1, 1] sage: I.immaculate_function([0, 2, 0, 2]) I[1, 1, 1, 1] + I[1, 2, 1] sage: I.immaculate_function([2, 0, 2, 0, 2]) I[2, 1, 1, 1, 1] + I[2, 1, 2, 1]
- to_symmetric_function()¶
Morphism to the algebra of symmetric functions.
This is constructed by extending the computation on the basis or by coercion to the complete basis.
OUTPUT:
The module morphism from the basis
self
to the symmetric functions which corresponds to taking a commutative image.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: R = N.ribbon() sage: x = R.an_element(); x 2*R[] + 2*R[1] + 3*R[1, 1] sage: R.to_symmetric_function(x) 2*s[] + 2*s[1] + 3*s[1, 1] sage: nM = N.Monomial() sage: nM.to_symmetric_function(nM[3,1]) h[1, 1, 1, 1] - 7/2*h[2, 1, 1] + h[2, 2] + 7/2*h[3, 1] - 2*h[4]
- to_symmetric_function_on_basis(I)¶
The image of the basis element indexed by
I
under the map to the symmetric functions.This default implementation does a change of basis and computes the image in the complete basis.
INPUT:
I
– a composition
OUTPUT:
The image of the non-commutative basis element of
self
indexed by the compositionI
under the map from non-commutative symmetric functions to the symmetric functions. This will be a symmetric function.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: I = N.Immaculate() sage: I.to_symmetric_function(I[1,3]) -h[2, 2] + h[3, 1] sage: I.to_symmetric_function(I[1,2]) 0 sage: Phi = N.Phi() sage: Phi.to_symmetric_function_on_basis([3,1,2])==Phi.to_symmetric_function(Phi[3,1,2]) True sage: Phi.to_symmetric_function_on_basis([]) h[]
- super_categories()¶
Return the super categories of the category of bases of the non-commutative symmetric functions.
OUTPUT:
list
- class Complete(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The Hopf algebra of non-commutative symmetric functions in the Complete basis.
The Complete basis is defined in Definition 3.4 of [NCSF1], where it is denoted by (SI)I. It is a multiplicative basis, and is connected to the elementary generators Λi of the ring of non-commutative symmetric functions by the following relation: Define a non-commutative symmetric function Sn for every nonnegative integer n by the power series identity
∑k≥0tkSk=(∑k≥0(−t)kΛk)−1,with Λ0 denoting 1. For every composition (i1,i2,…,ik), we have S(i1,i2,…,ik)=Si1Si2⋯Sik.
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: S = NCSF.Complete(); S Non-Commutative Symmetric Functions over the Rational Field in the Complete basis sage: S.an_element() 2*S[] + 2*S[1] + 3*S[1, 1]
The following are aliases for this basis:
sage: NCSF.complete() Non-Commutative Symmetric Functions over the Rational Field in the Complete basis sage: NCSF.S() Non-Commutative Symmetric Functions over the Rational Field in the Complete basis
- class Element¶
Bases:
sage.modules.with_basis.indexed_element.IndexedFreeModuleElement
An element in the Complete basis.
- psi_involution()¶
Return the image of the noncommutative symmetric function
self
under the involution ψ.The involution ψ is defined as the linear map NCSF→NCSF which, for every composition I, sends the complete noncommutative symmetric function SI to the elementary noncommutative symmetric function ΛI. It can be shown that every composition I satisfies
ψ(RI)=RIc,ψ(SI)=ΛI,ψ(ΛI)=SI,ψ(ΦI)=(−1)|I|−ℓ(I)ΦIwhere Ic denotes the complement of the composition I, and ℓ(I) denotes the length of I, and where standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, Φ for the basis of the power sums of the second kind, and R for the ribbon basis). The map ψ is an involution and a graded Hopf algebra automorphism of NCSF. If π denotes the projection from NCSF to the ring of symmetric functions (
to_symmetric_function()
), then π(ψ(f))=ω(π(f)) for every f∈NCSF, where the ω on the right hand side denotes the omega automorphism of Sym.The involution ψ of NCSF is adjoint to the involution ψ of QSym by the standard adjunction between NCSF and QSym.
The involution ψ has been denoted by ψ in [LMvW13], section 3.6.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: S = NSym.S() sage: L = NSym.L() sage: S[3,1].psi_involution() S[1, 1, 1, 1] - S[1, 2, 1] - S[2, 1, 1] + S[3, 1] sage: L(S[3,1].psi_involution()) L[3, 1] sage: S[[]].psi_involution() S[] sage: S[1,1].psi_involution() S[1, 1] sage: (S[2,1] - 2*S[2]).psi_involution() -2*S[1, 1] + S[1, 1, 1] + 2*S[2] - S[2, 1]
The implementation at hand is tailored to the complete basis. It is equivalent to the generic implementation via the ribbon basis:
sage: R = NSym.R() sage: all( R(S[I].psi_involution()) == R(S[I]).psi_involution() ....: for I in Compositions(4) ) True
- dual()¶
Return the dual basis to the complete basis of non-commutative symmetric functions. This is the Monomial basis of quasi-symmetric functions.
OUTPUT:
The Monomial basis of quasi-symmetric functions.
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(QQ).S() sage: S.dual() Quasisymmetric functions over the Rational Field in the Monomial basis
- internal_product_on_basis(I, J)¶
The internal product of two non-commutative symmetric complete functions.
See
internal_product()
for a thorough documentation of this operation.INPUT:
I
,J
– compositions
OUTPUT:
The internal product of the complete non-commutative symmetric function basis elements indexed by
I
andJ
, expressed in the complete basis.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: S = N.complete() sage: S.internal_product_on_basis([2,2],[1,2,1]) 2*S[1, 1, 1, 1] + S[1, 1, 2] + S[2, 1, 1] sage: S.internal_product_on_basis([2,2],[1,2]) 0
- to_symmetric_function()¶
Morphism to the algebra of symmetric functions.
This is constructed by extending the computation on the complete basis.
OUTPUT:
The module morphism from the basis
self
to the symmetric functions which corresponds to taking a commutative image.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: S = N.complete() sage: S.to_symmetric_function(S[3,1,2]) h[3, 2, 1] sage: S.to_symmetric_function(S[[]]) h[]
- to_symmetric_function_on_basis(I)¶
The commutative image of a complete element
The commutative image of a basis element is obtained by sorting the indexing composition of the basis element and the output is in the complete basis of the symmetric functions.
INPUT:
I
– a composition
OUTPUT:
The commutative image of the complete basis element indexed by
I
. The result is the complete symmetric function indexed by the partition obtained by sortingI
.
EXAMPLES:
sage: S=NonCommutativeSymmetricFunctions(QQ).complete() sage: S.to_symmetric_function_on_basis([2,1,3]) h[3, 2, 1] sage: S.to_symmetric_function_on_basis([]) h[]
- class Elementary(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The Hopf algebra of non-commutative symmetric functions in the Elementary basis.
The Elementary basis is defined in Definition 3.4 of [NCSF1], where it is denoted by (ΛI)I. It is a multiplicative basis, and is obtained from the elementary generators Λi of the ring of non-commutative symmetric functions through the formula Λ(i1,i2,…,ik)=Λi1Λi2⋯Λik for every composition (i1,i2,…,ik).
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: L = NCSF.Elementary(); L Non-Commutative Symmetric Functions over the Rational Field in the Elementary basis sage: L.an_element() 2*L[] + 2*L[1] + 3*L[1, 1]
The following are aliases for this basis:
sage: NCSF.elementary() Non-Commutative Symmetric Functions over the Rational Field in the Elementary basis sage: NCSF.L() Non-Commutative Symmetric Functions over the Rational Field in the Elementary basis
- class Element¶
Bases:
sage.modules.with_basis.indexed_element.IndexedFreeModuleElement
- psi_involution()¶
Return the image of the noncommutative symmetric function
self
under the involution ψ.The involution ψ is defined as the linear map NCSF→NCSF which, for every composition I, sends the complete noncommutative symmetric function SI to the elementary noncommutative symmetric function ΛI. It can be shown that every composition I satisfies
ψ(RI)=RIc,ψ(SI)=ΛI,ψ(ΛI)=SI,ψ(ΦI)=(−1)|I|−ℓ(I)ΦIwhere Ic denotes the complement of the composition I, and ℓ(I) denotes the length of I, and where standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, Φ for the basis of the power sums of the second kind, and R for the ribbon basis). The map ψ is an involution and a graded Hopf algebra automorphism of NCSF. If π denotes the projection from NCSF to the ring of symmetric functions (
to_symmetric_function()
), then π(ψ(f))=ω(π(f)) for every f∈NCSF, where the ω on the right hand side denotes the omega automorphism of Sym.The involution ψ of NCSF is adjoint to the involution ψ of QSym by the standard adjunction between NCSF and QSym.
The involution ψ has been denoted by ψ in [LMvW13], section 3.6.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: S = NSym.S() sage: L = NSym.L() sage: L[3,1].psi_involution() L[1, 1, 1, 1] - L[1, 2, 1] - L[2, 1, 1] + L[3, 1] sage: S(L[3,1].psi_involution()) S[3, 1] sage: L[[]].psi_involution() L[] sage: L[1,1].psi_involution() L[1, 1] sage: (L[2,1] - 2*L[2]).psi_involution() -2*L[1, 1] + L[1, 1, 1] + 2*L[2] - L[2, 1]
The implementation at hand is tailored to the elementary basis. It is equivalent to the generic implementation via the ribbon basis:
sage: R = NSym.R() sage: all( R(L[I].psi_involution()) == R(L[I]).psi_involution() ....: for I in Compositions(3) ) True sage: all( R(L[I].psi_involution()) == R(L[I]).psi_involution() ....: for I in Compositions(4) ) True
- star_involution()¶
Return the image of the noncommutative symmetric function
self
under the star involution.The star involution is defined as the algebra antihomomorphism NCSF→NCSF which, for every positive integer n, sends the n-th complete non-commutative symmetric function Sn to Sn. Denoting by f∗ the image of an element f∈NCSF under this star involution, it can be shown that every composition I satisfies
(SI)∗=SIr,(ΛI)∗=ΛIr,R∗I=RIr,(ΦI)∗=ΦIr,where Ir denotes the reversed composition of I, and standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, R for the ribbon basis, and Φ for that of the power-sums of the second kind). The star involution is an involution and a coalgebra automorphism of NCSF. It is an automorphism of the graded vector space NCSF. Under the canonical isomorphism between the n-th graded component of NCSF and the descent algebra of the symmetric group Sn (see
to_descent_algebra()
), the star involution (restricted to the n-th graded component) corresponds to the automorphism of the descent algebra given by x↦ωnxωn, where ωn is the permutation (n,n−1,…,1)∈Sn (written here in one-line notation). If π denotes the projection from NCSF to the ring of symmetric functions (to_symmetric_function()
), then π(f∗)=π(f) for every f∈NCSF.The star involution on NCSF is adjoint to the star involution on QSym by the standard adjunction between NCSF and QSym.
The star involution has been denoted by ρ in [LMvW13], section 3.6. See [NCSF2], section 2.3 for the properties of this map.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: L = NSym.L() sage: L[3,3,2,3].star_involution() L[3, 2, 3, 3] sage: L[6,3,3].star_involution() L[3, 3, 6] sage: (L[1,9,1] - L[8,2] + 2*L[6,4] - 3*L[3] + 4*L[[]]).star_involution() 4*L[] + L[1, 9, 1] - L[2, 8] - 3*L[3] + 2*L[4, 6] sage: (L[3,3] - 2*L[2]).star_involution() -2*L[2] + L[3, 3] sage: L([4,1]).star_involution() L[1, 4]
The implementation at hand is tailored to the elementary basis. It is equivalent to the generic implementation via the complete basis:
sage: S = NSym.S() sage: all( S(L[I].star_involution()) == S(L[I]).star_involution() ....: for I in Compositions(4) ) True
- verschiebung(n)¶
Return the image of the noncommutative symmetric function
self
under the n-th Verschiebung operator.The n-th Verschiebung operator Vn is defined to be the map from the k-algebra of noncommutative symmetric functions to itself that sends the complete function SI indexed by a composition I=(i1,i2,…,ik) to S(i1/n,i2/n,…,ik/n) if all of the numbers i1,i2,…,ik are divisible by n, and to 0 otherwise. This operator Vn is a Hopf algebra endomorphism. For every positive integer r with n∣r, it satisfies
Vn(Sr)=Sr/n,Vn(Λr)=(−1)r−r/nΛr/n,Vn(Ψr)=nΨr/n,Vn(Φr)=nΦr/n(where Sr denotes the r-th complete non-commutative symmetric function, Λr denotes the r-th elementary non-commutative symmetric function, Ψr denotes the r-th power-sum non-commutative symmetric function of the first kind, and Φr denotes the r-th power-sum non-commutative symmetric function of the second kind). For every positive integer r with n∤r, it satisfes
Vn(Sr)=Vn(Λr)=Vn(Ψr)=Vn(Φr)=0.The n-th Verschiebung operator is also called the n-th Verschiebung endomorphism.
It is a lift of the n-th Verschiebung operator on the ring of symmetric functions (
verschiebung()
) to the ring of noncommutative symmetric functions.The action of the n-th Verschiebung operator can also be described on the ribbon Schur functions. Namely, every composition I of size nℓ satisfies
Vn(RI)=(−1)ℓ(I)−ℓ(J)⋅RJ/n,where J denotes the meet of the compositions I and (n,n,…,n⏟|I|/n times), where ℓ(I) is the length of I, and where J/n denotes the composition obtained by dividing every entry of J by n. For a composition I of size not divisible by n, we have Vn(RI)=0.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the n-th Verschiebung operator (on the ring of noncommutative symmetric functions) to
self
.EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: L = NSym.L() sage: L([4,2]).verschiebung(2) -L[2, 1] sage: L([2,4]).verschiebung(2) -L[1, 2] sage: L([6]).verschiebung(2) -L[3] sage: L([2,1]).verschiebung(3) 0 sage: L([3]).verschiebung(2) 0 sage: L([]).verschiebung(2) L[] sage: L([5, 1]).verschiebung(3) 0 sage: L([5, 1]).verschiebung(6) 0 sage: L([5, 1]).verschiebung(2) 0 sage: L([1, 2, 3, 1]).verschiebung(7) 0 sage: L([7]).verschiebung(7) L[1] sage: L([1, 2, 3, 1]).verschiebung(5) 0 sage: (L[1] - L[2] + 2*L[3]).verschiebung(1) L[1] - L[2] + 2*L[3]
- I¶
- class Immaculate(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The immaculate basis of the non-commutative symmetric functions.
The immaculate basis first appears in Berg, Bergeron, Saliola, Serrano and Zabrocki’s [BBSSZ2012]. It can be described as the family (Sα), where α runs over all compositions, and Sα denotes the immaculate function corresponding to α (see
immaculate_function()
).If α is a composition (α1,α2,…,αm), then
Sα=∑σ∈Sm(−1)σSα1+σ(1)−1Sα2+σ(2)−2⋯Sαm+σ(m)−m.Warning
This basis contains only the immaculate functions indexed by compositions (i.e., finite sequences of positive integers). To obtain the remaining immaculate functions (sensu lato), use the
immaculate_function()
method. Calling the immaculate basis with a list which is not a composition will currently return garbage!EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: I = NCSF.I() sage: I([1,3,2])*I([1]) I[1, 3, 2, 1] + I[1, 3, 3] + I[1, 4, 2] + I[2, 3, 2] sage: I([1])*I([1,3,2]) I[1, 1, 3, 2] - I[2, 2, 1, 2] - I[2, 2, 2, 1] - I[2, 2, 3] - I[3, 2, 2] sage: I([1,3])*I([1,1]) I[1, 3, 1, 1] + I[1, 4, 1] + I[2, 3, 1] + I[2, 4] sage: I([3,1])*I([2,1]) I[3, 1, 2, 1] + I[3, 2, 1, 1] + I[3, 2, 2] + I[3, 3, 1] + I[4, 1, 1, 1] + I[4, 1, 2] + 2*I[4, 2, 1] + I[4, 3] + I[5, 1, 1] + I[5, 2] sage: R = NCSF.ribbon() sage: I(R[1,3,1]) I[1, 3, 1] + I[2, 2, 1] + I[2, 3] + I[3, 1, 1] + I[3, 2] sage: R(I(R([2,1,3]))) R[2, 1, 3]
- class Element¶
Bases:
sage.modules.with_basis.indexed_element.IndexedFreeModuleElement
An element in the Immaculate basis.
- bernstein_creation_operator(n)¶
Return the image of
self
under the n-th Bernstein creation operator.Let n be an integer. The n-th Bernstein creation operator Bn is defined as the endomorphism of the space NSym of noncommutative symmetric functions given by
BnI(α1,α2,…,αm)=I(n,α1,α2,…,αm),where I(α1,α2,…,αm) is the immaculate function associated to the m-tuple (α1,α2,…,αm)∈Zm.
This has been introduced in [BBSSZ2012], section 3.1, in analogy to the Bernstein creation operators on the symmetric functions.
For more information on the n-th Bernstein creation operator, see
bernstein_creation_operator()
.EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: I = NSym.I() sage: b = I[1,3,2,1] sage: b.bernstein_creation_operator(3) I[3, 1, 3, 2, 1] sage: b.bernstein_creation_operator(5) I[5, 1, 3, 2, 1] sage: elt = b + 3*I[4,1,2] sage: elt.bernstein_creation_operator(1) I[1, 1, 3, 2, 1] + 3*I[1, 4, 1, 2]
We check that this agrees with the definition on the Complete basis:
sage: S = NSym.S() sage: S(elt).bernstein_creation_operator(1) == S(elt.bernstein_creation_operator(1)) True
Check on non-positive values of n:
sage: I[2,2,2].bernstein_creation_operator(-1) I[1, 1, 1, 2] + I[1, 1, 2, 1] + I[1, 2, 1, 1] - I[1, 2, 2] sage: I[2,3,2].bernstein_creation_operator(0) -I[1, 1, 3, 2] - I[1, 2, 2, 2] - I[1, 2, 3, 1] + I[2, 3, 2]
- dual()¶
Return the dual basis to the Immaculate basis of NCSF.
The basis returned is the dualImmaculate basis of QSym.
OUTPUT:
The dualImmaculate basis of the quasi-symmetric functions.
EXAMPLES:
sage: I=NonCommutativeSymmetricFunctions(QQ).Immaculate() sage: I.dual() Quasisymmetric functions over the Rational Field in the dualImmaculate basis
- L¶
- class Monomial(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The monomial basis defined in Tevlin’s paper [Tev2007].
The monomial basis is well-defined only when the base ring is a Q-algebra. It is the basis denoted by (MI)I in [Tev2007].
- class MultiplicativeBases(parent_with_realization)¶
Bases:
sage.categories.realizations.Category_realization_of_parent
Category of multiplicative bases of non-commutative symmetric functions.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: N.MultiplicativeBases() Category of multiplicative bases of Non-Commutative Symmetric Functions over the Rational Field
The complete basis is a multiplicative basis, but the ribbon basis is not:
sage: N.Complete() in N.MultiplicativeBases() True sage: N.Ribbon() in N.MultiplicativeBases() False
- class ParentMethods¶
Bases:
object
- algebra_generators()¶
Return the algebra generators of a given multiplicative basis of non-commutative symmetric functions.
OUTPUT:
The family of generators of the multiplicative basis
self
.
EXAMPLES:
sage: Psi = NonCommutativeSymmetricFunctions(QQ).Psi() sage: f = Psi.algebra_generators() sage: f Lazy family (<lambda>(i))_{i in Positive integers} sage: f[1], f[2], f[3] (Psi[1], Psi[2], Psi[3])
- algebra_morphism(on_generators, **keywords)¶
Given a map defined on the generators of the multiplicative basis
self
, return the algebra morphism that extends this map to the whole algebra of non-commutative symmetric functions.INPUT:
on_generators
– a function defined on the index set of the generators (that is, on the positive integers)anti
– a boolean; defaults toFalse
category
– a category; defaults toNone
OUTPUT:
The algebra morphism of
self
which is defined byon_generators
in the basisself
. Whenanti
is set toTrue
, an algebra anti-morphism is computed instead of an algebra morphism.
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: Psi = NCSF.Psi() sage: double = lambda i: Psi[i,i] sage: f = Psi.algebra_morphism(double, codomain = Psi) sage: f Generic endomorphism of Non-Commutative Symmetric Functions over the Rational Field in the Psi basis sage: f(2*Psi[[]] + 3 * Psi[1,3,2] + Psi[2,4] ) 2*Psi[] + 3*Psi[1, 1, 3, 3, 2, 2] + Psi[2, 2, 4, 4] sage: f.category() Category of endsets of unital magmas and right modules over Rational Field and left modules over Rational Field
When extra properties about the morphism are known, one can specify the category of which it is a morphism:
sage: negate = lambda i: -Psi[i] sage: f = Psi.algebra_morphism(negate, codomain = Psi, category = GradedHopfAlgebrasWithBasis(QQ)) sage: f Generic endomorphism of Non-Commutative Symmetric Functions over the Rational Field in the Psi basis sage: f(2*Psi[[]] + 3 * Psi[1,3,2] + Psi[2,4] ) 2*Psi[] - 3*Psi[1, 3, 2] + Psi[2, 4] sage: f.category() Category of endsets of hopf algebras over Rational Field and graded modules over Rational Field
If
anti
is true, this returns an anti-algebra morphism:sage: f = Psi.algebra_morphism(double, codomain = Psi, anti=True) sage: f Generic endomorphism of Non-Commutative Symmetric Functions over the Rational Field in the Psi basis sage: f(2*Psi[[]] + 3 * Psi[1,3,2] + Psi[2,4] ) 2*Psi[] + 3*Psi[2, 2, 3, 3, 1, 1] + Psi[4, 4, 2, 2] sage: f.category() Category of endsets of modules with basis over Rational Field
- antipode()¶
Return the antipode morphism on the basis
self
.The antipode of NSym is closely related to the omega involution; see
omega_involution()
for the latter.OUTPUT:
The antipode module map from non-commutative symmetric functions on basis
self
.
EXAMPLES:
sage: S=NonCommutativeSymmetricFunctions(QQ).S() sage: S.antipode Generic endomorphism of Non-Commutative Symmetric Functions over the Rational Field in the Complete basis
- coproduct()¶
Return the coproduct morphism in the basis
self
.OUTPUT:
The coproduct module map from non-commutative symmetric functions on basis
self
.
EXAMPLES:
sage: S=NonCommutativeSymmetricFunctions(QQ).S() sage: S.coproduct Generic morphism: From: Non-Commutative Symmetric Functions over the Rational Field in the Complete basis To: Non-Commutative Symmetric Functions over the Rational Field in the Complete basis # Non-Commutative Symmetric Functions over the Rational Field in the Complete basis
- product_on_basis(composition1, composition2)¶
Return the product of two basis elements from the multiplicative basis. Multiplication is just concatenation on compositions.
INPUT:
composition1
,composition2
– integer compositions
OUTPUT:
The product of the two non-commutative symmetric functions indexed by
composition1
andcomposition2
in the multiplicative basisself
. This will be again a non-commutative symmetric function.
EXAMPLES:
sage: Psi = NonCommutativeSymmetricFunctions(QQ).Psi() sage: Psi[3,1,2] * Psi[4,2] == Psi[3,1,2,4,2] True sage: S = NonCommutativeSymmetricFunctions(QQ).S() sage: S.product_on_basis(Composition([2,1]), Composition([1,2])) S[2, 1, 1, 2]
- to_symmetric_function()¶
Morphism to the algebra of symmetric functions.
This is constructed by extending the algebra morphism by the image of the generators.
OUTPUT:
The module morphism from the basis
self
to the symmetric functions which corresponds to taking a commutative image.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: S = N.complete() sage: S.to_symmetric_function(S[1,3]) h[3, 1] sage: Phi = N.Phi() sage: Phi.to_symmetric_function(Phi[1,3]) h[1, 1, 1, 1] - 3*h[2, 1, 1] + 3*h[3, 1] sage: Psi = N.Psi() sage: Psi.to_symmetric_function(Psi[1,3]) h[1, 1, 1, 1] - 3*h[2, 1, 1] + 3*h[3, 1]
- to_symmetric_function_on_generators(i)¶
Morphism of the generators to symmetric functions.
This is constructed by coercion to the complete basis and applying the morphism.
OUTPUT:
The module morphism from the basis
self
to the symmetric functions which corresponds to taking a commutative image.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: Phi = N.Phi() sage: Phi.to_symmetric_function_on_generators(3) h[1, 1, 1] - 3*h[2, 1] + 3*h[3] sage: Phi.to_symmetric_function_on_generators(0) h[] sage: Psi = N.Psi() sage: Psi.to_symmetric_function_on_generators(3) h[1, 1, 1] - 3*h[2, 1] + 3*h[3] sage: L = N.elementary() sage: L.to_symmetric_function_on_generators(3) h[1, 1, 1] - 2*h[2, 1] + h[3]
- super_categories()¶
Return the super categories of the category of multiplicative bases of the non-commutative symmetric functions.
OUTPUT:
list
- class MultiplicativeBasesOnGroupLikeElements(parent_with_realization)¶
Bases:
sage.categories.realizations.Category_realization_of_parent
Category of multiplicative bases on grouplike elements of non-commutative symmetric functions.
Here, a “multiplicative basis on grouplike elements” means a multiplicative basis whose generators (f1,f2,f3,…) satisfy
Δ(fi)=i∑j=0fj⊗fi−jwith f0=1. (In other words, the generators are to form a divided power sequence in the sense of a coalgebra.) This does not mean that the generators are grouplike, but means that the element 1+f1+f2+f3+⋯ in the completion of the ring of non-commutative symmetric functions with respect to the grading is grouplike.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: N.MultiplicativeBasesOnGroupLikeElements() Category of multiplicative bases on group like elements of Non-Commutative Symmetric Functions over the Rational Field
The complete basis is a multiplicative basis, but the ribbon basis is not:
sage: N.Complete() in N.MultiplicativeBasesOnGroupLikeElements() True sage: N.Ribbon() in N.MultiplicativeBasesOnGroupLikeElements() False
- class ParentMethods¶
Bases:
object
- antipode_on_basis(composition)¶
Return the application of the antipode to a basis element.
INPUT:
composition
– a composition
OUTPUT:
The image of the basis element indexed by
composition
under the antipode map.
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(QQ).complete() sage: S.antipode_on_basis(Composition([2,1])) -S[1, 1, 1] + S[1, 2] sage: S[1].antipode() # indirect doctest -S[1] sage: S[2].antipode() # indirect doctest S[1, 1] - S[2] sage: S[3].antipode() # indirect doctest -S[1, 1, 1] + S[1, 2] + S[2, 1] - S[3] sage: S[2,3].coproduct().apply_multilinear_morphism(lambda be,ga: S(be)*S(ga).antipode()) 0 sage: S[2,3].coproduct().apply_multilinear_morphism(lambda be,ga: S(be).antipode()*S(ga)) 0
- coproduct_on_generators(i)¶
Return the image of the ith generator of the algebra under the coproduct.
INPUT:
i
– a positive integer
OUTPUT:
The result of applying the coproduct to the ith generator of
self
.
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(QQ).complete() sage: S.coproduct_on_generators(3) S[] # S[3] + S[1] # S[2] + S[2] # S[1] + S[3] # S[]
- super_categories()¶
Return the super categories of the category of multiplicative bases of group-like elements of the non-commutative symmetric functions.
OUTPUT:
list
- class MultiplicativeBasesOnPrimitiveElements(parent_with_realization)¶
Bases:
sage.categories.realizations.Category_realization_of_parent
Category of multiplicative bases of the non-commutative symmetric functions whose generators are primitive elements.
An element x of a bialgebra is primitive if Δ(x)=x⊗1+1⊗x, where Δ is the coproduct of the bialgebra.
Given a multiplicative basis and knowing the coproducts and antipodes of its generators, one can compute the coproduct and the antipode of any element, since they are respectively algebra morphisms and anti-morphisms. See
antipode_on_generators()
andcoproduct_on_generators()
.Todo
this could be generalized to any free algebra.
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: N.MultiplicativeBasesOnPrimitiveElements() Category of multiplicative bases on primitive elements of Non-Commutative Symmetric Functions over the Rational Field
The Phi and Psi bases are multiplicative bases whose generators are primitive elements, but the complete and ribbon bases are not:
sage: N.Phi() in N.MultiplicativeBasesOnPrimitiveElements() True sage: N.Psi() in N.MultiplicativeBasesOnPrimitiveElements() True sage: N.Complete() in N.MultiplicativeBasesOnPrimitiveElements() False sage: N.Ribbon() in N.MultiplicativeBasesOnPrimitiveElements() False
- class ParentMethods¶
Bases:
object
- antipode_on_generators(i)¶
Return the image of a generator of a primitive basis of the non-commutative symmetric functions under the antipode map.
INPUT:
i
– a positive integer
OUTPUT:
The image of the i-th generator of the multiplicative basis
self
under the antipode of the algebra of non-commutative symmetric functions.
EXAMPLES:
sage: Psi=NonCommutativeSymmetricFunctions(QQ).Psi() sage: Psi.antipode_on_generators(2) -Psi[2]
- coproduct_on_generators(i)¶
Return the image of the ith generator of the multiplicative basis
self
under the coproduct.INPUT:
i
– a positive integer
OUTPUT:
The result of applying the coproduct to the ith generator of
self
.
EXAMPLES:
sage: Psi = NonCommutativeSymmetricFunctions(QQ).Psi() sage: Psi.coproduct_on_generators(3) Psi[] # Psi[3] + Psi[3] # Psi[]
- super_categories()¶
Return the super categories of the category of multiplicative bases of primitive elements of the non-commutative symmetric functions.
OUTPUT:
list
- class Phi(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The Hopf algebra of non-commutative symmetric functions in the Phi basis.
The Phi basis is defined in Definition 3.4 of [NCSF1], where it is denoted by (ΦI)I. It is a multiplicative basis, and is connected to the elementary generators Λi of the ring of non-commutative symmetric functions by the following relation: Define a non-commutative symmetric function Φn for every positive integer n by the power series identity
∑k≥1tk1kΦk=−log(∑k≥0(−t)kΛk),with Λ0 denoting 1. For every composition (i1,i2,…,ik), we have Φ(i1,i2,…,ik)=Φi1Φi2⋯Φik.
The Φ-basis is well-defined only when the base ring is a Q-algebra. The elements of the Φ-basis are known as the “power-sum non-commutative symmetric functions of the second kind”.
The generators Φn are related to the (first) Eulerian idempotents in the descent algebras of the symmetric groups (see [NCSF1], 5.4 for details).
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: Phi = NCSF.Phi(); Phi Non-Commutative Symmetric Functions over the Rational Field in the Phi basis sage: Phi.an_element() 2*Phi[] + 2*Phi[1] + 3*Phi[1, 1]
- class Element¶
Bases:
sage.modules.with_basis.indexed_element.IndexedFreeModuleElement
- psi_involution()¶
Return the image of the noncommutative symmetric function
self
under the involution ψ.The involution ψ is defined as the linear map NCSF→NCSF which, for every composition I, sends the complete noncommutative symmetric function SI to the elementary noncommutative symmetric function ΛI. It can be shown that every composition I satisfies
ψ(RI)=RIc,ψ(SI)=ΛI,ψ(ΛI)=SI,ψ(ΦI)=(−1)|I|−ℓ(I)ΦIwhere Ic denotes the complement of the composition I, and ℓ(I) denotes the length of I, and where standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, Φ for the basis of the power sums of the second kind, and R for the ribbon basis). The map ψ is an involution and a graded Hopf algebra automorphism of NCSF. If π denotes the projection from NCSF to the ring of symmetric functions (
to_symmetric_function()
), then π(ψ(f))=ω(π(f)) for every f∈NCSF, where the ω on the right hand side denotes the omega automorphism of Sym.The involution ψ of NCSF is adjoint to the involution ψ of QSym by the standard adjunction between NCSF and QSym.
The involution ψ has been denoted by ψ in [LMvW13], section 3.6.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: Phi = NSym.Phi() sage: Phi[3,2].psi_involution() -Phi[3, 2] sage: Phi[2,2].psi_involution() Phi[2, 2] sage: Phi[[]].psi_involution() Phi[] sage: (Phi[2,1] - 2*Phi[2]).psi_involution() 2*Phi[2] - Phi[2, 1] sage: Phi(0).psi_involution() 0
The implementation at hand is tailored to the Phi basis. It is equivalent to the generic implementation via the ribbon basis:
sage: R = NSym.R() sage: all( R(Phi[I].psi_involution()) == R(Phi[I]).psi_involution() ....: for I in Compositions(4) ) True
- star_involution()¶
Return the image of the noncommutative symmetric function
self
under the star involution.The star involution is defined as the algebra antihomomorphism NCSF→NCSF which, for every positive integer n, sends the n-th complete non-commutative symmetric function Sn to Sn. Denoting by f∗ the image of an element f∈NCSF under this star involution, it can be shown that every composition I satisfies
(SI)∗=SIr,(ΛI)∗=ΛIr,R∗I=RIr,(ΦI)∗=ΦIr,where Ir denotes the reversed composition of I, and standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, R for the ribbon basis, and Φ for that of the power-sums of the second kind). The star involution is an involution and a coalgebra automorphism of NCSF. It is an automorphism of the graded vector space NCSF. Under the canonical isomorphism between the n-th graded component of NCSF and the descent algebra of the symmetric group Sn (see
to_descent_algebra()
), the star involution (restricted to the n-th graded component) corresponds to the automorphism of the descent algebra given by x↦ωnxωn, where ωn is the permutation (n,n−1,…,1)∈Sn (written here in one-line notation). If π denotes the projection from NCSF to the ring of symmetric functions (to_symmetric_function()
), then π(f∗)=π(f) for every f∈NCSF.The star involution on NCSF is adjoint to the star involution on QSym by the standard adjunction between NCSF and QSym.
The star involution has been denoted by ρ in [LMvW13], section 3.6. See [NCSF2], section 2.3 for the properties of this map.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(QQ) sage: Phi = NSym.Phi() sage: Phi[3,1,1,4].star_involution() Phi[4, 1, 1, 3] sage: Phi[4,2,1].star_involution() Phi[1, 2, 4] sage: (Phi[1,4] - Phi[2,3] + 2*Phi[5,4] - 3*Phi[3] + 4*Phi[[]]).star_involution() 4*Phi[] - 3*Phi[3] - Phi[3, 2] + Phi[4, 1] + 2*Phi[4, 5] sage: (Phi[3,3] + 3*Phi[1]).star_involution() 3*Phi[1] + Phi[3, 3] sage: Phi([2,1]).star_involution() Phi[1, 2]
The implementation at hand is tailored to the Phi basis. It is equivalent to the generic implementation via the complete basis:
sage: S = NSym.S() sage: all( S(Phi[I].star_involution()) == S(Phi[I]).star_involution() ....: for I in Compositions(4) ) True
- verschiebung(n)¶
Return the image of the noncommutative symmetric function
self
under the n-th Verschiebung operator.The n-th Verschiebung operator Vn is defined to be the map from the k-algebra of noncommutative symmetric functions to itself that sends the complete function SI indexed by a composition I=(i1,i2,…,ik) to S(i1/n,i2/n,…,ik/n) if all of the numbers i1,i2,…,ik are divisible by n, and to 0 otherwise. This operator Vn is a Hopf algebra endomorphism. For every positive integer r with n∣r, it satisfies
Vn(Sr)=Sr/n,Vn(Λr)=(−1)r−r/nΛr/n,Vn(Ψr)=nΨr/n,Vn(Φr)=nΦr/n(where Sr denotes the r-th complete non-commutative symmetric function, Λr denotes the r-th elementary non-commutative symmetric function, Ψr denotes the r-th power-sum non-commutative symmetric function of the first kind, and Φr denotes the r-th power-sum non-commutative symmetric function of the second kind). For every positive integer r with n∤r, it satisfes
Vn(Sr)=Vn(Λr)=Vn(Ψr)=Vn(Φr)=0.The n-th Verschiebung operator is also called the n-th Verschiebung endomorphism.
It is a lift of the n-th Verschiebung operator on the ring of symmetric functions (
verschiebung()
) to the ring of noncommutative symmetric functions.The action of the n-th Verschiebung operator can also be described on the ribbon Schur functions. Namely, every composition I of size nℓ satisfies
Vn(RI)=(−1)ℓ(I)−ℓ(J)⋅RJ/n,where J denotes the meet of the compositions I and (n,n,…,n⏟|I|/n times), where ℓ(I) is the length of I, and where J/n denotes the composition obtained by dividing every entry of J by n. For a composition I of size not divisible by n, we have Vn(RI)=0.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the n-th Verschiebung operator (on the ring of noncommutative symmetric functions) to
self
.EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: Phi = NSym.Phi() sage: Phi([4,2]).verschiebung(2) 4*Phi[2, 1] sage: Phi([2,4]).verschiebung(2) 4*Phi[1, 2] sage: Phi([6]).verschiebung(2) 2*Phi[3] sage: Phi([2,1]).verschiebung(3) 0 sage: Phi([3]).verschiebung(2) 0 sage: Phi([]).verschiebung(2) Phi[] sage: Phi([5, 1]).verschiebung(3) 0 sage: Phi([5, 1]).verschiebung(6) 0 sage: Phi([5, 1]).verschiebung(2) 0 sage: Phi([1, 2, 3, 1]).verschiebung(7) 0 sage: Phi([7]).verschiebung(7) 7*Phi[1] sage: Phi([1, 2, 3, 1]).verschiebung(5) 0 sage: (Phi[1] - Phi[2] + 2*Phi[3]).verschiebung(1) Phi[1] - Phi[2] + 2*Phi[3]
- class Psi(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The Hopf algebra of non-commutative symmetric functions in the Psi basis.
The Psi basis is defined in Definition 3.4 of [NCSF1], where it is denoted by (ΨI)I. It is a multiplicative basis, and is connected to the elementary generators Λi of the ring of non-commutative symmetric functions by the following relation: Define a non-commutative symmetric function Ψn for every positive integer n by the power series identity
ddtσ(t)=σ(t)⋅(∑k≥1tk−1Ψk),where
σ(t)=(∑k≥0(−t)kΛk)−1and where Λ0 denotes 1. For every composition (i1,i2,…,ik), we have Ψ(i1,i2,…,ik)=Ψi1Ψi2⋯Ψik.
The Ψ-basis is a basis only when the base ring is a Q-algebra (although the ΨI can be defined over any base ring). The elements of the Ψ-basis are known as the “power-sum non-commutative symmetric functions of the first kind”. The generators Ψn correspond to the Dynkin (quasi-)idempotents in the descent algebras of the symmetric groups (see [NCSF1], 5.2 for details).
Another (equivalent) definition of Ψn is
Ψn=n−1∑i=0(−1)iR1i,n−i,where R denotes the ribbon basis of NCSF, and where 1i stands for i repetitions of the integer 1.
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: Psi = NCSF.Psi(); Psi Non-Commutative Symmetric Functions over the Rational Field in the Psi basis sage: Psi.an_element() 2*Psi[] + 2*Psi[1] + 3*Psi[1, 1]
Checking the equivalent definition of Ψn:
sage: def test_psi(n): ....: NCSF = NonCommutativeSymmetricFunctions(ZZ) ....: R = NCSF.R() ....: Psi = NCSF.Psi() ....: a = R.sum([(-1) ** i * R[[1]*i + [n-i]] ....: for i in range(n)]) ....: return a == R(Psi[n]) sage: test_psi(2) True sage: test_psi(3) True sage: test_psi(4) True
- class Element¶
Bases:
sage.modules.with_basis.indexed_element.IndexedFreeModuleElement
- verschiebung(n)¶
Return the image of the noncommutative symmetric function
self
under the n-th Verschiebung operator.The n-th Verschiebung operator Vn is defined to be the map from the k-algebra of noncommutative symmetric functions to itself that sends the complete function SI indexed by a composition I=(i1,i2,…,ik) to S(i1/n,i2/n,…,ik/n) if all of the numbers i1,i2,…,ik are divisible by n, and to 0 otherwise. This operator Vn is a Hopf algebra endomorphism. For every positive integer r with n∣r, it satisfies
Vn(Sr)=Sr/n,Vn(Λr)=(−1)r−r/nΛr/n,Vn(Ψr)=nΨr/n,Vn(Φr)=nΦr/n(where Sr denotes the r-th complete non-commutative symmetric function, Λr denotes the r-th elementary non-commutative symmetric function, Ψr denotes the r-th power-sum non-commutative symmetric function of the first kind, and Φr denotes the r-th power-sum non-commutative symmetric function of the second kind). For every positive integer r with n∤r, it satisfes
Vn(Sr)=Vn(Λr)=Vn(Ψr)=Vn(Φr)=0.The n-th Verschiebung operator is also called the n-th Verschiebung endomorphism.
It is a lift of the n-th Verschiebung operator on the ring of symmetric functions (
verschiebung()
) to the ring of noncommutative symmetric functions.The action of the n-th Verschiebung operator can also be described on the ribbon Schur functions. Namely, every composition I of size nℓ satisfies
Vn(RI)=(−1)ℓ(I)−ℓ(J)⋅RJ/n,where J denotes the meet of the compositions I and (n,n,…,n⏟|I|/n times), where ℓ(I) is the length of I, and where J/n denotes the composition obtained by dividing every entry of J by n. For a composition I of size not divisible by n, we have Vn(RI)=0.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the n-th Verschiebung operator (on the ring of noncommutative symmetric functions) to
self
.EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: Psi = NSym.Psi() sage: Psi([4,2]).verschiebung(2) 4*Psi[2, 1] sage: Psi([2,4]).verschiebung(2) 4*Psi[1, 2] sage: Psi([6]).verschiebung(2) 2*Psi[3] sage: Psi([2,1]).verschiebung(3) 0 sage: Psi([3]).verschiebung(2) 0 sage: Psi([]).verschiebung(2) Psi[] sage: Psi([5, 1]).verschiebung(3) 0 sage: Psi([5, 1]).verschiebung(6) 0 sage: Psi([5, 1]).verschiebung(2) 0 sage: Psi([1, 2, 3, 1]).verschiebung(7) 0 sage: Psi([7]).verschiebung(7) 7*Psi[1] sage: Psi([1, 2, 3, 1]).verschiebung(5) 0 sage: (Psi[1] - Psi[2] + 2*Psi[3]).verschiebung(1) Psi[1] - Psi[2] + 2*Psi[3]
- internal_product_on_basis_by_bracketing(I, J)¶
The internal product of two elements of the Psi basis.
See
internal_product()
for a thorough documentation of this operation.This is an implementation using [NCSF2] Lemma 3.10. It is fast when the length of I is small, but can get very slow otherwise. Therefore it is not being used by default for internally multiplying Psi functions.
INPUT:
I
,J
– compositions
OUTPUT:
The internal product of the elements of the Psi basis of NSym indexed by
I
andJ
, expressed in the Psi basis.
AUTHORS:
Travis Scrimshaw, 29 Mar 2014
EXAMPLES:
sage: N = NonCommutativeSymmetricFunctions(QQ) sage: Psi = N.Psi() sage: Psi.internal_product_on_basis_by_bracketing([2,2],[1,2,1]) 0 sage: Psi.internal_product_on_basis_by_bracketing([1,2,1],[2,1,1]) 4*Psi[1, 2, 1] sage: Psi.internal_product_on_basis_by_bracketing([2,1,1],[1,2,1]) 4*Psi[2, 1, 1] sage: Psi.internal_product_on_basis_by_bracketing([1,2,1], [1,1,1,1]) 0 sage: Psi.internal_product_on_basis_by_bracketing([3,1], [1,2,1]) -Psi[1, 2, 1] + Psi[2, 1, 1] sage: Psi.internal_product_on_basis_by_bracketing([1,2,1], [3,1]) 0 sage: Psi.internal_product_on_basis_by_bracketing([2,2],[1,2]) 0 sage: Psi.internal_product_on_basis_by_bracketing([4], [1,2,1]) -Psi[1, 1, 2] + 2*Psi[1, 2, 1] - Psi[2, 1, 1]
- R¶
- class Ribbon(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The Hopf algebra of non-commutative symmetric functions in the Ribbon basis.
The Ribbon basis is defined in Definition 3.12 of [NCSF1], where it is denoted by (RI)I. It is connected to the complete basis of the ring of non-commutative symmetric functions by the following relation: For every composition I, we have
RI=∑J(−1)ℓ(I)−ℓ(J)SJ,where the sum is over all compositions J which are coarser than I and ℓ(I) denotes the length of I. (See the proof of Proposition 4.13 in [NCSF1].)
The elements of the Ribbon basis are commonly referred to as the ribbon Schur functions.
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: R = NCSF.Ribbon(); R Non-Commutative Symmetric Functions over the Rational Field in the Ribbon basis sage: R.an_element() 2*R[] + 2*R[1] + 3*R[1, 1]
The following are aliases for this basis:
sage: NCSF.ribbon() Non-Commutative Symmetric Functions over the Rational Field in the Ribbon basis sage: NCSF.R() Non-Commutative Symmetric Functions over the Rational Field in the Ribbon basis
- class Element¶
Bases:
sage.modules.with_basis.indexed_element.IndexedFreeModuleElement
- star_involution()¶
Return the image of the noncommutative symmetric function
self
under the star involution.The star involution is defined as the algebra antihomomorphism NCSF→NCSF which, for every positive integer n, sends the n-th complete non-commutative symmetric function Sn to Sn. Denoting by f∗ the image of an element f∈NCSF under this star involution, it can be shown that every composition I satisfies
(SI)∗=SIr,(ΛI)∗=ΛIr,R∗I=RIr,(ΦI)∗=ΦIr,where Ir denotes the reversed composition of I, and standard notations for classical bases of NCSF are being used (S for the complete basis, Λ for the elementary basis, R for the ribbon basis, and Φ for that of the power-sums of the second kind). The star involution is an involution and a coalgebra automorphism of NCSF. It is an automorphism of the graded vector space NCSF. Under the canonical isomorphism between the n-th graded component of NCSF and the descent algebra of the symmetric group Sn (see
to_descent_algebra()
), the star involution (restricted to the n-th graded component) corresponds to the automorphism of the descent algebra given by x↦ωnxωn, where ωn is the permutation (n,n−1,…,1)∈Sn (written here in one-line notation). If π denotes the projection from NCSF to the ring of symmetric functions (to_symmetric_function()
), then π(f∗)=π(f) for every f∈NCSF.The star involution on NCSF is adjoint to the star involution on QSym by the standard adjunction between NCSF and QSym.
The star involution has been denoted by ρ in [LMvW13], section 3.6. See [NCSF2], section 2.3 for the properties of this map.
EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: R = NSym.R() sage: R[3,1,4,2].star_involution() R[2, 4, 1, 3] sage: R[4,1,2].star_involution() R[2, 1, 4] sage: (R[1] - R[2] + 2*R[5,4] - 3*R[3] + 4*R[[]]).star_involution() 4*R[] + R[1] - R[2] - 3*R[3] + 2*R[4, 5] sage: (R[3,3] - 21*R[1]).star_involution() -21*R[1] + R[3, 3] sage: R([14,1]).star_involution() R[1, 14]
The implementation at hand is tailored to the ribbon basis. It is equivalent to the generic implementation via the complete basis:
sage: S = NSym.S() sage: all( S(R[I].star_involution()) == S(R[I]).star_involution() ....: for I in Compositions(4) ) True
- verschiebung(n)¶
Return the image of the noncommutative symmetric function
self
under the n-th Verschiebung operator.The n-th Verschiebung operator Vn is defined to be the map from the k-algebra of noncommutative symmetric functions to itself that sends the complete function SI indexed by a composition I=(i1,i2,…,ik) to S(i1/n,i2/n,…,ik/n) if all of the numbers i1,i2,…,ik are divisible by n, and to 0 otherwise. This operator Vn is a Hopf algebra endomorphism. For every positive integer r with n∣r, it satisfies
Vn(Sr)=Sr/n,Vn(Λr)=(−1)r−r/nΛr/n,Vn(Ψr)=nΨr/n,Vn(Φr)=nΦr/n(where Sr denotes the r-th complete non-commutative symmetric function, Λr denotes the r-th elementary non-commutative symmetric function, Ψr denotes the r-th power-sum non-commutative symmetric function of the first kind, and Φr denotes the r-th power-sum non-commutative symmetric function of the second kind). For every positive integer r with n∤r, it satisfes
Vn(Sr)=Vn(Λr)=Vn(Ψr)=Vn(Φr)=0.The n-th Verschiebung operator is also called the n-th Verschiebung endomorphism.
It is a lift of the n-th Verschiebung operator on the ring of symmetric functions (
verschiebung()
) to the ring of noncommutative symmetric functions.The action of the n-th Verschiebung operator can also be described on the ribbon Schur functions. Namely, every composition I of size nℓ satisfies
Vn(RI)=(−1)ℓ(I)−ℓ(J)⋅RJ/n,where J denotes the meet of the compositions I and (n,n,…,n⏟|I|/n times), where ℓ(I) is the length of I, and where J/n denotes the composition obtained by dividing every entry of J by n. For a composition I of size not divisible by n, we have Vn(RI)=0.
INPUT:
n
– a positive integer
OUTPUT:
The result of applying the n-th Verschiebung operator (on the ring of noncommutative symmetric functions) to
self
.EXAMPLES:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ) sage: R = NSym.R() sage: R([4,2]).verschiebung(2) R[2, 1] sage: R([2,1]).verschiebung(3) -R[1] sage: R([3]).verschiebung(2) 0 sage: R([]).verschiebung(2) R[] sage: R([5, 1]).verschiebung(3) -R[2] sage: R([5, 1]).verschiebung(6) -R[1] sage: R([5, 1]).verschiebung(2) -R[3] sage: R([1, 2, 3, 1]).verschiebung(7) -R[1] sage: R([1, 2, 3, 1]).verschiebung(5) 0 sage: (R[1] - R[2] + 2*R[3]).verschiebung(1) R[1] - R[2] + 2*R[3]
- antipode_on_basis(composition)¶
Return the application of the antipode to a basis element of the ribbon basis
self
.INPUT:
composition
– a composition
OUTPUT:
The image of the basis element indexed by
composition
under the antipode map.
EXAMPLES:
sage: R = NonCommutativeSymmetricFunctions(QQ).ribbon() sage: R.antipode_on_basis(Composition([2,1])) -R[2, 1] sage: R[3,1].antipode() # indirect doctest R[2, 1, 1] sage: R[[]].antipode() # indirect doctest R[]
We check that the implementation of the antipode at hand does not contradict the generic one:
sage: S = NonCommutativeSymmetricFunctions(QQ).S() sage: all( S(R[I].antipode()) == S(R[I]).antipode() ....: for I in Compositions(4) ) True
- dual()¶
Return the dual basis to the ribbon basis of the non-commutative symmetric functions. This is the Fundamental basis of the quasi-symmetric functions.
OUTPUT:
The fundamental basis of the quasi-symmetric functions.
EXAMPLES:
sage: R=NonCommutativeSymmetricFunctions(QQ).ribbon() sage: R.dual() Quasisymmetric functions over the Rational Field in the Fundamental basis
- product_on_basis(I, J)¶
Return the product of two ribbon basis elements of the non-commutative symmetric functions.
INPUT:
I
,J
– compositions
OUTPUT:
The product of the ribbon functions indexed by
I
andJ
.
EXAMPLES:
sage: R = NonCommutativeSymmetricFunctions(QQ).ribbon() sage: R[1,2,1] * R[3,1] R[1, 2, 1, 3, 1] + R[1, 2, 4, 1] sage: ( R[1,2] + R[3] ) * ( R[3,1] + R[1,2,1] ) R[1, 2, 1, 2, 1] + R[1, 2, 3, 1] + R[1, 3, 2, 1] + R[1, 5, 1] + R[3, 1, 2, 1] + R[3, 3, 1] + R[4, 2, 1] + R[6, 1]
- to_symmetric_function_on_basis(I)¶
Return the commutative image of a ribbon basis element of the non-commutative symmetric functions.
INPUT:
I
– a composition
OUTPUT:
The commutative image of the ribbon basis element indexed by
I
. This will be expressed as a symmetric function in the Schur basis.
EXAMPLES:
sage: R=NonCommutativeSymmetricFunctions(QQ).R() sage: R.to_symmetric_function_on_basis(Composition([3,1,1])) s[3, 1, 1] sage: R.to_symmetric_function_on_basis(Composition([4,2,1])) s[4, 2, 1] + s[5, 1, 1] + s[5, 2] sage: R.to_symmetric_function_on_basis(Composition([])) s[]
- S¶
- class Zassenhaus_left(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The Hopf algebra of non-commutative symmetric functions in the left Zassenhaus basis.
This basis is the left-version of the basis defined in Section 2.5.1 of [HLNT09]. It is multiplicative, with Zn defined as the element of NCSFn satisfying the equation
σ1=⋯exp(Zn)⋯exp(Z2)exp(Z1),where
σ1=∑n≥0Sn.It can be recursively computed by the formula
Sn=∑λ⊢n1m1(λ)!m2(λ)!m3(λ)!⋯Zλ1Zλ2Zλ3⋯for all n≥0.
- class Zassenhaus_right(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The Hopf algebra of non-commutative symmetric functions in the right Zassenhaus basis.
This basis is defined in Section 2.5.1 of [HLNT09]. It is multiplicative, with Zn defined as the element of NCSFn satisfying the equation
σ1=exp(Z1)exp(Z2)exp(Z3)⋯exp(Zn)⋯where
σ1=∑n≥0Sn.It can be recursively computed by the formula
Sn=∑λ⊢n1m1(λ)!m2(λ)!m3(λ)!⋯⋯Zλ3Zλ2Zλ1for all n≥0.
Note that there is a variant (called the “noncommutative power sum symmetric functions of the third kind”) in Definition 5.26 of [NCSF2] that satisfies:
σ1=exp(Z1)exp(Z2/2)exp(Z3/3)⋯exp(Zn/n)⋯.
- a_realization()¶
Gives a realization of the algebra of non-commutative symmetric functions. This particular realization is the complete basis of non-commutative symmetric functions.
OUTPUT:
The realization of the non-commutative symmetric functions in the complete basis.
EXAMPLES:
sage: NonCommutativeSymmetricFunctions(ZZ).a_realization() Non-Commutative Symmetric Functions over the Integer Ring in the Complete basis
- complete¶
- dual()¶
Return the dual to the non-commutative symmetric functions.
OUTPUT:
The dual of the non-commutative symmetric functions over a ring. This is the algebra of quasi-symmetric functions over the ring.
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: NCSF.dual() Quasisymmetric functions over the Rational Field
- class dualQuasisymmetric_Schur(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The basis of NCSF dual to the Quasisymmetric-Schur basis of QSym.
The
Quasisymmetric_Schur
functions are defined in [QSCHUR] (see also Definition 5.1.1 of [LMvW13]). The dual basis in the algebra of non-commutative symmetric functions is defined by the following formula:Rα=∑TdQSshape(T),where the sum is over all standard composition tableaux with descent composition equal to α. The
Quasisymmetric_Schur
basis QSα has the property thatsλ=∑sort(α)=λQSα.As a consequence the commutative image of a dual Quasisymmetric-Schur element in the algebra of symmetric functions (the map defined in the method
to_symmetric_function()
) is equal to the Schur function indexed by the decreasing sort of the indexing composition.See also
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: dQS = NCSF.dQS() sage: dQS([1,3,2])*dQS([1]) dQS[1, 2, 4] + dQS[1, 3, 2, 1] + dQS[1, 3, 3] + dQS[3, 2, 2] sage: dQS([1])*dQS([1,3,2]) dQS[1, 1, 3, 2] + dQS[1, 3, 3] + dQS[1, 4, 2] + dQS[2, 3, 2] sage: dQS([1,3])*dQS([1,1]) dQS[1, 3, 1, 1] + dQS[1, 4, 1] + dQS[3, 2, 1] + dQS[4, 2] sage: dQS([3,1])*dQS([2,1]) dQS[1, 1, 4, 1] + dQS[1, 4, 2] + dQS[1, 5, 1] + dQS[2, 4, 1] + dQS[3, 1, 2, 1] + dQS[3, 2, 2] + dQS[3, 3, 1] + dQS[4, 3] + dQS[5, 2] sage: dQS([1,1]).coproduct() dQS[] # dQS[1, 1] + dQS[1] # dQS[1] + dQS[1, 1] # dQS[] sage: dQS([3,3]).coproduct().monomial_coefficients()[(Composition([1,2]),Composition([1,2]))] -1 sage: S = NCSF.complete() sage: dQS(S[1,3,1]) dQS[1, 3, 1] + dQS[1, 4] + dQS[3, 2] + dQS[4, 1] + dQS[5] sage: S(dQS[1,3,1]) S[1, 3, 1] - S[3, 2] - S[4, 1] + S[5] sage: s = SymmetricFunctions(QQ).s() sage: s(S(dQS([2,1,3])).to_symmetric_function()) s[3, 2, 1]
- dual()¶
The dual basis to the dual Quasisymmetric-Schur basis of NCSF.
The basis returned is the
Quasisymmetric_Schur
basis of QSym.OUTPUT:
the Quasisymmetric-Schur basis of the quasi-symmetric functions
EXAMPLES:
sage: dQS=NonCommutativeSymmetricFunctions(QQ).dualQuasisymmetric_Schur() sage: dQS.dual() Quasisymmetric functions over the Rational Field in the Quasisymmetric Schur basis sage: dQS.duality_pairing_matrix(dQS.dual(),3) [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]
- to_symmetric_function_on_basis(I)¶
The commutative image of a dual quasi-symmetric Schur element
The commutative image of a basis element is obtained by sorting the indexing composition of the basis element.
INPUT:
I
– a composition
OUTPUT:
The commutative image of the dual quasi-Schur basis element indexed by
I
. The result is the Schur symmetric function indexed by the partition obtained by sortingI
.
EXAMPLES:
sage: dQS=NonCommutativeSymmetricFunctions(QQ).dQS() sage: dQS.to_symmetric_function_on_basis([2,1,3]) s[3, 2, 1] sage: dQS.to_symmetric_function_on_basis([]) s[]
- class dualYoungQuasisymmetric_Schur(NCSF)¶
Bases:
sage.combinat.free_module.CombinatorialFreeModule
,sage.misc.bindable_class.BindableClass
The basis of NCSF dual to the Young Quasisymmetric-Schur basis of QSym.
The
YoungQuasisymmetric_Schur
functions are given in Definition 5.2.1 of [LMvW13]. The dual basis in the algebra of non-commutative symmetric functions are related by an involution reversing the indexing composition of the complete expansion of a quasi-Schur basis element. This basis has many of the same properties as the Quasisymmetric Schur basis and is related to that basis by an algebraic transformation.EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ) sage: dYQS = NCSF.dYQS() sage: dYQS([1,3,2])*dYQS([1]) dYQS[1, 3, 2, 1] + dYQS[1, 3, 3] + dYQS[1, 4, 2] + dYQS[2, 3, 2] sage: dYQS([1])*dYQS([1,3,2]) dYQS[1, 1, 3, 2] + dYQS[2, 3, 2] + dYQS[3, 3, 1] + dYQS[4, 1, 2] sage: dYQS([1,3])*dYQS([1,1]) dYQS[1, 3, 1, 1] + dYQS[1, 4, 1] + dYQS[2, 3, 1] + dYQS[2, 4] sage: dYQS([3,1])*dYQS([2,1]) dYQS[3, 1, 2, 1] + dYQS[3, 2, 2] + dYQS[3, 3, 1] + dYQS[4, 1, 1, 1] + dYQS[4, 1, 2] + dYQS[4, 2, 1] + dYQS[4, 3] + dYQS[5, 1, 1] + dYQS[5, 2] sage: dYQS([1,1]).coproduct() dYQS[] # dYQS[1, 1] + dYQS[1] # dYQS[1] + dYQS[1, 1] # dYQS[] sage: dYQS([3,3]).coproduct().monomial_coefficients()[(Composition([1,2]),Composition([2,1]))] 1 sage: S = NCSF.complete() sage: dYQS(S[1,3,1]) dYQS[1, 3, 1] + dYQS[1, 4] + dYQS[2, 3] + dYQS[4, 1] + dYQS[5] sage: S(dYQS[1,3,1]) S[1, 3, 1] - S[1, 4] - S[2, 3] + S[5] sage: s = SymmetricFunctions(QQ).s() sage: s(S(dYQS([2,1,3])).to_symmetric_function()) s[3, 2, 1]
- dual()¶
The dual basis to the dual Quasisymmetric-Schur basis of NCSF.
The basis returned is the
Quasisymmetric_Schur
basis of QSym.OUTPUT:
the Young Quasisymmetric-Schur basis of quasi-symmetric functions
EXAMPLES:
sage: dYQS=NonCommutativeSymmetricFunctions(QQ).dualYoungQuasisymmetric_Schur() sage: dYQS.dual() Quasisymmetric functions over the Rational Field in the Young Quasisymmetric Schur basis sage: dYQS.duality_pairing_matrix(dYQS.dual(),3) [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]
- to_symmetric_function_on_basis(I)¶
The commutative image of a dual Young quasi-symmetric Schur element.
The commutative image of a basis element is obtained by sorting the indexing composition of the basis element.
INPUT:
I
– a composition
OUTPUT:
The commutative image of the dual Young quasi-Schur basis element indexed by
I
. The result is the Schur symmetric function indexed by the partition obtained by sortingI
.
EXAMPLES:
sage: dYQS=NonCommutativeSymmetricFunctions(QQ).dYQS() sage: dYQS.to_symmetric_function_on_basis([2,1,3]) s[3, 2, 1] sage: dYQS.to_symmetric_function_on_basis([]) s[]
- elementary¶
- monomial¶
- nM¶
- ribbon¶