Karim Belabas on Fri, 04 Jan 2008 18:53:05 +0100

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

Re: Relative number fields question

* William Hart [2008-01-04 17:40]:
> I'm using the latest pari/gp development snapshot due to a known bug
> elsewhere in the stable release which kills other code I am using.

I ran my experiments on

          GP/PARI CALCULATOR Version 2.4.3 (development CHANGES-1.1980)
          i686 running linux (ix86 kernel) 32-bit version -- debugging
       compiled: Jan  4 2008, gcc-4.1.1 20060724 (prerelease) (4.1.1-3mdk)
                 (readline v5.1 enabled, extended help enabled)

which should be functionnally equivalent to 2.4.2 which you are using.

> Given a degree three abelian extension L/K of a
> quadratic field K, I am trying to find an ideal QL in
> L above a given prime ideal Q in K.
> I set up my base field K, and the relative extension
> L/K, find an absolute equation for L/Q and define the
> number field "Labs" to be the corresponding absolute
> number field:
> K=nfinit(y^2 + 939636383790*y +
> 226927609420691962278648);
> g=x^3 + Mod(11067, y^2 + 939636383790*y +
> 226927609420691962278648)*x^2 + Mod(23329236, y^2 +
> 939636383790*y + 226927609420691962278648)*x +
> Mod(-1/3*y - 193638491109, y^2 + 939636383790*y +
> 226927609420691962278648);
> L=rnfinit(K,g);
> Leqn=rnfequation(K,g,1)[1];
> Labs=nfinit(Leqn);
> I find the prime ideal factors of a certain principal
> ideal in K and choose one of them, calling it Q. This
> is a prime ideal of K:
> Afac=idealfactor(K,[2,-2]~);
> Q=Afac[1,1];
> Now I want an ideal in L that is above Q, i.e. I want
> to factor Q in L. There are a number of strategies.
> One is to find the norm Qn of Q, which should be a
> power of a prime p, factor p into prime ideals Qn_i in
> Labs then drop each down into K until I find the one
> that is above Q.
> Qn=idealnorm(KQ);

Qn=idealnorm(K, Q);

> Qn=factor(Qn)[1,1];
> Qnfac=idealprimedec(Labs,Qn);
> fac=idealhnf(Labs,Qnfac[1]);
> Qndown=rnfidealdown(L,fac);

The main reason why relative computations are so painful in PARI is that one
must keep track explicitly about who belongs where, and data from different
structures / representations are generally incompatible. In marked contrast
with nf* or ideal* routine which are quite permissive with their inputs.

This won't work, 'fac' is an ideal with respect to the Labs structure, which
a priori has nothing to do with L. We must first translate 'fac' to a Z-basis
(vector) of elements of Labs, in relative representation (with respect to L).

  facrel = rnfidealabstorel(L, Labs.zk * fac)

[ this can be deduced from a look at ?? rnfidealdown, then ?? rnfidealabstorel ]

> But Pari responds:
> *** rnfidealdown: incorrect type in rnfidealabstorel.

In fact, I got

  *** rnfidealdown: incorrect type in rnfidealhermite.

Using facrel instead:

? Qndown = rnfidealdown(L,facrel);
%20 =
[2 1]

[0 1]

a prime ideal above 2.

> My original code attempted to go up from the ideal Q
> into L and then factor that:
> QL=rnfidealup(L,Q);

This is a vector of Z-generators for your ideal (as polynomials).

> But if I now do:
> nfisideal(Labs,QL)
> it returns false.

Indeed, a t_VEC of generators is not recognized as an ideal. (See ??ideal)

 QL = mathnf( Mat( nfalgtobasis(Labs, QL) ) )

transforms it into a matrix whose columns give the same generators in terms of
your fixed integral basis Labs.zk (in HNF form)

Now, nfisideal(Labs, QL) returns true.

> The following code does something (though doubtlessly
> not the right thing):
> QL=mathnf(Mat(nfalgtobasis(Labs,QL)));

Oh, good. So you had already found out about this !

> Ql=idealfactor(Labs,QL)[1,1];
> Qmodpr=nfmodprinit(Labs,Ql);
> nfeltreducemodpr(Labs,Mod(1,Labs.pol),Qmodpr);
> But it responds:
> ***   significant pointers lost in gerepile! (please report).

This is a genuine bug. I'll look into it.

> Can anybody tell me what I am doing wrong!? Is this
> last error a bug, and should I report it?

You should always report unexpected behaviour. We may then either explain why
it is correct (sometimes), or fix it (often).



for how to report bugs.

Hope this helps,

Karim Belabas                  Tel: (+33) (0)5 40 00 26 17
IMB, Universite Bordeaux 1     Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]