Representations of a semigroup#

AUTHORS:

  • Travis Scrimshaw (2015-11-21): initial version

  • Siddharth Singh (2020-03-21): signed representation

  • Travis Scrimshaw (2024-02-17): tensor products

class sage.modules.with_basis.representation.NaturalMatrixRepresentation(semigroup, base_ring)[source]#

Bases: Representation

The natural representation of a matrix semigroup.

A matrix semigroup is defined by its representation on a (finite dimensional) vector space \(V\), which is called the natural representation.

INPUT:

  • matrix_semigroup – a matrix semigroup

  • base_ring – (optional) the base ring; the default is the base ring of the semigroup

class sage.modules.with_basis.representation.QuotientRepresentation(*args, **kwds)[source]#

Bases: Representation_abstract, QuotientModuleWithBasis

The quotient of a representation by another representation, which admits a natural structure of a representation.

Element[source]#

alias of Element

class sage.modules.with_basis.representation.ReflectionRepresentation(W, base_ring)[source]#

Bases: Representation_abstract, CombinatorialFreeModule

The reflection representation of a Coxeter group.

This is the canonical faithful representation of a Coxeter group.

EXAMPLES:

sage: W = CoxeterGroup(['B', 4])
sage: R = W.reflection_representation()
sage: all(g.matrix() == R.representation_matrix(g) for g in W)
True
>>> from sage.all import *
>>> W = CoxeterGroup(['B', Integer(4)])
>>> R = W.reflection_representation()
>>> all(g.matrix() == R.representation_matrix(g) for g in W)
True
class sage.modules.with_basis.representation.RegularRepresentation(semigroup, base_ring, side='left')[source]#

Bases: Representation

The regular representation of a semigroup.

The left regular representation of a semigroup \(S\) over a commutative ring \(R\) is the semigroup ring \(R[S]\) equipped with the left \(S\)-action \(x b_y = b_{xy}\), where \((b_z)_{z \in S}\) is the natural basis of \(R[S]\) and \(x,y \in S\).

INPUT:

  • semigroup – a semigroup

  • base_ring – the base ring for the representation

  • side – (default: "left") whether this is a "left" or "right" representation

REFERENCES:

class sage.modules.with_basis.representation.Representation(semigroup, module, on_basis, side='left', **kwargs)[source]#

Bases: Representation_abstract, CombinatorialFreeModule

Representation of a semigroup.

INPUT:

  • semigroup – a semigroup

  • module – a module with a basis

  • on_basis – function which takes as input g, m, where g is an element of the semigroup and m is an element of the indexing set for the basis, and returns the result of g acting on m

  • side – (default: "left") whether this is a "left" or "right" representation

EXAMPLES:

We construct the sign representation of a symmetric group:

sage: G = SymmetricGroup(4)
sage: M = CombinatorialFreeModule(QQ, ['v'])
sage: on_basis = lambda g,m: M.term(m, g.sign())
sage: R = G.representation(M, on_basis)
sage: x = R.an_element(); x
2*B['v']
sage: c,s = G.gens()
sage: c,s
((1,2,3,4), (1,2))
sage: c * x
-2*B['v']
sage: s * x
-2*B['v']
sage: c * s * x
2*B['v']
sage: (c * s) * x
2*B['v']
>>> from sage.all import *
>>> G = SymmetricGroup(Integer(4))
>>> M = CombinatorialFreeModule(QQ, ['v'])
>>> on_basis = lambda g,m: M.term(m, g.sign())
>>> R = G.representation(M, on_basis)
>>> x = R.an_element(); x
2*B['v']
>>> c,s = G.gens()
>>> c,s
((1,2,3,4), (1,2))
>>> c * x
-2*B['v']
>>> s * x
-2*B['v']
>>> c * s * x
2*B['v']
>>> (c * s) * x
2*B['v']

This extends naturally to the corresponding group algebra:

sage: A = G.algebra(QQ)
sage: s,c = A.algebra_generators()
sage: c,s
((1,2,3,4), (1,2))
sage: c * x
-2*B['v']
sage: s * x
-2*B['v']
sage: c * s * x
2*B['v']
sage: (c * s) * x
2*B['v']
sage: (c + s) * x
-4*B['v']
>>> from sage.all import *
>>> A = G.algebra(QQ)
>>> s,c = A.algebra_generators()
>>> c,s
((1,2,3,4), (1,2))
>>> c * x
-2*B['v']
>>> s * x
-2*B['v']
>>> c * s * x
2*B['v']
>>> (c * s) * x
2*B['v']
>>> (c + s) * x
-4*B['v']

REFERENCES:

product_by_coercion(left, right)[source]#

Return the product of left and right by passing to self._module and then building a new element of self.

EXAMPLES:

sage: G = groups.permutation.KleinFour()
sage: E = algebras.Exterior(QQ,'e',4)
sage: on_basis = lambda g,m: E.monomial(m) # the trivial representation
sage: R = G.representation(E, on_basis)
sage: r = R.an_element(); r
1 + 2*e0 + 3*e1 + e1*e2
sage: g = G.an_element();
sage: g * r == r  # indirect doctest
True
sage: r * r  # indirect doctest
Traceback (most recent call last):
...
TypeError: unsupported operand parent(s) for *:
 'Representation of The Klein 4 group of order 4, as a permutation
 group indexed by Subsets of {0,1,...,3} over Rational Field' and
 'Representation of The Klein 4 group of order 4, as a permutation
 group indexed by Subsets of {0,1,...,3} over Rational Field'

sage: from sage.categories.algebras import Algebras
sage: category = Algebras(QQ).FiniteDimensional().WithBasis()
sage: T = G.representation(E, on_basis, category=category)
sage: t = T.an_element(); t
1 + 2*e0 + 3*e1 + e1*e2
sage: g * t == t  # indirect doctest
True
sage: t * t  # indirect doctest
1 + 4*e0 + 4*e0*e1*e2 + 6*e1 + 2*e1*e2
>>> from sage.all import *
>>> G = groups.permutation.KleinFour()
>>> E = algebras.Exterior(QQ,'e',Integer(4))
>>> on_basis = lambda g,m: E.monomial(m) # the trivial representation
>>> R = G.representation(E, on_basis)
>>> r = R.an_element(); r
1 + 2*e0 + 3*e1 + e1*e2
>>> g = G.an_element();
>>> g * r == r  # indirect doctest
True
>>> r * r  # indirect doctest
Traceback (most recent call last):
...
TypeError: unsupported operand parent(s) for *:
 'Representation of The Klein 4 group of order 4, as a permutation
 group indexed by Subsets of {0,1,...,3} over Rational Field' and
 'Representation of The Klein 4 group of order 4, as a permutation
 group indexed by Subsets of {0,1,...,3} over Rational Field'

