Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Same as the answer of lisbeth, but we restrict to conjugacy classes of subgroups. And use the fact that they come in the order of their orders. So if we pass the order eight we have a verdict. Sample code checking if the group G below has a subgroup isomorphic to Q8:

Q8 = QuaternionGroup()

def hasQ8isomorphicSubgroup(G, verbose=False):

    for H in G.conjugacy_classes_subgroups():
        if H.order() < 8:    continue
        if H.order() > 8:    break
        if verbose:
            print(f"Subgroup of order 8 with structure {H.structure_description()}")
        if H.is_isomorphic(Q8):
            return True    # or we can return H
    return False

Then we have for instance:

sage: G = PSL(2, 17)
....: hasQ8isomorphicSubgroup(G)
False

sage: G = PSL(2, 17)
....: hasQ8isomorphicSubgroup(G, verbose=True)
Subgroup of order 8 with structure C8
Subgroup of order 8 with structure D4
Subgroup of order 8 with structure D4
False

Some other example:

sage: G = PSL(3, 7)
sage: hasQ8isomorphicSubgroup(G, verbose=True)
Subgroup of order 8 with structure Q8
True