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