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

 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);

\begin{aside}
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.
\end{aside}

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.

? 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)));

> 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).

See

http://pari.math.u-bordeaux.fr/Bugs/Reporting.html

for how to report bugs.

Hope this helps,

K.B.
--
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]