[GAP Forum] Is it possible to step through the program, like GNU GDB debugger, against built-in functions(ex. DerivedSubgroup, ClosureSubgroupNC )?

Alexander Konovalov alexk at mcs.st-andrews.ac.uk
Thu Sep 18 11:27:16 BST 2014


On 18 Sep 2014, at 02:47, buynnnmmm1 at yahoo.co.jp wrote:

> Dear Alexander Konovalov,
> 
> Thank you very much for  your description with some execution examples!
> 
> I tried to run Copy and paste the example of you.It's very interesting.
> 
> I have not read the document you taught me yet, but I understand the point.
> I think that is similar to polymorphism of object-oriented programming languages.

Yes, precisely! This is dynamic polymorphism. The method selected depends on 
types of all arguments, and objects may change their type during their lifetime.

For example, if there is a faster algorithm for a group for which it is known 
that is has some attribute X, you may install a generic method for IsGroup and
a specific for IsGroup and HasX. Then for a group without X a generic method 
will be called, while for the group for which X is known a specific method will
be called. This will not automatically enforce the calculation of X which may 
be expensive. 

This may be seen in the method that implements the Feit–Thompson theorem from
my mail yesterday:

InstallImmediateMethod( IsSolvableGroup, IsGroup and HasSize, 10,
   function( G )
   G:= Size( G );
   if IsInt( G ) and G mod 2 = 1 then
     return true;
   fi;
   TryNextMethod();
   end );

- it will be applied (automatically, since it is *immediate*) only if the Size
is already known, what is checked with HasSize.

You might be interested in the following paper which describes this in more details:

@inproceedings{Breuer:1998:GTS:281508.281540,
 author = {Breuer, Thomas and Linton, Steve},
 title = {The GAP 4 Type System: Organising Algebraic Algorithms},
 booktitle = {Proceedings of the 1998 International Symposium on Symbolic and Algebraic Computation},
 series = {ISSAC '98},
 year = {1998},
 isbn = {1-58113-002-3},
 location = {Rostock, Germany},
 pages = {38--45},
 numpages = {8},
 url = {http://doi.acm.org/10.1145/281508.281540},
 doi = {10.1145/281508.281540},
 acmid = {281540},
 publisher = {ACM},
 address = {New York, NY, USA},
} 

Best wishes
Alexander


More information about the Forum mailing list