PermGroupOps.SubgroupProperty( G, prop )
PermGroupOps.SubgroupProperty( G, prop, K )
PermGroupOps.SubgroupProperty
returns the subgroup U of the
permutation group G of all elements in G that satisfy prop, i.e.,
the subgroup of all elements g in G such that prop(g)
is
true
. prop must be a function of one argument that returns either
true
or false
when applied to an element of G. Of course the
elements that satisfy prop must form a subgroup of G.
PermGroupOps.SubgroupProperty
builds a stabilizer chain for U.
gap> S8 := Group( (1,2), (1,2,3,4,5,6,7,8) );; S8.name := "S8";; gap> Size(S8); 40320 gap> V := Subgroup( S8, [(1,2),(1,2,3),(6,7),(6,7,8)] );; gap> Size(V); 36 gap> PermGroupOps.SubgroupProperty( S8, g -> V ^ g = V ); Subgroup( S8, [ (7,8), (6,7), (4,5), (2,3)(4,5)(6,8,7), (1,2), (1,6,3,8)(2,7) ] ) # the normalizer of 'V' in 'S8'
PermGroupOps.SubgroupProperty
first computes a stabilizer chain for
G, if necessary. Then it performs a backtrack search through G for
the elements satisfying prop, i.e., enumerates all elements of G as
described in section Stabilizer Chains, and applies prop to each,
adding elements for which prop(g)
is true
to the subgroup U.
Once U has become non-trivial, it is used to eliminate whole cosets of
stabilizers in the stabilizer chain of G if they cannot contain
elements with the property prop that are not already in U. This
algorithm is described in detail in But82.
This search will of course take quite a while if G is large. To speed up the computation you may pass a subgroup K of U as optional third argument.
Passing the subgroup V itself, speeds up the computation in this example by a factor of 2.
gap> K := Subgroup( S8, V.generators );; gap> PermGroupOps.SubgroupProperty( S8, g -> V ^ g = V, K ); Subgroup( S8, [ (1,2), (1,2,3), (6,7), (6,7,8), (2,3), (7,8), (4,5), (1,6,3,8)(2,7) ] )
GAP 3.4.4