Representations of a semigroup#
AUTHORS:
Travis Scrimshaw (2015-11-21): initial version
Siddharth Singh (2020-03-21): signed representation
- class sage.modules.with_basis.representation.RegularRepresentation(semigroup, base_ring, side='left')#
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)#
Bases:
Representation_abstract
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: from sage.modules.with_basis.representation import Representation sage: on_basis = lambda g,m: M.term(m, g.sign()) sage: R = Representation(G, 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']
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']
REFERENCES:
- class Element#
Bases:
IndexedFreeModuleElement
- product_by_coercion(left, right)#
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: from sage.modules.with_basis.representation import Representation sage: R = Representation(G, 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 True sage: r*r 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 = Representation(G, E, on_basis, category=category) sage: t = T.an_element(); t 1 + 2*e0 + 3*e1 + e1*e2 sage: g*t == t True sage: t*t 1 + 4*e0 + 4*e0*e1*e2 + 6*e1 + 2*e1*e2
- side()#
Return whether
self
is a left or a right representation.OUTPUT:
the string
"left"
or"right"
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'
- class sage.modules.with_basis.representation.Representation_abstract(semigroup, base_ring, *args, **opts)#
Bases:
CombinatorialFreeModule
Abstract base class for representations of semigroups.
INPUT:
semigroup
– a semigroupbase_ring
– a commutative ring
- invariant_module(S=None, **kwargs)#
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)]
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)]
- semigroup()#
Return the semigroup whose representation
self
is.EXAMPLES:
sage: G = SymmetricGroup(4) sage: M = CombinatorialFreeModule(QQ, ['v']) sage: from sage.modules.with_basis.representation import Representation sage: on_basis = lambda g,m: M.term(m, g.sign()) sage: R = Representation(G, M, on_basis) sage: R.semigroup() Symmetric group of order 4! as a permutation group
- semigroup_algebra()#
Return the semigroup algebra whose representation
self
is.EXAMPLES:
sage: G = SymmetricGroup(4) sage: M = CombinatorialFreeModule(QQ, ['v']) sage: from sage.modules.with_basis.representation import Representation sage: on_basis = lambda g,m: M.term(m, g.sign()) sage: R = Representation(G, M, on_basis) sage: R.semigroup_algebra() Symmetric group algebra of order 4 over Rational Field
- side()#
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'
- twisted_invariant_module(chi, G=None, **kwargs)#
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 group to be 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)]
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
- class sage.modules.with_basis.representation.SignRepresentationCoxeterGroup(group, base_ring, sign_function=None)#
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()
- class sage.modules.with_basis.representation.SignRepresentationMatrixGroup(group, base_ring, sign_function=None)#
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()
- class sage.modules.with_basis.representation.SignRepresentationPermgroup(group, base_ring, sign_function=None)#
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()
- class sage.modules.with_basis.representation.SignRepresentation_abstract(group, base_ring, sign_function=None)#
Bases:
Representation_abstract
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 Element#
Bases:
IndexedFreeModuleElement
- side()#
Return that
self
is a two-sided representation.OUTPUT:
the string
"twosided"
EXAMPLES:
sage: G = groups.permutation.Dihedral(4) sage: R = G.sign_representation() sage: R.side() 'twosided'
- class sage.modules.with_basis.representation.TrivialRepresentation(semigroup, base_ring)#
Bases:
Representation_abstract
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:
- class Element#
Bases:
IndexedFreeModuleElement
- side()#
Return that
self
is a two-sided representation.OUTPUT:
the string
"twosided"
EXAMPLES:
sage: G = groups.permutation.Dihedral(4) sage: R = G.trivial_representation() sage: R.side() 'twosided'