>>> from sage.categories.algebras import Algebras
>>> category = Algebras(QQ).FiniteDimensional().WithBasis()
>>> T = G.representation(E, on_basis, category=category)
>>> t = T.an_element(); t
1 + 2*e0 + 3*e1 + e1*e2
>>> g * t == t  # indirect doctest
True
>>> t * t  # indirect doctest
1 + 4*e0 + 4*e0*e1*e2 + 6*e1 + 2*e1*e2
class sage.modules.with_basis.representation.Representation_Exterior(rep, degree=None, category=None, **options)[source]#

Bases: Representation_abstract, CombinatorialFreeModule

The exterior power representation (in a fixed degree).

class sage.modules.with_basis.representation.Representation_ExteriorAlgebra(rep, degree=None, category=None, **options)[source]#

Bases: Representation_Exterior

The exterior algebra representation.

one_basis()[source]#

Return the basis element indexing \(1\) in self if it exists.

EXAMPLES:

sage: S3 = SymmetricGroup(3)
sage: L = S3.regular_representation(side="left")
sage: E = L.exterior_power()
sage: E.one_basis()
0
sage: E0 = L.exterior_power(0)
sage: E0.one_basis()
0
>>> from sage.all import *
>>> S3 = SymmetricGroup(Integer(3))
>>> L = S3.regular_representation(side="left")
>>> E = L.exterior_power()
>>> E.one_basis()
0
>>> E0 = L.exterior_power(Integer(0))
>>> E0.one_basis()
0
product_on_basis(x, y)[source]#

Return the product of basis elements indexed by x and y.

EXAMPLES:

sage: S3 = SymmetricGroup(3)
sage: L = S3.regular_representation(side="left")
sage: E = L.exterior_power()
sage: B = list(E.basis())
sage: B[:7]
[1, (), (1,3,2), (1,2,3), (2,3), (1,3), (1,2)]
sage: B[2] * B[4]  # indirect doctest
(1,3,2)*(2,3)
>>> from sage.all import *
>>> S3 = SymmetricGroup(Integer(3))
>>> L = S3.regular_representation(side="left")
>>> E = L.exterior_power()
>>> B = list(E.basis())
>>> B[:Integer(7)]
[1, (), (1,3,2), (1,2,3), (2,3), (1,3), (1,2)]
>>> B[Integer(2)] * B[Integer(4)]  # indirect doctest
(1,3,2)*(2,3)
class sage.modules.with_basis.representation.Representation_Symmetric(rep, degree, **options)[source]#

Bases: Representation_abstract, CombinatorialFreeModule

The symmetric power representation in a fixed degree.

class sage.modules.with_basis.representation.Representation_Tensor(reps, **options)[source]#

Bases: Representation_abstract, CombinatorialFreeModule_Tensor

Tensor product of representations.

class Element[source]#

Bases: Element

class sage.modules.with_basis.representation.Representation_abstract(semigroup, side, algebra=None)[source]#

Bases: object

Abstract base class for representations of semigroups.

INPUT:

  • semigroup – a semigroup

  • side – (default: "left") whether this is a "left" or "right" representation

  • algebra – (default: semigroup.algebra(self.base_ring())) the semigroup algebra

Note

This class should come before CombinatorialFreeModule in the MRO in order for tensor products to use the correct class.

class Element[source]#

Bases: IndexedFreeModuleElement

Tensor[source]#

alias of Representation_Tensor

brauer_character()[source]#

Return the Brauer character of self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: SM = SGA.specht_module([3, 2])
sage: SM.brauer_character()
(5, -1, 0)
sage: SM.simple_module().brauer_character()
(4, -2, -1)

sage: T = SM.subrepresentation([])
sage: T.brauer_character()
(0, 0, 0)

sage: W = CoxeterGroup(['D', 4], implementation="permutation")
sage: R = W.reflection_representation(GF(2))
sage: R.brauer_character()
(4, 1)
sage: T = R.subrepresentation([])
sage: T.brauer_character()
(0, 0)
>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> SM = SGA.specht_module([Integer(3), Integer(2)])
>>> SM.brauer_character()
(5, -1, 0)
>>> SM.simple_module().brauer_character()
(4, -2, -1)

>>> T = SM.subrepresentation([])
>>> T.brauer_character()
(0, 0, 0)

>>> W = CoxeterGroup(['D', Integer(4)], implementation="permutation")
>>> R = W.reflection_representation(GF(Integer(2)))
>>> R.brauer_character()
(4, 1)
>>> T = R.subrepresentation([])
>>> T.brauer_character()
(0, 0)
character()[source]#

Return the character of self.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(QQ, 5)
sage: SM = SGA.specht_module([3,2])
sage: SM.character()
(5, 1, 1, -1, 1, -1, 0)
sage: matrix(SGA.specht_module(la).character() for la in Partitions(5))
[ 1  1  1  1  1  1  1]
[ 4  2  0  1 -1  0 -1]
[ 5  1  1 -1  1 -1  0]
[ 6  0 -2  0  0  0  1]
[ 5 -1  1 -1 -1  1  0]
[ 4 -2  0  1  1  0 -1]
[ 1 -1  1  1 -1 -1  1]

sage: SGA = SymmetricGroupAlgebra(QQ, SymmetricGroup(5))
sage: SM = SGA.specht_module([3,2])
sage: SM.character()
Character of Symmetric group of order 5! as a permutation group
sage: SM.character().values()
[5, 1, 1, -1, 1, -1, 0]
sage: matrix(SGA.specht_module(la).character().values() for la in reversed(Partitions(5)))
[ 1 -1  1  1 -1 -1  1]
[ 4 -2  0  1  1  0 -1]
[ 5 -1  1 -1 -1  1  0]
[ 6  0 -2  0  0  0  1]
[ 5  1  1 -1  1 -1  0]
[ 4  2  0  1 -1  0 -1]
[ 1  1  1  1  1  1  1]
sage: SGA.group().character_table()
[ 1 -1  1  1 -1 -1  1]
[ 4 -2  0  1  1  0 -1]
[ 5 -1  1 -1 -1  1  0]
[ 6  0 -2  0  0  0  1]
[ 5  1  1 -1  1 -1  0]
[ 4  2  0  1 -1  0 -1]
[ 1  1  1  1  1  1  1]
>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(QQ, Integer(5))
>>> SM = SGA.specht_module([Integer(3),Integer(2)])
>>> SM.character()
(5, 1, 1, -1, 1, -1, 0)
>>> matrix(SGA.specht_module(la).character() for la in Partitions(Integer(5)))
[ 1  1  1  1  1  1  1]
[ 4  2  0  1 -1  0 -1]
[ 5  1  1 -1  1 -1  0]
[ 6  0 -2  0  0  0  1]
[ 5 -1  1 -1 -1  1  0]
[ 4 -2  0  1  1  0 -1]
[ 1 -1  1  1 -1 -1  1]

