diff --git a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx index e399809a68d..874330f9f13 100644 --- a/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx +++ b/src/sage/groups/semimonomial_transformations/semimonomial_transformation.pyx @@ -1,35 +1,43 @@ r""" -Elements of a semimonomial transformation group +Elements of a semimonomial transformation group. + +A semimonomial transformation group over a ring `R` of degree `n` is equal to +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. -A semimonomial transformation group over a ring `R` of length `n` is equal to -the semidirect product of the monomial transformation group -(also known as the complete monomial group) and the group of ring automorphisms. The multiplication of two elements `(\phi, \pi, \alpha)(\psi, \sigma, \beta)` with - - `\phi, \psi \in {R^*}^n` + - `\phi, \psi \in {R^{\times}}^n` - - `\pi, \sigma \in S_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: +is defined by .. math:: -(\phi, \pi, \alpha)(\psi, \sigma, \beta) = -(\phi * \psi^{\pi, \alpha}, \pi * \sigma, \alpha * \beta) + (\phi, \pi, \alpha)(\psi, \sigma, \beta) = + (\phi \cdot \psi^{\pi, \alpha}, \pi\sigma, \alpha \circ \beta) -where -`\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(0)}), \ldots, \alpha(\psi_{\pi(n-1)}))` +with +`\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(1)-1}), \ldots, \alpha(\psi_{\pi(n)-1}))` and an elementwisely defined multiplication of vectors. + + The parent is :class:`~sage.groups.semimonomial_transformations.semimonomial_transformation_group.SemimonomialTransformationGroup`. AUTHORS: - Thomas Feulner (2012-11-15): initial version +- Thomas Feulner (2013-12-27): :trac:`15576` dissolve dependency on + Permutations().global_options()['mul'] EXAMPLES:: @@ -84,7 +92,7 @@ def _inverse(f, R): cdef class SemimonomialTransformation(MultiplicativeGroupElement): r""" - An element in a semimonomial group. See + An element in the semimonomial group over a ring `R`. See :class:`~sage.groups.semimonomial_transformations.semimonomial_transformation_group.SemimonomialTransformationGroup` for the details on the multiplication of two elements. @@ -165,6 +173,30 @@ cdef class SemimonomialTransformation(MultiplicativeGroupElement): cpdef MonoidElement _mul_(left, MonoidElement _right): """ + Multiplication of elements. + + The multiplication of two elements `(\phi, \pi, \alpha)` and + `(\psi, \sigma, \beta)` with + + - `\phi, \psi \in {R^{\times}}^n` + + - `\pi, \sigma \in S_n` + + - `\alpha, \beta \in Aut(R)` + + is defined by: + + .. math:: + + (\phi, \pi, \alpha)(\psi, \sigma, \beta) = + (\phi \cdot \psi^{\pi, \alpha}, \pi\sigma, \alpha \circ \beta) + + with + `\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(1)-1}), \ldots, \alpha(\psi_{\pi(n)-1}))` + and an elementwisely defined multiplication of vectors. Furthermore, + the multiplication `\pi\sigma` is done from left to right (like in GAP) -- + that is, `(\pi\sigma)(i) = \sigma(\pi(i))` for all `i`. + EXAMPLES:: sage: F. = GF(9) @@ -177,7 +209,7 @@ cdef class SemimonomialTransformation(MultiplicativeGroupElement): v = left.perm.action(right.v) alpha = left.get_autom() v = [left.v[i]*alpha(v[i]) for i in range(left.parent().degree())] - return left.parent()(v=v, perm=left.perm*right.perm, + return left.parent()(v=v, perm=left.perm.right_action_product(right.perm), autom=alpha*right.get_autom(), check=False) def __invert__(self): @@ -241,14 +273,14 @@ cdef class SemimonomialTransformation(MultiplicativeGroupElement): sage: F. = GF(9) sage: SemimonomialTransformationGroup(F, 4).an_element().__reduce__() - (Semimonomial transformation group over Finite Field in a of size 3^2of degree 4, (0, (a, 1, 1, 1), [4, 1, 2, 3], Ring endomorphism of Finite Field in a of size 3^2 + (Semimonomial transformation group over Finite Field in a of size 3^2 of degree 4, (0, (a, 1, 1, 1), [4, 1, 2, 3], Ring endomorphism of Finite Field in a of size 3^2 Defn: a |--> 2*a + 1)) """ return (self.parent(), (0, self.v, self.perm, self.get_autom())) def get_v(self): """ - Returns the component corresponding to `{R^*}^n` of ``self``. + Returns the component corresponding to `{R^{\times}}^n` of ``self``. EXAMPLES:: @@ -261,7 +293,7 @@ cdef class SemimonomialTransformation(MultiplicativeGroupElement): def get_v_inverse(self): """ Returns the (elementwise) inverse of the component corresponding to - `{R^*}^n` of ``self``. + `{R^{\times}}^n` of ``self``. EXAMPLES:: @@ -298,7 +330,7 @@ cdef class SemimonomialTransformation(MultiplicativeGroupElement): def invert_v(self): """ Elementwisely inverts all entries of ``self`` which - correspond to the component `{R^*}^n`. + correspond to the component `{R^{\times}}^n`. The other components of ``self`` keep unchanged. diff --git a/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py b/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py index 499f175e553..cfaa2c938f1 100644 --- a/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py +++ b/src/sage/groups/semimonomial_transformations/semimonomial_transformation_group.py @@ -1,28 +1,37 @@ r""" Semimonomial transformation group -A semimonomial transformation group over a ring `R` of length `n` is equal to -the semidirect product of the monomial transformation group -(also known as the complete monomial group) and the group of ring automorphisms. +A semimonomial transformation group over a ring `R` of degree `n` is equal to +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^*}^n` + - `\phi, \psi \in {R^{\times}}^n` -- `\pi, \sigma \in S_n` (with `(\pi * \sigma)(i) = \sigma(\pi(i))`) + - `\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)` + - `\alpha, \beta \in Aut(R)` is defined by .. math:: (\phi, \pi, \alpha)(\psi, \sigma, \beta) = - (\phi * \psi^{\pi, \alpha}, \pi * \sigma, \alpha * \beta) + (\phi \cdot \psi^{\pi, \alpha}, \pi\sigma, \alpha \circ \beta) where -`\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(0)}), \ldots, \alpha(\psi_{\pi(n-1)}))` -and an elementwisely defined multiplication of vectors. +`\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(1)-1}), \ldots, \alpha(\psi_{\pi(n)-1}))` +and the multiplication of vectors is defined elementwisely. + +.. TODO:: + + Up to now, this group is only implemented for finite fields because of + the limited support of automorphisms for arbitrary rings. AUTHORS: @@ -51,33 +60,33 @@ class SemimonomialTransformationGroup(FiniteGroup, UniqueRepresentation): r""" - A semimonomial transformation group over a ring `R` of - degree `n`. - - The semimonomial transformation group of degree `n` of `R` - is equal to the wreath - product of the monomial transformation group of `R` of degree `n` - (also known as the complete monomial group over the group of units of `R`) - and the group of ring automorphisms. The multiplication of two elements - `(\phi, \pi, \alpha)(\psi, \sigma, \beta)` with - - - `\phi, \psi \in {R^*}^n` - - - `\pi, \sigma \in S_n` - + A semimonomial transformation group over a ring `R` of degree `n` is equal to + 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 - + .. math:: - + (\phi, \pi, \alpha)(\psi, \sigma, \beta) = - (\phi * \psi^{\pi, \alpha}, \pi * \sigma, \alpha * \beta) - + (\phi \cdot \psi^{\pi, \alpha}, \pi\sigma, \alpha \circ \beta) + where - `\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(0)}), \ldots, \alpha(\psi_{\pi(n-1)}))` - and an elementwisely defined multiplication of vectors. - + `\psi^{\pi, \alpha} = (\alpha(\psi_{\pi(1)-1}), \ldots, \alpha(\psi_{\pi(n)-1}))` + and the multiplication of vectors is defined elementwisely. + .. TODO:: Up to now, this group is only implemented for finite fields because of @@ -360,10 +369,10 @@ def _repr_(self): sage: F. = GF(4) sage: SemimonomialTransformationGroup(F, 3) # indirect doctest - Semimonomial transformation group over Finite Field in a of size 2^2of degree 3 + Semimonomial transformation group over Finite Field in a of size 2^2 of degree 3 """ return ('Semimonomial transformation group over %s'%self.base_ring() + - 'of degree %s'%self.degree()) + ' of degree %s'%self.degree()) def _latex_(self): r""" @@ -388,7 +397,7 @@ class SemimonomialActionVec(Action): The action is defined by: `(\phi, \pi, \alpha)*(v_0, \ldots, v_{n-1}) := - (\alpha(v_{\pi(0)}) * \phi_0^{-1}, \ldots, \alpha(v_{\pi(n-1)}) * \phi_{n-1}^{-1})` + (\alpha(v_{\pi(1)-1}) \cdot \phi_0^{-1}, \ldots, \alpha(v_{\pi(n)-1}) \cdot \phi_{n-1}^{-1})` """ def __init__(self, G, V, check=True): r""" @@ -411,7 +420,7 @@ def __init__(self, G, V, check=True): if V.ambient_module() != V: raise ValueError('%s is not equal to its ambient module' % V) if V.dimension() != G.degree(): - raise ValueError('%s has a dimension different to the length of %s' % (V, G)) + raise ValueError('%s has a dimension different to the degree of %s' % (V, G)) if V.base_ring() != G.base_ring(): raise ValueError('%s and %s have different base rings' % (V, G))