Closure( U, g )
Let U be a group with parent group G and let g
be an element of G. Then Closure returns the closure
C of U and g as subgroup of G. The
closure C of U and g is the subgroup generated
by U and g.
gap> s4 := Group( (1,2,3,4), (1,2 ) );
Group( (1,2,3,4), (1,2) )
gap> s2 := Subgroup( s4, [ (1,2) ] );
Subgroup( Group( (1,2,3,4), (1,2) ), [ (1,2) ] )
gap> Closure( s2, (3,4) );
Subgroup( Group( (1,2,3,4), (1,2) ), [ (1,2), (3,4) ] )
The default function GroupOps.Closure returns U if
U is a parent group, or if g or its inverse is a
generator of U, or if the set of elements is known and g
is in this set, or if g is trivial. Otherwise the function
constructs a new subgroup C which is generated by the generators of
U and the element g.
Note that if the set of elements of U is bound to U.elements
then GroupOps.Closure computes the set of elements for C
and binds it to C.elements.
If U is known to be non-abelian or infinite so is C. If U is known to be abelian the function checks whether g commutes with every generator of U.
Closure( U, S )
Let U and S be two group with a common parent group
G. Then Closure returns the subgroup of G
generated by U and S.
gap> s4 := Group( (1,2,3,4), (1,2 ) );
Group( (1,2,3,4), (1,2) )
gap> s2 := Subgroup( s4, [ (1,2) ] );
Subgroup( Group( (1,2,3,4), (1,2) ), [ (1,2) ] )
gap> z3 := Subgroup( s4, [ (1,2,3) ] );
Subgroup( Group( (1,2,3,4), (1,2) ), [ (1,2,3) ] )
gap> Closure( z3, s2 );
Subgroup( Group( (1,2,3,4), (1,2) ), [ (1,2,3), (1,2) ] )
The default function GroupOps.Closure returns the parent of
U and S if U or S is a parent
group. Otherwise the function computes the closure of U under all
generators of S.
Note that if the set of elements of U is bound to U.elements
then GroupOps.Closure computes the set of elements for the
closure C and binds it to C.elements.