While testing an implementation of an algorithm for finding the p-core of a permutation group, I came acrss the following GAP peculiarity.
Suppose we type the following GAP commands.
gap> G := Group((1,2,3,4), (5,6,7,8));; gap> H1 := Operation(G, [1,2,3,4]); Group((1,2,3,4)) gap> f1 := OperationHomomorphism(G, H1);;
Then, as expected, we get
gap> Kernel(f1); Subgroup(Group((1,2,3,4), (5,6,7,8)), [(5,6,7,8)])
and everything looks fine.
Now suppose that we wish to be a bit twisted and let the above group G act on the set [1..10] (so that we have two fixed points) and that we define H2 and f2 via the GAP commands
gap> H2 := Operation(G, [1,2,3,4,9,10]); Group((1,2,3,4)) gap> f2 := OperationHomomorphism(G, H2);;
Then we get:
gap> PreImages(f2, TrivialSubgroup(H2)); Subgroup(Group((1,2,3,4), (5,6,7,8)), [(5,6,7,8), (1,2,3,4)]) gap> Kernel(f2) = G; true gap> Image(f2, (1,2,3,4)); (1,2,3,4) gap> (1,2,3,4) in Kernel(f2); true
- a bit peculiar?
Perhaps wishing to compute with G having fixed points as above is being perverse but perhaps it would be good if GAP could deal with perverse situations like this, or at least notify the user of the possibility of strange results. Any comments?