[GAP Forum] sorted index of group element
Vipul Naik
vipul at math.uchicago.edu
Mon Feb 25 20:16:30 GMT 2013
Hi,
I'm not able to run ViewSource on GAP -- it does not recognize the command.
I'm using GAP 4.5.6.
Vipul
* Quoting Alexander Konovalov who at 2013-02-24 20:38:44+0000 (Sun) wrote
>
> On 23 Feb 2013, at 19:02, Cotton Seed <cotton at alum.mit.edu> wrote:
>
> > Is there way to get the sorted index of a group element? More
> > specifically, let G be a group, and g an element of G. Is there a function
> > that will give me the index i so that MagmaElement(G,i) = g? Thanks!
> >
> > Best,
> > Cotton
>
>
> Dear Cotton,
>
> Let me first start with a hint how the source code of the MagmaElement
> function may be explored to find an answer, and then suggest a more
> efficient approach.
>
> First, looking at the code of MagmaElement function - this may be done by
> typing `ViewSource(MagmaElement);' in GAP - you may spot the call to
> AsSSortedList:
>
> InstallGlobalFunction( MagmaElement, function( M, i )
> M:= AsSSortedList( M );
> if Length( M ) < i then
> return fail;
> else
> return M[i];
> fi;
> end );
>
> Thus, MagmaElement returns the i-th element of AsSSortedList(M), where
> the latter contains all elements of M in strictly sorted order, w.r.t.
> the canonical ordering defined on M (depending on the type of M).
> Therefore, the index in which you're interested will be returned by
>
> Position( AsSSortedList( G ), g )
>
> For example,
>
> gap> G:=SmallGroup(8,3);
> <pc group of size 8 with 3 generators>
> gap> g:=Random(G);
> f1*f3
> gap> s:=AsSSortedList(G);;
> gap> Position(s,g);
> 6
> gap> MagmaElement(G,6);
> f1*f3
> gap> MagmaElement(G,6)=g;
> true
>
> Creating the list of all elements may not be very efficient, especially
> when the group is very large. However, if the method for `Enumerator'
> exists for such a group (see `?Enumerator), then there is another
> approach. Enumerator(G) need not to store its elements explicitly,
> but it knows how to determine the i-th element and the position of a
> given object. For example, this works:
>
> gap> S:=SymmetricGroup(50);
> Sym( [ 1 .. 50 ] )
> gap> g:=Random(S);
> (1,40,16,24,8,21,19,39,20,12,28,6)(2,5,49,3,45,4,30,25,13,11,47,44,36,9,50,43,
> 18,32)(7,46,22,15,35,41)(10,14,48,26,17)(23,42,33,29,37,38,27)
> gap> enum:=Enumerator(S);
> <enumerator of perm group>
> gap> pos:=Position(enum,g);
> 19748951512546719853008099372809900742253637283670495935197327991
> gap> enum[pos]=g;
> true
>
> while AsSSortedList(S) will run out of memory. There are methods for
> enumerators of various types of algebraic structures defined in the
> GAP library.
>
> Please note that the order in which MagmaElement and Enumerator will
> sort elements of a domain sometimes may be different: the one for
> MagmaElement is determined by the '\<' relation defined on the domain,
> while the one for Enumerator depends on the algorithm used to enumerate
> elements of a domain of some particular type. For example,
>
> gap> F:=FreeGroup("a","b");
> <free group on the generators [ a, b ]>
> gap> AssignGeneratorVariables(F);
> #I Assigned the global variables [ a, b ]
> gap> G:=F/[a^32,b^2,b^-1*a*b*a];
> <fp group on the generators [ a, b ]>
> gap> First([1..Size(G)],i -> not MagmaElement(G,i)=Enumerator(G)[i]);
> 3
> gap> MagmaElement(G,3);
> b
> gap> Enumerator(G)[3];
> a^-1
>
> However, in most applications it is not the particular order that matters,
> but the ability to determine the position of an element in the fixed
> list of elements, and to retrieve the i-th element of that list.
>
> Hope this helps,
> Alexander
>
>
> _______________________________________________
> Forum mailing list
> Forum at mail.gap-system.org
> http://mail.gap-system.org/mailman/listinfo/forum
More information about the Forum
mailing list