Return the Hecke algebra of the symmetric group on the T-basis
with quantum parameter q over the ring
.
If is a commutative ring and
is an invertible element of
,
and if
is a nonnegative integer, then the Hecke algebra of the
symmetric group
over
with quantum parameter
is defined
as the algebra generated by the generators
with relations
for all (“braid relations”),
for all and
such that
(“locality relations”),
and
for all (the “quadratic relations”, also known in the form
). (This is only one of several existing
definitions in literature, not all of which are fully equivalent.
We are following the conventions of [GS93].) For any permutation
, we can define an element
of this Hecke algebra by
setting
, where
is a reduced word for
(with
meaning the transposition
, and the product of
permutations being evaluated by first applying
, then
, etc.). This element is independent of the choice of
the reduced decomposition, and can be computed in Sage by calling
H[w] where H is the Hecke algebra and w is the
permutation.
The Hecke algebra of the symmetric group with quantum parameter
over
can be seen as a deformation of the group algebra
; indeed, it becomes
when
.
Warning
The multiplication on the Hecke algebra of the symmetric group does not follow the global option mult of the Permutations class (see global_options()). It is always as defined above. It does not match the default option (mult=l2r) of the symmetric group algebra!
REFERENCES:
[GS93] | David M. Goldschmidt. Group characters, symmetric functions, and the Hecke algebras. AMS 1993. |
EXAMPLES:
sage: HeckeAlgebraSymmetricGroupT(QQ, 3)
Hecke algebra of the symmetric group of order 3 on the T basis over Univariate Polynomial Ring in q over Rational Field
sage: HeckeAlgebraSymmetricGroupT(QQ, 3, 2)
Hecke algebra of the symmetric group of order 3 with q=2 on the T basis over Rational Field
The multiplication on the Hecke algebra follows a different convention than the one on the symmetric group algebra does by default:
sage: H3 = HeckeAlgebraSymmetricGroupT(QQ, 3)
sage: H3([1,3,2]) * H3([2,1,3])
T[3, 1, 2]
sage: S3 = SymmetricGroupAlgebra(QQ, 3)
sage: S3([1,3,2]) * S3([2,1,3])
[2, 3, 1]
sage: TestSuite(H3).run()
Bases: sage.combinat.combinatorial_algebra.CombinatorialAlgebra
TESTS:
sage: HeckeAlgebraSymmetricGroupT(QQ, 3)
Hecke algebra of the symmetric group of order 3 on the T basis over Univariate Polynomial Ring in q over Rational Field
sage: HeckeAlgebraSymmetricGroupT(QQ, 3, q=1)
Hecke algebra of the symmetric group of order 3 with q=1 on the T basis over Rational Field
EXAMPLES:
sage: HeckeAlgebraSymmetricGroupT(QQ, 3).q()
q
sage: HeckeAlgebraSymmetricGroupT(QQ, 3, 2).q()
2
Bases: sage.combinat.symmetric_group_algebra.HeckeAlgebraSymmetricGroup_generic
TESTS:
sage: H3 = HeckeAlgebraSymmetricGroupT(QQ, 3)
sage: H3 == loads(dumps(H3))
True
Return the generators of the algebra.
EXAMPLES:
sage: HeckeAlgebraSymmetricGroupT(QQ,3).algebra_generators()
[T[2, 1, 3], T[1, 3, 2]]
Return the Jucys-Murphy element of the Hecke algebra.
These Jucys-Murphy elements are defined by
More explicitly,
For generic , the
generate a maximal commutative
sub-algebra of the Hecke algebra.
Warning
The specialization does not map these elements
to the Young-Jucys-Murphy elements of the group
algebra
. (Instead, it maps the “reduced”
Jucys-Murphy elements
to the
Young-Jucys-Murphy elements of
.)
EXAMPLES:
sage: H3 = HeckeAlgebraSymmetricGroupT(QQ,3)
sage: j2 = H3.jucys_murphy(2); j2
q*T[1, 2, 3] + (q-1)*T[2, 1, 3]
sage: j3 = H3.jucys_murphy(3); j3
q^2*T[1, 2, 3] + (q^2-q)*T[1, 3, 2] + (q-1)*T[3, 2, 1]
sage: j2*j3 == j3*j2
True
sage: j0 = H3.jucys_murphy(1); j0 == H3.one()
True
sage: H3.jucys_murphy(0)
Traceback (most recent call last):
...
ValueError: k (= 0) must be between 1 and n (= 3)
Return the element of the Hecke algebra self.
EXAMPLES:
sage: H3 = HeckeAlgebraSymmetricGroupT(QQ,3)
sage: H3.t(1)
T[2, 1, 3]
sage: H3.t(2)
T[1, 3, 2]
sage: H3.t(0)
Traceback (most recent call last):
...
ValueError: i (= 0) must be between 1 and n-1 (= 2)
Return the product .
EXAMPLES:
sage: H3 = HeckeAlgebraSymmetricGroupT(QQ, 3)
sage: a = H3([2,1,3])+2*H3([1,2,3])
sage: H3.t_action(a, 1)
q*T[1, 2, 3] + (q+1)*T[2, 1, 3]
sage: H3.t(1)*a
q*T[1, 2, 3] + (q+1)*T[2, 1, 3]
Return the product , where perm is a
permutation in the symmetric group
.
EXAMPLES:
sage: H3 = HeckeAlgebraSymmetricGroupT(QQ, 3)
sage: H3.t_action_on_basis(Permutation([2,1,3]), 1)
q*T[1, 2, 3] + (q-1)*T[2, 1, 3]
sage: H3.t_action_on_basis(Permutation([1,2,3]), 1)
T[2, 1, 3]
sage: H3 = HeckeAlgebraSymmetricGroupT(QQ, 3, 1)
sage: H3.t_action_on_basis(Permutation([2,1,3]), 1)
T[1, 2, 3]
sage: H3.t_action_on_basis(Permutation([1,3,2]), 2)
T[1, 2, 3]
Return the symmetric group algebra of order n over the ring R.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3); QS3
Symmetric group algebra of order 3 over Rational Field
sage: QS3(1)
[1, 2, 3]
sage: QS3(2)
2*[1, 2, 3]
sage: basis = [QS3(p) for p in Permutations(3)]
sage: a = sum(basis); a
[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1]
sage: a^2
6*[1, 2, 3] + 6*[1, 3, 2] + 6*[2, 1, 3] + 6*[2, 3, 1] + 6*[3, 1, 2] + 6*[3, 2, 1]
sage: a^2 == 6*a
True
sage: b = QS3([3, 1, 2])
sage: b
[3, 1, 2]
sage: b*a
[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1]
sage: b*a == a
True
The canonical embedding from the symmetric group algebra of order
to the symmetric group algebra of order
is available as
a coercion:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: QS4 = SymmetricGroupAlgebra(QQ, 4)
sage: QS4.coerce_map_from(QS3)
Generic morphism:
From: Symmetric group algebra of order 3 over Rational Field
To: Symmetric group algebra of order 4 over Rational Field
sage: x3 = QS3([3,1,2]) + 2 * QS3([2,3,1]); x3
2*[2, 3, 1] + [3, 1, 2]
sage: QS4(x3)
2*[2, 3, 1, 4] + [3, 1, 2, 4]
This allows for mixed expressions:
sage: x4 = 3*QS4([3, 1, 4, 2])
sage: x3 + x4
2*[2, 3, 1, 4] + [3, 1, 2, 4] + 3*[3, 1, 4, 2]
sage: QS0 = SymmetricGroupAlgebra(QQ, 0)
sage: QS1 = SymmetricGroupAlgebra(QQ, 1)
sage: x0 = QS0([])
sage: x1 = QS1([1])
sage: x0 * x1
[1]
sage: x3 - (2*x0 + x1) - x4
-3*[1, 2, 3, 4] + 2*[2, 3, 1, 4] + [3, 1, 2, 4] - 3*[3, 1, 4, 2]
Caveat: to achieve this, constructing SymmetricGroupAlgebra(QQ, 10) currently triggers the construction of all symmetric group algebras of smaller order. Is this a feature we really want to have?
Warning
The semantics of multiplication in symmetric group algebras is determined by the order in which permutations are multiplied, which currently defaults to “in such a way that multiplication is associative with permutations acting on integers from the right”, but can be changed to the opposite order at runtime by setting a global variable (see sage.combinat.permutation.Permutations.global_options() ). In view of this, it is recommended that code not rely on the usual multiplication function, but rather use the methods left_action_product() and right_action_product() for multiplying permutations (these methods don’t depend on the setting). See trac ticket #14885 for more information.
TESTS:
sage: TestSuite(QS3).run()
Bases: sage.combinat.free_module.CombinatorialFreeModule
TESTS:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: TestSuite(QS3).run()
sage: QS3 in GroupAlgebras(QQ)
True
sage: QS3 in FiniteDimensionalAlgebrasWithBasis(QQ)
True
Return generators of this group algebra (as algebra) as a list of permutations.
The generators used for the group algebra of are the
transposition
and the
-cycle
,
unless
(in which case no generators are needed).
EXAMPLES:
sage: SymmetricGroupAlgebra(ZZ,5).algebra_generators()
[[2, 1, 3, 4, 5], [2, 3, 4, 5, 1]]
sage: SymmetricGroupAlgebra(QQ,0).algebra_generators()
[]
sage: SymmetricGroupAlgebra(QQ,1).algebra_generators()
[]
TESTS:
Check that trac ticket #15309 is fixed:
sage: S3 = SymmetricGroupAlgebra(QQ, 3)
sage: S3.algebra_generators()
[[2, 1, 3], [2, 3, 1]]
sage: C = CombinatorialFreeModule(ZZ, ZZ)
sage: M = C.module_morphism(lambda x: S3.zero(), codomain=S3)
sage: M.register_as_coercion()
Return the image of the element x of self under the antipode of the Hopf algebra self (where the comultiplication is the usual one on a group algebra).
Explicitly, this is obtained by replacing each permutation
by
in x while keeping all
coefficients as they are.
EXAMPLES:
sage: QS4 = SymmetricGroupAlgebra(QQ, 4)
sage: QS4.antipode(2 * QS4([1, 3, 4, 2]) - 1/2 * QS4([1, 4, 2, 3]))
-1/2*[1, 3, 4, 2] + 2*[1, 4, 2, 3]
sage: all( QS4.antipode(QS4(p)) == QS4(p.inverse())
....: for p in Permutations(4) )
True
sage: ZS3 = SymmetricGroupAlgebra(ZZ, 3)
sage: ZS3.antipode(ZS3.zero())
0
sage: ZS3.antipode(-ZS3(Permutation([2, 3, 1])))
-[3, 1, 2]
Return the -th binary unshuffle sum in the group algebra
self.
The -th binary unshuffle sum in the symmetric group algebra
over a ring
is defined as the sum of all permutations
satisfying
and
.
This element has the property that, if it is denoted by ,
and if the
-th semi-RSW element (see semi_rsw_element())
is denoted by
, then
and
both
equal the
-th Reiner-Saliola-Welker shuffling element of
(see rsw_shuffling_element()).
The -th binary unshuffle sum is the image of the complete
non-commutative symmetric function
in the
ring of non-commutative symmetric functions under the canonical
projection on the symmetric group algebra (through the descent
algebra).
EXAMPLES:
The binary unshuffle sums on :
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: QS3.binary_unshuffle_sum(0)
[1, 2, 3]
sage: QS3.binary_unshuffle_sum(1)
[1, 2, 3] + [2, 1, 3] + [3, 1, 2]
sage: QS3.binary_unshuffle_sum(2)
[1, 2, 3] + [1, 3, 2] + [2, 3, 1]
sage: QS3.binary_unshuffle_sum(3)
[1, 2, 3]
sage: QS3.binary_unshuffle_sum(4)
0
Let us check the relation with the -th Reiner-Saliola-Welker
shuffling element stated in the docstring:
sage: def test_rsw(n):
....: ZSn = SymmetricGroupAlgebra(ZZ, n)
....: for k in range(1, n):
....: a = ZSn.semi_rsw_element(k)
....: b = ZSn.binary_unshuffle_sum(k)
....: c = ZSn.left_action_product(a, ZSn.antipode(b))
....: d = ZSn.left_action_product(b, ZSn.antipode(a))
....: e = ZSn.rsw_shuffling_element(k)
....: if c != e or d != e:
....: return False
....: return True
sage: test_rsw(3)
True
sage: test_rsw(4) # long time
True
sage: test_rsw(5) # long time
True
Let us also check the statement about the complete non-commutative symmetric function:
sage: def test_rsw_ncsf(n):
....: ZSn = SymmetricGroupAlgebra(ZZ, n)
....: NSym = NonCommutativeSymmetricFunctions(ZZ)
....: S = NSym.S()
....: for k in range(1, n):
....: a = S(Composition([k, n-k])).to_symmetric_group_algebra()
....: if a != ZSn.binary_unshuffle_sum(k):
....: return False
....: return True
sage: test_rsw_ncsf(3)
True
sage: test_rsw_ncsf(4)
True
sage: test_rsw_ncsf(5) # long time
True
Return the canonical coercion of self into a symmetric group algebra other.
INPUT:
EXAMPLES:
sage: QS2 = SymmetricGroupAlgebra(QQ, 2)
sage: QS4 = SymmetricGroupAlgebra(QQ, 4)
sage: phi = QS2.canonical_embedding(QS4); phi
Generic morphism:
From: Symmetric group algebra of order 2 over Rational Field
To: Symmetric group algebra of order 4 over Rational Field
sage: x = QS2([2,1]) + 2 * QS2([1,2])
sage: phi(x)
2*[1, 2, 3, 4] + [2, 1, 3, 4]
sage: loads(dumps(phi))
Generic morphism:
From: Symmetric group algebra of order 2 over Rational Field
To: Symmetric group algebra of order 4 over Rational Field
sage: ZS2 = SymmetricGroupAlgebra(ZZ, 2)
sage: phi = ZS2.canonical_embedding(QS4); phi
Generic morphism:
From: Symmetric group algebra of order 2 over Integer Ring
To: Symmetric group algebra of order 4 over Rational Field
sage: phi = ZS2.canonical_embedding(QS2); phi
Generic morphism:
From: Symmetric group algebra of order 2 over Integer Ring
To: Symmetric group algebra of order 2 over Rational Field
sage: QS4.canonical_embedding(QS2)
Traceback (most recent call last):
...
ValueError: There is no canonical embedding from Symmetric group
algebra of order 2 over Rational Field to Symmetric group
algebra of order 4 over Rational Field
Return the centrally primitive idempotent for the symmetric group
of order corresponding to the irreducible representation
indexed by the partition p.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ,3)
sage: QS3.cpi([2,1])
2/3*[1, 2, 3] - 1/3*[2, 3, 1] - 1/3*[3, 1, 2]
sage: QS3.cpi([3])
1/6*[1, 2, 3] + 1/6*[1, 3, 2] + 1/6*[2, 1, 3] + 1/6*[2, 3, 1] + 1/6*[3, 1, 2] + 1/6*[3, 2, 1]
sage: QS3.cpi([1,1,1])
1/6*[1, 2, 3] - 1/6*[1, 3, 2] - 1/6*[2, 1, 3] + 1/6*[2, 3, 1] + 1/6*[3, 1, 2] - 1/6*[3, 2, 1]
sage: QS0 = SymmetricGroupAlgebra(QQ, 0)
sage: QS0.cpi(Partition([]))
[]
TESTS:
sage: QS3.cpi([2,2])
Traceback (most recent call last):
...
TypeError: p (= [2, 2]) must be a partition of n (= 3)
Return a list of the centrally primitive idempotents of self.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ,3)
sage: a = QS3.cpis()
sage: a[0] # [3]
1/6*[1, 2, 3] + 1/6*[1, 3, 2] + 1/6*[2, 1, 3] + 1/6*[2, 3, 1] + 1/6*[3, 1, 2] + 1/6*[3, 2, 1]
sage: a[1] # [2, 1]
2/3*[1, 2, 3] - 1/3*[2, 3, 1] - 1/3*[3, 1, 2]
Return the discrete Fourier transform for self.
INPUT:
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: QS3.dft()
[ 1 1 1 1 1 1]
[ 1 1/2 -1 -1/2 -1/2 1/2]
[ 0 3/4 0 3/4 -3/4 -3/4]
[ 0 1 0 -1 1 -1]
[ 1 -1/2 1 -1/2 -1/2 -1/2]
[ 1 -1 -1 1 1 -1]
Return the seminormal basis element of self corresponding to the pair of tableaux itab and ktab (or restrictions of these tableaux, if the optional variable star is set).
INPUT:
OUTPUT:
The element , where
and
are the tableaux
obtained by removing all entries higher than
from itab and ktab, respectively. Here, we are using the
notations from seminormal_basis().
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: a = QS3.epsilon_ik([[1,2,3]], [[1,2,3]]); a
1/6*[1, 2, 3] + 1/6*[1, 3, 2] + 1/6*[2, 1, 3] + 1/6*[2, 3, 1] + 1/6*[3, 1, 2] + 1/6*[3, 2, 1]
sage: QS3.dft()*vector(a)
(1, 0, 0, 0, 0, 0)
sage: a = QS3.epsilon_ik([[1,2],[3]], [[1,2],[3]]); a
1/3*[1, 2, 3] - 1/6*[1, 3, 2] + 1/3*[2, 1, 3] - 1/6*[2, 3, 1] - 1/6*[3, 1, 2] - 1/6*[3, 2, 1]
sage: QS3.dft()*vector(a)
(0, 0, 0, 0, 1, 0)
Let us take some properties of the seminormal basis listed in
the docstring of seminormal_basis(), and verify them on
the situation of .
First, check the formula
In fact:
sage: from sage.combinat.symmetric_group_algebra import e
sage: def test_sn1(n):
....: QSn = SymmetricGroupAlgebra(QQ, n)
....: QSn1 = SymmetricGroupAlgebra(QQ, n - 1)
....: for T in StandardTableaux(n):
....: TT = T.restrict(n-1)
....: eTT = QSn1.epsilon_ik(TT, TT)
....: eT = QSn.epsilon_ik(T, T)
....: kT = prod(T.shape().hooks())
....: if kT * eT != eTT * e(T) * eTT:
....: return False
....: return True
sage: test_sn1(3)
True
sage: test_sn1(4) # long time
True
Next, we check the identity
which we used to define . In fact:
sage: from sage.combinat.symmetric_group_algebra import e
sage: def test_sn2(n):
....: QSn = SymmetricGroupAlgebra(QQ, n)
....: mul = QSn.left_action_product
....: QSn1 = SymmetricGroupAlgebra(QQ, n - 1)
....: for lam in Partitions(n):
....: k = prod(lam.hooks())
....: for T in StandardTableaux(lam):
....: for S in StandardTableaux(lam):
....: TT = T.restrict(n-1)
....: SS = S.restrict(n-1)
....: eTT = QSn1.epsilon_ik(TT, TT)
....: eSS = QSn1.epsilon_ik(SS, SS)
....: eTS = QSn.epsilon_ik(T, S)
....: piTS = [0] * n
....: for (i, j) in T.cells():
....: piTS[T[i][j] - 1] = S[i][j]
....: piTS = QSn(Permutation(piTS))
....: if k * eTS != mul(mul(eSS, piTS), mul(e(T), eTT)):
....: return False
....: return True
sage: test_sn2(3)
True
sage: test_sn2(4) # long time
True
Let us finally check the identity
In fact:
sage: def test_sn3(lam):
....: n = lam.size()
....: QSn = SymmetricGroupAlgebra(QQ, n)
....: mul = QSn.left_action_product
....: for T in StandardTableaux(lam):
....: for S in StandardTableaux(lam):
....: for U in StandardTableaux(lam):
....: for V in StandardTableaux(lam):
....: lhs = mul(QSn.epsilon_ik(T, S), QSn.epsilon_ik(U, V))
....: if T == V:
....: rhs = QSn.epsilon_ik(U, S)
....: else:
....: rhs = QSn.zero()
....: if rhs != lhs:
....: return False
....: return True
sage: all( test_sn3(lam) for lam in Partitions(3) )
True
sage: all( test_sn3(lam) for lam in Partitions(4) ) # long time
True
Return the underlying group.
EXAMPLES:
sage: SymmetricGroupAlgebra(QQ,4).group()
Symmetric group of order 4! as a permutation group
Return the Jucys-Murphy element (also known as a
Young-Jucys-Murphy element) for the symmetric group
algebra self.
The Jucys-Murphy element in the symmetric group algebra
is defined for every
by
where the addends are transpositions in (regarded as
elements of
). We note that there is not a dependence on
,
so it is often surpressed in the notation.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: QS3.jucys_murphy(1)
0
sage: QS3.jucys_murphy(2)
[2, 1, 3]
sage: QS3.jucys_murphy(3)
[1, 3, 2] + [3, 2, 1]
sage: QS4 = SymmetricGroupAlgebra(QQ, 4)
sage: j3 = QS4.jucys_murphy(3); j3
[1, 3, 2, 4] + [3, 2, 1, 4]
sage: j4 = QS4.jucys_murphy(4); j4
[1, 2, 4, 3] + [1, 4, 3, 2] + [4, 2, 3, 1]
sage: j3*j4 == j4*j3
True
sage: QS5 = SymmetricGroupAlgebra(QQ, 5)
sage: QS5.jucys_murphy(4)
[1, 2, 4, 3, 5] + [1, 4, 3, 2, 5] + [4, 2, 3, 1, 5]
TESTS:
sage: QS3.jucys_murphy(4)
Traceback (most recent call last):
...
ValueError: k (= 4) must be between 1 and n (= 3) (inclusive)
Return the product of two elements left and right of
self, where multiplication is defined in such a way that
for two permutations and
, the product
is the
permutation obtained by first applying
and then applying
. This definition of multiplication is tailored to make
multiplication of permutations associative with their action on
numbers if permutations are to act on numbers from the left.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: p1 = Permutation([2, 1, 3])
sage: p2 = Permutation([3, 1, 2])
sage: QS3.left_action_product(QS3(p1), QS3(p2))
[3, 2, 1]
sage: x = QS3([1, 2, 3]) - 2*QS3([1, 3, 2])
sage: y = 1/2 * QS3([3, 1, 2]) + 3*QS3([1, 2, 3])
sage: QS3.left_action_product(x, y)
3*[1, 2, 3] - 6*[1, 3, 2] - [2, 1, 3] + 1/2*[3, 1, 2]
sage: QS3.left_action_product(0, x)
0
The method coerces its input into the algebra self:
sage: QS4 = SymmetricGroupAlgebra(QQ, 4)
sage: QS4.left_action_product(QS3([1, 2, 3]), QS3([2, 1, 3]))
[2, 1, 3, 4]
sage: QS4.left_action_product(1, Permutation([4, 1, 2, 3]))
[4, 1, 2, 3]
Warning
Note that coercion presently works from permutations of n into the n-th symmetric group algebra, and also from all smaller symmetric group algebras into the n-th symmetric group algebra, but not from permutations of integers smaller than n into the n-th symmetric group algebra.
Convert permutation into a permutation, possibly extending it to the appropriate size, and return the corresponding basis element of self.
EXAMPLES:
sage: QS5 = SymmetricGroupAlgebra(QQ, 5)
sage: QS5.monomial_from_smaller_permutation([])
[1, 2, 3, 4, 5]
sage: QS5.monomial_from_smaller_permutation(Permutation([3,1,2]))
[3, 1, 2, 4, 5]
sage: QS5.monomial_from_smaller_permutation([5,3,4,1,2])
[5, 3, 4, 1, 2]
TESTS:
sage: QS5.monomial_from_smaller_permutation([5,3,4,1,2]).parent()
Symmetric group algebra of order 5 over Rational Field
Return the identity of the symmetric group, as per AlgebrasWithBasis.ParentMethods.one_basis.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: QS3.one_basis()
[1, 2, 3]
Return the product of the basis elements indexed by left and right.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: p1 = Permutation([1,2,3])
sage: p2 = Permutation([2,1,3])
sage: QS3.product_on_basis(p1,p2)
[2, 1, 3]
Return the direct-product retract of the element
to
, where
(and where
is self).
If is a nonnegative integer less or equal to
, then the
direct-product retract from
to
is defined as an
-linear map
which sends every permutation
to
Here denotes the direct-product retract of the
permutation
to
, which is defined in
retract_direct_product().
EXAMPLES:
sage: SGA3 = SymmetricGroupAlgebra(QQ, 3)
sage: SGA3.retract_direct_product(2*SGA3([1,2,3]) - 4*SGA3([2,1,3]) + 7*SGA3([1,3,2]), 2)
2*[1, 2] - 4*[2, 1]
sage: SGA3.retract_direct_product(2*SGA3([1,3,2]) - 5*SGA3([2,3,1]), 2)
0
sage: SGA5 = SymmetricGroupAlgebra(QQ, 5)
sage: SGA5.retract_direct_product(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 4)
11*[3, 2, 1, 4]
sage: SGA5.retract_direct_product(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 3)
-6*[1, 3, 2] + 11*[3, 2, 1]
sage: SGA5.retract_direct_product(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 2)
0
sage: SGA5.retract_direct_product(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 1)
2*[1]
sage: SGA5.retract_direct_product(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 3)
8*[1, 2, 3] - 6*[1, 3, 2]
sage: SGA5.retract_direct_product(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 1)
2*[1]
sage: SGA5.retract_direct_product(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 0)
2*[]
See also
Return the Okounkov-Vershik retract of the element
to
, where
(and where
is self).
If is a nonnegative integer less or equal to
, then the
Okounkov-Vershik retract from
to
is defined as an
-linear map
which sends every permutation
to the Okounkov-Vershik retract of the permutation
to
, which is defined in
retract_okounkov_vershik().
EXAMPLES:
sage: SGA3 = SymmetricGroupAlgebra(QQ, 3)
sage: SGA3.retract_okounkov_vershik(2*SGA3([1,2,3]) - 4*SGA3([2,1,3]) + 7*SGA3([1,3,2]), 2)
9*[1, 2] - 4*[2, 1]
sage: SGA3.retract_okounkov_vershik(2*SGA3([1,3,2]) - 5*SGA3([2,3,1]), 2)
2*[1, 2] - 5*[2, 1]
sage: SGA5 = SymmetricGroupAlgebra(QQ, 5)
sage: SGA5.retract_okounkov_vershik(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 4)
-6*[1, 3, 2, 4] + 8*[1, 4, 2, 3] + 11*[3, 2, 1, 4]
sage: SGA5.retract_okounkov_vershik(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 3)
2*[1, 3, 2] + 11*[3, 2, 1]
sage: SGA5.retract_okounkov_vershik(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 2)
13*[1, 2]
sage: SGA5.retract_okounkov_vershik(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 1)
13*[1]
sage: SGA5.retract_okounkov_vershik(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 3)
8*[1, 2, 3] - 6*[1, 3, 2]
sage: SGA5.retract_okounkov_vershik(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 1)
2*[1]
sage: SGA5.retract_okounkov_vershik(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 0)
2*[]
See also
Return the plain retract of the element
to
, where
(and where
is self).
If is a nonnegative integer less or equal to
, then the
plain retract from
to
is defined as an
-linear
map
which sends every permutation
to
Here denotes the plain retract of the
permutation
to
, which is defined in
retract_plain().
EXAMPLES:
sage: SGA3 = SymmetricGroupAlgebra(QQ, 3)
sage: SGA3.retract_plain(2*SGA3([1,2,3]) - 4*SGA3([2,1,3]) + 7*SGA3([1,3,2]), 2)
2*[1, 2] - 4*[2, 1]
sage: SGA3.retract_plain(2*SGA3([1,3,2]) - 5*SGA3([2,3,1]), 2)
0
sage: SGA5 = SymmetricGroupAlgebra(QQ, 5)
sage: SGA5.retract_plain(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 4)
11*[3, 2, 1, 4]
sage: SGA5.retract_plain(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 3)
11*[3, 2, 1]
sage: SGA5.retract_plain(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 2)
0
sage: SGA5.retract_plain(8*SGA5([1,4,2,5,3]) - 6*SGA5([1,3,2,5,4]) + 11*SGA5([3,2,1,4,5]), 1)
0
sage: SGA5.retract_plain(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 3)
8*[1, 2, 3] - 6*[1, 3, 2]
sage: SGA5.retract_plain(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 1)
8*[1]
sage: SGA5.retract_plain(8*SGA5([1,2,3,4,5]) - 6*SGA5([1,3,2,4,5]), 0)
8*[]
Return the product of two elements left and right of
self, where multiplication is defined in such a way that
for two permutations and
, the product
is the
permutation obtained by first applying
and then applying
. This definition of multiplication is tailored to make
multiplication of permutations associative with their action on
numbers if permutations are to act on numbers from the right.
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: p1 = Permutation([2, 1, 3])
sage: p2 = Permutation([3, 1, 2])
sage: QS3.right_action_product(QS3(p1), QS3(p2))
[1, 3, 2]
sage: x = QS3([1, 2, 3]) - 2*QS3([1, 3, 2])
sage: y = 1/2 * QS3([3, 1, 2]) + 3*QS3([1, 2, 3])
sage: QS3.right_action_product(x, y)
3*[1, 2, 3] - 6*[1, 3, 2] + 1/2*[3, 1, 2] - [3, 2, 1]
sage: QS3.right_action_product(0, x)
0
The method coerces its input into the algebra self:
sage: QS4 = SymmetricGroupAlgebra(QQ, 4)
sage: QS4.right_action_product(QS3([1, 2, 3]), QS3([2, 1, 3]))
[2, 1, 3, 4]
sage: QS4.right_action_product(1, Permutation([4, 1, 2, 3]))
[4, 1, 2, 3]
Warning
Note that coercion presently works from permutations of n into the n-th symmetric group algebra, and also from all smaller symmetric group algebras into the n-th symmetric group algebra, but not from permutations of integers smaller than n into the n-th symmetric group algebra.
Return the -th Reiner-Saliola-Welker shuffling element in
the group algebra self.
The -th Reiner-Saliola-Welker shuffling element in the
symmetric group algebra
over a ring
is defined as the
sum
,
where for every permutation
, the number
is the number of all
-noninversions of
(that is, the number of all
-element subsets of
on which
restricts to a strictly increasing map). See
sage.combinat.permutation.number_of_noninversions() for
the
map.
This element is more or less the operator
introduced in [RSW2011]; more precisely,
is the left multiplication by this element.
It is a nontrivial theorem (Theorem 1.1 in [RSW2011]) that
the operators (for fixed
and varying
) pairwise commute. It is a conjecture (Conjecture 1.2 in
[RSW2011]) that all their eigenvalues are integers (which, in
light of their commutativity and easily established symmetry,
yields that they can be simultaneously diagonalized over
with only integer eigenvalues).
EXAMPLES:
The Reiner-Saliola-Welker shuffling elements on :
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: QS3.rsw_shuffling_element(0)
[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1]
sage: QS3.rsw_shuffling_element(1)
3*[1, 2, 3] + 3*[1, 3, 2] + 3*[2, 1, 3] + 3*[2, 3, 1] + 3*[3, 1, 2] + 3*[3, 2, 1]
sage: QS3.rsw_shuffling_element(2)
3*[1, 2, 3] + 2*[1, 3, 2] + 2*[2, 1, 3] + [2, 3, 1] + [3, 1, 2]
sage: QS3.rsw_shuffling_element(3)
[1, 2, 3]
sage: QS3.rsw_shuffling_element(4)
0
Checking the commutativity of Reiner-Saliola-Welker shuffling elements (we leave out the ones for which it is trivial):
sage: def test_rsw_comm(n):
....: QSn = SymmetricGroupAlgebra(QQ, n)
....: rsws = [QSn.rsw_shuffling_element(k) for k in range(2, n)]
....: return all( all( rsws[i] * rsws[j] == rsws[j] * rsws[i]
....: for j in range(i) )
....: for i in range(len(rsws)) )
sage: test_rsw_comm(3)
True
sage: test_rsw_comm(4)
True
sage: test_rsw_comm(5) # long time
True
Note
For large k (relative to n), it might be faster to call QSn.left_action_product(QSn.semi_rsw_element(k), QSn.antipode(binary_unshuffle_sum(k))) than QSn.rsw_shuffling_element(n).
See also
Return the -th semi-RSW element in the group algebra self.
The -th semi-RSW element in the symmetric group algebra
over a ring
is defined as the sum of all permutations
satisfying
.
This element has the property that, if it is denoted by ,
then
is
times the
-th
Reiner-Saliola-Welker shuffling element of
(see
rsw_shuffling_element()). Here,
denotes the antipode
of the group algebra
.
The -th semi-RSW element is the image of the complete
non-commutative symmetric function
in the
ring of non-commutative symmetric functions under the canonical
projection on the symmetric group algebra (through the descent
algebra).
EXAMPLES:
The semi-RSW elements on :
sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: QS3.semi_rsw_element(0)
[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1]
sage: QS3.semi_rsw_element(1)
[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1]
sage: QS3.semi_rsw_element(2)
[1, 2, 3] + [1, 3, 2] + [2, 3, 1]
sage: QS3.semi_rsw_element(3)
[1, 2, 3]
sage: QS3.semi_rsw_element(4)
0
Let us check the relation with the -th Reiner-Saliola-Welker
shuffling element stated in the docstring:
sage: def test_rsw(n):
....: ZSn = SymmetricGroupAlgebra(ZZ, n)
....: for k in range(1, n):
....: a = ZSn.semi_rsw_element(k)
....: b = ZSn.left_action_product(a, ZSn.antipode(a))
....: if factorial(n-k) * ZSn.rsw_shuffling_element(k) != b:
....: return False
....: return True
sage: test_rsw(3)
True
sage: test_rsw(4)
True
sage: test_rsw(5) # long time
True
Let us also check the statement about the complete non-commutative symmetric function:
sage: def test_rsw_ncsf(n):
....: ZSn = SymmetricGroupAlgebra(ZZ, n)
....: NSym = NonCommutativeSymmetricFunctions(ZZ)
....: S = NSym.S()
....: for k in range(1, n):
....: a = S(Composition([k] + [1]*(n-k))).to_symmetric_group_algebra()
....: if a != ZSn.semi_rsw_element(k):
....: return False
....: return True
sage: test_rsw_ncsf(3)
True
sage: test_rsw_ncsf(4)
True
sage: test_rsw_ncsf(5) # long time
True
Return a list of the seminormal basis elements of self.
The seminormal basis of a symmetric group algebra is defined as follows:
Let be a nonnegative integer. Let
be a
-algebra.
In the following, we will use the “left action” convention for
multiplying permutations. This means that for all permutations
and
in
, the product
is defined in such a way
that
for each
(this is the same convention as in left_action_product(),
but not the default semantics of the
operator on
permutations in Sage). Thus, for instance,
is the
permutation obtained by first transposing
with
and
then transposing
with
(where
).
For every partition of
, let
where is the number of standard Young tableaux
of shape
. Note that
is an integer,
namely the product of all hook lengths of
(by the
hook length formula). In Sage, this integer can be computed by
using sage.combinat.symmetric_group_algebra.kappa().
Let be a standard tableau of size
.
Let denote the formal sum (in
) of all
permutations in
which stabilize the rows of
(as
sets), i. e., which map each entry
of
to an entry in
the same row as
. (See
sage.combinat.symmetric_group_algebra.a() for
an implementation of this.)
Let denote the signed formal sum (in
) of all
permutations in
which stabilize the columns of
(as
sets). Here, “signed” means that each permutation is
multiplied with its sign. (This is implemented in
sage.combinat.symmetric_group_algebra.b().)
Define an element of
to be
. (This
is implemented in sage.combinat.symmetric_group_algebra.e()
for
.)
Let denote the shape of
.
(See shape().)
Let denote the standard tableau of size
obtained by removing the letter
(along with its cell) from
(if
).
Now, we define an element of
. We define
it by induction on the size
of
, so we set
and only need to define
for
, assuming that
is
already defined. We do this by setting
This element is implemented as
sage.combinat.symmetric_group_algebra.epsilon() for
, but it is also a particular case of the elements
defined below.
Now let be a further tableau of the same shape as
(possibly equal to
). Let
denote the
permutation in
such that applying this permutation to
the entries of
yields the tableau
. Define an element
of
by
This element is called Young’s seminormal
unit corresponding to the bitableau `(T, S)`, and is the
return value of epsilon_ik() applied to T and
S. Note that
.
If we let run through all partitions of
, and
run through all pairs of tableaux of shape
, then the elements
form a basis
of
. This basis is called Young’s seminormal basis
and has the properties that
(where stands for the Kronecker delta).
Warning
Because of our convention, we are multiplying our elements in
reverse of those given in some papers, for example [Ram1997].
Using the other convention of multiplying permutations, we would
instead have
.
In other words, Young’s seminormal basis consists of the matrix
units in a (particular) Artin-Wedderburn decomposition of
into a direct product of matrix algebras over
.
The output of seminormal_basis() is a list of all elements of the seminormal basis of self.
INPUT:
EXAMPLES:
sage: QS3 = SymmetricGroupAlgebra(QQ,3)
sage: QS3.seminormal_basis()
[1/6*[1, 2, 3] + 1/6*[1, 3, 2] + 1/6*[2, 1, 3] + 1/6*[2, 3, 1] + 1/6*[3, 1, 2] + 1/6*[3, 2, 1],
1/3*[1, 2, 3] + 1/6*[1, 3, 2] - 1/3*[2, 1, 3] - 1/6*[2, 3, 1] - 1/6*[3, 1, 2] + 1/6*[3, 2, 1],
1/3*[1, 3, 2] + 1/3*[2, 3, 1] - 1/3*[3, 1, 2] - 1/3*[3, 2, 1],
1/4*[1, 3, 2] - 1/4*[2, 3, 1] + 1/4*[3, 1, 2] - 1/4*[3, 2, 1],
1/3*[1, 2, 3] - 1/6*[1, 3, 2] + 1/3*[2, 1, 3] - 1/6*[2, 3, 1] - 1/6*[3, 1, 2] - 1/6*[3, 2, 1],
1/6*[1, 2, 3] - 1/6*[1, 3, 2] - 1/6*[2, 1, 3] + 1/6*[2, 3, 1] + 1/6*[3, 1, 2] - 1/6*[3, 2, 1]]
REFERENCES:
[Ram1997] | Arun Ram. Seminormal representations of Weyl groups and Iwahori-Hecke algebras. Proc. London Math. Soc. (3) 75 (1997). 99-133. Arxiv math/9511223v1. http://www.ms.unimelb.edu.au/~ram/Publications/1997PLMSv75p99.pdf |
The row projection operator corresponding to the Young tableau
tableau (which is supposed to contain every integer from
to its size precisely once, but may and may not be standard).
This is the sum (in the group algebra of the relevant symmetric
group over ) of all the permutations which preserve
the rows of tableau. It is called
in
[EtRT], Section 4.2.
REFERENCES:
[EtRT] | (1, 2) Pavel Etingof, Oleg Golberg, Sebastian Hensel, Tiankai Liu, Alex Schwendner, Dmitry Vaintrob, Elena Yudovina, “Introduction to representation theory”, Arxiv 0901.0827v5. |
INPUT:
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import a
sage: a([[1,2]])
[1, 2] + [2, 1]
sage: a([[1],[2]])
[1, 2]
sage: a([])
[]
sage: a([[1, 5], [2, 3], [4]])
[1, 2, 3, 4, 5] + [1, 3, 2, 4, 5] + [5, 2, 3, 4, 1] + [5, 3, 2, 4, 1]
sage: a([[1,4], [2,3]], base_ring=ZZ)
[1, 2, 3, 4] + [1, 3, 2, 4] + [4, 2, 3, 1] + [4, 3, 2, 1]
The column projection operator corresponding to the Young tableau
tableau (which is supposed to contain every integer from
to its size precisely once, but may and may not be standard).
This is the signed sum (in the group algebra of the relevant
symmetric group over ) of all the permutations which
preserve the column of tableau (where the signs are the usual
signs of the permutations). It is called
in
[EtRT], Section 4.2.
INPUT:
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import b
sage: b([[1,2]])
[1, 2]
sage: b([[1],[2]])
[1, 2] - [2, 1]
sage: b([])
[]
sage: b([[1, 2, 4], [5, 3]])
[1, 2, 3, 4, 5] - [1, 3, 2, 4, 5] - [5, 2, 3, 4, 1] + [5, 3, 2, 4, 1]
sage: b([[1, 4], [2, 3]], base_ring=ZZ)
[1, 2, 3, 4] - [1, 2, 4, 3] - [2, 1, 3, 4] + [2, 1, 4, 3]
sage: b([[1, 4], [2, 3]], base_ring=Integers(5))
[1, 2, 3, 4] + 4*[1, 2, 4, 3] + 4*[2, 1, 3, 4] + [2, 1, 4, 3]
With the l2r setting for multiplication, the unnormalized Young symmetrizer e(tableau) should be the product b(tableau) * a(tableau) for every tableau. Let us check this on the standard tableaux of size 5:
sage: from sage.combinat.symmetric_group_algebra import a, b, e
sage: all( e(t) == b(t) * a(t) for t in StandardTableaux(5) )
True
The unnormalized Young projection operator corresponding to
the Young tableau tableau (which is supposed to contain
every integer from to its size precisely once, but may
and may not be standard).
If is a nonnegative integer, and
is a Young tableau
containing every integer from
to
exactly once, then
the unnormalized Young projection operator
is defined by
where is the sum of all permutations in
which fix the rows of
(as sets), and
is the
signed sum of all permutations in
which fix the columns of
(as sets). Here, “signed” means that each permutation is
multiplied with its sign; and the product on the group
is
defined in such a way that
for any
permutations
and
and any
.
Note that the definition of is not uniform across
literature. Others define it as
instead, or include
certain scalar factors (we do not, whence “unnormalized”).
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import e
sage: e([[1,2]])
[1, 2] + [2, 1]
sage: e([[1],[2]])
[1, 2] - [2, 1]
sage: e([])
[]
There are differing conventions for the order of the symmetrizers and antisymmetrizers. This example illustrates our conventions:
sage: e([[1,2],[3]])
[1, 2, 3] + [2, 1, 3] - [3, 1, 2] - [3, 2, 1]
To obtain the product , one has to take the antipode
of this:
sage: QS3 = parent(e([[1,2],[3]]))
sage: QS3.antipode(e([[1,2],[3]]))
[1, 2, 3] + [2, 1, 3] - [2, 3, 1] - [3, 2, 1]
See also
The Young projection operator corresponding to the Young tableau
tab (which is supposed to contain every integer from to
its size precisely once, but may and may not be standard). This
is an idempotent in the rational group algebra.
If is a nonnegative integer, and
is a Young tableau
containing every integer from
to
exactly once, then
the Young projection operator
is defined by
where is the shape of
, where
is
divided by the number of standard tableaux of shape
, where
is the sum of all
permutations in
which fix the rows of
(as sets), and
where
is the signed sum of all permutations
in
which fix the columns of
(as sets). Here, “signed”
means that each permutation is multiplied with its sign; and
the product on the group
is defined in such a way that
for any permutations
and
and any
.
Note that the definition of is not uniform
across literature. Others define it as
instead.
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import e_hat
sage: e_hat([[1,2,3]])
1/6*[1, 2, 3] + 1/6*[1, 3, 2] + 1/6*[2, 1, 3] + 1/6*[2, 3, 1] + 1/6*[3, 1, 2] + 1/6*[3, 2, 1]
sage: e_hat([[1],[2]])
1/2*[1, 2] - 1/2*[2, 1]
There are differing conventions for the order of the symmetrizers and antisymmetrizers. This example illustrates our conventions:
sage: e_hat([[1,2],[3]])
1/3*[1, 2, 3] + 1/3*[2, 1, 3] - 1/3*[3, 1, 2] - 1/3*[3, 2, 1]
See also
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import e_ik
sage: e_ik([[1,2,3]], [[1,2,3]])
[1, 2, 3] + [1, 3, 2] + [2, 1, 3] + [2, 3, 1] + [3, 1, 2] + [3, 2, 1]
sage: e_ik([[1,2,3]], [[1,2,3]], star=1)
[1, 2] + [2, 1]
The -th element of the seminormal basis of the group
algebra
, where
is the tableau tab (with its
star highest entries removed if the optional variable
star is set).
See the docstring of seminormal_basis() for the notation used herein.
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import epsilon
sage: epsilon([[1,2]])
1/2*[1, 2] + 1/2*[2, 1]
sage: epsilon([[1],[2]])
1/2*[1, 2] - 1/2*[2, 1]
Return the seminormal basis element of the symmetric group
algebra corresponding to the pair of tableaux
itab and ktab (or restrictions of these tableaux,
if the optional variable star is set).
INPUT:
OUTPUT:
The element , where
and
are the tableaux obtained by removing all entries higher
than
from itab and ktab,
respectively (where
is the size of itab and
ktab). Here, we are using the notations from
seminormal_basis().
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import epsilon_ik
sage: epsilon_ik([[1,2],[3]], [[1,3],[2]])
1/4*[1, 3, 2] - 1/4*[2, 3, 1] + 1/4*[3, 1, 2] - 1/4*[3, 2, 1]
sage: epsilon_ik([[1,2],[3]], [[1,3],[2]], star=1)
Traceback (most recent call last):
...
ValueError: the two tableaux must be of the same shape
Return , which is
divided by the number
of standard tableaux of shape
(where
is a
partition of
).
INPUT:
OUTPUT:
The factorial of the size of alpha, divided by the number of standard tableaux of shape alpha. Equivalently, the product of all hook lengths of alpha.
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import kappa
sage: kappa(Partition([2,1]))
3
sage: kappa([2,1])
3
Return the permutation which sends every entry of the
tableau itab to the respective entry of the tableau
ktab, as an element of the corresponding symmetric group
algebra.
This assumes that itab and ktab are tableaux (possibly given just as lists of lists) of the same shape.
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import pi_ik
sage: pi_ik([[1,3],[2]], [[1,2],[3]])
[1, 3, 2]
Run a variety of tests to verify that the construction of the seminormal basis works as desired. The numbers appearing are results in James and Kerber’s ‘Representation Theory of the Symmetric Group’ [JamesKerber].
EXAMPLES:
sage: from sage.combinat.symmetric_group_algebra import seminormal_test
sage: seminormal_test(3)
True