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