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. 
- 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- gis an element of the semigroup and- mis an element of the indexing set for the basis, and returns the result of- gacting 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 - leftand- rightby passing to- self._moduleand 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 - selfif 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 - xand- 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 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 - CombinatorialFreeModulein 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 - selfor the trivial module) submodule of- selfor- Noneif- selfis 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 - selfinvariant 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- selfthe elements of- Sacts
 - Note - Two sided actions are considered as left actions for the invariant module. - OUTPUT: - FiniteDimensionalInvariantModule- 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 - selfis 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 - selfby- 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 - gacting 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 functorwith shape- laapplied 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 - selfis.- 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 - selfis.- 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 - selfis 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 - selfgenerated by- gens.- INPUT: - gens– the generators of the submodule
- check– ignored
- already_echelonized– (default:- False) whether the elements of- gensare already in (not necessarily reduced) echelon form
- is_closed– (keyword only; default:- False) whether- gensalready 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 - selfin 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 - Gon- selfwith irreducible character given by- chi.- INPUT: - chi– 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: - FiniteDimensionalTwistedInvariantModule- 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 symmetrizercorresponding 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 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: