#5664: Bugs in PermutationGroup_subgroup.__cmp__
-----------------------+----------------------------------------------------
Reporter: SimonKing | Owner: tbd
Type: defect | Status: new
Priority: critical | Milestone: sage-3.4.1
Component: algebra | Keywords: comparison subgroup
-----------------------+----------------------------------------------------
At http://groups.google.com/group/sage-
support/browse_thread/thread/533747d48a1f29eb?hl=en
it was reported that comparision of subgroups of permutation groups does
not work as expected:
{{{
sage: G = SymmetricGroup(4)
sage: H = G.subgroup([G((1,2,3))])
sage: K = G.subgroup([G((2,3,1))])
sage: G((1,2,3))==G((2,3,1))
True
sage: K==H
False
}}}
Even worse, comparison may raise an error -- afaik, the Python
specification says that `__cmp__` is not supposed to raise errors:
{{{
sage: G2=G.subgroup([G((1,2,3,4)),G((1,2))])
sage: G==G2
True
sage: G2==G
Traceback (most recent call last):
...
AttributeError: 'SymmetricGroup' object has no attribute 'ambient_group'
}}}
So, `==` is not a symmetric relation.
Of course, G==G2 invokes G.__cmp__(G2), which tests whether G and G2 are
the same as PermutationGroup_generic.
In contrast, G2==G tests whether G2 and G are the same as
PermutationGroup_subgroup.
So, what do people want?
1. A symmetric relation? Then K.__cmp__() should invoke
PermutationGroup_generic.__cmp__().
2. Or should K.__cmp__(H) test whether K and H are subgroups of the same
PermutationGroup, and then continue with testing whether K and H are
subgroup of each other?
Note that the with 1., == would test whether K and H are isomorphic
abstract groups, which is the job of K.is_isomorphic(H).
Therefore, I am in favour of 2.
But then:
* What should be returned if neither H is a subgroup of K nor K is a
subgroup of H?
* What should be returned if H is subgroup of G1 and K is subgroup of G2,
with H contained in K contained in G2 contained in G1? Currently,
K.__cmp__(H) would -1 in this case (hence, H<K although K is contained in
H!). Example:
{{{
sage: G=SymmetricGroup(6)
sage: G1=G.subgroup([G((1,2,3,4,5)),G((1,2))])
sage: G2=G.subgroup([G((1,2,3,4)),G((1,2))])
sage: K=G2.subgroup([G1((1,2,3))])
sage: H=G1.subgroup([G2(())])
sage: H<K
False
sage: K<H
True
}}}
So, the trivial group in G1 is considered greater than a non-trivial group
in G2, because G1>G2.
So, before working on a patch, I'd like to get people's opinion on what is
a good specification of 'comparison of subgroups'.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/5664>
Sage <http://sagemath.org/>
Sage - Open Source Mathematical Software: Building the Car Instead of
Reinventing the Wheel
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en
-~----------~----~----~----~------~----~------~--~---