Skip to content

Commit

Permalink
grpfp: fix enumerator for fp groups with a known cyclic subgroup
Browse files Browse the repository at this point in the history
  • Loading branch information
james-d-mitchell committed Mar 16, 2024
1 parent 9404db1 commit e222f46
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/grpfp.gd
Original file line number Diff line number Diff line change
Expand Up @@ -1364,3 +1364,5 @@ DeclareGlobalFunction("MakeFpGroupToMonoidHomType1");

# used in homomorphisms
DeclareGlobalName("TRIVIAL_FP_GROUP");

DeclareAttribute("CyclicSubgroupFpGroup", IsFpGroup);
13 changes: 13 additions & 0 deletions lib/grpfp.gi
Original file line number Diff line number Diff line change
Expand Up @@ -3930,6 +3930,7 @@ local fgens, # generators of the free group
RelatorsOfFpGroup(G),GeneratorsOfGroup(H),true,false:
cyclic:=true,limit:=1+max );
e:=NEWTC_CyclicSubgroupOrder(T);
SetCyclicSubgroupFpGroup(G, H);
if e=0 then
return infinity;
else
Expand Down Expand Up @@ -5518,6 +5519,18 @@ end );
InstallMethod( Enumerator,"fp gp.", true,[IsSubgroupFpGroup and IsFinite],0,
G->RightTransversal(G,TrivialSubgroup(G)));

InstallMethod(Enumerator,
"for a finite subgroup of a finitely presented group with known cyclic subgroup",
[IsSubgroupFpGroup and IsFinite and HasCyclicSubgroupFpGroup],
function(G)
local H;
H := CyclicSubgroupFpGroup(G);
if Size(H) = 1 then # Checking IsTrivial is slow
TryNextMethod();

Check warning on line 5529 in lib/grpfp.gi

View check run for this annotation

Codecov / codecov/patch

lib/grpfp.gi#L5529

Added line #L5529 was not covered by tests
fi;
return Concatenation(List(RightTransversal(G, H), x -> AsList(H) * x));
end);