>>> SGA = SymmetricGroupAlgebra(QQ, SymmetricGroup(Integer(5)))
>>> SM = SGA.specht_module([Integer(3),Integer(2)])
>>> SM.character()
Character of Symmetric group of order 5! as a permutation group
>>> SM.character().values()
[5, 1, 1, -1, 1, -1, 0]
>>> matrix(SGA.specht_module(la).character().values() for la in reversed(Partitions(Integer(5))))
[ 1 -1  1  1 -1 -1  1]
[ 4 -2  0  1  1  0 -1]
[ 5 -1  1 -1 -1  1  0]
[ 6  0 -2  0  0  0  1]
[ 5  1  1 -1  1 -1  0]
[ 4  2  0  1 -1  0 -1]
[ 1  1  1  1  1  1  1]
>>> SGA.group().character_table()
[ 1 -1  1  1 -1 -1  1]
[ 4 -2  0  1  1  0 -1]
[ 5 -1  1 -1 -1  1  0]
[ 6  0 -2  0  0  0  1]
[ 5  1  1 -1  1 -1  0]
[ 4  2  0  1 -1  0 -1]
[ 1  1  1  1  1  1  1]
composition_factors()[source]#

Return the composition factors of self.

Given a composition series \(V = V_0 \subseteq V_1 \subseteq \cdots \subseteq V_{\ell} = 0\), the composition factor \(S_i\) is defined as \(V_i / V_{i+1}\).

EXAMPLES:

The algorithm used here uses random elements, so we set the seed for testing purposes:

sage: set_random_seed(0)
sage: SGA = SymmetricGroupAlgebra(GF(3), 6)
sage: SM = SGA.specht_module([4, 1, 1])
sage: CF = SM.composition_factors()
sage: CF
(Quotient representation with basis
  {[[1, 2, 5, 6], [3], [4]], [[1, 2, 4, 6], [3], [5]], [[1, 2, 3, 6], [4], [5]],
   [[1, 2, 4, 5], [3], [6]], [[1, 2, 3, 5], [4], [6]], [[1, 2, 3, 4], [5], [6]]}
  of Specht module of [4, 1, 1] over Finite Field of size 3,
 Subrepresentation with basis {0, 1, 2, 3} of Specht module
  of [4, 1, 1] over Finite Field of size 3)
sage: x = SGA.an_element()
sage: v = CF[1].an_element(); v
2*B[0] + 2*B[1]
sage: x * v
B[1] + B[2]
>>> from sage.all import *
>>> set_random_seed(Integer(0))
>>> SGA = SymmetricGroupAlgebra(GF(Integer(3)), Integer(6))
>>> SM = SGA.specht_module([Integer(4), Integer(1), Integer(1)])
>>> CF = SM.composition_factors()
>>> CF
(Quotient representation with basis
  {[[1, 2, 5, 6], [3], [4]], [[1, 2, 4, 6], [3], [5]], [[1, 2, 3, 6], [4], [5]],
   [[1, 2, 4, 5], [3], [6]], [[1, 2, 3, 5], [4], [6]], [[1, 2, 3, 4], [5], [6]]}
  of Specht module of [4, 1, 1] over Finite Field of size 3,
 Subrepresentation with basis {0, 1, 2, 3} of Specht module
  of [4, 1, 1] over Finite Field of size 3)
>>> x = SGA.an_element()
>>> v = CF[Integer(1)].an_element(); v
2*B[0] + 2*B[1]
>>> x * v
B[1] + B[2]

We reproduce the decomposition matrix for \(S_5\) over \(\GF{2}\):

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: simples = [SGA.simple_module(la).brauer_character()
....:            for la in SGA.simple_module_parameterization()]
sage: D = []
sage: for la in Partitions(5):
....:     SM = SGA.specht_module(la)
....:     data = [CF.brauer_character() for CF in SM.composition_factors()]
....:     D.append([data.count(bc) for bc in simples])
sage: matrix(D)
[1 0 0]
[0 1 0]
[1 0 1]
[2 0 1]
[1 0 1]
[0 1 0]
[1 0 0]
>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> simples = [SGA.simple_module(la).brauer_character()
...            for la in SGA.simple_module_parameterization()]
>>> D = []
>>> for la in Partitions(Integer(5)):
...     SM = SGA.specht_module(la)
...     data = [CF.brauer_character() for CF in SM.composition_factors()]
...     D.append([data.count(bc) for bc in simples])
>>> matrix(D)
[1 0 0]
[0 1 0]
[1 0 1]
[2 0 1]
[1 0 1]
[0 1 0]
[1 0 0]
composition_series()[source]#

Return a composition series of self.

EXAMPLES:

The algorithm used here uses random elements, so we set the seed for testing purposes:

