function LowerBound1(G, index) L:=LowIndexNormalSubgroups(G, index); // Check that one of the normal subgroups has the index we specify if not index in [ Index(G,H`Group) : H in L ] then error "No subgroup of expected index found"; end if; // For each normal subgroup, multiply its index and the order of // it Abelianization. Take the maximum. m := Max([ Index(G,H`Group) * Order(AbelianQuotient(H`Group)) : H in L]); return m; end function; function LowerBound2(G, index, generator) g := G.generator; G := ReduceGenerators(G); L := LowIndexNormalSubgroups(G, index); for N in L do if Index(G,N`Group) eq index then H := sub; return Index(G, H) * Order(AbelianQuotient(H)); end if; end for; end function; procedure PrintHeader(d) SetColumns(0); print ""; print ""; print "Computations for d =", d; print ""; end procedure; procedure PrintAndEvaluateLines(lines) for line in Split(lines, "\n") do if #line gt 0 then print ">", line; print eval Substring(line, 1, #line - 1); end if; end for; end procedure;