On Fri, Jan 25, 2002 at 12:11:32PM +0100, Joachim Neubueser wrote:
> Daer Gap Forum members,
>
> In a Forum mail answering a question of Igor Schein, I had written:
>
> > There is no special function in GAP which would directly answer the
> > question if a given group contains a subgroup isomorphic to the
> > quaternion group, or that would just find such a subgroup.
>
> I want to thank Stefan Kohl for correcting me in a private letter with
> respect to this statement. As he pointed out, in chapter 37 of the
> reference manual the following operation is described::
>
> ----------------------------------------------------------------------
> > IsomorphicSubgroups( <G>, <H> )
>
> computes all monomorphisms from <H> into <G> up to <G>-conjugacy of
> the image groups. This classifies all <G>-classes of subgroups of <G>
> which are isomorphic to <H>.
>
> With the existing methods the amount of time needed grows with the
> size of a generating system of <G>. (Thus in particular for $p$-groups
> calculations can be slow.)
>
> If the `findall' option is set to `false', the algorithm will stop
> once one homomorphism has been found (this can be faster and might be
> sufficient if not all homomorphisms are needed).
>
> gap> g:=Group((1,2,3,4),(1,2));
> Group([ (1,2,3,4), (1,2) ])
> gap> h:=Group((3,4),(1,2));;
> gap> emb:=IsomorphicSubgroups(g,h);
> [ [ (3,4), (1,2) ] -> [ (3,4), (1,2) ],
> [ (3,4), (1,2) ] -> [ (1,3)(2,4), (1,2)(3,4) ] ]
> ----------------------------------------------------------------------
>
> While likely, if one wants to look for quaternion groups in a large
> number of groups, a small program along the suggestions in my last
> letter will be faster, this operation certainly can be used.
>
> Thanks again to Stefan for carefully reading the Forum messages.
>
> Joachim Neubueser

Thanks a lot, that's exactly what I needed. Now I can answer my original
question:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
gap> IsomorphicSubgroups(SmallGroup(32,29),SmallGroup(4,1));
List Element: <list>[1] must have an assigned value at
return i[1];
func( elm ) called from
List( pows, function ( i )
return i[1];
end ) called from
MorClassLoop( G, bi, params, 11 ) called from
<function>( <arguments> ) called from read-eval-loop
Entering break read-eval-print loop, you can 'quit;' to quit to outer loop,
or you can return after assigning a value to continue
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\