sage: set_random_seed(0)
sage: G = groups.permutation.Dihedral(5)
sage: CFM = CombinatorialFreeModule(GF(2), [1, 2, 3, 4, 5],
....:                               bracket=False, prefix='e')
sage: CFM.an_element()
e3
sage: R = G.representation(CFM, lambda g, i: CFM.basis()[g(i)], side='right')
sage: CS = R.composition_series()
sage: len(CS)
3
sage: [[R(b) for b in F.basis()] for F in CS]
[[e1, e2, e3, e4, e5], [e1 + e5, e2 + e5, e3 + e5, e4 + e5], []]
sage: [F.brauer_character() for F in CS]
[(5, 0, 0), (4, -1, -1), (0, 0, 0)]
sage: [F.brauer_character() for F in R.composition_factors()]
[(1, 1, 1), (4, -1, -1)]
sage: Reg = G.regular_representation(GF(2))
sage: simple_brauer_chars = set([F.brauer_character()
....:                            for F in Reg.composition_factors()])
sage: sorted(simple_brauer_chars)
[(1, 1, 1), (4, -1, -1)]
>>> from sage.all import *
>>> set_random_seed(Integer(0))
>>> G = groups.permutation.Dihedral(Integer(5))
>>> CFM = CombinatorialFreeModule(GF(Integer(2)), [Integer(1), Integer(2), Integer(3), Integer(4), Integer(5)],
...                               bracket=False, prefix='e')
>>> CFM.an_element()
e3
>>> R = G.representation(CFM, lambda g, i: CFM.basis()[g(i)], side='right')
>>> CS = R.composition_series()
>>> len(CS)
3
>>> [[R(b) for b in F.basis()] for F in CS]
[[e1, e2, e3, e4, e5], [e1 + e5, e2 + e5, e3 + e5, e4 + e5], []]
>>> [F.brauer_character() for F in CS]
[(5, 0, 0), (4, -1, -1), (0, 0, 0)]
>>> [F.brauer_character() for F in R.composition_factors()]
[(1, 1, 1), (4, -1, -1)]
>>> Reg = G.regular_representation(GF(Integer(2)))
>>> simple_brauer_chars = set([F.brauer_character()
...                            for F in Reg.composition_factors()])
>>> sorted(simple_brauer_chars)
[(1, 1, 1), (4, -1, -1)]
exterior_power(degree=None)[source]#

Return the exterior power of self.

INPUT:

  • degree – (optional) if given, then only consider the given degree

EXAMPLES:

sage: DC3 = groups.permutation.DiCyclic(3)
sage: L = DC3.regular_representation(QQ, side='left')
sage: E5 = L.exterior_power(5)
sage: E5
Exterior power representation of Left Regular Representation of
 Dicyclic group of order 12 as a permutation group over Rational Field
 in degree 5
sage: L.exterior_power()
Exterior algebra representation of Left Regular Representation of
 Dicyclic group of order 12 as a permutation group over Rational Field
>>> from sage.all import *
>>> DC3 = groups.permutation.DiCyclic(Integer(3))
>>> L = DC3.regular_representation(QQ, side='left')
>>> E5 = L.exterior_power(Integer(5))
>>> E5
Exterior power representation of Left Regular Representation of
 Dicyclic group of order 12 as a permutation group over Rational Field
 in degree 5
>>> L.exterior_power()
Exterior algebra representation of Left Regular Representation of
 Dicyclic group of order 12 as a permutation group over Rational Field
find_subrepresentation()[source]#

Return a nontrivial (not self or the trivial module) submodule of self or None if self is irreducible.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: SM = SGA.specht_module([3, 2])
sage: U = SM.find_subrepresentation()
sage: [SM(b) for b in U.basis()]
[S[[1, 2, 3], [4, 5]] + S[[1, 2, 4], [3, 5]]
 + S[[1, 2, 5], [3, 4]] + S[[1, 3, 4], [2, 5]]]
sage: B = U.basis()[0].lift()
sage: all(g * B == B for g in SGA.gens())
True
sage: SGA.specht_module([4, 1]).find_subrepresentation() is None
True
sage: SGA.specht_module([5]).find_subrepresentation() is None
True
>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> SM = SGA.specht_module([Integer(3), Integer(2)])
>>> U = SM.find_subrepresentation()
>>> [SM(b) for b in U.basis()]
[S[[1, 2, 3], [4, 5]] + S[[1, 2, 4], [3, 5]]
 + S[[1, 2, 5], [3, 4]] + S[[1, 3, 4], [2, 5]]]
>>> B = U.basis()[Integer(0)].lift()
>>> all(g * B == B for g in SGA.gens())
True
>>> SGA.specht_module([Integer(4), Integer(1)]).find_subrepresentation() is None
True
>>> SGA.specht_module([Integer(5)]).find_subrepresentation() is None
True
invariant_module(S=None, **kwargs)[source]#

Return the submodule of self invariant under the action of S.

For a semigroup \(S\) acting on a module \(M\), the invariant submodule is given by

\[M^S = \{m \in M : s \cdot m = m \forall s \in S\}.\]

INPUT:

  • S – a finitely-generated semigroup (default: the semigroup this is a representation of)

  • action – a function (default: operator.mul)

  • side'left' or 'right' (default: side()); which side of self the elements of S acts

Note

Two sided actions are considered as left actions for the invariant module.

OUTPUT:

EXAMPLES:

sage: S3 = SymmetricGroup(3)
sage: M = S3.regular_representation()
sage: I = M.invariant_module()
sage: [I.lift(b) for b in I.basis()]
[() + (2,3) + (1,2) + (1,2,3) + (1,3,2) + (1,3)]
>>> from sage.all import *
>>> S3 = SymmetricGroup(Integer(3))
>>> M = S3.regular_representation()
>>> I = M.invariant_module()
>>> [I.lift(b) for b in I.basis()]
[() + (2,3) + (1,2) + (1,2,3) + (1,3,2) + (1,3)]

We build the \(D_4\)-invariant representation inside of the regular representation of \(S_4\):

sage: D4 = groups.permutation.Dihedral(4)
sage: S4 = SymmetricGroup(4)
sage: R = S4.regular_representation()
sage: I = R.invariant_module(D4)
sage: [I.lift(b) for b in I.basis()]
[() + (2,4) + (1,2)(3,4) + (1,2,3,4) + (1,3) + (1,3)(2,4) + (1,4,3,2) + (1,4)(2,3),
 (3,4) + (2,3,4) + (1,2) + (1,2,4) + (1,3,2) + (1,3,2,4) + (1,4,3) + (1,4,2,3),
 (2,3) + (2,4,3) + (1,2,3) + (1,2,4,3) + (1,3,4,2) + (1,3,4) + (1,4,2) + (1,4)]
>>> from sage.all import *
>>> D4 = groups.permutation.Dihedral(Integer(4))
>>> S4 = SymmetricGroup(Integer(4))
>>> R = S4.regular_representation()
>>> I = R.invariant_module(D4)
>>> [I.lift(b) for b in I.basis()]
[() + (2,4) + (1,2)(3,4) + (1,2,3,4) + (1,3) + (1,3)(2,4) + (1,4,3,2) + (1,4)(2,3),
 (3,4) + (2,3,4) + (1,2) + (1,2,4) + (1,3,2) + (1,3,2,4) + (1,4,3) + (1,4,2,3),
 (2,3) + (2,4,3) + (1,2,3) + (1,2,4,3) + (1,3,4,2) + (1,3,4) + (1,4,2) + (1,4)]
