########################################################################## ## classgrp.g ## ## Author: Nils Bruin ## date: 1 May 2001 ## ## Check of classgroup computations up to (unconditional) Minkowskibound ## Execution of this script takes about 8.5 UltraSparc days, so be patient ## ########################################################################## # Filename for output OUT:="classgrp.out"; # Order under consideration AppendTo(OUT,Date(),": Defining order ...\n"); Aa:=OrderSimplify(OrderLLL( OrderMaximal(x^9 + 693*x^6 - 290967*x^3 + 42508549))); AppendTo(OUT,Date(),": Defining polynomial:\n", EltMinPoly(OrderBasis(OrderEquationOrder(Aa))[2]),"\n"); # Computation of classgroup AppendTo(OUT,Date(),": Computing classgroup assuming GRH...\n"); clgp:=OrderClassGroup(Aa,300,"fast"); AppendTo(OUT,Date(),": Class group size and cycle structure:",clgp,"\n"); # chunksize blocksize:=100000; mink:=OrderMinkowski(Aa); AppendTo(OUT,Date(),": Minkowski bound:",mink,". Checking in chunks of ", blocksize,"\n"); #loop through primes below mink and check classgroup lb:=1; ub:=lb+blocksize; cont:=true; while lb<=mink and cont do cont:=OrderClassGroupFactorBasisProve(Aa,lb,ub); if cont then AppendTo(OUT,Date(),": checked primes from ",lb," to ",ub,"\n"); lb:=ub; ub:=lb+blocksize; else AppendTo(OUT,Date(),": failed classgroupcheck for interval ",[lb,ub],"\n"); Error("Failed classgroup check"); fi; od; if cont and lb<=mink then AppendTo(OUT,Date(),": program failure.\n"); elif cont then AppendTo(OUT,Date(),": Check completed. Classgroup computed correctly.\n"); else AppendTo(OUT,Date(),": Check failed. Counterexample to GRH found!\n"); fi; # done!