Dear Forum,
Apologies for not responding earlier.
Jeffrey Hall asked:
I'm not sure I understand what "equality" means
in domains in GAP 4.
Equality means mathematical equality. In more extreme case this means that
groups compare like sets and thus are equal to the set of their elements:
gap> g:=Group((1,2,3));; gap> g=Set([(),(1,2,3),(1,3,2)]); true
> Consider the following function, which
[...]
> gap> H = h;
> true
> gap> Factors( h );
[...]
> gap> Factors( H );
> Error no method found for operation Quotient with 3 arguments
This is an error in the code for polynomials which has been corrected
in bugfix number 2 for GAP4b4, released in August.
> If h=H, and h and H are both in the same polynomial ring R, then shouldn't
> they have the same methods? In particular, why can't we factor both of them
> over GF(2) ?
In this special case, h and H indeed use the same method.
The reason that the factorization did succeed for only one is that the
algorithm uses random numbers and so happens to work for h despite the error.
In general, however equal (= mathematical equal) objects in GAP4 do not
necessarily use the same methods. This will only happen if the objects
are even equal for the computer (that is GAP knows exactly the same
things about both objects). This latter equality cannot easily be tested.
In the following example, the groups $G$ and $H$ are equal
(they have the same elements, so are mathematically equal), but GAP *knows*
more about $H$ (namely that it is a symmetric group) and thus will
use different methods for the operation `ConjugacyClasses':
gap> G:=Group((1,2,3,4),(1,2)); Group([ (1,2,3,4), (1,2) ]) gap> H:=Group((1,2,3,4),(1,2)); Group([ (1,2,3,4), (1,2) ]) gap> IsNaturalSymmetricGroup(H); true
gap> me:=ApplicableMethod(ConjugacyClasses,[G],1);;
[...]
#I Method 8: ``ConjugacyClasses: perm group'', value: 22
gap> me:=ApplicableMethod(ConjugacyClasses,[H],1);;
[...]
#I Method 6: ``ConjugacyClasses: symmetric'', value: 26
gap> ConjugacyClasses(G); [ "ConjugacyClass( "Group([ (1,2,3,4), (1,2) ])", "()" )", "ConjugacyClass( "Group([ (1,2,3,4), (1,2) ])", "(3,4)" )", "ConjugacyClass( "Group([ (1,2,3,4), (1,2) ])", "(2,3,4)" )", "ConjugacyClass( "Group([ (1,2,3,4), (1,2) ])", "(1,2)(3,4)" )", "ConjugacyClass( "Group([ (1,2,3,4), (1,2) ])", "(1,2,3,4)" )" ] gap> ConjugacyClasses(H); [ "ConjugacyClass( "Sym( [ 1 .. 4 ] )", "()" )", "ConjugacyClass( "Sym( [ 1 .. 4 ] )", "(1,2)" )", "ConjugacyClass( "Sym( [ 1 .. 4 ] )", "(1,2)(3,4)" )", "ConjugacyClass( "Sym( [ 1 .. 4 ] )", "(1,2,3)" )", "ConjugacyClass( "Sym( [ 1 .. 4 ] )", "(1,2,3,4)" )" ]
I hope this helps,
Alexander Hulpke