Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
Merge branch 'u/tfeulner/ticket/15576' of trac.sagemath.org:sage into…
Browse files Browse the repository at this point in the history
… 15576
  • Loading branch information
darijgr committed Jan 6, 2014
2 parents 037277a + 6155cf9 commit adac1c9
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 52 deletions.
@@ -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::
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.<a> = GF(9)
Expand All @@ -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):
Expand Down Expand Up @@ -241,14 +273,14 @@ cdef class SemimonomialTransformation(MultiplicativeGroupElement):
sage: F.<a> = 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::
Expand All @@ -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::
Expand Down Expand Up @@ -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.
Expand Down
@@ -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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -360,10 +369,10 @@ def _repr_(self):
sage: F.<a> = 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"""
Expand All @@ -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"""
Expand All @@ -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))

Expand Down

0 comments on commit adac1c9

Please sign in to comment.