Given a finite group $G < Sym(\Omega)$; $\Omega$ finite, and $X \subset \Omega$, I can define a by the function $H(g) = \{x^g \| x \in X\}$ for each $g \in G$. Of course, each $H$ has the same size as $X$. Two different elements of $G$, $g_1,g_2$ may generate the same set $H(g_1)=H(g_2)$. Taking the collection of all such sets, $\mathscr{H} = \bigcup_{g \in G} H(g)$
I need to find $\mathscr{H}$, so what is the fastest way to find $F \subset G$ such that $\mathscr{H}$ is the disjoint union over $F$?
(I'm more interested mathematically how to do so, but I also need to compute the result. I am using GAP currently, with the following script:
setToThe := function(set,g) local x, l, i, s; l := []; i := 1; for s in set do x := s^g; l[i] := x; i := i + 1; od; return l; end; grp := ...; set := ...; unique := []; unique[1] := set; for g in grp do allGood := true; startUnique := Size(unique); for j in [1..startUnique] do newset := setToThe(set,g); Sort(newset); if newset = unique[j] then allGood := false; break; fi; od; if allGood then unique[Size(unique)+1] := newset; fi; od;