is_irreducible()[source]#

Return if self is an irreducible module or not.

A representation \(M\) is irreducible (also known as simple) if the only subrepresentations of \(M\) are the trivial module \(\{0\}\) and \(M\) itself.

EXAMPLES:

sage: DC3 = groups.permutation.DiCyclic(3)
sage: L = DC3.regular_representation(GF(3), side='left')
sage: L.is_irreducible()
False
sage: E3 = L.exterior_power(3)
sage: E3.is_irreducible()
False
sage: E12 = L.exterior_power(12)
sage: E12.is_irreducible()
True

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: SGA.specht_module([3, 2]).is_irreducible()
False
sage: SGA.specht_module([4, 1]).is_irreducible()
True
>>> from sage.all import *
>>> DC3 = groups.permutation.DiCyclic(Integer(3))
>>> L = DC3.regular_representation(GF(Integer(3)), side='left')
>>> L.is_irreducible()
False
>>> E3 = L.exterior_power(Integer(3))
>>> E3.is_irreducible()
False
>>> E12 = L.exterior_power(Integer(12))
>>> E12.is_irreducible()
True

>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> SGA.specht_module([Integer(3), Integer(2)]).is_irreducible()
False
>>> SGA.specht_module([Integer(4), Integer(1)]).is_irreducible()
True
quotient_representation(subrepr, already_echelonized=False, **kwds)[source]#

Construct a quotient representation of self by subrepr.

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: SM = SGA.specht_module([3, 2])
sage: v = sum(list(SM.basis())[1:])
sage: Q = SM.quotient_representation([v]); Q
Quotient representation with basis {[[1, 3, 5], [2, 4]],
 [[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]]}
 of Specht module of [3, 2] over Finite Field of size 2
sage: Q.is_irreducible()
True
>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> SM = SGA.specht_module([Integer(3), Integer(2)])
>>> v = sum(list(SM.basis())[Integer(1):])
>>> Q = SM.quotient_representation([v]); Q
Quotient representation with basis {[[1, 3, 5], [2, 4]],
 [[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]]}
 of Specht module of [3, 2] over Finite Field of size 2
>>> Q.is_irreducible()
True
representation_matrix(g, side=None, sparse=False)[source]#

Return the matrix representation of g acting on self.

EXAMPLES:

sage: S3 = SymmetricGroup(3)
sage: g = S3.an_element(); g
(2,3)
sage: L = S3.regular_representation(side="left")
sage: R = S3.regular_representation(side="right")
sage: R.representation_matrix(g)
[0 0 0 1 0 0]
[0 0 0 0 0 1]
[0 0 0 0 1 0]
[1 0 0 0 0 0]
[0 0 1 0 0 0]
[0 1 0 0 0 0]
sage: L.representation_matrix(g)
[0 0 0 1 0 0]
[0 0 0 0 1 0]
[0 0 0 0 0 1]
[1 0 0 0 0 0]
[0 1 0 0 0 0]
[0 0 1 0 0 0]
sage: A = S3.algebra(ZZ)
sage: R.representation_matrix(sum(A.basis()), side='right')
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
>>> from sage.all import *
>>> S3 = SymmetricGroup(Integer(3))
>>> g = S3.an_element(); g
(2,3)
>>> L = S3.regular_representation(side="left")
>>> R = S3.regular_representation(side="right")
>>> R.representation_matrix(g)
[0 0 0 1 0 0]
[0 0 0 0 0 1]
[0 0 0 0 1 0]
[1 0 0 0 0 0]
[0 0 1 0 0 0]
[0 1 0 0 0 0]
>>> L.representation_matrix(g)
[0 0 0 1 0 0]
[0 0 0 0 1 0]
[0 0 0 0 0 1]
[1 0 0 0 0 0]
[0 1 0 0 0 0]
[0 0 1 0 0 0]
>>> A = S3.algebra(ZZ)
>>> R.representation_matrix(sum(A.basis()), side='right')
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]

We verify tensor products agree:

sage: T = tensor([L, R])
sage: for g in S3:
....:     gL = L.representation_matrix(g, side='left')
....:     gR = R.representation_matrix(g, side='left')
....:     gT = T.representation_matrix(g, side='left')
....:     assert gL.tensor_product(gR) == gT
>>> from sage.all import *
>>> T = tensor([L, R])
>>> for g in S3:
...     gL = L.representation_matrix(g, side='left')
...     gR = R.representation_matrix(g, side='left')
...     gT = T.representation_matrix(g, side='left')
...     assert gL.tensor_product(gR) == gT

Some examples with Specht modules:

sage: SM = Partition([3,1,1]).specht_module(QQ)
sage: SM.representation_matrix(Permutation([2,1,3,5,4]))
[-1  0  1  0  1  0]
[ 0  0  0 -1 -1 -1]
[ 0  0  0  0  1  0]
[ 0 -1 -1  0  0  1]
[ 0  0  1  0  0  0]
[ 0  0  0  0  0 -1]

sage: SGA = SymmetricGroupAlgebra(QQ, 5)
sage: SM = SGA.specht_module([(0,0), (0,1), (0,2), (1,0), (2,0)])
sage: SM.representation_matrix(Permutation([2,1,3,5,4]))
[-1  0  0  0  0  0]
[ 0  0  1  0  0  0]
[ 0  1  0  0  0  0]
[ 1  0 -1  0 -1  0]
[-1 -1  0 -1  0  0]
[ 0  1  1  0  0 -1]
sage: SM.representation_matrix(SGA([3,1,5,2,4]))
[ 0  0  0  0  1  0]
[-1  0  0  0  0  0]
[ 0  0  0 -1  0  0]
[ 1  0 -1  0 -1  0]
[ 0  0  0  1  1  1]
[-1 -1  0 -1  0  0]

sage: SGA = SymmetricGroupAlgebra(QQ, 4)
sage: SM = SGA.specht_module([3, 1])
sage: all(SM.representation_matrix(g) * b.to_vector() == (g * b).to_vector()
....:     for b in SM.basis() for g in SGA.group())
True

