Michael Stoll on Fri, 19 Jun 1998 14:49:12 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Class groups


Gerhard Niklasch <nikl@mathematik.tu-muenchen.de> writes

GN> Anybody know which version of the PARI kernel would be included in that
GN> version of MAGMA?
The number field algorithms of Magma are based on KANT, not on PARI.

GN> And whether the result computed by MAGMA is in fact correct? :)
You can never know with absolute certainty whether such a result is correct...
But see below.

GN> > gp (18:18)> bnfclgp(x^4 + 5*239*x^2 + 5*239^2)
GN>
GN> >From running this with verbose diagnostics turned on (default(debug) is
GN> your friend, if you can read fast :^),
Even default(debug,1) is too fast for me... or maybe my computer is too
fast...
GN> it seems the thing keeps doubling
GN> the size of its ideal factor base since after each iteration it still
GN> sees a factor-of-2 discrepancy between the class number-so-far times the
GN> regulator-so-far and the zeta function residue.  (So far I can't say
GN> whether this discrepancy is real, or whether it gets one of those numbers
GN> wrong.  Several other fields defined by similar polynomials are handled
GN> quickly by pari-between-2.0.9.alpha-and-2.0.10... e.g. when 239 is replaced
GN> by 199, 229, 269;  with 349, it takes two factor base doublings to arrive
GN> at a result.)
GN>
GN> You may want to play around with the `tech' optional argument to see
GN> whether you can coax it into returning a result in reasonable time
GN> (and look at the diagnostic output to get an indication of what changes).
GN> I'll be chasing some other booboos in the meantime... :^)

And Claus Fieker <fieker@math.TU-Berlin.DE> says

CF> Da die relevanten Teile  des Magma Systems in Berlin von der Kant Gruppe
CF> (Pohst) entwickelt werden, sind wir gewissermassen die Schuldigen.
CF> Das Problem zumindest mit x^5-539 ist die grosse Minkowskischranke.
CF> gp rechnet (standartmaessig) mit log(D)/*0.3 als Schranke fuer Primideals
CF> in der Faktorbasis, daher kommt gp weiter als wir. Wenn Du in Kash jedoch
CF> OrderClassGroup(OrderMaximal(x^5-539), 200, euler,fast); auprobierst
CF> (in magma so etwas wie (ClassGroup(o:Bound := 200, Verify := false)))
CF> solltest Du in ca. 10sec (HP735/100) ein Ergebnis erhalten.
CF> (Du rechnest dann mit 200 als Schranke, das Ergebnis ist daher nicht
CF> garantiert)
CF> Prinzipiell gebe ich Dir jedoch recht: da ist noch jede Menge zu tun.
CF> Die anderen Beispiele werde ich mal morgen testen.
(It was 239, not 539, but I believe that this is not so very important here.)

In what way could the result be wrong? Or does `not guaranteed' mean that
there might be no result at all?

I've played around a little bit with the `Bound' and `Verify' options in
Magma and with the `tech' parameters in PARI, with the result that you can
get both systems to do the computations fairly quickly (and the results agree
 :) ).

Magma:
--------------------------------------------------------------------------
Magma V2.4-BETA   Fri Jun 19 1998 11:11:04 on lordly   [Seed = 948381221]
Type ? for help.  Type <Ctrl>-D to quit.
> P<x> := PolynomialRing(Rationals());
> K := NumberField(x^5+239);
> MinkowskiBound(K);
198779
> BachBound(K);
10766
> time ClassGroup(K : Bound := 200, Verify := false);
Abelian Group isomorphic to Z/10
Defined on 1 generator
Relations:
    10*$.1 = 0
Mapping from: Abelian Group isomorphic to Z/10
Defined on 1 generator
Relations:
    10*$.1 = 0 to Set of ideals of Equation Order of K
Time: 2.529
> Log(Discriminant(K));
29.95304376989654454085645104312
> Regulator(K);
7800.8001823817906213676431585017409167098078958959719999999216
// ^-- This takes several minutes
> time UnitGroup(K);
Abelian Group isomorphic to Z/2 + Z + Z
Defined on 3 generators
Relations:
    2*$.1 = 0
Mapping from: Abelian Group isomorphic to Z/2 + Z + Z
Defined on 3 generators
Relations:
    2*$.1 = 0 to Equation Order of K
Time: -1.999
// i.e. instantaneous, since computation already done for Regulator
// I don't know why the timing is negative here...

> L := NumberField(x^4 + 5*239*x^2 + 5*239^2);
> time ClassGroup(L);
Abelian Group isomorphic to Z/2 + Z/8 + Z/8
Defined on 3 generators
Relations:
    2*$.1 = 0
    8*$.2 = 0
    8*$.3 = 0
Mapping from: Abelian Group isomorphic to Z/2 + Z/8 + Z/8
Defined on 3 generators
Relations:
    2*$.1 = 0
    8*$.2 = 0
    8*$.3 = 0 to Set of ideals of Maximal Order of L
