# Finding the subgroup of $(\mathbb Z_{56},+)$ which is isomorphic with $(\mathbb Z_{14},+)$ by GAP

I am sorting some easy questions for the students in Group Theory I. One of them is:

Is $(\mathbb Z_{14},+)$ isomorphic to a subgroup of $(\mathbb Z_{35},+)$? What about $(\mathbb Z_{56},+)$?

I know the first claim is false because if it is true then I have $14\nmid 35$ which is a contradiction. For the second one, I see the function $f:(\mathbb Z_{14},+)\to(\mathbb Z_{56},+), f(g)=4g$ is a nice one-one homomorphism.

My problem is to find $f(\mathbb Z_{14})$ by using GAP. I know how to define Cyclic Groups or Free Groups in GAP's environment also. Thanks for the ANY help.

• do you just want to find a subgroup of order 14 from the group $\mathbb{Z}_{56}$?
– Easy
May 14, 2013 at 12:46
• any subgroup of a cyclic group is cyclic and uniquely determined by its order. In other words, as long as you find a subgroup that is order 14, then you reach the target!
– Easy
May 14, 2013 at 12:53
• @Easy: How can we find it via that function? I mean $f(Z_{14})$. May 14, 2013 at 12:54
• Since we know that the possible image is unique, we can use the function "Filtered" to do what we want.
– Easy
May 14, 2013 at 12:57
• @Easy: Is that installed on your system? May 14, 2013 at 13:00

## 3 Answers

gap> G:=CyclicGroup(56);
<pc group of size 56 with 4 generators>
gap> S:=AllSubgroups(G); # available since GAP 4.5, mainly for teaching purposes
[ Group([ <identity> of ... ]), Group([ f3*f4^3 ]), Group([ f2*f3*f4 ]),
Group([ f4 ]), Group([ f1*f2*f3 ]), Group([ f3 ]), Group([ f2 ]),
Group([ f1, f2, f3, f4 ]) ]
gap> H:=Filtered(S,x->Size(x)=14);
[ Group([ f3 ]) ]

• Thanks. I've replaced Subgroups from the SONATA package, used in the original answer (which would not work if SONATA is not loaded), by AllSubgroups introduced in GAP 4.5 (see lib/teaching.g) and intended primarily for use in class for small examples (in a general case it is recommended to use ConjugacyClassesSubgroups instead). May 16, 2013 at 21:12
• P.S. Forgot to post a link to 7.7: How do I get the subgroups of my group? from the GAP F.A.Q. May 16, 2013 at 21:22
• @AlexanderKonovalov: Thanks Alexander for your nice supervision. May 26, 2013 at 14:55
• @BabakS.: you're welcome! May 27, 2013 at 15:52

Since we know it's cyclic, we just have to find an element of order $14$:

G:=CyclicGroup(56);
gen:=Filtered(G,g->Order(g)=14);
Group(gen[1]);

• I appreciate you for the codes and your time. :-) May 14, 2013 at 13:32
• It's nice to be appreciated. But perhaps Alexander Konovalov will come along shortly and trounce our efforts. May 14, 2013 at 13:34
• @DouglasS.Stones: :-) If I would be writing my reply here, I would try to construct an example similar to the one by Jack, since the question asks about additive groups and an image of a mapping. However, in the class (dependently on the familiarity of the audience with GAP and the topic), finding an element of order 14 and using it to generate a group may be also quite useful, covering many topics e.g. algorithmic thinking; isomorphism between additive and multiplicative groups; one can ask to explain what happens if the subgroup will be generated by another element of order 14, etc. May 16, 2013 at 21:38

GAP prefers multiplicative groups. However, you can make some limited use of additive groups if you are willing to inform GAP of a few things it doesn't calculate automatically.

gap> g:=Integers mod 14;
(Integers mod 14)
gap> h:=Integers mod 56;
(Integers mod 56)
gap> f:=MappingByFunction( g, h, x -> 4*Int(x)*One(h) );
MappingByFunction( (Integers mod 14), (Integers mod 56), function( x ) ... end )
gap> SetRespectsZero( f, Image( f, Zero(Source(f))) = Zero(Range(f)) );
gap> SetRespectsAddition( f, ForAll( Tuples(Source(f),2),
xy -> Image(f,xy[1]+xy[2]) = Image(f,xy[1])+Image(f,xy[2]) ));
gap> IsAdditiveGroupHomomorphism(f);
true
gap> Image(f);
[ ZmodnZObj( 0, 56 ), ZmodnZObj( 4, 56 ), ZmodnZObj( 8, 56 ),
ZmodnZObj( 12, 56 ), ZmodnZObj( 16, 56 ), ZmodnZObj( 20, 56 ),
ZmodnZObj( 24, 56 ), ZmodnZObj( 28, 56 ), ZmodnZObj( 32, 56 ),
ZmodnZObj( 36, 56 ), ZmodnZObj( 40, 56 ), ZmodnZObj( 44, 56 ),
ZmodnZObj( 48, 56 ), ZmodnZObj( 52, 56 ) ]
gap> Size(Kernel(f));
1
gap> IsInjective(f);
true