InstallGlobalFunction(NewmanInfinityCriterion,function(G,p)
local GO,q,d,e,b,r,val,agemo,ngens;
if not IsPrimeInt(p) then
Expand Down
53 changes: 53 additions & 0 deletions tst/testbugfix/2024-03-16-FpGroups.tst
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
gap> F:=FreeGroup(2);; f1:=F.1;; f2:=F.2;;
gap> G := F / [ f2^100, f1^2, f2*f1*f2^-99*f1^-1 ];;
gap> Size(G);
200
gap> AsList(G);
[ <identity ...>, <[ [ 1, 1 ] ]|f2>, <[ [ 1, -1 ] ]|f2^-1>,
<[ [ 1, 2 ] ]|f2^2>, <[ [ 1, -2 ] ]|f2^-2>, <[ [ 1, 3 ] ]|f2^3>,
<[ [ 1, -3 ] ]|f2^-3>, <[ [ 1, 4 ] ]|f2^4>, <[ [ 1, -4 ] ]|f2^-4>,
<[ [ 1, 5 ] ]|f2^5>, <[ [ 1, -5 ] ]|f2^-5>, <[ [ 1, 6 ] ]|f2^6>,
<[ [ 1, -6 ] ]|f2^-6>, <[ [ 1, 7 ] ]|f2^7>, <[ [ 1, -7 ] ]|f2^-7>,
<[ [ 1, 8 ] ]|f2^8>, <[ [ 1, -8 ] ]|f2^-8>, <[ [ 1, 9 ] ]|f2^9>,
<[ [ 1, -9 ] ]|f2^-9>, <[ [ 1, 10 ] ]|f2^10>, <[ [ 1, -10 ] ]|f2^-10>,
<[ [ 1, 11 ] ]|f2^11>, <[ [ 1, -11 ] ]|f2^-11>, <[ [ 1, 12 ] ]|f2^12>,
<[ [ 1, -12 ] ]|f2^-12>, <[ [ 1, 13 ] ]|f2^13>, <[ [ 1, -13 ] ]|f2^-13>,
<[ [ 1, 14 ] ]|f2^14>, <[ [ 1, -14 ] ]|f2^-14>, <[ [ 1, 15 ] ]|f2^15>,
<[ [ 1, -15 ] ]|f2^-15>, <[ [ 1, 16 ] ]|f2^16>, <[ [ 1, -16 ] ]|f2^-16>,
<[ [ 1, 17 ] ]|f2^17>, <[ [ 1, -17 ] ]|f2^-17>, <[ [ 1, 18 ] ]|f2^18>,
<[ [ 1, -18 ] ]|f2^-18>, <[ [ 1, 19 ] ]|f2^19>, <[ [ 1, -19 ] ]|f2^-19>,
<[ [ 1, 20 ] ]|f2^20>, <[ [ 1, -20 ] ]|f2^-20>, <[ [ 1, 21 ] ]|f2^21>,
<[ [ 1, -21 ] ]|f2^-21>, <[ [ 1, 22 ] ]|f2^22>, <[ [ 1, -22 ] ]|f2^-22>,
<[ [ 1, 23 ] ]|f2^23>, <[ [ 1, -23 ] ]|f2^-23>, <[ [ 1, 24 ] ]|f2^24>,
<[ [ 1, -24 ] ]|f2^-24>, <[ [ 1, 25 ] ]|f2^25>, <[ [ 1, -25 ] ]|f2^-25>,
<[ [ 1, 26 ] ]|f2^26>, <[ [ 1, -26 ] ]|f2^-26>, <[ [ 1, 27 ] ]|f2^27>,
<[ [ 1, -27 ] ]|f2^-27>, <[ [ 1, 28 ] ]|f2^28>, <[ [ 1, -28 ] ]|f2^-28>,
<[ [ 1, 29 ] ]|f2^29>, <[ [ 1, -29 ] ]|f2^-29>, <[ [ 1, 30 ] ]|f2^30>,
<[ [ 1, -30 ] ]|f2^-30>, <[ [ 1, 31 ] ]|f2^31>, <[ [ 1, -31 ] ]|f2^-31>,
<[ [ 1, 32 ] ]|f2^32>, <[ [ 1, -32 ] ]|f2^-32>, <[ [ 1, 33 ] ]|f2^33>,
<[ [ 1, -33 ] ]|f2^-33>, <[ [ 1, 34 ] ]|f2^34>, <[ [ 1, -34 ] ]|f2^-34>,
<[ [ 1, 35 ] ]|f2^35>, <[ [ 1, -35 ] ]|f2^-35>, <[ [ 1, 36 ] ]|f2^36>,
<[ [ 1, -36 ] ]|f2^-36>, <[ [ 1, 37 ] ]|f2^37>, <[ [ 1, -37 ] ]|f2^-37>,
<[ [ 1, 38 ] ]|f2^38>, <[ [ 1, -38 ] ]|f2^-38>, <[ [ 1, 39 ] ]|f2^39>,
<[ [ 1, -39 ] ]|f2^-39>, <[ [ 1, 40 ] ]|f2^40>, <[ [ 1, -40 ] ]|f2^-40>,
<[ [ 1, 41 ] ]|f2^41>, <[ [ 1, -41 ] ]|f2^-41>, <[ [ 1, 42 ] ]|f2^42>,
<[ [ 1, -42 ] ]|f2^-42>, <[ [ 1, 43 ] ]|f2^43>, <[ [ 1, -43 ] ]|f2^-43>,
<[ [ 1, 44 ] ]|f2^44>, <[ [ 1, -44 ] ]|f2^-44>, <[ [ 1, 45 ] ]|f2^45>,
<[ [ 1, -45 ] ]|f2^-45>, <[ [ 1, 46 ] ]|f2^46>, <[ [ 1, -46 ] ]|f2^-46>,
<[ [ 1, 47 ] ]|f2^47>, <[ [ 1, -47 ] ]|f2^-47>, <[ [ 1, 48 ] ]|f2^48>,
<[ [ 1, -48 ] ]|f2^-48>, <[ [ 1, 49 ] ]|f2^49>, <[ [ 1, -49 ] ]|f2^-49>,
<[ [ 1, 50 ] ]|f2^50>, f1, f2*f1, f2^-1*f1, f2^2*f1, f2^-2*f1, f2^3*f1,
f2^-3*f1, f2^4*f1, f2^-4*f1, f2^5*f1, f2^-5*f1, f2^6*f1, f2^-6*f1, f2^7*f1,
f2^-7*f1, f2^8*f1, f2^-8*f1, f2^9*f1, f2^-9*f1, f2^10*f1, f2^-10*f1,
f2^11*f1, f2^-11*f1, f2^12*f1, f2^-12*f1, f2^13*f1, f2^-13*f1, f2^14*f1,
f2^-14*f1, f2^15*f1, f2^-15*f1, f2^16*f1, f2^-16*f1, f2^17*f1, f2^-17*f1,
f2^18*f1, f2^-18*f1, f2^19*f1, f2^-19*f1, f2^20*f1, f2^-20*f1, f2^21*f1,
f2^-21*f1, f2^22*f1, f2^-22*f1, f2^23*f1, f2^-23*f1, f2^24*f1, f2^-24*f1,
f2^25*f1, f2^-25*f1, f2^26*f1, f2^-26*f1, f2^27*f1, f2^-27*f1, f2^28*f1,
f2^-28*f1, f2^29*f1, f2^-29*f1, f2^30*f1, f2^-30*f1, f2^31*f1, f2^-31*f1,
f2^32*f1, f2^-32*f1, f2^33*f1, f2^-33*f1, f2^34*f1, f2^-34*f1, f2^35*f1,
f2^-35*f1, f2^36*f1, f2^-36*f1, f2^37*f1, f2^-37*f1, f2^38*f1, f2^-38*f1,
f2^39*f1, f2^-39*f1, f2^40*f1, f2^-40*f1, f2^41*f1, f2^-41*f1, f2^42*f1,
f2^-42*f1, f2^43*f1, f2^-43*f1, f2^44*f1, f2^-44*f1, f2^45*f1, f2^-45*f1,
f2^46*f1, f2^-46*f1, f2^47*f1, f2^-47*f1, f2^48*f1, f2^-48*f1, f2^49*f1,
f2^-49*f1, f2^50*f1 ]

0 comments on commit e222f46

Please sign in to comment.