Time: 44.460
> MinkowskiBound(L);
1624
> BachBound(L);
4130
> Regulator(L);
0.9624236501192068949955178268487368462703686687716283999998
> time UnitGroup(L);
Abelian Group isomorphic to Z/2 + Z
Defined on 2 generators
Relations:
    2*$.1 = 0
Mapping from: Abelian Group isomorphic to Z/2 + Z
Defined on 2 generators
Relations:
    2*$.1 = 0 to Maximal Order of L
Time: -1.999

> M := NumberField(x^4 + 5*458*x^2 + 5*458^2);
// ClassGroup(M) triggers a bug
> time ClassGroup(M : Bound := 200, Verify := false);
Abelian Group isomorphic to Z/2 + Z/4 + Z/40
Defined on 3 generators
Relations:
    2*$.1 = 0
    4*$.2 = 0
    40*$.3 = 0
Mapping from: Abelian Group isomorphic to Z/2 + Z/4 + Z/40
Defined on 3 generators
Relations:
    2*$.1 = 0
    4*$.2 = 0
    40*$.3 = 0 to Set of ideals of Maximal Order of M
Time: 4.749
> time UnitGroup(M);
Abelian Group isomorphic to Z/2 + Z
Defined on 2 generators
Relations:
    2*$.1 = 0
Mapping from: Abelian Group isomorphic to Z/2 + Z
Defined on 2 generators
Relations:
    2*$.1 = 0 to Maximal Order of M
Time: 3.419
> Regulator(M);
0.9624236501192068949955178268487368462703686687693403999999
// The regulators of L and M are the same, since the unit comes
// from their common maximal real subfield Q(sqrt(5)).
--------------------------------------------------------------------------

PARI:
--------------------------------------------------------------------------

                    GP/PARI CALCULATOR Version 2.0.7 (alpha)
                i586 running linux (ix86 kernel) 32-bit version
                  (readline enabled, extended help available)

                             Copyright 1989-1998 by
          C. Batut, K. Belabas, D. Bernardi, H. Cohen and M. Olivier.

Type ? for help.

   realprecision = 28 significant digits
   seriesprecision = 16 significant terms
   format = g0.28

parisize = 4000000, primelimit = 500000, buffersize = 30000
? bnfclgp(x^5+239)
%1 = [10, [10], [[39, 15, 3, 24, 13; 0, 3, 0, 0, 1; 0, 0, 3, 0, 1; 0, 0, 0,  
3, 1; 0, 0, 0, 0, 1]]]
? ##
  ***   last result computed in 2,840 ms.
? bnf = bnfinit(x^5+239);
? ##
  ***   last result computed in 2,870 ms.
? bnf.reg
%3 = 7800.800182381790621367643158

? bnf=bnfinit(x^4+5*239*x^2+5*239^2,0,[1.0,1.0,10,1.0,10,5]);
time = 8,130 ms.
? bnf.clgp
time = 0 ms.
%8 = [128, [8, 8, 2], [[191, 58, 105, 22; 0, 1, 0, 0; 0, 0, 1, 0; 0, 0, 0,  
1], [262, 204, 93, 1; 0, 2, 1, 0; 0, 0, 1, 0; 0, 0, 0, 1], [10, 0, 5, 5; 0,  
2, 1, 0; 0, 0, 1, 0; 0, 0, 0, 1]]]
? bnf.reg
time = 0 ms.
%9 = 0.9624236501192068949955178268
? bnf.fu
time = 0 ms.
%10 = [Mod(1/239*x^2 + 2, x^4 + 1195*x^2 + 285605)]

? bnf=bnfinit(x^4+5*458*x^2+5*458^2,0,[1.0,1.0,10,1.0,10,5]);
time = 20,440 ms.
? bnf.clgp
time = 0 ms.
%12 = [320, [40, 4, 2], [[101, 93, 25, 99; 0, 1, 0, 0; 0, 0, 1, 0; 0, 0, 0,  
1], [1321, 1195, 871, 103; 0, 1, 0, 0; 0, 0, 1, 0; 0, 0, 0, 1], [229, 0, 150,  
0; 0, 1, 0, 0; 0, 0, 1, 0; 0, 0, 0, 1]]]
? bnf.reg
time = 0 ms.
%13 = 0.9624236501192068949955178268
? bnf.fu
time = 0 ms.
%14 = [Mod(1/458*x^2 + 2, x^4 + 2290*x^2 + 1048820)]
--------------------------------------------------------------------------

My machine has a Pentium 200 S CPU, in case you want to compare timings
(timings vary, however, because of some probabilistic parts of the algorithms,
I guess).

Finally, here is a general question for you Algorithmic Number Theory people.
Let U (written additively) be the unit group and C the class group of some
number field. Is it in any way easier to get generators for U/2U, C[2] and
C/2C (with the possibility to decide if a given ideal I is mapped to zero in
this last group, and if so, to get an ideal J such that I*J^2 is principal)
rather than to compute all of U and C?

Cheers,
        Michael