sage: SGA = SymmetricGroupAlgebra(QQ, SymmetricGroup(4))
sage: SM = SGA.specht_module([3, 1])
sage: all(SM.representation_matrix(g) * b.to_vector() == (g * b).to_vector()
....:     for b in SM.basis() for g in SGA.group())
True
>>> from sage.all import *
>>> SM = Partition([Integer(3),Integer(1),Integer(1)]).specht_module(QQ)
>>> SM.representation_matrix(Permutation([Integer(2),Integer(1),Integer(3),Integer(5),Integer(4)]))
[-1  0  1  0  1  0]
[ 0  0  0 -1 -1 -1]
[ 0  0  0  0  1  0]
[ 0 -1 -1  0  0  1]
[ 0  0  1  0  0  0]
[ 0  0  0  0  0 -1]

>>> SGA = SymmetricGroupAlgebra(QQ, Integer(5))
>>> SM = SGA.specht_module([(Integer(0),Integer(0)), (Integer(0),Integer(1)), (Integer(0),Integer(2)), (Integer(1),Integer(0)), (Integer(2),Integer(0))])
>>> SM.representation_matrix(Permutation([Integer(2),Integer(1),Integer(3),Integer(5),Integer(4)]))
[-1  0  0  0  0  0]
[ 0  0  1  0  0  0]
[ 0  1  0  0  0  0]
[ 1  0 -1  0 -1  0]
[-1 -1  0 -1  0  0]
[ 0  1  1  0  0 -1]
>>> SM.representation_matrix(SGA([Integer(3),Integer(1),Integer(5),Integer(2),Integer(4)]))
[ 0  0  0  0  1  0]
[-1  0  0  0  0  0]
[ 0  0  0 -1  0  0]
[ 1  0 -1  0 -1  0]
[ 0  0  0  1  1  1]
[-1 -1  0 -1  0  0]

>>> SGA = SymmetricGroupAlgebra(QQ, Integer(4))
>>> SM = SGA.specht_module([Integer(3), Integer(1)])
>>> all(SM.representation_matrix(g) * b.to_vector() == (g * b).to_vector()
...     for b in SM.basis() for g in SGA.group())
True

>>> SGA = SymmetricGroupAlgebra(QQ, SymmetricGroup(Integer(4)))
>>> SM = SGA.specht_module([Integer(3), Integer(1)])
>>> all(SM.representation_matrix(g) * b.to_vector() == (g * b).to_vector()
...     for b in SM.basis() for g in SGA.group())
True
schur_functor(la)[source]#

Return the Schur functor with shape la applied to self.

EXAMPLES:

sage: W = CoxeterGroup(['H', 3])
sage: R = W.reflection_representation()
sage: S111 = R.schur_functor([1,1,1])
sage: S111.dimension()
1
sage: S3 = R.schur_functor([3])
sage: S3.dimension()
10
>>> from sage.all import *
>>> W = CoxeterGroup(['H', Integer(3)])
>>> R = W.reflection_representation()
>>> S111 = R.schur_functor([Integer(1),Integer(1),Integer(1)])
>>> S111.dimension()
1
>>> S3 = R.schur_functor([Integer(3)])
>>> S3.dimension()
10
semigroup()[source]#

Return the semigroup whose representation self is.

EXAMPLES:

sage: G = SymmetricGroup(4)
sage: M = CombinatorialFreeModule(QQ, ['v'])
sage: on_basis = lambda g,m: M.term(m, g.sign())
sage: R = G.representation(M, on_basis)
sage: R.semigroup()
Symmetric group of order 4! as a permutation group
>>> from sage.all import *
>>> G = SymmetricGroup(Integer(4))
>>> M = CombinatorialFreeModule(QQ, ['v'])
>>> on_basis = lambda g,m: M.term(m, g.sign())
>>> R = G.representation(M, on_basis)
>>> R.semigroup()
Symmetric group of order 4! as a permutation group
semigroup_algebra()[source]#

Return the semigroup algebra whose representation self is.

EXAMPLES:

sage: G = SymmetricGroup(4)
sage: M = CombinatorialFreeModule(QQ, ['v'])
sage: on_basis = lambda g,m: M.term(m, g.sign())
sage: R = G.representation(M, on_basis)
sage: R.semigroup_algebra()
Symmetric group algebra of order 4 over Rational Field
>>> from sage.all import *
>>> G = SymmetricGroup(Integer(4))
>>> M = CombinatorialFreeModule(QQ, ['v'])
>>> on_basis = lambda g,m: M.term(m, g.sign())
>>> R = G.representation(M, on_basis)
>>> R.semigroup_algebra()
Symmetric group algebra of order 4 over Rational Field
side()[source]#

Return whether self is a left, right, or two-sided representation.

OUTPUT:

  • the string "left", "right", or "twosided"

EXAMPLES:

sage: G = groups.permutation.Dihedral(4)
sage: R = G.regular_representation()
sage: R.side()
'left'
sage: S = G.regular_representation(side="right")
sage: S.side()
'right'
sage: R = G.sign_representation()
sage: R.side()
'twosided'
sage: R = G.trivial_representation()
sage: R.side()
'twosided'
>>> from sage.all import *
>>> G = groups.permutation.Dihedral(Integer(4))
>>> R = G.regular_representation()
>>> R.side()
'left'
>>> S = G.regular_representation(side="right")
>>> S.side()
'right'
>>> R = G.sign_representation()
>>> R.side()
'twosided'
>>> R = G.trivial_representation()
>>> R.side()
'twosided'
subrepresentation(gens, check, already_echelonized=True, is_closed=False, *args, **opts)[source]#

Construct a subrepresentation of self generated by gens.

INPUT:

  • gens – the generators of the submodule

  • check – ignored

  • already_echelonized – (default: False) whether

    the elements of gens are already in (not necessarily reduced) echelon form

  • is_closed – (keyword only; default: False) whether gens already spans the subspace closed under the semigroup action

EXAMPLES:

sage: SGA = SymmetricGroupAlgebra(GF(2), 5)
sage: SM = SGA.specht_module([3, 2])
sage: B = next(iter(SM.basis()))
sage: U = SM.subrepresentation([B])
sage: U.dimension()
5
>>> from sage.all import *
>>> SGA = SymmetricGroupAlgebra(GF(Integer(2)), Integer(5))
>>> SM = SGA.specht_module([Integer(3), Integer(2)])
>>> B = next(iter(SM.basis()))
>>> U = SM.subrepresentation([B])
>>> U.dimension()
5
symmetric_power(degree=None)[source]#

Return the symmetric power of self in degree degree.

EXAMPLES:

