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); \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. 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). 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]