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

buynnnmmm1 at yahoo.co.jp buynnnmmm1 at yahoo.co.jp
Wed Sep 17 13:57:56 BST 2014


Dear Alexander Konovalov,

Thank you very much for your help.
I will be able to do what I would like to do with the way you taught me, embeded Err("Message")s in codes.

> What is does is that it calls TryPcgsPermGroup and then checks if it returns the 
> object which is IsPcgs (polycyclic generating system, see 
> http://www.gap-system.org/Manuals/doc/ref/chap45.html). If that calculation is 
> not successful, the group is not solvable, otherwise it is. Now you may be 
> interested to find the (undocumented!) function TryPcgsPermGroup which does the 
> actual job, see for any comments in the code, etc. 


I have not try to read the source TryPcgsPermGroup and IsPcgs yet.

Source code of IsSolvable was also included in the lib / grp.gi and lib / grp.gd. 
It is very easy to understand for me.

myIsSolvable:=function ( x )
   local  d;
   d := DerivedSeries( x );
   return IsTrivial( d[Size( d )] );
end


gap> List([1..30], x -> myIsSolvable(SymmetricGroup(x))) = List([1..30], x -> IsSolvable(SymmetricGroup(x)));
true

For Symmetric Group, the same results have been obtained. 
So I'm going to try to do withmyIsSolvable function that uses the DerivedSeries function.

There was a difference of more than twice the run time to IsSolvable of built-in and myIsSolvable Taking the profile.

Built-in IsSolved Would has become the source code I hard to understand in order to increase the execution speed?


gap> ProfileGlobalFunctions( true );
gap> ProfileOperationsAndMethods( true );
gap> List( [1..30], x -> IsSolvable(SymmetricGroup(x))) ;
[ true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
  false, false, false, false, false, false, false, false, false, false, false ]
gap> ProfileGlobalFunctions( false );
gap> ProfileOperationsAndMethods( false );
gap> DisplayProfile();
  count  self/ms  chld/ms  stor/kb  chld/kb  package  function                                                                     
     56        0       32        6      786  GAP      TryPcgsPermGroup                                                             
     56        0       32        9      794  (oprt.)  IsSolvableGroup                                                              
     30        0       32        0      804  (oprt.)  IsSolvable                                                                   
     28        0       32        0      794  GAP      IsSolvableGroup: for permgrp                                                 
 156491       40        0      741       15  (oprt.)  Add                                                                          
      3       52        0       70        0           SortParallel: for two dense and mutable lists                                
    574       16       40     2043      988  GAP      List                                                                         
      4        4       80       96      213  (oprt.)  Sortex                                                                       
      4       60       52       72       70  (oprt.)  SortParallel                                                                 
   2028      272        0        0        0  (oprt.)  Position                                                                     
              72              2324                    OTHER                                                                        
             516              5365                    TOTAL                                                                        
gap> ProfileGlobalFunctions( true );
gap> ProfileOperationsAndMethods( true );
gap> List( [1..30], x -> myIsSolvable(SymmetricGroup(x))) ;
[ true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, 
  false, false, false, false, false, false, false, false, false, false, false ]
gap> ProfileGlobalFunctions( false );
gap> ProfileOperationsAndMethods( false );
gap> DisplayProfile();
  count  self/ms  chld/ms  stor/kb  chld/kb  package  function                                                                     
  11686        0        0        0        0           CanComputeIsSubset: default: no, unless identical                            
  12708        4        4      198        0  GAP      IsOne: for a multiplicative-element-with-one                                 
  18151        8        4        0        0  (oprt.)  Tester(IsAssociative)                                                        
  12708       20        0        0      198  (oprt.)  IsOne                                                                        
  15776       12        4        0        0           OneImmutable: system getter                                                  
  21144       16        4       29        0           GeneratorsOfMagmaWithInverses: system getter                                 
  17646       12       12       18      173  (oprt.)  Representative: for magma-with-one with known one                            
    382        0       32        5      269  (oprt.)  Setter(ParentAttr)                                                           
  21144       16       16       18       29  (oprt.)  FreeGeneratorsOfFpGroup: for a free group                                    
      1        0       32       70       70  GAP      Sortex: for a mutable list                                                   
   3391        8       24       92      191  GAP      SmallestMovedPoint: for a collection of permutations                         
    382        0       32        7       12  GAP      Setter(ParentAttr): method that calls 'UseSubsetRelation'                    
   8681        4       40        0      337  (oprt.)  SmallestMovedPoint                                                           
  43634       16       36     1985      382  GAP      ForAll                                                                       
 185602       52        0      863        2  (oprt.)  Add                                                                          
    757       44       16       17        0  GAP      UseSubsetRelation: default method that checks maintenances and then returns *
    757        0       60        7       17  (oprt.)  UseSubsetRelation                                                            
  53823       68        4    11517        0  GAP      InverseRepresentative                                                        
      3       76        0       70        0           SortParallel: for two dense and mutable lists                                
   9945       20       72      194    12950  GAP      in: for a permutation, and a permutation group                               
   5564       44       60     3915     2410  GAP      ChooseNextBasePoint                                                          
      4        0      108      113      254  (oprt.)  Sortex                                                                       
 224034      116        0        0        0  (oprt.)  NumberOp: for a dense list                                                   
   5564       84       60      498      168  GAP      AddGeneratorsExtendSchreierTree                                              
      5       76       76      113       70  (oprt.)  SortParallel                                                                 
  12526      280        4        0        0  (oprt.)  Position                                                                     
  94315      472        8    89804        0  GAP      SiftedPermutation                                                            
  5564      184      804     8789    94952  GAP      StabChainStrong                                                              
    265        8     1104       77   107182  GAP      ClosureGroup: permgroup, elements, options                                   
    265        4     1112        0   107259  (oprt.)  ClosureGroup                                                                 
     62        0     1296        0   122301  (oprt.)  DerivedSubgroup                                                              
     56       12     1284      162   122086  GAP      DerivedSubgroup: permgrps                                                    
     30        0     1316        5   122489  GAP      DerivedSeriesOfGroup: generic method for groups                              
     30        0     1316        0   122505  (oprt.)  DerivedSeries                                                                
     30        0     1316        0   122505  (oprt.)  DerivedSeriesOfGroup                                                         
     26       36     1324     2853   122729  GAP      List                                                                         
             160              6531                    OTHER                                                                        
            1852            127963                    TOTAL                                                                        


With best regards
buynnnmmm1



----- Original Message -----
> From: Alexander Konovalov <alexk at mcs.st-andrews.ac.uk>
> To: buynnnmmm1 at yahoo.co.jp
> Cc: GAP Forum <forum at gap-system.org>
> Date: 2014/9/17, Wed 20:19
> Subject: Re: [GAP Forum] Is it possible to step through the program, like GNU GDB debugger, against built-in functions(ex. DerivedSubgroup, ClosureSubgroupNC )?
> 
> On 16 Sep 2014, at 22:52, buynnnmmm1 at yahoo.co.jp wrote:
> 
>>  Dear GAP forum,
>> 
>>  Is it possible to set break points against built-in functions (ex. 
> DerivedSubgroup)?  
>> 
>>  Is it possible to step through the program, like GNU GDB debugger, against 
> built-in functions(ex. DerivedSubgroup, ClosureSubgroupNC )?
>> 
>>  Because I am a beginner the group theory , I would to examine in detail 
> what functions are doing in what procedure .
>> 
>>  I check http://www.gap-system.org/Manuals/doc/ref/chap7.html, but I cannot 
> find the function that set break points or step through the function.
> 
> No, there is no such functionality, but there are workarounds and alternatives.
> 
> First, you can add the line like
> 
> Error("Break point some text which you want to display...");
> 
> in the code, and then you will be able to investigate local variables from the 
> break loop - see http://www.gap-system.org/Manuals/doc/ref/chap6.html
> 
> Second, you already know from your previous post how to find the code of the 
> function. Since GAP is an interpreted language, you may try to paste the code of 
> the function into your session line by line and see what happens. 
> 
> Finally, YMMV (your mileage may vary): looking at the method below for 
> IsSolvableGroup itself will likely not give an insight into the solvability of 
> groups, it will just point to some other procedure: 
> 
>>  gap> g := SymmetricGroup(5);
>>  Sym( [ 1 .. 5 ] )
>>  gap> ApplicableMethod(IsSolvableGroup,[g]);
>>  function( G ) ... end
>>  gap> f := last;
>>  function( G ) ... end
>>  gap> Print(f);
>>  function ( G )
>>      local  pcgs;
>>      pcgs := TryPcgsPermGroup( G, false, false, true );
>>      if IsPcgs( pcgs )  then
>>          SetIndicesEANormalSteps( pcgs, pcgs!.permpcgsNormalSteps );
>>          SetIsPcgsElementaryAbelianSeries( pcgs, true );
>>          if not HasPcgs( G )  then
>>              SetPcgs( G, pcgs );
>>          fi;
>>          if not HasPcgsElementaryAbelianSeries( G )  then
>>              SetPcgsElementaryAbelianSeries( G, pcgs );
>>          fi;
>>          return true;
>>      else
>>          return false;
>>      fi;
>>      return;
>>  end
> 
> 
> What is does is that it calls TryPcgsPermGroup and then checks if it returns the 
> object which is IsPcgs (polycyclic generating system, see 
> http://www.gap-system.org/Manuals/doc/ref/chap45.html). If that calculation is 
> not successful, the group is not solvable, otherwise it is. Now you may be 
> interested to find the (undocumented!) function TryPcgsPermGroup which does the 
> actual job, see for any comments in the code, etc. 
> 
> Best wishes
> Alexander
> 



More information about the Forum mailing list