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: sage.modules.with_basis.representation.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)

Bases: sage.modules.with_basis.representation.Representation_abstract

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: 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: sage.modules.with_basis.indexed_element.IndexedFreeModuleElement

product_by_coercion(left, right)

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: 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, 2, 3} over Rational Field' and 
 'Representation of The Klein 4 group of order 4, as a permutation 
 group indexed by Subsets of {0, 1, 2, 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: sage.combinat.free_module.CombinatorialFreeModule

Abstract base class for representations of semigroups.

INPUT:

  • semigroup – a semigroup

  • base_ring – a commutative ring

invariant_module(S=None, **kwargs)

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)]

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 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 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: sage.modules.with_basis.representation.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: sage.modules.with_basis.representation.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: sage.modules.with_basis.representation.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: sage.modules.with_basis.representation.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 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 Element

Bases: sage.modules.with_basis.indexed_element.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: sage.modules.with_basis.representation.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 semigroup

  • base_ring – the base ring for the representation

REFERENCES:

class Element

Bases: sage.modules.with_basis.indexed_element.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'