In his message, Chad Scherrer asked:
Is there a way in GAP to find all the subgroups of a given group, and if so,
what about finding all normal subgroups of a given group?
GAP provides routines for both tasks. Subgroups are computed using the
'Lattice' command, which computes the whole lattice of subgroups (and
stores conjugated subgroups is a somehow shortened form). In case you
really want to have a list of all subgroups for looping over them, you
l:=Lattice(g); # supposing g is your group
Then the variable 's' will contain a list of all subgroups. If you
replace 'Elements' by 'Representative', you will obtain a list of
representatives of each conjugacy class of subgroups.
For computing all normal subgroups, GAP provides the command