[GAP Forum] Checking which subgroups commute
Sandeep Murthy
sandeepr.murthy at gmail.com
Thu Mar 8 08:24:53 GMT 2012
Dear Forum.
It seems that Vipul's code double counts permuting subgroup pairs,
since if the pair (S,T) is permuting, then so is (T,S). In G := AlternatingGroup( 4 ),
which has 10 subgroups, there is a normal subgroup <(1,3)(2,4), (1,2)(3,4)> of
index 3, which will permute with every subgroup. So Vipul's code will
count the pair <(2,4,3)>, <(1,3)(2,4), (1,2)(3,4)>, as well as the pair
<(1,3)(2,4), (1,2)(3,4)>, <(2,4,3)>, which are the same. Also, there are some trivial
pairs, such as (S,S), or (S,{1}), or (S,G) which you may not want to consider.
I think the following code will count all the nontrivial, distinct pairs of permuting
subgroups of a given group G. (I've also used Burkhard Höfling's permuting subgroups
function.)
------------------------------------------------------------------------------------------------------------------------
PermutingSubgroups := function( H, K )
return Size ( ClosureGroup ( H, K ) ) * Size ( Intersection ( H, K ) ) = Size( H ) * Size( K );
end;
DistinctNontrivialPermutingSubgroupPairs := function( G )
local subs, len, num;
subs := Flat( List( ConjugacyClassesSubgroups( G ), Elements ) );
len := Length( subs );
Print( "\n(", len, " subgroups) pairs are: " );
num := 0;
for i in [2..len-1] do
for j in [i+1..len-1] do
if ( i < j ) then
if ( PermutingSubgroups( subs[i], subs[j] ) ) then
Print( "\nsubs[", i, "]: ", subs[i], ", subs[", j, "]: ", subs[j] );
num := num + 1;
fi;
fi;
od;
od;
Print( "\n\n", num, " pairs " );
return num;
end;
------------------------------------------------------------------------------------------------------------------------
The output for G := AlternatingGroup( 4 ) is:
------------------------------------------------------------------------------------------------------------------------
G has 10 subgroups.
subs[2]: Group( [ (1,2)(3,4) ] ), subs[3]: Group( [ (1,3)(2,4) ] )
subs[2]: Group( [ (1,2)(3,4) ] ), subs[4]: Group( [ (1,4)(2,3) ] )
subs[2]: Group( [ (1,2)(3,4) ] ), subs[9]: Group( [ (1,3)(2,4), (1,2)(3,4) ] )
subs[3]: Group( [ (1,3)(2,4) ] ), subs[4]: Group( [ (1,4)(2,3) ] )
subs[3]: Group( [ (1,3)(2,4) ] ), subs[9]: Group( [ (1,3)(2,4), (1,2)(3,4) ] )
subs[4]: Group( [ (1,4)(2,3) ] ), subs[9]: Group( [ (1,3)(2,4), (1,2)(3,4) ] )
subs[5]: Group( [ (2,4,3) ] ), subs[9]: Group( [ (1,3)(2,4), (1,2)(3,4) ] )
subs[6]: Group( [ (1,2,3) ] ), subs[9]: Group( [ (1,3)(2,4), (1,2)(3,4) ] )
subs[7]: Group( [ (1,4,2) ] ), subs[9]: Group( [ (1,3)(2,4), (1,2)(3,4) ] )
subs[8]: Group( [ (1,3,4) ] ), subs[9]: Group( [ (1,3)(2,4), (1,2)(3,4) ] )
10 distinct, nontrivial pairs of permuting subgroups. 10
------------------------------------------------------------------------------------------------------------------------
Sincerely, Sandeep.
On 8 Mar 2012, at 05:07, Vipul Naik wrote:
> There are two problems with your code.
>
> The first is that LatticeSubgroups is not the set of subgroups but a
> different kind of structure. If you want to access all the subgroups,
> you should use the function Subgroups. This requires the SONATA
> package or some other equivalent package -- you can load that using
> LoadPackage("sonata");.
>
> The problem is that GAP doesn't understand "HK" to be the product of H
> and K but rather thinks that that is a new variable.
>
> Copy and paste this code in the GAP interface (or put it in a file and
> read the file through GAP):
>
> LoadPackage("sonata");
>
> ProductOfSubsets := function(A,B)
> local a,b,L;
> L := [];
> for a in Set(A) do
> for b in Set(B) do
> Add(L,Product([a,b]));
> od;
> od;
> return Set(L);
> end;;
>
> PermutingSubsets := function(H,K)
> return(ProductOfSubsets(H,K) = ProductOfSubsets(K,H));
> end;;
>
> NumberOfPermutingSubgroupPairs := function(G)
> local S,F;
> S := Subgroups(G);
> F := Filtered(Cartesian(S,S), x -> PermutingSubsets(x[1],x[2]));;
> return Length(F);
> end;;
>
> end of code
> Now you can do:
>
> NumberOfPermutingSubgroupPairs(AlternatingGroup(4));
>
>
> The answer in this case seems to be 64, for what it's worth.
>
> * Quoting Stefanos Dalamaidhs who at 2012-03-08 04:43:40+0000 (Thu) wrote
>> Dear Forum,
>>
>> I would like to write a short code to do the following task:for any two
>> subgroups of a group G, check whether their product is a subgroup of G and
>> count their number. A failed attempt was:
>>
>> G:=AlternatingGroup(4);
>> Alt( [ 1 .. 4 ] )
>>
>> L:=LatticeSubgroups(G);
>>
>> count:=0;
>>
>> for H in L do;
>> for K in L do;
>> if IsSubgroup(G,HK) then count:=count+1;
>>
>> fi;
>> od;
>> od;
>> 0
>> Error, no method found! For debugging hints type ?Recovery from
>> NoMethodFound
>> Error, no 1st choice method found for `Enumerator' on 1 arguments
>>
>> I would be obliged for any help.
>>
>> Thanks,
>> J.
>> _______________________________________________
>> Forum mailing list
>> Forum at mail.gap-system.org
>> http://mail.gap-system.org/mailman/listinfo/forum
>
> _______________________________________________
> Forum mailing list
> Forum at mail.gap-system.org
> http://mail.gap-system.org/mailman/listinfo/forum
More information about the Forum
mailing list