Group recognition
The idea of constructive group recognition is to compute a recognition tree for a given (permutation or matrix) group, which describes the structure of this group in a recursive way: Each non-leaf node of the tree describes an epimorphism such that the kernel and the image belong to the two subtrees of the node. Each leaf node describes a group for which efficient methods are available that allow one to decide whether a group element is an element of this group, and if yes to write the element as a word in terms of suitable generators.
The recognition tree has enough information to decide whether a group element is an element of the given group, and if yes to write the element as a word in terms of suitable generators of the given group.
recognize
— Functionrecognize(G::Union{PermGroup, MatrixGroup})
Return a GroupRecognitionTree
object that describes the structure of G
in a recursive way. If the recognition was successful (see is_ready
) then the result provides a membership test that is usually more efficient than the membership test without the recognition information.
Examples
julia> recognize(symmetric_group(5))
Recognition tree: MovesOnlySmallPoints Size=120
julia> g = general_linear_group(4, 9);
julia> s = sub(g, [rand(g), rand(g)])[1];
julia> rec = recognize(s); is_ready(rec)
true
julia> rand(s) in rec
true
is_ready
— Functionis_ready(tree::GroupRecognitionTree)
Return true
if the recognition procedure for the group of tree
was successful, and false
otherwise.
Examples
julia> rec = recognize(GL(4, 2)); is_ready(rec)
true
nice_gens
— Functionnice_gens(tree::GroupRecognitionTree)
Return the vector of generators of the group of tree
w.r.t. which the straight line programs for group elements computed by straight_line_program
are written.
Examples
julia> rec = recognize(GL(4, 2)); is_ready(rec)
true
julia> x = rand(group(rec));
julia> slp = straight_line_program(rec, x);
julia> evaluate(slp, nice_gens(rec)) == x
true
straight_line_program
— Methodstraight_line_program(tree::GroupRecognitionTree, g::GAPGroupElem)
Return a straight line program for the element g
of the group of tree
. The inputs of this program correspond to nice_gens(tree)
, see nice_gens
for an example.