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 - SemimonomialTransformationGroupon matrices over the same ring whose number of columns is equal to the degree. See- SemimonomialActionVecfor 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