Semimonomial transformation group - Groups

Skip to content
Back to top
View this page
Edit this page

# 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

\[(\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.

AUTHORS:

- Thomas Feulner (2012-11-15): initial version

EXAMPLES:

Sage

    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)

Python

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

  Bases: `Action`

  The left action of `SemimonomialTransformationGroup` on matrices over the same ring whose number of columns is equal to the degree. See `SemimonomialActionVec` 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)

  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)

  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

      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)

  Python

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

    alias of `SemimonomialTransformation`

  base_ring()

    Return the underlying ring of `self`.

    EXAMPLES:

    Sage

        sage: F.<a> = GF(4)
        sage: SemimonomialTransformationGroup(F, 3).base_ring() is F
        True

    Python

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

    Return the degree of `self`.

    EXAMPLES:

    Sage

        sage: F.<a> = GF(4)
        sage: SemimonomialTransformationGroup(F, 3).degree()
        3

    Python

        >>> from sage.all import *
        >>> F = GF(Integer(4), names=('a',)); (a,) = F._first_ngens(1)
        >>> SemimonomialTransformationGroup(F, Integer(3)).degree()
        3

  gens()

    Return a tuple of generators of `self`.

    EXAMPLES:

    Sage

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

    Python

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

    Return the number of elements of `self`.

    EXAMPLES:

    Sage

        sage: F.<a> = GF(4)
        sage: SemimonomialTransformationGroup(F, 5).order() == (4-1)**5 * factorial(5) * 2
        True

    Python

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