sage: W = CoxeterGroup(['H', 3])
sage: R = W.reflection_representation()
sage: S3R = R.symmetric_power(3)
sage: S3R
Symmetric power representation of Reflection representation of
Finite Coxeter group over ... with Coxeter matrix:
[1 3 2]
[3 1 5]
[2 5 1] in degree 3
>>> from sage.all import *
>>> W = CoxeterGroup(['H', Integer(3)])
>>> R = W.reflection_representation()
>>> S3R = R.symmetric_power(Integer(3))
>>> S3R
Symmetric power representation of Reflection representation of
Finite Coxeter group over ... with Coxeter matrix:
[1 3 2]
[3 1 5]
[2 5 1] in degree 3
twisted_invariant_module(chi, G=None, **kwargs)[source]#

Create the isotypic component of the action of G on self with irreducible character given by chi.

INPUT:

  • chi – a list/tuple of character values or an instance of ClassFunction_gap

  • G – a finitely-generated semigroup (default: the semigroup this is a representation of)

This also accepts the first argument to be the group.

OUTPUT:

EXAMPLES:

sage: G = SymmetricGroup(3)
sage: R = G.regular_representation(QQ)
sage: T = R.twisted_invariant_module([2,0,-1])
sage: T.basis()
Finite family {0: B[0], 1: B[1], 2: B[2], 3: B[3]}
sage: [T.lift(b) for b in T.basis()]
[() - (1,2,3), -(1,2,3) + (1,3,2), (2,3) - (1,2), -(1,2) + (1,3)]
>>> from sage.all import *
>>> G = SymmetricGroup(Integer(3))
>>> R = G.regular_representation(QQ)
>>> T = R.twisted_invariant_module([Integer(2),Integer(0),-Integer(1)])
>>> T.basis()
Finite family {0: B[0], 1: B[1], 2: B[2], 3: B[3]}
>>> [T.lift(b) for b in T.basis()]
[() - (1,2,3), -(1,2,3) + (1,3,2), (2,3) - (1,2), -(1,2) + (1,3)]

We check the different inputs work:

sage: R.twisted_invariant_module([2,0,-1], G) is T
True
sage: R.twisted_invariant_module(G, [2,0,-1]) is T
True
>>> from sage.all import *
>>> R.twisted_invariant_module([Integer(2),Integer(0),-Integer(1)], G) is T
True
>>> R.twisted_invariant_module(G, [Integer(2),Integer(0),-Integer(1)]) is T
True
class sage.modules.with_basis.representation.SchurFunctorRepresentation(V, shape)[source]#

Bases: Subrepresentation

The representation constructed by the Schur functor.

Let \(G\) be a semigroup and let \(V\) be a representation of \(G\). The Schur functor for a partition \(\lambda\) of size \(k\) is the functor \(\mathbb{S}_{\lambda}\) that sends \(V\) to the \(G\)-subrepresentation of \(V^{\otimes k}\) spanned by \((v_1 \otimes \cdots \otimes v_k) c_{\lambda}\), where \(c_{\lambda}\) is the Young symmetrizer corresponding to \(\lambda\). When \(G = GL_n(F)\), the Schur functor image \(\mathbb{S}_{\lambda} F^n\) is the (irreducible when \(F\) has characteristic \(0\)) highest representation of shape \(\lambda\).

EXAMPLES:

sage: G = groups.permutation.Dihedral(3)
sage: V = G.regular_representation()
sage: S21V = V.schur_functor([2, 1])
sage: S21V.dimension()
70
sage: SemistandardTableaux([2,1], max_entry=V.dimension()).cardinality()
70
sage: chi = G.character([S21V.representation_matrix(g).trace()
....:                    for g in G.conjugacy_classes_representatives()])
sage: chi.values()
[70, 0, -2]
sage: G.character_table()
[ 1 -1  1]
[ 2  0 -1]
[ 1  1  1]
sage: for m, phi in chi.decompose():
....:     print(m, phi.values())
11 [1, -1, 1]
11 [1, 1, 1]
24 [2, 0, -1]

sage: # long time
sage: S211V = V.schur_functor([2, 1, 1])
sage: S211V.dimension()
105
sage: SemistandardTableaux([2, 1, 1], max_entry=V.dimension()).cardinality()
105
sage: chi = G.character([S211V.representation_matrix(g).trace()
....:                    for g in G.conjugacy_classes_representatives()])
sage: chi.values()
[105, -3, 0]
sage: for m, phi in chi.decompose():
....:     print(m, phi.values())
19 [1, -1, 1]
16 [1, 1, 1]
35 [2, 0, -1]
>>> from sage.all import *
>>> G = groups.permutation.Dihedral(Integer(3))
>>> V = G.regular_representation()
>>> S21V = V.schur_functor([Integer(2), Integer(1)])
>>> S21V.dimension()
70
>>> SemistandardTableaux([Integer(2),Integer(1)], max_entry=V.dimension()).cardinality()
70
>>> chi = G.character([S21V.representation_matrix(g).trace()
...                    for g in G.conjugacy_classes_representatives()])
>>> chi.values()
[70, 0, -2]
>>> G.character_table()
[ 1 -1  1]
[ 2  0 -1]
[ 1  1  1]
>>> for m, phi in chi.decompose():
...     print(m, phi.values())
11 [1, -1, 1]
11 [1, 1, 1]
24 [2, 0, -1]

>>> # long time
>>> S211V = V.schur_functor([Integer(2), Integer(1), Integer(1)])
>>> S211V.dimension()
105
>>> SemistandardTableaux([Integer(2), Integer(1), Integer(1)], max_entry=V.dimension()).cardinality()
105
>>> chi = G.character([S211V.representation_matrix(g).trace()
...                    for g in G.conjugacy_classes_representatives()])
>>> chi.values()
[105, -3, 0]
>>> for m, phi in chi.decompose():
...     print(m, phi.values())
19 [1, -1, 1]
16 [1, 1, 1]
35 [2, 0, -1]

An example with the cyclic group:

