Opened 8 years ago
Closed 7 years ago
#13726 closed enhancement (fixed)
The semimonomial group
Reported by: | tfeulner | Owned by: | joyner |
---|---|---|---|
Priority: | major | Milestone: | sage-5.13 |
Component: | group theory | Keywords: | (semi-)monomial group, semilinear action, isometry group |
Cc: | ppurka | Merged in: | sage-5.13.beta1 |
Authors: | Thomas Feulner | Reviewers: | Volker Braun |
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | Stopgaps: |
Description (last modified by )
A semimonomial group over a ring R
of length n
is equal to the semidirect product of the 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
\pi, \sigma \in S_n
\alpha, \beta \in Aut(R)
is defined by:
(\phi, \pi, \alpha)(\psi, \sigma, \beta) := (\phi * \psi^{\pi, \alpha}, \pi * \sigma, \alpha * \beta)
with
\psi^{\pi, \alpha} := (\alpha(\psi_{\pi(0} ) ), \ldots, \alpha(\psi_{\pi(n-1} ) ) )
and an elementwisely defined multiplication of vectors.
This group plays an important role in coding theory since it is the group of all semilinear isometries (relative to the Hamming/Lee?/homogenous metric) of the ambient space.
apply only: trac_13726-semimonomial_group_vb.patch
Attachments (4)
Change History (23)
Changed 8 years ago by
comment:1 Changed 8 years ago by
- Description modified (diff)
comment:2 Changed 8 years ago by
- Description modified (diff)
- Status changed from new to needs_review
comment:3 Changed 8 years ago by
- Description modified (diff)
Changed 8 years ago by
comment:4 Changed 8 years ago by
Made some changes which were necessary for #13771. In particular, I changed the definition of the multiplication.
comment:5 Changed 8 years ago by
Apply trac_13726-semimonomial_group.patch
comment:6 Changed 8 years ago by
Hmm... I can only suggest minor cosmetic changes. Someone else needs to look at the math behind what you implemented.
comment:7 Changed 8 years ago by
- Description modified (diff)
Updated patch
Patchbot: apply trac_13726-semimonomial_group.2.patch
comment:8 Changed 8 years ago by
- Milestone changed from sage-5.11 to sage-5.12
comment:9 follow-up: ↓ 10 Changed 7 years ago by
- Your
_element_class
method doesn't do anything non-trivial, its simpler to useclass SemimonomialGroup(...): Element = SemimonomialGroupElement
instead.
- Your parent overrides
__call__
, thats a big no-no in our parent/element framework. By default, calling the parent will end up usingSeminmonomialGroupElement.__init__
. If you need to normalize arguments, you should implement aSemimonomialGroup._element_constructor_
method. See e.g. Simon King's talk at http://wiki.sagemath.org/days53/schedule for details. (This should be better documented in the developer manual, I know).
- Also run the testsuite for elements, e.g.
TestSuite(S.an_element()).run()
- It would be nice to have exceptions in py3-compatible syntax (this should also go into the developer manual) and lower-case:
raise Exception, 'This is a boo-boo' # bad raise Exception('this is a boo-boo') # good
- Is
SemimonomialGroup
really used in the literature? A quick googling doesn't find any other references. Its a bit confusing since you are not talking about a generalization of monomial groups. The latter is already quite general, e.g. every supersolvable group. PerhapsAutomorphismGroupOfLinearCode
would be a more fitting description? Or is there another characterization? I realize that thats a handful, but it could be made available asLinearCode.AutomorphismGroup
, say.
- Storing the translation in a list is tricky as the user might inadvertently change it
sage: g = my_group.gen(0) sage: v = g.get_v() ... sage: v[0] = 1 # changes g!
To hold immutable data, its better to use tuples. Alternatively, use Sage vectors and set them immutable:sage: v = vector(GF(3), [0, 1, 2]) sage: v.set_immutable() sage: v[0] = 1 ... ValueError: vector is immutable; please change a copy instead (use copy())
comment:10 in reply to: ↑ 9 Changed 7 years ago by
Replying to vbraun:
I made all the changes you suggested except for renaming the group.
- Is
SemimonomialGroup
really used in the literature? A quick googling doesn't find any other references. Its a bit confusing since you are not talking about a generalization of monomial groups. The latter is already quite general, e.g. every supersolvable group. PerhapsAutomorphismGroupOfLinearCode
would be a more fitting description? Or is there another characterization? I realize that thats a handful, but it could be made available asLinearCode.AutomorphismGroup
, say.
There are a few other references, for example T. Honold and I. Landjev: Linear codes over finite chain rings. But mostly, people do either restrict themselves to linear isometries, which leads to the action of the monomial group or they don't express the equivalence relation with the help of a group action (semilinearly equivalent codes).
I do not understand the rest of your comment. This group is a generalization of the monomial group, since you just add the group of field automorphisms, similar to the construction of the general semilinear group. I think AutomorphismGroupOfLinearCode
would be confusing, since the elements of this group need not to define an automorphism of a linear code. The automorphism group of a linear code is a subgroup of the semimonomial group.
Another characterization would be the group of semilinear Hamming isometries.
comment:11 follow-up: ↓ 12 Changed 7 years ago by
Here is what I'm confused about. A monomial group is one where all characters are induced from linear characters. Although I haven't checked, it seems very plausible that the group of monomial transformations is a monomial group. But I don't think the converse is true. E.g. S_3 is a monomial group
sage: SymmetricGroup(3).is_monomial() True
but doesn't seem to be the group of monomial automorphisms of a vector space (Is this true?).
comment:12 in reply to: ↑ 11 ; follow-up: ↓ 13 Changed 7 years ago by
Replying to vbraun:
Here is what I'm confused about. A monomial group is one where all characters are induced from linear characters. Although I haven't checked, it seems very plausible that the group of monomial transformations is a monomial group.
I did not find any answer to your question. But the wreath product G \wr S_n is known as the
complete monomial group. So, do you think I should call my group
CompleteSemimonomialGroup
or SemimonomialTransformationGroup
to emphasize the difference?
But I don't think the converse is true. E.g. S_3 is a monomial group
sage: SymmetricGroup(3).is_monomial() Truebut doesn't seem to be the group of monomial automorphisms of a vector space (Is this true?).
The symmetric group S_n is the group of monomial automorphisms of the n-dimensional binary vector space.
comment:13 in reply to: ↑ 12 Changed 7 years ago by
Replying to tfeulner:
I did not find any answer to your question. But the wreath product G \wr S_n is known as the complete monomial group. So, do you think I should call my group
CompleteSemimonomialGroup
orSemimonomialTransformationGroup
to emphasize the difference?
I think either name would be fine. SemimonomialTransformationGroup
sounds clearer to me since it makes it clear that we are talking about groups acting in a certain way. Though if people in your field always talk about complete monomial groups then the former might be better, I don't know. Take your pick ;-)
The symmetric group S_n is the group of monomial automorphisms of the n-dimensional binary vector space.
Oh, good point. I was somehow assuming that there is at least one non-trivial unit.
comment:14 follow-up: ↓ 15 Changed 7 years ago by
Small nitpicks:
- In general it is better to use lazy import to improve the Sage startup time:
lazy_import('sage.groups.semimonomial_group.semimonomial_group', 'SemimonomialGroup')
insage/groups/all.py
. Then the actual import is deferred until you use it. - incidentally, the change to
sage/groups/all.py
doesn't apply cleanly on sage-5.13.beta0 and needs to be rediffed anyways. - Add also
semimonomial_group_element
to the developer manual.
The code looks great, thank you for your hard work!
comment:15 in reply to: ↑ 14 ; follow-up: ↓ 16 Changed 7 years ago by
Unfortunately, people do not use group actions in coding theory... I also prefer semimonomial transformation group and semimonomial transformation for the elements. So, I changed the class names to these names.
Replying to vbraun:
Small nitpicks:
- In general it is better to use lazy import to improve the Sage startup time:
lazy_import('sage.groups.semimonomial_group.semimonomial_group', 'SemimonomialGroup')insage/groups/all.py
. Then the actual import is deferred until you use it.
Done.
- incidentally, the change to
sage/groups/all.py
doesn't apply cleanly on sage-5.13.beta0 and needs to be rediffed anyways.
Is this my job, too?
- Add also
semimonomial_group_element
to the developer manual.
Done.
The code looks great, thank you for your hard work!
Thanks for all your help, Volker!
comment:16 in reply to: ↑ 15 Changed 7 years ago by
Replying to tfeulner:
- incidentally, the change to
sage/groups/all.py
doesn't apply cleanly on sage-5.13.beta0 and needs to be rediffed anyways.Is this my job, too?
Afraid so... depending on how complicated it is, the author should be the most qualified to do this. Though it its pretty trivial here.
comment:17 Changed 7 years ago by
- Description modified (diff)
- Reviewers set to Volker Braun
- Status changed from needs_review to positive_review
comment:18 Changed 7 years ago by
- Description modified (diff)
comment:19 Changed 7 years ago by
- Merged in set to sage-5.13.beta1
- Resolution set to fixed
- Status changed from positive_review to closed
Patchbot: apply trac_13726-semimonomial_group.patch