Elements of a semimonomial transformation group#
The semimonomial transformation group of degree \(n\) over a ring \(R\) is the semidirect product of the monomial transformation group of degree \(n\) (also known as the complete monomial group over the group of units \(R^{\times}\) of \(R\)) and the group of ring automorphisms.
The multiplication of two elements \((\phi, \pi, \alpha)(\psi, \sigma, \beta)\) with
\(\phi, \psi \in {R^{\times}}^n\)
\(\pi, \sigma \in S_n\) (with the multiplication \(\pi\sigma\) done from left to right (like in GAP) – that is, \((\pi\sigma)(i) = \sigma(\pi(i))\) for all \(i\).)
\(\alpha, \beta \in Aut(R)\)
is defined by
with \(\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(1)-1}), \ldots, \alpha(\psi_{\pi(n)-1}))\) and an elementwisely defined multiplication of vectors. (The indexing of vectors is \(0\)-based here, so \(\psi = (\psi_0, \psi_1, \ldots, \psi_{n-1})\).)
The parent is
SemimonomialTransformationGroup
.
AUTHORS:
Thomas Feulner (2012-11-15): initial version
- Thomas Feulner (2013-12-27): Issue #15576 dissolve dependency on
Permutations.options.mul
EXAMPLES:
sage: S = SemimonomialTransformationGroup(GF(4, 'a'), 4)
sage: G = S.gens()
sage: G[0]*G[1]
((a, 1, 1, 1); (1,2,3,4), Ring endomorphism of Finite Field in a of size 2^2
Defn: a |--> a)
>>> from sage.all import *
>>> S = SemimonomialTransformationGroup(GF(Integer(4), 'a'), Integer(4))
>>> G = S.gens()
>>> G[Integer(0)]*G[Integer(1)]
((a, 1, 1, 1); (1,2,3,4), Ring endomorphism of Finite Field in a of size 2^2
Defn: a |--> a)
- class sage.groups.semimonomial_transformations.semimonomial_transformation.SemimonomialTransformation[source]#
Bases:
MultiplicativeGroupElement
An element in the semimonomial group over a ring \(R\). See
SemimonomialTransformationGroup
for the details on the multiplication of two elements.The init method should never be called directly. Use the call via the parent
SemimonomialTransformationGroup
. instead.EXAMPLES:
sage: F.<a> = GF(9) sage: S = SemimonomialTransformationGroup(F, 4) sage: g = S(v = [2, a, 1, 2]) sage: h = S(perm = Permutation('(1,2,3,4)'), autom=F.hom([a**3])) sage: g*h ((2, a, 1, 2); (1,2,3,4), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1) sage: h*g ((2*a + 1, 1, 2, 2); (1,2,3,4), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1) sage: S(g) ((2, a, 1, 2); (), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> a) sage: S(1) # the one element in the group ((1, 1, 1, 1); (), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> a)
>>> from sage.all import * >>> F = GF(Integer(9), names=('a',)); (a,) = F._first_ngens(1) >>> S = SemimonomialTransformationGroup(F, Integer(4)) >>> g = S(v = [Integer(2), a, Integer(1), Integer(2)]) >>> h = S(perm = Permutation('(1,2,3,4)'), autom=F.hom([a**Integer(3)])) >>> g*h ((2, a, 1, 2); (1,2,3,4), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1) >>> h*g ((2*a + 1, 1, 2, 2); (1,2,3,4), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1) >>> S(g) ((2, a, 1, 2); (), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> a) >>> S(Integer(1)) # the one element in the group ((1, 1, 1, 1); (), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> a)
- get_autom()[source]#
Return the component corresponding to \(Aut(R)\) of
self
.EXAMPLES:
sage: F.<a> = GF(9) sage: SemimonomialTransformationGroup(F, 4).an_element().get_autom() Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1
>>> from sage.all import * >>> F = GF(Integer(9), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(4)).an_element().get_autom() Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1
- get_perm()[source]#
Return the component corresponding to \(S_n\) of
self
.EXAMPLES:
sage: F.<a> = GF(9) sage: SemimonomialTransformationGroup(F, 4).an_element().get_perm() [4, 1, 2, 3]
>>> from sage.all import * >>> F = GF(Integer(9), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(4)).an_element().get_perm() [4, 1, 2, 3]
- get_v()[source]#
Return the component corresponding to \({R^{ imes}}^n\) of
self
.EXAMPLES:
sage: F.<a> = GF(9) sage: SemimonomialTransformationGroup(F, 4).an_element().get_v() (a, 1, 1, 1)
>>> from sage.all import * >>> F = GF(Integer(9), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(4)).an_element().get_v() (a, 1, 1, 1)
- get_v_inverse()[source]#
Return the (elementwise) inverse of the component corresponding to \({R^{ imes}}^n\) of
self
.EXAMPLES:
sage: F.<a> = GF(9) sage: SemimonomialTransformationGroup(F, 4).an_element().get_v_inverse() (a + 2, 1, 1, 1)
>>> from sage.all import * >>> F = GF(Integer(9), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(4)).an_element().get_v_inverse() (a + 2, 1, 1, 1)
- invert_v()[source]#
Elementwisely invert all entries of
self
which correspond to the component \({R^{ imes}}^n\).The other components of
self
keep unchanged.EXAMPLES:
sage: F.<a> = GF(9) sage: x = copy(SemimonomialTransformationGroup(F, 4).an_element()) sage: x.invert_v() sage: x.get_v() == SemimonomialTransformationGroup(F, 4).an_element().get_v_inverse() True
>>> from sage.all import * >>> F = GF(Integer(9), names=('a',)); (a,) = F._first_ngens(1) >>> x = copy(SemimonomialTransformationGroup(F, Integer(4)).an_element()) >>> x.invert_v() >>> x.get_v() == SemimonomialTransformationGroup(F, Integer(4)).an_element().get_v_inverse() True