> < ^ Date: Thu, 16 Nov 1995 12:30:00 +0100 (MET)
> < ^ From: Heiko Theissen <heiko.theissen@math.rwth-aachen.de >
^ Subject: Re: Problem with `IsInjective'

Dear GAP-Forum,

Claude Quitte has reported an error that occurs inside the code for
`IsInjective', when a subgroup <U> is conjugated by an element <g> for
the calculation of the core of <U>. This error occurs if <U> is a
factor group (in the reported example `GL(2,5)/C') and <g> a factor
group element, but a similar error would occur if <g> was a generic
(i.e., home-grown) group element.


GAP objects like <U> and <g> have a so-called operations record which
comprises all the functions (like `Size') that are applicable to such
an object. Since both <U> and <g> have a `^'-component in their
operations record, GAP choses the component in the right operand <g>
when evaluating the expression `U ^ g', i.e., this is translated into
`g.operations.\^( U, g )'.

Unfortunately, the exponentiation function for (factor) group elements
(like <g>) does not consider the case ``power of group by group
element'', this case is only dealt with by the exponentiation function
for (factor) groups. This means that `U.operations.\^( U, g )' would
work, but because of the rule stated above, it will never be selected.
This is certainly a bug caused by insufficient organisation of the


In order to make things work for factor group elements, you would have
to modify the library file `grpcoset.g'. In the function
`FactorGroupElementOps.\^', replace line 1621 (the `Error' statement)

return c.operations.\^( c, d );

If you want to fix the bug for generic group elements, replace the
function `GroupElementOps.\^' in `grpelms.g', line 155ff. with:

GroupElementOps.\^ := function( a, b )
    if IsGroup( a )  then
        return a.operations.\^( a, b );
        Error("no default method to multiply generic group elements");

Sorry for any inconvenience, Heiko Thei{\ss}en

> < [top]