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 coalgebras over Rational Field with realizations
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. Over QQ (or any other -algebra),
this Hopf algebra Psi 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
Other concrete representations
Todo
demonstrate how to customize the basis names
NCSF admits many other concrete realizations:
sage: Phi = NCSF.Phi()
sage: ribbon = NCSF.ribbon()
sage: complete = NCSF.complete()
sage: elementary = NCSF.elementary()
sage: monomial = NCSF.monomial()
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 Moebius 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 Moebius inversion on the composition poset, the ribbon
basis element corresponding to a composition is then the
alternating sum over all compositions fatter than the
complement composition of
in the elementary basis:
sage: elementary(ribbon[2,1,2,1])
L[1, 3, 2] - L[1, 5] - L[4, 2] + L[6]
Todo
explain the other changes of bases!
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 hom sets in Category of modules with basis 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]
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
TESTS:
sage: TestSuite(Phi).run()
sage: TestSuite(Psi).run()
sage: TestSuite(complete).run()
Todo
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
Return the commutative image of a non-commutative symmetric function.
OUTPUT:
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]
Return the left-padded Kronecker product of self and x in the basis of self.
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
, let
denote the complete homogeneous symmetric
function indexed by
. For any compositions
,
,
, let
denote the coefficient of
in the internal product
.
For every composition
and every integer
, define the
`n`-completion of `I` to be the composition
;
this
-completion is denoted by
.
Then, for any compositions
and
and every
integer
, we can write the
internal product
in the form
with ranging over all compositions. The
coefficients
are independent on
. These coefficients
are denoted by
, and the
non-commutative symmetric function
is said to be the left-padded Kronecker product of
and
. 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
and
satisfy
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:
OUTPUT:
AUTHORS:
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
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
(this is the same as
) with any complete
homogeneous function: Let
be a composition.
Then, the left-padded Kronecker product of
and
is
, where the sum runs
over all compositions
, and the coefficient
is
defined as the number of ways to obtain
from
by
one of the following two operations:
We check this for compositions of size :
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 :
Let
be a composition. Then, the left-padded Kronecker
product of
and
is
, where the
sum runs over all compositions
, and the coefficient
is defined as the number of ways to obtain
from
by one of the following two operations:
We check this for compositions of size :
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
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
TESTS:
sage: S = NonCommutativeSymmetricFunctions(QQ).S()
sage: (2*S([])).left_padded_kronecker_product(3*S([]))
6*S[]
Different bases and base rings:
sage: NSym = NonCommutativeSymmetricFunctions(ZZ)
sage: S = NSym.S()
sage: L = NSym.L()
sage: L(S[2].left_padded_kronecker_product(L[2]))
L[1, 1, 1] + L[2] + L[2, 1, 1] - L[2, 2]
sage: S(L[2].left_padded_kronecker_product(S[1,1]))
S[1, 1] + 2*S[1, 1, 1] + S[1, 1, 1, 1] - S[1, 1, 2]
sage: NSym = NonCommutativeSymmetricFunctions(CyclotomicField(12))
sage: S = NSym.S()
sage: L = NSym.L()
sage: v = L[2].left_padded_kronecker_product(L[2]); v
L[1, 1] + L[1, 1, 1] + (-1)*L[2] + L[2, 2]
sage: parent(v)
Non-Commutative Symmetric Functions over the Cyclotomic Field of order 12 and degree 4 in the Elementary basis
sage: NSym = NonCommutativeSymmetricFunctions(Zmod(14))
sage: S = NSym.S()
sage: L = NSym.L()
sage: v = L[2].left_padded_kronecker_product(L[2]); v
L[1, 1] + L[1, 1, 1] + 13*L[2] + L[2, 2]
sage: parent(v)
Non-Commutative Symmetric Functions over the Ring of integers modulo 14 in the Elementary basis
sage: NSym = NonCommutativeSymmetricFunctions(ZZ)
sage: R = NSym.R()
sage: v = R[1].left_padded_kronecker_product(R[1]); parent(v)
Non-Commutative Symmetric Functions over the Integer Ring in the Ribbon basis
Return the image of the noncommutative symmetric function self under the omega involution.
The omega involution is defined as the algebra antihomomorphism
which, for every positive integer
, sends
the
-th complete non-commutative symmetric function
to
the
-th elementary non-commutative symmetric function
. This omega involution is denoted by
. It
can be shown that every composition
satisfies
where denotes the reversed composition of
, and
denotes the conjugate composition of
, and
denotes the length of the
composition
, and standard notations for classical bases
of
are being used (
for the complete basis,
for the elementary basis,
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
is a homogeneous element of
of degree
, then
where denotes the antipode of
.
The omega involution is an involution and a
coalgebra automorphism of
. It is an automorphism of the
graded vector space
. If
denotes the projection
from
to the ring of symmetric functions
(to_symmetric_function()), then
for every
,
where the
on the right hand side denotes the omega
automorphism of
.
The omega involution on is adjoint to the omega
involution on
by the standard adjunction between
and
.
The omega involution has been denoted by in [LMvW13],
section 3.6.
See [NCSF1], section 3.1 for the properties of this map.
See also
sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.omega_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.star_involution().
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())
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 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 is adjoint to the omega
involution on
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
Return the image of the noncommutative symmetric function
self under the involution .
The involution is defined as the linear map
which, for every composition
, sends the
complete noncommutative symmetric function
to the
elementary noncommutative symmetric function
.
It can be shown that every composition
satisfies
where denotes the complement of the composition
, and
denotes the length of
, and where standard
notations for classical bases of
are being used
(
for the complete basis,
for the elementary basis,
for the basis of the power sums of the second kind,
and
for the ribbon basis). The map
is an involution
and a graded Hopf algebra automorphism of
. If
denotes the projection from
to the ring of symmetric
functions (to_symmetric_function()), then
for every
, where
the
on the right hand side denotes the omega
automorphism of
.
The involution of
is adjoint to the involution
of
by the standard adjunction between
and
.
The involution has been denoted by
in [LMvW13],
section 3.6.
See also
sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.star_involution().
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 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
is adjoint to the involution
of
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
Return the image of the noncommutative symmetric function self under the star involution.
The star involution is defined as the algebra antihomomorphism
which, for every positive integer
, sends
the
-th complete non-commutative symmetric function
to
. Denoting by
the image of an element
under this star involution, it can be shown that
every composition
satisfies
where denotes the reversed composition of
, and
standard notations for classical bases of
are being used
(
for the complete basis,
for the elementary basis,
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
. It is an automorphism of the
graded vector space
. Under the canonical isomorphism
between the
-th graded component of
and the descent
algebra of the symmetric group
(see
to_descent_algebra()), the star involution (restricted to
the
-th graded component) corresponds to the automorphism
of the descent algebra given by
, where
is the
permutation
(written here in
one-line notation). If
denotes the projection from
to the ring of symmetric functions
(to_symmetric_function()), then
for every
.
The star involution on is adjoint to the star involution
on
by the standard adjunction between
and
.
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
sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.star_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.psi_involution().
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 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 is adjoint to the star involution
on
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
Return the image of the n-th degree homogeneous component
of self in the descent algebra of over the same
base ring as self.
This is based upon the canonical isomorphism from the
-th degree homogeneous component of the algebra of
noncommutative symmetric functions to the descent algebra
of
. This isomorphism maps the inner product of
noncommutative symmetric functions either to the product
in the descent algebra of
or to its opposite
(depending on how the latter is defined).
OUTPUT:
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[1,2,1] - 3 * S[1,1,2]).to_descent_algebra(1)
0
Return the image of self in the symmetric functions in non-commuting variables under the map that fixes the usual symmetric functions.
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_ncsym()
2*m{} + 2*m{{1}} + 3/2*m{{1}, {2}}
sage: y = N.Phi()[1,2]
sage: y.to_ncsym()
m{{1}, {2, 3}} + m{{1, 2, 3}}
Return the commutative image of a non-commutative symmetric function.
OUTPUT:
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]
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:
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()
[]
TESTS:
Sending a noncommutative symmetric function to the symmetric group algebra directly has the same result as going through the descent algebra:
sage: S = NonCommutativeSymmetricFunctions(QQ).S()
sage: SGA4 = SymmetricGroupAlgebra(QQ, 4)
sage: D4 = DescentAlgebra(QQ, 4).D()
sage: all( S[C].to_symmetric_group_algebra()
....: == SGA4(D4(S[C].to_descent_algebra(4)))
....: for C in Compositions(4) )
True
Return the image of the noncommutative symmetric function
self under the -th Verschiebung operator.
The -th Verschiebung operator
is defined
to be the map from the
-algebra of noncommutative
symmetric functions to itself that sends the complete function
indexed by a composition
to
if all of the numbers
are divisible by
, and to
otherwise. This operator
is a Hopf algebra
endomorphism. For every positive integer
with
,
it satisfies
(where denotes the
-th complete non-commutative
symmetric function,
denotes the
-th elementary
non-commutative symmetric function,
denotes the
-th
power-sum non-commutative symmetric function of the first kind,
and
denotes the
-th power-sum non-commutative
symmetric function of the second kind). For every positive
integer
with
, it satisfes
The -th Verschiebung operator is also called the
-th
Verschiebung endomorphism.
It is a lift of the -th Verschiebung operator on the ring
of symmetric functions (
sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
) to the ring of noncommutative symmetric functions.
The action of the -th Verschiebung operator can also be
described on the ribbon Schur functions. Namely, every
composition
of size
satisfies
where denotes the meet of the compositions
and
,
where
is the length of
, and
where
denotes the composition obtained by dividing
every entry of
by
.
For a composition
of size not divisible by
, we have
.
See also
sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius(), sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
INPUT:
OUTPUT:
The result of applying the -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 are adjoint to the
Verschiebung operators on
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
Return the immaculate function corresponding to the integer vector xs, written in the basis self.
If is any integer vector – i.e., an element of
for some
–, the immaculate function
corresponding to
is a non-commutative symmetric
function denoted by
. One way to
define this function is by setting
where is written in the form
, and where
stands for the complete basis
(sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.S).
The immaculate function first
appeared in [BBSSZ2012] (where it was defined
differently, but the definition we gave above appeared as
Theorem 3.27).
The immaculate functions for
running over all compositions (i.e., finite
sequences of positive integers) form a basis of
.
This is the immaculate basis
(sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.I).
INPUT:
OUTPUT:
The immaculate function , where
, written in the basis self.
EXAMPLES:
Let us first check that, for xs a composition, we get the same as the result of self.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]
TESTS:
Basis-independence:
sage: NSym = NonCommutativeSymmetricFunctions(QQ)
sage: L = NSym.L()
sage: S = NSym.S()
sage: L(S.immaculate_function([0, 2, 0, 2])) == L.immaculate_function([0, 2, 0, 2])
True
Morphism of self to the algebra of symmetric
functions in non-commuting variables that for the natural
maps
and
, we
have
.
This is constructed by extending the method to_ncsym_on_basis() linearly.
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_ncsym(x)
2*m{} + 2*m{{1}} + 3/2*m{{1}, {2}}
sage: S = N.complete()
sage: S.to_ncsym(S[1,2])
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: Phi = N.Phi()
sage: Phi.to_ncsym(Phi[1,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/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}}
sage: R.to_ncsym
Generic morphism:
From: Non-Commutative Symmetric Functions over the Rational Field in the Ribbon basis
To: Symmetric functions in non-commuting variables over the Rational Field in the monomial basis
The image of the basis element indexed by I under the
map to the symmetric functions in non-commuting
variables such that for the natural maps
and
, we have
.
This default implementation does a change of basis and computes the image in the complete basis.
INPUT:
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(QQ).S()
sage: S.to_ncsym(S[2,1])
1/2*m{{1}, {2}, {3}} + 1/2*m{{1}, {2, 3}} + m{{1, 2}, {3}}
+ m{{1, 2, 3}} + 1/2*m{{1, 3}, {2}}
sage: R = NonCommutativeSymmetricFunctions(QQ).R()
sage: R.to_ncsym_on_basis(Composition([2,1]))
1/3*m{{1}, {2}, {3}} + 1/6*m{{1}, {2, 3}} + 2/3*m{{1, 2}, {3}} + 1/6*m{{1, 3}, {2}}
Morphism of self to the algebra of symmetric functions.
This is constructed by extending the method to_symmetric_function_on_basis() linearly.
OUTPUT:
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: S = N.complete()
sage: S.to_symmetric_function(S[3,1,2])
h[3, 2, 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: R.to_symmetric_function
Generic morphism:
From: Non-Commutative Symmetric Functions over the Rational Field in the Ribbon basis
To: Symmetric Functions over Rational Field in the Schur basis
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:
OUTPUT:
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(QQ).S()
sage: S.to_symmetric_function(S[2,1])
h[2, 1]
sage: R = NonCommutativeSymmetricFunctions(QQ).R()
sage: R.to_symmetric_function_on_basis(Composition([2,1]))
s[2, 1]
Return the super categories of the category of bases of the non-commutative symmetric functions.
OUTPUT:
TESTS:
sage: N = NonCommutativeSymmetricFunctions(QQ)
sage: N.Bases().super_categories()
[Category of bases of Non-Commutative Symmetric Functions or Quasisymmetric functions over the Rational Field,
Category of realizations of graded modules with internal product over Rational Field]
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 . It is a multiplicative basis, and is
connected to the elementary generators
of the ring of
non-commutative symmetric functions by the following relation:
Define a non-commutative symmetric function
for every
nonnegative integer
by the power series identity
with denoting
. For every composition
, we have
.
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
Bases: sage.combinat.free_module.CombinatorialFreeModuleElement
An element in the Complete basis.
Return the image of the noncommutative symmetric function
self under the involution .
The involution is defined as the linear map
which, for every composition
, sends the
complete noncommutative symmetric function
to the
elementary noncommutative symmetric function
.
It can be shown that every composition
satisfies
where denotes the complement of the composition
, and
denotes the length of
, and where standard
notations for classical bases of
are being used
(
for the complete basis,
for the elementary
basis,
for the basis of the power sums of the second
kind, and
for the ribbon basis). The map
is an
involution and a graded Hopf algebra automorphism of
.
If
denotes the projection from
to the ring of
symmetric functions (to_symmetric_function()), then
for every
, where
the
on the right hand side denotes the omega
automorphism of
.
The involution of
is adjoint to the involution
of
by the standard adjunction between
and
.
The involution has been denoted by
in [LMvW13],
section 3.6.
See also
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.star_involution().
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
Return the dual basis to the complete basis of non-commutative symmetric functions. This is the Monomial basis of quasi-symmetric functions.
OUTPUT:
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(QQ).S()
sage: S.dual()
Quasisymmetric functions over the Rational Field in the Monomial basis
The internal product of two non-commutative symmetric complete functions.
See internal_product() for a thorough documentation of this operation.
INPUT:
OUTPUT:
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
Return the image of the complete non-commutative symmetric function
in the symmetric functions in non-commuting variables under the
embedding which fixes the symmetric functions.
This map is defined by
and extended as an algebra homomorphism.
EXAMPLES:
sage: S = NonCommutativeSymmetricFunctions(QQ).S()
sage: S.to_ncsym_on_basis(Composition([2]))
1/2*m{{1}, {2}} + m{{1, 2}}
sage: S.to_ncsym_on_basis(Composition([1,2,1]))
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.to_ncsym_on_basis(Composition([]))
m{}
TESTS:
Check that the image under fixes the
symmetric functions:
sage: S = NonCommutativeSymmetricFunctions(QQ).S()
sage: m = SymmetricFunctionsNonCommutingVariables(QQ).monomial()
sage: mon = SymmetricFunctions(QQ).monomial()
sage: all(S[c].to_ncsym().to_symmetric_function() == S[c].to_symmetric_function()
....: for i in range(5) for c in Compositions(i))
True
We also check that the monomials agree on the homogeneous
and complete basis:
sage: h = SymmetricFunctions(QQ).h()
sage: all(m.from_symmetric_function(h[i]) == S[i].to_ncsym() for i in range(6))
True
The commutative image of a complete non-commutative symmetric function basis element. This is obtained by sorting the composition.
INPUT:
OUTPUT:
EXAMPLES:
sage: S=NonCommutativeSymmetricFunctions(QQ).S()
sage: S.to_symmetric_function_on_basis([2,1,3])
h[3, 2, 1]
sage: S.to_symmetric_function_on_basis([])
h[]
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 . It is a multiplicative
basis, and is obtained from the elementary generators
of the ring of non-commutative symmetric functions
through the formula
for every composition
.
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
Bases: sage.combinat.free_module.CombinatorialFreeModuleElement
Create a combinatorial module element. This should never be called directly, but only through the parent combinatorial free module’s __call__() method.
TESTS:
sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
sage: B = F.basis()
sage: f = B['a'] + 3*B['c']; f
B['a'] + 3*B['c']
sage: f == loads(dumps(f))
True
Return the image of the noncommutative symmetric function
self under the involution .
The involution is defined as the linear map
which, for every composition
, sends the
complete noncommutative symmetric function
to the
elementary noncommutative symmetric function
.
It can be shown that every composition
satisfies
where denotes the complement of the composition
, and
denotes the length of
, and where standard
notations for classical bases of
are being used
(
for the complete basis,
for the elementary basis,
for the basis of the power sums of the second kind,
and
for the ribbon basis). The map
is an involution
and a graded Hopf algebra automorphism of
. If
denotes the projection from
to the ring of symmetric
functions (to_symmetric_function()), then
for every
, where
the
on the right hand side denotes the omega
automorphism of
.
The involution of
is adjoint to the involution
of
by the standard adjunction between
and
.
The involution has been denoted by
in [LMvW13],
section 3.6.
See also
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.star_involution().
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
Return the image of the noncommutative symmetric function self under the star involution.
The star involution is defined as the algebra antihomomorphism
which, for every positive integer
, sends
the
-th complete non-commutative symmetric function
to
. Denoting by
the image of an element
under this star involution, it can be shown that
every composition
satisfies
where denotes the reversed composition of
, and
standard notations for classical bases of
are being used
(
for the complete basis,
for the elementary basis,
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
. It is an automorphism of the
graded vector space
. Under the canonical isomorphism
between the
-th graded component of
and the descent
algebra of the symmetric group
(see
to_descent_algebra()), the star involution (restricted to
the
-th graded component) corresponds to the automorphism
of the descent algebra given by
, where
is the
permutation
(written here in
one-line notation). If
denotes the projection from
to the ring of symmetric functions
(to_symmetric_function()), then
for every
.
The star involution on is adjoint to the star involution
on
by the standard adjunction between
and
.
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
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.star_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.star_involution().
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
Return the image of the noncommutative symmetric function
self under the -th Verschiebung operator.
The -th Verschiebung operator
is defined
to be the map from the
-algebra of noncommutative
symmetric functions to itself that sends the complete function
indexed by a composition
to
if all of the numbers
are divisible by
, and to
otherwise. This operator
is a Hopf algebra
endomorphism. For every positive integer
with
,
it satisfies
(where denotes the
-th complete non-commutative
symmetric function,
denotes the
-th elementary
non-commutative symmetric function,
denotes the
-th
power-sum non-commutative symmetric function of the first kind,
and
denotes the
-th power-sum non-commutative
symmetric function of the second kind). For every positive
integer
with
, it satisfes
The -th Verschiebung operator is also called the
-th
Verschiebung endomorphism.
It is a lift of the -th Verschiebung operator on the ring
of symmetric functions (
sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
) to the ring of noncommutative symmetric functions.
The action of the -th Verschiebung operator can also be
described on the ribbon Schur functions. Namely, every
composition
of size
satisfies
where denotes the meet of the compositions
and
,
where
is the length of
, and
where
denotes the composition obtained by
dividing every entry of
by
.
For a composition
of size not divisible by
, we
have
.
See also
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.verschiebung(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius(), sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
INPUT:
OUTPUT:
The result of applying the -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]
TESTS:
The current implementation on the Elementary basis gives the same results as the default implementation:
sage: S = NSym.S()
sage: def test_L(N, n):
....: for I in Compositions(N):
....: if S(L[I].verschiebung(n)) != S(L[I]).verschiebung(n):
....: return False
....: return True
sage: test_L(4, 2)
True
sage: test_L(6, 2)
True
sage: test_L(6, 3)
True
sage: test_L(8, 4) # long time
True
Bases: sage.combinat.free_module.CombinatorialFreeModule, sage.misc.bindable_class.BindableClass
The immaculate basis of the non-commutative symmetric
functions. This basis first appears in Berg, Bergeron,
Saliola, Serrano and Zabrocki’s [BBSSZ2012]. It can be
described as the family , where
runs over all compositions, and
denotes the immaculate function
corresponding to
(see
immaculate_function()).
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]
Bases: sage.combinat.free_module.CombinatorialFreeModule, sage.misc.bindable_class.BindableClass
The monomial basis defined in Tevlin’s paper [Tev2007]. It
is the basis denoted by in that paper.
The Monomial basis is well-defined only when the base ring is a
-algebra.
TESTS:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ)
sage: nM = NCSF.monomial(); nM
Non-Commutative Symmetric Functions over the Rational Field in the Monomial basis
sage: nM([1,1])*nM([2])
3*nM[1, 1, 2] + nM[1, 3] + nM[2, 2]
sage: R = NCSF.ribbon()
sage: nM(R[1,3,1])
11*nM[1, 1, 1, 1, 1] + 8*nM[1, 1, 2, 1] + 8*nM[1, 2, 1, 1] + 5*nM[1, 3, 1] + 8*nM[2, 1, 1, 1] + 5*nM[2, 2, 1] + 5*nM[3, 1, 1] + 2*nM[4, 1]
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
Return the algebra generators of a given multiplicative basis of non-commutative symmetric functions.
OUTPUT:
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])
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:
OUTPUT:
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ)
sage: Psi = NCSF.Psi()
sage: def double(i) : return 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()
Join of Category of hom sets in Category of modules with basis over Rational Field and Category of hom sets in Category of rings
When extra properties about the morphism are known, one can specify the category of which it is a morphism:
sage: def negate(i): return -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()
Join of Category of hom sets in Category of modules with basis over Rational Field and Category of hom sets in Category of rings
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 hom sets in Category of modules with basis over Rational Field
Return the antipode morphism on the basis self.
The antipode of is closely related to the omega
involution; see
omega_involution()
for the latter.
OUTPUT:
EXAMPLES:
sage: S=NonCommutativeSymmetricFunctions(QQ).S()
sage: S.antipode
Generic endomorphism of Non-Commutative Symmetric Functions over the Rational Field in the Complete basis
Return the coproduct morphism in the basis self.
OUTPUT:
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
Return the product of two basis elements from the multiplicative basis. Multiplication is just concatenation on compositions.
INPUT:
OUTPUT:
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]
Return the super categories of the category of multiplicative bases of the non-commutative symmetric functions.
OUTPUT:
TESTS:
sage: N = NonCommutativeSymmetricFunctions(QQ)
sage: N.MultiplicativeBases().super_categories()
[Category of bases of Non-Commutative Symmetric Functions over the Rational Field]
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
satisfy
with . (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
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
Return the application of the antipode to a basis element.
INPUT:
OUTPUT:
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 docttest
-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
Return the image of the generator of the algebra under
the coproduct.
INPUT:
OUTPUT:
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[]
TESTS:
sage: S.coproduct_on_generators(0)
Traceback (most recent call last):
...
ValueError: Not a positive integer: 0
Return the super categories of the category of multiplicative bases of group-like elements of the non-commutative symmetric functions.
OUTPUT:
TESTS:
sage: N = NonCommutativeSymmetricFunctions(QQ)
sage: N.MultiplicativeBasesOnGroupLikeElements().super_categories()
[Category of multiplicative bases of Non-Commutative Symmetric Functions over the Rational Field]
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 of a bialgebra is primitive if
, 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() and coproduct_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
Return the image of a generator of a primitive basis of the non-commutative symmetric functions under the antipode map.
INPUT:
OUTPUT:
EXAMPLES:
sage: Psi=NonCommutativeSymmetricFunctions(QQ).Psi()
sage: Psi.antipode_on_generators(2)
-Psi[2]
TESTS:
sage: Psi.antipode_on_generators(0)
Traceback (most recent call last):
...
ValueError: Not a positive integer: 0
Return the image of the generator of the
multiplicative basis self under the coproduct.
INPUT:
OUTPUT:
EXAMPLES:
sage: Psi = NonCommutativeSymmetricFunctions(QQ).Psi()
sage: Psi.coproduct_on_generators(3)
Psi[] # Psi[3] + Psi[3] # Psi[]
TESTS:
sage: Psi.coproduct_on_generators(0)
Traceback (most recent call last):
...
ValueError: Not a positive integer: 0
Return the super categories of the category of multiplicative bases of primitive elements of the non-commutative symmetric functions.
OUTPUT:
TESTS:
sage: N = NonCommutativeSymmetricFunctions(QQ)
sage: N.MultiplicativeBasesOnPrimitiveElements().super_categories()
[Category of multiplicative bases of Non-Commutative Symmetric Functions over the Rational Field]
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 . It is a multiplicative basis, and
is connected to the elementary generators
of the ring
of non-commutative symmetric functions by the following relation:
Define a non-commutative symmetric function
for every
positive integer
by the power series identity
with denoting
. For every composition
, we have
.
The -basis is well-defined only when the base ring is a
-algebra. The elements of the
-basis are known as the
“power-sum non-commutative symmetric functions of the second
kind”.
The generators 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]
Bases: sage.combinat.free_module.CombinatorialFreeModuleElement
Create a combinatorial module element. This should never be called directly, but only through the parent combinatorial free module’s __call__() method.
TESTS:
sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
sage: B = F.basis()
sage: f = B['a'] + 3*B['c']; f
B['a'] + 3*B['c']
sage: f == loads(dumps(f))
True
Return the image of the noncommutative symmetric function
self under the involution .
The involution is defined as the linear map
which, for every composition
, sends the
complete noncommutative symmetric function
to the
elementary noncommutative symmetric function
.
It can be shown that every composition
satisfies
where denotes the complement of the composition
, and
denotes the length of
, and where standard
notations for classical bases of
are being used
(
for the complete basis,
for the elementary basis,
for the basis of the power sums of the second kind,
and
for the ribbon basis). The map
is an involution
and a graded Hopf algebra automorphism of
. If
denotes the projection from
to the ring of symmetric
functions (to_symmetric_function()), then
for every
, where
the
on the right hand side denotes the omega
automorphism of
.
The involution of
is adjoint to the involution
of
by the standard adjunction between
and
.
The involution has been denoted by
in [LMvW13],
section 3.6.
See also
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.star_involution().
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
Return the image of the noncommutative symmetric function self under the star involution.
The star involution is defined as the algebra antihomomorphism
which, for every positive integer
, sends
the
-th complete non-commutative symmetric function
to
. Denoting by
the image of an element
under this star involution, it can be shown that
every composition
satisfies
where denotes the reversed composition of
, and
standard notations for classical bases of
are being used
(
for the complete basis,
for the elementary basis,
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
. It is an automorphism of the
graded vector space
. Under the canonical isomorphism
between the
-th graded component of
and the descent
algebra of the symmetric group
(see
to_descent_algebra()), the star involution (restricted to
the
-th graded component) corresponds to the automorphism
of the descent algebra given by
, where
is the
permutation
(written here in
one-line notation). If
denotes the projection from
to the ring of symmetric functions
(to_symmetric_function()), then
for every
.
The star involution on is adjoint to the star involution
on
by the standard adjunction between
and
.
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
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.star_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.psi_involution(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.star_involution().
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
Return the image of the noncommutative symmetric function
self under the -th Verschiebung operator.
The -th Verschiebung operator
is defined
to be the map from the
-algebra of noncommutative
symmetric functions to itself that sends the complete function
indexed by a composition
to
if all of the numbers
are divisible by
, and to
otherwise. This operator
is a Hopf algebra
endomorphism. For every positive integer
with
,
it satisfies
(where denotes the
-th complete non-commutative
symmetric function,
denotes the
-th elementary
non-commutative symmetric function,
denotes the
-th
power-sum non-commutative symmetric function of the first kind,
and
denotes the
-th power-sum non-commutative
symmetric function of the second kind). For every positive
integer
with
, it satisfes
The -th Verschiebung operator is also called the
-th
Verschiebung endomorphism.
It is a lift of the -th Verschiebung operator on the ring
of symmetric functions (
sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
) to the ring of noncommutative symmetric functions.
The action of the -th Verschiebung operator can also be
described on the ribbon Schur functions. Namely, every
composition
of size
satisfies
where denotes the meet of the compositions
and
,
where
is the length of
, and
where
denotes the composition obtained by
dividing every entry of
by
.
For a composition
of size not divisible by
, we
have
.
See also
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.verschiebung(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius(), sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
INPUT:
OUTPUT:
The result of applying the -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]
TESTS:
The current implementation on the Phi basis gives the same results as the default implementation:
sage: S = NSym.S()
sage: def test_phi(N, n):
....: for I in Compositions(N):
....: if S(Phi[I].verschiebung(n)) != S(Phi[I]).verschiebung(n):
....: return False
....: return True
sage: test_phi(4, 2)
True
sage: test_phi(6, 2)
True
sage: test_phi(6, 3)
True
sage: test_phi(8, 4) # long time
True
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 . It is a multiplicative basis, and
is connected to the elementary generators
of the ring
of non-commutative symmetric functions by the following relation:
Define a non-commutative symmetric function
for every
positive integer
by the power series identity
where
and where denotes
. For every composition
, we have
.
The -basis is a basis only when the base ring is a
-algebra (although the
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
correspond to the Dynkin
(quasi-)idempotents in the descent algebras of the symmetric
groups (see [NCSF1], 5.2 for details).
Another (equivalent) definition of is
where denotes the ribbon basis of
, and where
stands for
repetitions of the integer
.
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 :
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 Psi(a) == Psi[n]
sage: test_psi(2)
True
sage: test_psi(3)
True
sage: test_psi(4)
True
Bases: sage.combinat.free_module.CombinatorialFreeModuleElement
Create a combinatorial module element. This should never be called directly, but only through the parent combinatorial free module’s __call__() method.
TESTS:
sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
sage: B = F.basis()
sage: f = B['a'] + 3*B['c']; f
B['a'] + 3*B['c']
sage: f == loads(dumps(f))
True
Return the image of the noncommutative symmetric function
self under the -th Verschiebung operator.
The -th Verschiebung operator
is defined
to be the map from the
-algebra of noncommutative
symmetric functions to itself that sends the complete function
indexed by a composition
to
if all of the numbers
are divisible by
, and to
otherwise. This operator
is a Hopf algebra
endomorphism. For every positive integer
with
,
it satisfies
(where denotes the
-th complete non-commutative
symmetric function,
denotes the
-th elementary
non-commutative symmetric function,
denotes the
-th
power-sum non-commutative symmetric function of the first kind,
and
denotes the
-th power-sum non-commutative
symmetric function of the second kind). For every positive
integer
with
, it satisfes
The -th Verschiebung operator is also called the
-th
Verschiebung endomorphism.
It is a lift of the -th Verschiebung operator on the ring
of symmetric functions (
sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
) to the ring of noncommutative symmetric functions.
The action of the -th Verschiebung operator can also be
described on the ribbon Schur functions. Namely, every
composition
of size
satisfies
where denotes the meet of the compositions
and
,
where
is the length of
, and
where
denotes the composition obtained by
dividing every entry of
by
.
For a composition
of size not divisible by
, we
have
.
See also
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmeticFunctions.Bases.ElementMethods.verschiebung(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius(), sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
INPUT:
OUTPUT:
The result of applying the -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]
TESTS:
The current implementation on the Psi basis gives the same results as the default implementation:
sage: S = NSym.S()
sage: def test_psi(N, n):
....: for I in Compositions(N):
....: if S(Psi[I].verschiebung(n)) != S(Psi[I]).verschiebung(n):
....: return False
....: return True
sage: test_psi(4, 2)
True
sage: test_psi(6, 2)
True
sage: test_psi(6, 3)
True
sage: test_psi(8, 4) # long time
True
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 is small, but can get
very slow otherwise. Therefore it is not being used by
default for internally multiplying Psi functions.
INPUT:
OUTPUT:
AUTHORS:
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]
TESTS:
The internal product computed by this method is identical with the one obtained by coercion to the complete basis:
sage: S = N.S()
sage: def psi_int_test(n):
....: for I in Compositions(n):
....: for J in Compositions(n):
....: a = S(Psi.internal_product_on_basis_by_bracketing(I, J))
....: b = S(Psi[I]).internal_product(S(Psi[J]))
....: if a != b:
....: return False
....: return True
sage: all( psi_int_test(i) for i in range(4) )
True
sage: psi_int_test(4) # long time
True
sage: psi_int_test(5) # long time
True
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 . It is connected to the complete
basis of the ring of non-commutative symmetric functions by the
following relation: For every composition
, we have
where the sum is over all compositions which are coarser than
and
denotes the length of
. (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
Bases: sage.combinat.free_module.CombinatorialFreeModuleElement
Create a combinatorial module element. This should never be called directly, but only through the parent combinatorial free module’s __call__() method.
TESTS:
sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
sage: B = F.basis()
sage: f = B['a'] + 3*B['c']; f
B['a'] + 3*B['c']
sage: f == loads(dumps(f))
True
Return the image of the noncommutative symmetric function self under the star involution.
The star involution is defined as the algebra antihomomorphism
which, for every positive integer
, sends
the
-th complete non-commutative symmetric function
to
. Denoting by
the image of an element
under this star involution, it can be shown that
every composition
satisfies
where denotes the reversed composition of
, and
standard notations for classical bases of
are being used
(
for the complete basis,
for the elementary basis,
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
. It is an automorphism of the
graded vector space
. Under the canonical isomorphism
between the
-th graded component of
and the descent
algebra of the symmetric group
(see
to_descent_algebra()), the star involution (restricted to
the
-th graded component) corresponds to the automorphism
of the descent algebra given by
, where
is the
permutation
(written here in
one-line notation). If
denotes the projection from
to the ring of symmetric functions
(to_symmetric_function()), then
for every
.
The star involution on is adjoint to the star involution
on
by the standard adjunction between
and
.
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
sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.star_involution(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.star_involution(), sage.combinat.ncsf_qsym.ncsf.NonCommutativeSymmetricFunctions.Bases.ElementMethods.psi_involution().
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
Return the image of the noncommutative symmetric function
self under the -th Verschiebung operator.
The -th Verschiebung operator
is defined
to be the map from the
-algebra of noncommutative
symmetric functions to itself that sends the complete function
indexed by a composition
to
if all of the numbers
are divisible by
, and to
otherwise. This operator
is a Hopf algebra
endomorphism. For every positive integer
with
,
it satisfies
(where denotes the
-th complete non-commutative
symmetric function,
denotes the
-th elementary
non-commutative symmetric function,
denotes the
-th
power-sum non-commutative symmetric function of the first kind,
and
denotes the
-th power-sum non-commutative
symmetric function of the second kind). For every positive
integer
with
, it satisfes
The -th Verschiebung operator is also called the
-th
Verschiebung endomorphism.
It is a lift of the -th Verschiebung operator on the ring
of symmetric functions (
sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
) to the ring of noncommutative symmetric functions.
The action of the -th Verschiebung operator can also be
described on the ribbon Schur functions. Namely, every
composition
of size
satisfies
where denotes the meet of the compositions
and
,
where
is the length of
, and
where
denotes the composition obtained by
dividing every entry of
by
.
For a composition
of size not divisible by
, we
have
.
See also
sage.combinat.ncsf_qsym.qsym.NonCommutativeSymmetricFunctions.Bases.ElementMethods.verschiebung(), sage.combinat.ncsf_qsym.qsym.QuasiSymmetricFunctions.Bases.ElementMethods.frobenius(), sage.combinat.sf.sfa.SymmetricFunctionAlgebra_generic_Element.verschiebung()
INPUT:
OUTPUT:
The result of applying the -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]
TESTS:
The current implementation on the ribbon basis gives the same results as the default implementation:
sage: S = NSym.S()
sage: def test_ribbon(N, n):
....: for I in Compositions(N):
....: if S(R[I].verschiebung(n)) != S(R[I]).verschiebung(n):
....: return False
....: return True
sage: test_ribbon(4, 2)
True
sage: test_ribbon(6, 2)
True
sage: test_ribbon(6, 3)
True
sage: test_ribbon(8, 4) # long time
True
Return the application of the antipode to a basis element of the ribbon basis self.
INPUT:
OUTPUT:
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
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:
EXAMPLES:
sage: R=NonCommutativeSymmetricFunctions(QQ).ribbon()
sage: R.dual()
Quasisymmetric functions over the Rational Field in the Fundamental basis
Return the product of two ribbon basis elements of the non-commutative symmetric functions.
INPUT:
OUTPUT:
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]
TESTS:
sage: R[[]] * R[3,1]
R[3, 1]
sage: R[1,2,1] * R[[]]
R[1, 2, 1]
sage: R.product_on_basis(Composition([2,1]), Composition([1]))
R[2, 1, 1] + R[2, 2]
Return the commutative image of a ribbon basis element of the non-commutative symmetric functions.
INPUT:
OUTPUT:
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[]
Gives a realization of the algebra of non-commutative symmetric functions. This particular realization is the complete basis of non-commutative symmetric functions.
OUTPUT:
EXAMPLES:
sage: NonCommutativeSymmetricFunctions(ZZ).a_realization()
Non-Commutative Symmetric Functions over the Integer Ring in the Complete basis
Return the dual to the non-commutative symmetric functions.
OUTPUT:
EXAMPLES:
sage: NCSF = NonCommutativeSymmetricFunctions(QQ)
sage: NCSF.dual()
Quasisymmetric functions over the Rational Field