Bill Allombert on Fri, 08 Sep 2006 16:36:31 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: cosets


On Fri, Sep 08, 2006 at 11:40:50AM +0200, mehnert@math.uni-sb.de wrote:
> 
> 
> Hello,
> 
> if i'm interested for example in representants of the cosets of the subgroup
> generated by G[4][1] in F.group, where
> 
> ? F = galoisinit(polcyclo(28));
> ? G = galoissubgroups(F); ,
> 
> is there a comfortable way to do this in GP and if not: If

Not really, though it is possible to do it through the use of libpari
functions:

? install(group_quotient,GG);
? F = galoisinit(polcyclo(28));
? G = galoissubgroups(F);
? group_quotient(G[1],G[4])[1]
%3 = [Vecsmall([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]), Vecsmall([2, 5, 12, 3, 6, 9, 4, 7, 10, 1, 8, 11]), Vecsmall([3, 12, 9, 6, 11, 8, 5, 2, 7, 4, 1, 10]),
Vecsmall([4, 3, 6, 5, 12, 11, 2, 1, 8, 7, 10, 9]), Vecsmall([5, 6, 11, 12, 9, 10, 3, 4, 1, 2, 7, 8]), Vecsmall([7, 4, 5, 2, 3, 12, 1, 10, 11, 8, 9, 6])]

Some explanations:

install(group_quotient,GG) will install the libpari function group_quotient
inside GP. 

This function take two arguments which are "groups", are returned by
galoissubgroups. G[1] is the underlying group of F. G[4] is the subgroup
generated by G[4][1].

It returns a two-component vector [C,M] where C is the cosets generators and
M is a table that map the permutations to their cosets.

> i want to export my data (with "galoisexport") and do the computation in GAP,
> how do i get the results back to GP, so that my program can go further?

If you prefer using GAP instead of the arcane libpari functions, you
can proceed as follow

Under GP do:
? galoisexport(G[1])
%4 = "Group((1, 6)(2, 9)(3, 8)(4, 11)(5, 10)(7, 12), (1, 2, 5, 6, 9, 10)(3, 12,
11, 8, 7, 4), (1, 3, 9, 7, 5, 11)(2, 12, 10, 4, 6, 8))"
? galoisexport(G[4])
%5 = "Group((1, 6)(2, 9)(3, 8)(4, 11)(5, 10)(7, 12))"

Under gap:

gap> F:=Group((1, 6)(2, 9)(3, 8)(4, 11)(5, 10)(7, 12), (1, 2, 5, 6, 9, 10)(3, $
> 11, 8, 7, 4), (1, 3, 9, 7, 5, 11)(2, 12, 10, 4, 6, 8));
Group([ (1,6)(2,9)(3,8)(4,11)(5,10)(7,12), (1,2,5,6,9,10)(3,12,11,8,7,4),
  (1,3,9,7,5,11)(2,12,10,4,6,8) ])
gap> H:=Group((1, 6)(2, 9)(3, 8)(4, 11)(5, 10)(7, 12));
Group([ (1,6)(2,9)(3,8)(4,11)(5,10)(7,12) ])
gap> L:=List(RightCosets(F,H),x->Permuted([1..12],Representative(x)));
[ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ],
  [ 5, 6, 11, 12, 9, 10, 3, 4, 1, 2, 7, 8 ],
  [ 9, 10, 7, 8, 1, 2, 11, 12, 5, 6, 3, 4 ],
  [ 3, 12, 9, 6, 11, 8, 5, 2, 7, 4, 1, 10 ],
  [ 11, 8, 1, 10, 7, 4, 9, 6, 3, 12, 5, 2 ],
  [ 7, 4, 5, 2, 3, 12, 1, 10, 11, 8, 9, 6 ] ]

which is valid in GP format (due to Permuted([1..12],...).

You can also export groups wholesale using the GAP functions below:

PermToGP := function(p,l)
 return Permuted([1..l],p);
end;
ExportGroup := function(G)
  local as,perms, gens,l, ords,pcgs;
  as := AsList(G);
  l := Size(G);
  pcgs := SpecialPcgs(G);
  gens := List(pcgs);
  perms := List(gens, x -> PermToGP(Permutation(x,as,OnRight), l));
  ords := RelativeOrders(pcgs);
  return [Reversed(perms),Reversed(ords)];
end;

gap> ExportGroup(F/H);
[ [ [ 5, 6, 1, 2, 3, 4 ], [ 6, 3, 2, 5, 4, 1 ] ], [ 3, 2 ] ]

Cheers,
Bill.