1LoadPackage("io"); 2 3# f an FpGroup: 4 5TryFinite := function(f) 6 local ct; 7 ct := CosetTable(f,TrivialSubgroup(f):silent); 8 if ct <> fail then 9 return Length(ct[1]); 10 fi; 11 Print("Finite: looping\n"); 12 while true do ct := ct; od; 13end; 14 15TryInfinite := function(f) 16 local ab,h,l; 17 ab := AbelianInvariants(f); 18 if 0 in ab then return infinity; fi; 19 l := LowIndexSubgroupsFpGroupIterator(f,40); 20 while not(IsDoneIterator(l)) do 21 h := NextIterator(l); 22 ab := AbelianInvariants(h); 23 if 0 in ab then return infinity; fi; 24 od; 25 Print("Infinite: looping\n"); 26 while true do ab := ab; od; 27end; 28 29f := FreeGroup(2); 30 31Print(ParTakeFirstResultByFork([TryFinite,TryInfinite],[[f],[f]], 32 rec( TimeOut := rec( tv_sec := 60, tv_usec := 0 ) )),"\n"); 33 34f := FreeGroup("a","b"); 35a := f.a; 36b := f.b; 37rels := [ a^2, b^3, a*b*a*b*a*b*a*b*a*b*a*b*a*b*a*b*a*b*a*b*a*b, 38a^-1*b^-1*a*b*a^-1*b^-1*a*b*a^-1*b^-1*a*b*a^-1*b^-1*a*b*a^-1*b^-1*a*b*a^ 39-1*b^-1*a*b, a*b*a*b*a*b^-1*a*b*a*b*a*b^-1*a*b*a*b*a*b^-1*a*b*a*b*a*b^ 40-1*a*b*a*b*a*b^-1*a*b*a*b*a*b^-1, a*b*a*b*a*b^-1*a*b^-1*a*b*a*b*a*b^ 41-1*a*b^-1*a*b*a*b*a*b^-1*a*b^-1*a*b*a*b*a*b^-1*a*b^-1*a*b*a*b*a*b^-1*a*b^-1 ]; 42g := f/rels; # this is M12 43 44Print(ParTakeFirstResultByFork([TryFinite,TryInfinite],[[g],[g]], 45 rec( TimeOut := rec( tv_sec := 60, tv_usec := 0 ) )),"\n"); 46 47