sage: C3 = groups.permutation.Cyclic(3)
sage: V3 = C3.regular_representation()
sage: S31V3 = V3.schur_functor([3, 1])
sage: S31V3.dimension()
15
sage: chi = C3.character([S31V3.representation_matrix(g).trace()
....:                     for g in C3.conjugacy_classes_representatives()])
sage: chi.values()
[15, 0, 0]
sage: C3.character_table()
[         1          1          1]
[         1      zeta3 -zeta3 - 1]
[         1 -zeta3 - 1      zeta3]
sage: for m, phi in chi.decompose():
....:     print(m, phi.values())
5 [1, 1, 1]
5 [1, -zeta3 - 1, zeta3]
5 [1, zeta3, -zeta3 - 1]
>>> from sage.all import *
>>> C3 = groups.permutation.Cyclic(Integer(3))
>>> V3 = C3.regular_representation()
>>> S31V3 = V3.schur_functor([Integer(3), Integer(1)])
>>> S31V3.dimension()
15
>>> chi = C3.character([S31V3.representation_matrix(g).trace()
...                     for g in C3.conjugacy_classes_representatives()])
>>> chi.values()
[15, 0, 0]
>>> C3.character_table()
[         1          1          1]
[         1      zeta3 -zeta3 - 1]
[         1 -zeta3 - 1      zeta3]
>>> for m, phi in chi.decompose():
...     print(m, phi.values())
5 [1, 1, 1]
5 [1, -zeta3 - 1, zeta3]
5 [1, zeta3, -zeta3 - 1]

An example of \(GL_3(\GF{2})\):

sage: G = groups.matrix.GL(3, 2)
sage: from sage.modules.with_basis.representation import Representation
sage: N = G.natural_representation()
sage: S21N = N.schur_functor([2, 1])
sage: S21N.dimension()
8
>>> from sage.all import *
>>> G = groups.matrix.GL(Integer(3), Integer(2))
>>> from sage.modules.with_basis.representation import Representation
>>> N = G.natural_representation()
>>> S21N = N.schur_functor([Integer(2), Integer(1)])
>>> S21N.dimension()
8

An example with the Weyl/Coxeter group of type \(C_3\):

sage: G = WeylGroup(['C', 3], prefix='s')
sage: R = G.reflection_representation()
sage: S = R.schur_functor([3, 2, 1])
sage: g = G.an_element(); g
s1*s2*s3
sage: v = S.an_element(); v
2*S[0] + 2*S[1] + 3*S[2]
sage: v * g
-(2*a+1)*S[0] - (a+2)*S[1] - (2*a-2)*S[2] + (2*a-2)*S[3]
 - (-2*a+4)*S[4] + (-2*a+4)*S[5] + 2*S[6] + 2*a*S[7]
sage: g * v
3*S[0] + (-2*a+5)*S[2] + 3*a*S[4] - (5*a-2)*S[6] - 6*S[7]
>>> from sage.all import *
>>> G = WeylGroup(['C', Integer(3)], prefix='s')
>>> R = G.reflection_representation()
>>> S = R.schur_functor([Integer(3), Integer(2), Integer(1)])
>>> g = G.an_element(); g
s1*s2*s3
>>> v = S.an_element(); v
2*S[0] + 2*S[1] + 3*S[2]
>>> v * g
-(2*a+1)*S[0] - (a+2)*S[1] - (2*a-2)*S[2] + (2*a-2)*S[3]
 - (-2*a+4)*S[4] + (-2*a+4)*S[5] + 2*S[6] + 2*a*S[7]
>>> g * v
3*S[0] + (-2*a+5)*S[2] + 3*a*S[4] - (5*a-2)*S[6] - 6*S[7]
Element[source]#

alias of Element

class sage.modules.with_basis.representation.SignRepresentationCoxeterGroup(group, base_ring, sign_function=None)[source]#

Bases: SignRepresentation_abstract

The sign representation for a Coxeter group.

EXAMPLES:

sage: G = WeylGroup(["A", 1, 1])
sage: V = G.sign_representation()
sage: TestSuite(V).run()

sage: # optional - gap3
sage: W = CoxeterGroup(['B', 3], implementation="coxeter3")
sage: S = W.sign_representation()
sage: TestSuite(S).run()
>>> from sage.all import *
>>> G = WeylGroup(["A", Integer(1), Integer(1)])
>>> V = G.sign_representation()
>>> TestSuite(V).run()

>>> # optional - gap3
>>> W = CoxeterGroup(['B', Integer(3)], implementation="coxeter3")
>>> S = W.sign_representation()
>>> TestSuite(S).run()
class sage.modules.with_basis.representation.SignRepresentationMatrixGroup(group, base_ring, sign_function=None)[source]#

Bases: SignRepresentation_abstract

The sign representation for a matrix group.

EXAMPLES:

sage: G = groups.permutation.PGL(2, 3)
sage: V = G.sign_representation()
sage: TestSuite(V).run()
>>> from sage.all import *
>>> G = groups.permutation.PGL(Integer(2), Integer(3))
>>> V = G.sign_representation()
>>> TestSuite(V).run()
class sage.modules.with_basis.representation.SignRepresentationPermgroup(group, base_ring, sign_function=None)[source]#

Bases: SignRepresentation_abstract

The sign representation for a permutation group.

EXAMPLES:

sage: G = groups.permutation.PGL(2, 3)
sage: V = G.sign_representation()
sage: TestSuite(V).run()
>>> from sage.all import *
>>> G = groups.permutation.PGL(Integer(2), Integer(3))
>>> V = G.sign_representation()
>>> TestSuite(V).run()
class sage.modules.with_basis.representation.SignRepresentation_abstract(group, base_ring, sign_function=None)[source]#

Bases: Representation_abstract, CombinatorialFreeModule

Generic implementation of a sign representation.

The sign representation of a semigroup \(S\) over a commutative ring \(R\) is the \(1\)-dimensional \(R\)-module on which every element of \(S\) acts by \(1\) if order of element is even (including 0) or \(-1\) if order of element if odd.

This is simultaneously a left and right representation.

INPUT:

  • permgroup – a permgroup

  • base_ring – the base ring for the representation

  • sign_function – a function which returns \(1\) or \(-1\) depending on the elements sign

REFERENCES:

class sage.modules.with_basis.representation.Subrepresentation(basis, support_order, ambient, *args, **opts)[source]#

Bases: Representation_abstract, SubmoduleWithBasis

A subrepresentation.

Let \(R\) be a representation of an algebraic object \(X\). A subrepresentation is a submodule of \(R\) that is closed under the action of \(X\).

class Element[source]#

Bases: IndexedFreeModuleElement

class sage.modules.with_basis.representation.TrivialRepresentation(semigroup, base_ring)[source]#

Bases: Representation_abstract, CombinatorialFreeModule

The trivial representation of a semigroup.

The trivial representation of a semigroup \(S\) over a commutative ring \(R\) is the \(1\)-dimensional \(R\)-module on which every element of \(S\) acts by the identity.

This is simultaneously a left and right representation.

INPUT:

  • semigroup – a semigroup

  • base_ring – the base ring for the representation

REFERENCES:

class Element[source]#

Bases: Element