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 semigroupbase_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.
- 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 semigroupbase_ring
– the base ring for the representationside
– (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 semigroupmodule
– a module with a basison_basis
– function which takes as inputg
,m
, whereg
is an element of the semigroup andm
is an element of the indexing set for the basis, and returns the result ofg
acting onm
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
andright
by passing toself._module
and then building a new element ofself
.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
andy
.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 sage.modules.with_basis.representation.Representation_abstract(semigroup, side, algebra=None)[source]#
Bases:
object
Abstract base class for representations of semigroups.
INPUT:
semigroup
– a semigroupside
– (default:"left"
) whether this is a"left"
or"right"
representationalgebra
– (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 ofself
orNone
ifself
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 ofS
.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 ofself
the elements ofS
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
bysubrepr
.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 onself
.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 shapela
applied toself
.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 bygens
.INPUT:
gens
– the generators of the submodulecheck
– ignoredalready_echelonized
– (default:False
) whetherthe elements of
gens
are already in (not necessarily reduced) echelon form
is_closed
– (keyword only; default:False
) whethergens
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 degreedegree
.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
onself
with irreducible character given bychi
.INPUT:
chi
– a list/tuple of character values or an instance ofClassFunction_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]
- 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 permgroupbase_ring
– the base ring for the representationsign_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 semigroupbase_ring
– the base ring for the representation
REFERENCES: