On Tue, May 18, 2010 at 12:28 AM, Robert Bradshaw <
rober...@math.washington.edu> wrote:

> I full heartedly agree with the idea that permutation groups should be able
> to act on more than just the set 1..n, using a dictionary to do the mapping
> transparently to the user under the hood (and this is technically totally
> feasible). I'm not as convinced that we should throw out the notion of fixed
> points. For example, given Sn, n>2, I would not say all Z/2Z subgroups are
> "transitive" but it sounds like you want it to.
>
>
Good question. Your point aims at the notion that transitivity is not
inherently an invariant of a group, but is a property of a specific
representation. Yes, something such as a group generated by (100,101) should
be considered transitive... while a group generated by (98,99)(100,101) as a
single generator is clearly not transitive. They are both of course
representations of Z/2Z. At present, Sage considers neither of these to be
transitive. I also agree that we should not throw away the notion of fixed
points. But, my argument is that fixed points of a permutation
representation should be made explicit when defining the representation. So,
a group generated by (2)(100,101) is not transitive while a group generated
by (100,101) is.



> Would it be sufficient to provide a method that, given a group, returns a
> representation that keeps the permuted set names the same, but restricts the
> domain to non-fixed points?
>

I do think this would be sufficient, yes. Keep in mind though that this
should be easily restricted to subgroups and subrepresentations.

Jason B Hill


