Generalized Straight Line Programs The functions described in this chapter have been written by Thomas Breuer, they are available since Utils 0.94.

Generalized straight line programs (in the following abbreviated as gslps) are a generalization of the straight line programs that are described in the &GAP; library, see . Like the latter objects, gslps describe an efficient way for evaluating an abstract word at concrete generators. The difference is that gslps can be built from existing (generalized) straight line programs, whereas a straight line program is given by an explicit list of instructions (see ). So the advantages of using a gslp instead of constructing an equivalent straight line program (see ) are that

available objects (the building blocks of the gslp) are reused, the internal structure of the gslp is retained (one can access the building blocks if one wants), and in the evaluation of a gslp, the intermediate results that arise in a building block of the gslp can be garbage collected as soon as the evaluation of this building block has finished.

A gslp in &GAP; is represented by an object in the category . This object has exactly one of the following forms.

It is a straight line program, that is, it lies in the category , and evaluation at some group elements is defined by . It is of union kind, that is, the defining data are a nonempty list l of gslps, and evaluation at some group elements means to evaluate the gslps in l at these group elements, and to return the concatenation of the results. It is of compose kind, that is, the defining data are a nonempty list l of gslps, and evaluation at some group elements means to evaluate l[1] at these elements, then to evaluate l[2] at the result of the first evaluation, and so on, and to return the last result.

Here are two typical situations where gslps arise. In both cases, suppose that a list l of standard generators for a group G is given.

Suppose that we know a straight line program for computing generators l' of a maximal subgroup M of G from l. For example, these data may be taken from the ATLAS of Group Representations . If M is also a group for which the ATLAS of Group Representations contains generators and straight line programs, we may be interested in computing standard generators l'' for M from l'.

For that, a second straight line program may be needed, and it makes sense to encode the computation of l'' from l via a gslp of compose kind. Suppose that we are in fact interested in a downward extension H of G, and that \pi is the natural epimorphism from H to G, which maps a list L, say, of standard generators of H to l. Then the above gslp for G can be applied to L, but the result L' may generate a proper subgroup of \pi^{-1}(M) because some part of the kernel of \pi is missing.

A list K of generators of the kernel of \pi can be described by a straight line program that takes L as its input, and it makes sense to encode the computation of the concatenation of L' and K from L via a gslp of union kind.

Gslps can be constructed using .

Defining attributes for gslps are and . The probably most interesting operation for gslps is .

Currently we do not intend to provide methods applicable to generalized straight line programs for all operations that are defined for straight line programs. For example, there is no method for generalized straight line programs.

Special methods applicable to gslps are installed for the operations , , and .
Functions for Generalized Straight Line Programs <#Include Label="IsGeneralizedStraightLineProgram"> <#Include Label="GeneralizedStraightLineProgram"> <#Include Label="DataOfGeneralizedStraightLineProgram"> <#Include Label="NrInputsOfGeneralizedStraightLineProgram"> <#Include Label="NrOutputsOfGeneralizedStraightLineProgram"> <#Include Label="ResultOfGeneralizedStraightLineProgram"> <#Include Label="EquivalentStraightLineProgram"> <#Include Label="IsInternallyConsistent_gslp">