3

I was trying to find an isomorphism between two $p$-groups, say $G_1$ and $G_2$ in GAP.

I am using "anupq" and "sonata" package and both the groups are Pcp-groups. The available GAP commands, I found, are

  • IsIsomorphicPGroup : Only tests for isomorphism but does not return any explicit isomorphism.
  • IsomorphismGroups : Extremely slow as I am dealing with $p$-groups of high orders.

Using "IsIsomorphicPGroup" I found that $G_1$ and $G_2$ are isomorphic but I can not find a way to compute any explicit isomorphism. I was stuck.

It will be really helpful to me if someone suggest a GAP command and/or some method in GAP to find an explicit isomorphism.

Thanks in advance.

Addendum: Pasteable descriptions of the groups are given below:

G1:=PcGroupCode(955640327050884159907086343326037903249608121254657344251813252604839841049205\
928253819936651413089137658451601883818586226317596151455694910726535214017948\
592364716601333424997621599040461436158518049878550005884433797152129115721878\
3355,1594323);

G2:=PcGroupCode(119880391495293774233093786967542939562883947810316663646225196199229505601219\
647372529980143720441259762954784595217079537995955140290437544251478057697281\
21121849582846112554279125935293754034335404366719215627371184752858002092155,1594323);
ahulpke
  • 20,399
usermath
  • 3,611
  • 1
    I presume you mean not "Pcp" (polycyclic package) but PcGroup (library). Are you loading the autpgrp' package? Can you somehow post (e.g. useGapInputPcGroup`) what the groups are? – ahulpke Apr 24 '17 at 14:24
  • @ahulpke Thanks. Two groups are actually Pcp group, which I converted to Pc group using "IsomorphismPcGroup" to test for isomorphism using "IsISomorphicPGroup". I am using "autpgrp" pkg also. The description of the groups, found by "GapInputPcGroup" are really long. I have added those in my question. Please have a look. Your suggestion will be really helpful for me. Thanks. – usermath Apr 25 '17 at 01:26
  • @zibadawatimmy Sorry, I do not know how to recover a group from GapInputPcGroup . I will try to find a better way to post the groups. However, any general suggestion for determining an explicit isomorphism between large $p$-groups in GAP will also be really helpful for me. Thanks. – usermath Apr 25 '17 at 14:01
  • 1
    @usermath That's much better, and copy-pastes perfectly. Off-hand I'm not seeing any way to make this an easy problem, as in general the isomorphism problem is difficult. With more knowledge of the particulars of the groups (what they come from, what they "do", etc.) one might be able to see at least why an isomorphism exists, if not a constructive way of writing one down. The code for IsIsomorphicPGroup is presumably open source, so have you tried looking that up to see if its proof is constructive? If so you could just modify the function to the return the isomorphism. – zibadawa timmy Apr 25 '17 at 22:48
  • @zibadawatimmy Thanks. It is user ahulpke, who have edited the post for the pastable code. A big thanks to him. As for isomorphism, I have seen the code for IsISomorphicPGroup but it possibly compares StdPresentation of the $p$-groups. I am not sure how to recover an isomorphism from there. Any suggestion will be greatly helpful. Thanks again. – usermath Apr 26 '17 at 00:32
  • @ahulpke Thanks a lot for adding the pasteable description of the groups. – usermath Apr 26 '17 at 02:50
  • See also https://math.stackexchange.com/questions/1715371/how-to-check-in-gap-whether-two-groups-are-isomorphic/1715995#1715995 - is that of any help? – Olexandr Konovalov Apr 27 '17 at 08:49
  • @AlexanderKonovalov Thanks. I have seen that post. It describes how to determine if two groups are isomorphic or not. That I have already done. My aim is to find an explicit isomorphism. Using IsomorphismGroups is not helping since it is taking too much time. – usermath Apr 27 '17 at 12:59
  • I am still in need for this, any suggestion will be really helpful. Thanks. – usermath May 01 '17 at 02:46

1 Answers1

4

You can actually use anupq to compute an explicit isomorphism; To do this, use EpimorphismStandardPresentation on the two input groups; this actually gives an isomorphism here. However, the image is an fp group, where we cannot effectively do all computations we need. So we first convert the images to pc groups q1 and a2, and construct new epis on these. Since the groups G1 and G2 are isomorphic, their standard presesentations are equal, which allows use to trivially write down an iso between q1 and q2. Combining everything, we get the desired isomorphism. The following shows how to actually do this here.

In addition, I logged an issue on the anupq issue tracker to remind me to implement that for the next anupq releases.

gap> LoadPackage("anupq", false);
true
gap>
gap> G1:=PcGroupCode(9556403270508841599070863433260379032496081212546573442518132526048398410492059282538199366514130891376584516018838185862263175961514556949107265352140179485923647166013334249976215990404614361585180498785500058844337971521291157218783355,1594323);
<pc group of size 1594323 with 13 generators>
gap>
gap> G2:=PcGroupCode(11988039149529377423309378696754293956288394781031666364622519619922950560121964737252998014372044125976295478459521707953799595514029043754425147805769728121121849582846112554279125935293754034335404366719215627371184752858002092155,1594323);
<pc group of size 1594323 with 13 generators>
gap>
gap> epi1:=EpimorphismStandardPresentation(G1);;
gap> epi2:=EpimorphismStandardPresentation(G2);;
gap> q1:=PcGroupFpGroup(Range(epi1));;
gap> q2:=PcGroupFpGroup(Range(epi2));;
gap>
gap> iso_pc := GroupHomomorphismByImages(q1, q2);
[ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13 ] -> [ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13 ]
gap> Assert(0, iso_pc <> fail); # verify the two groups are really isomorphic
gap>
gap> epi1_pc := epi1 * GroupHomomorphismByImages(Range(epi1), q1);;
gap> IsBijective(epi1_pc); # force GAP to verify that the map is bijective
true
gap> epi2_pc := epi2 * GroupHomomorphismByImages(Range(epi2), q2);;
gap> IsBijective(epi2_pc); # force GAP to verify that the map is bijective
true
gap>
gap> iso := epi1_pc * iso_pc * InverseGeneralMapping(epi2_pc);
[ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13 ] -> [ f1^2*f2^2*f4^2*f5*f6^2*f7^2*f8^2*f9*f10*f11^2*f12, f2*f4^2*f6^2*f7*f9*f10*f12^2*f13^2, f3^2*f5*f6^2*f7*f9^2,
  f4*f7*f8*f9^2*f10*f11^2*f13, f5^2*f7*f8*f9^2*f10^2*f11, f6*f7*f12^2*f13, f7^2*f8^2, f8*f10^2*f11*f12*f13, f9^2*f10^2*f12*f13, f10*f11*f13^2, f11^2*f13, f12*f13, f13^2 ]
gap>
Max Horn
  • 2,306