[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 14:51:29 BST 2014
Dear Alexander Konovalov,
Thank you very much for your help.
> Not really - the method for IsSolvable did not evolve from the code similar to
> myIsSolvable at all.
>
> Perhaps the key is to read about GAP method selection and learn the concept of
> methods as bundles of functions:
>
> http://www.gap-system.org/Manuals/doc/tut/chap8.html#X7AEED9AB824CD4DA
>
> - that is, IsSolvable(G) will select the best available method to apply to G,
> taking into account what's known about G at the moment. With myIsSolvable,
> you enforce the calculation of DerivedSeries, while some of the methods may need
> not to know the derived series at all to give an answer. The profile below just
> illustrates this, since the number of methods involved in the calls to GAP's
> IsSolvable is much smaller.
IsSolvable in lib/grp.gi is the same as the method for determining whether or not solvable group I have learned .
I'll try to understand that the method for determining whether or not solvable group I have learned is the same the built-in IsSolvable function.
I think it will be the good study of group theory .
I'll try to be able to understand "Operations and Methods of GAP" with the document, too.
Thank you very much for your help.
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 22:07
> Subject: Re: [GAP Forum] Is it possible to step through the program, like GNU GDB debugger, against built-in functions(ex. DerivedSubgroup, ClosureSubgroupNC )?
>
>
> On 17 Sep 2014, at 13:57, buynnnmmm1 at yahoo.co.jp wrote:
>
>> 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?
>>
>>
>
> Not really - the method for IsSolvable did not evolve from the code similar to
> myIsSolvable at all.
>
> Perhaps the key is to read about GAP method selection and learn the concept of
> methods as bundles of functions:
>
> http://www.gap-system.org/Manuals/doc/tut/chap8.html#X7AEED9AB824CD4DA
>
> - that is, IsSolvable(G) will select the best available method to apply to G,
> taking into account what's known about G at the moment. With myIsSolvable,
> you enforce the calculation of DerivedSeries, while some of the methods may need
> not to know the derived series at all to give an answer. The profile below just
> illustrates this, since the number of methods involved in the calls to GAP's
> IsSolvable is much smaller.
>
> Best wishes
> Alexander
>
>
>
>
>
>> 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