>
> - Robert
>
>
> On May 17, 2010, at 3:06 PM, Mike Hansen wrote:
>
>  ---------- Forwarded message ----------
>> From: Jason B Hill <jason.b.h...@colorado.edu>
>> Date: Mon, May 17, 2010 at 3:05 PM
>> Subject: [sage-combinat-devel] permutation group perspectives
>> To: sage-combinat-de...@googlegroups.com
>>
>>
>>
>> This comes after a discussion I had with several at Sage days 20.5 in
>> Toronto relating to the underlying structure of permutation
>> representations in Sage. Sorry for the length, but it does completely
>> express the situation.
>>
>> I'll start by saying that I'm relatively new to Sage development (I'm
>> from the lands of GAP and C), but I do have some time and desire to
>> contribute in this area, depending on what results from this
>> discussion. I've also posted a ticket (#8929) on trac.sagemath.org
>> that adds some minimal functionality along these lines to the
>> permutation group methods in permgroup.py.
>>
>> Here's my basic issue: Sage constructs permutation groups in a very
>> intuitive, but arguably less robust and less mathematically consistent
>> way when compared to GAP. I want to explain these differences, to
>> explain why Sage's current perspective makes conducting my research in
>> Sage very challenging, and also to explain how the two perspectives
>> may potentially be brought together to add more functionality to
>> permutation group methods in Sage than currently exist in either Sage
>> or GAP.
>>
>> Here's an example of the same permutation group (really, a permutation
>> representation or action) in Sage and in GAP:
>>
>> sage: G=PermutationGroup([[(2,3,4,5,6,7,8)]])
>> gap> G:=Group([(2,3,4,5,6,7,8)]);
>>
>> To illustrate the differences between Sage and GAP, we can consider
>> transitivity:
>>
>> sage: G.is_transitive()
>> False
>> gap> IsTransitive(G);
>> true
>>
>> This difference is caused by GAP understanding G to be a permutation
>> representation acting on [2 ... 8], while Sage understands the action
>> to be on the set [1 ... 8], where 1 is in the domain of the action and
>> is simultaneously never moved by this specific representation. Sage
>> determines the degree of a permutation group to be the largest integer
>> moved by any of the generators. GAP considers the degree of a
>> permutation group to be the number of non-fixed points of the
>> representation. Hence, any notion of transitivity, regularity,
>> primitivity, etc. will be considerably different between GAP and Sage.
>> In fact, Sage currently has no is_primitive method, and I don't think
>> it is possible to implement such a method consistently given Sage's
>> current implementation of G.degree(). In our above example, GAP does
>> rightly think that G is primitive. However, in Sage, not only do we
>> have a block system / equivalence relation on the domain (composed on
>> blocks having different sizes, that's bad), but the representation of
>> G is not even transitive.
>>
>> Note about the ticket mentioned above: I have rewritten
>> is_transitive() and allowed for optional arguments in the form of
>> integers (in which case [1 .. input] is the domain) or lists of
>> integers (in which case the list is the domain). In the patch is also
>> a method for determining fixed and non-fixed points as a list, which
>> may then be used for transitivity, regularity and primitivity
>> calculations.
>>
>>
>>
>> Sage's approach is very intuitive. If I input a single generator
>> [(100,101)], then my permutation group is isomorphic to Z_2 and acts
>> on [1 ... 101]. Unfortunately, I think this approach has more pitfalls
>> than bonuses. While it does mimic a human's permutation group
>> intuition, it removes a naive algorithmic understanding that makes
>> more in-depth calculations (those beyond a normal person's intuition)
>> run cleanly. Here's a simple example that is easy for intuition to
>> handle:
>>
>> sage: H=PermutationGroup([[(1,2,3,4)],[(5,6,7)]])
>> sage: S=H.stabilizer(2)
>> sage: S.degree()
>> 7
>>
>> Here's one that isn't so intuitive: Randomly number the edges and
>> vertices of the unit cube. Define the rotational group of this cube in
>> terms of permutation generators. Rotational actions are clearly not
>> transitive on this collection of objects (it is a degree 20
>> representation of S_4), so pick the smallest orbit and define a
>> homomorphism (actually, an isomorphism) from your original group to an
>> action on this single orbit (vertices only). This new action is
>> transitive, but not primitive. So, do the same thing and create a
>> homomorphism (again, isomorphism) to an action on a block system. Now,
>> tell me the degree of this new action (it should be 4), the socle of
>> the corresponding group (it is affine, this calculation is easy if you
>> can compute a point stabilizer complement in the final action), and
>> then compute the EARNS of my original group as a lift back through my
>> isomorphisms from this socle. Once you abstract a permutation group
>> beyond an intuitive level, Sage loses its ability to calculate these
>> properties and invariants. In GAP, this calculation is relatively
>> painless.
>>
>>
>> My goal here is to spark a conversation about what can be done in this
>> situation. I would love to have Sage more in-line with GAP's
>> understanding of the underlying structure of permutation actions. And,
>> I'm not sure that much has to be done to make this happen. I'm not an
>> expert in python, but I'm wondering if a dictionary could be used to
>> translate the non-fixed points of Sage's permutation group generators
>> to a compacted list of integers [1 ... degree] on which the current
>> methods could be run. This may have the added benefit of being able to
>> define permutation actions in Sage on more than integers. (I.e., one
>> could define a permutation action on arbitrary strings such as 'jane'
>> and 'red'.) That would be a huge bonus over current implementations in
>> Sage or GAP. Once the methods are run, then the dictionary could
>> translate back and output results in the original generator language.
>> If singleton/trivial placeholders are desired as generators in
>> permutation actions, then entering them as [(2)] or [(joe)] should be
>> acceptable as input as a generator.
>>
>> For now, I would appreciate input on this and also the patch I
>> submitted to introduce some of these capabilities in Sage's current
>> implementation of permutation groups.
>>
>>
>> Brevity is a virtue I do not have. Sorry about that.
>>
>> Jason B. Hill
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "sage-combinat-devel" group.
>> To post to this group, send email to sage-combinat-de...@googlegroups.com
>> .
>> To unsubscribe from this group, send email to
>> sage-combinat-devel+unsubscr...@googlegroups.com<sage-combinat-devel%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/sage-combinat-devel?hl=en.
>>
>> --
>> To post to this group, send an email to sage-devel@googlegroups.com
>> To unsubscribe from this group, send an email to
>> sage-devel+unsubscr...@googlegroups.com<sage-devel%2bunsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/sage-devel
>> URL: http://www.sagemath.org
>>
>
>

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to