I am trying to create a function which, given a group structure, generates a list of all the normal subgroups contained within it. But I am not sure how to proceed.
For now, I have the following:
A = { 0, 1, 2, 3, 4 }; (* Set of Elements *) CirclePlus[a_, b_] := Mod[a + b, 5] (* Group Operation *) GroupQ[set_, op_] (* determins whether a set with an operation has the structure of a group *) Example:
GroupQ[A, CirclePlus] But how do I create a function which would generate all the normal subgroups of that group?
Mapyour operation and useSortto check whether your group is closed and while doing that make sure there's an element that doesn't requireSortfor equality. Then check whether the group itself is normal using the left and right cosets. Then recursively check if for normality as you drop elements other than the identity (as you know that has to be in there) using a depth-first recurrence and some caching to avoid rechecking things. It'll be slow though (like worse than $O((n \log n)^2)$). $\endgroup$