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
where \(\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(1)-1}), \ldots, \alpha(\psi_{\pi(n)-1}))\) and the multiplication of vectors is defined elementwisely. (The indexing of vectors is \(0\)-based here, so \(\psi = (\psi_0, \psi_1, \ldots, \psi_{n-1})\).)
Todo
Up to now, this group is only implemented for finite fields because of the limited support of automorphisms for arbitrary rings.
AUTHORS:
Thomas Feulner (2012-11-15): initial version
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_group.SemimonomialActionMat(G, M, check=True)[source]#
Bases:
Action
The left action of
SemimonomialTransformationGroup
on matrices over the same ring whose number of columns is equal to the degree. SeeSemimonomialActionVec
for the definition of the action on the row vectors of such a matrix.
- class sage.groups.semimonomial_transformations.semimonomial_transformation_group.SemimonomialActionVec(G, V, check=True)[source]#
Bases:
Action
The natural left action of the semimonomial group on vectors.
The action is defined by: \((\phi, \pi, \alpha)*(v_0, \ldots, v_{n-1}) := (\alpha(v_{\pi(1)-1}) \cdot \phi_0^{-1}, \ldots, \alpha(v_{\pi(n)-1}) \cdot \phi_{n-1}^{-1})\). (The indexing of vectors is \(0\)-based here, so \(\psi = (\psi_0, \psi_1, \ldots, \psi_{n-1})\).)
- class sage.groups.semimonomial_transformations.semimonomial_transformation_group.SemimonomialTransformationGroup(R, len)[source]#
Bases:
FiniteGroup
,UniqueRepresentation
A semimonomial transformation group over a ring.
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
\[(\phi, \pi, \alpha)(\psi, \sigma, \beta) = (\phi \cdot \psi^{\pi, \alpha}, \pi\sigma, \alpha \circ \beta)\]where \(\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(1)-1}), \ldots, \alpha(\psi_{\pi(n)-1}))\) and the multiplication of vectors is defined elementwisely. (The indexing of vectors is \(0\)-based here, so \(\psi = (\psi_0, \psi_1, \ldots, \psi_{n-1})\).)
Todo
Up to now, this group is only implemented for finite fields because of the limited support of automorphisms for arbitrary rings.
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) ((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)) ((1, 1, 1, 1); (), Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> a)
- Element[source]#
alias of
SemimonomialTransformation
- base_ring()[source]#
Return the underlying ring of
self
.EXAMPLES:
sage: F.<a> = GF(4) sage: SemimonomialTransformationGroup(F, 3).base_ring() is F True
>>> from sage.all import * >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(3)).base_ring() is F True
- degree()[source]#
Return the degree of
self
.EXAMPLES:
sage: F.<a> = GF(4) sage: SemimonomialTransformationGroup(F, 3).degree() 3
>>> from sage.all import * >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(3)).degree() 3
- gens()[source]#
Return a tuple of generators of
self
.EXAMPLES:
sage: F.<a> = GF(4) sage: SemimonomialTransformationGroup(F, 3).gens() (((a, 1, 1); (), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a), ((1, 1, 1); (1,2,3), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a), ((1, 1, 1); (1,2), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a), ((1, 1, 1); (), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a + 1))
>>> from sage.all import * >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(3)).gens() (((a, 1, 1); (), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a), ((1, 1, 1); (1,2,3), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a), ((1, 1, 1); (1,2), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a), ((1, 1, 1); (), Ring endomorphism of Finite Field in a of size 2^2 Defn: a |--> a + 1))
- order()[source]#
Return the number of elements of
self
.EXAMPLES:
sage: F.<a> = GF(4) sage: SemimonomialTransformationGroup(F, 5).order() == (4-1)**5 * factorial(5) * 2 True
>>> from sage.all import * >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1) >>> SemimonomialTransformationGroup(F, Integer(5)).order() == (Integer(4)-Integer(1))**Integer(5) * factorial(Integer(5)) * Integer(2) True