Karim Belabas on Wed, 07 Aug 2013 21:27:52 +0200


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

Re: Computing generator of ideal I^n


* Jeroen Demeyer [2013-08-07 17:05]:
> I have a number field K and an ideal I which has order n in the
> class group. Therefore, I^n is a principal ideal.
> 
> I want to compute a generator for I^n and I'm wondering if there is
> a faster way than first computing I^n and then calling
> bnfisprincipal(). Can the information that the ideal is given as
> n-th power be used to speed up this computation?

Sure! Unfortunately, it's awkward to do this in GP : the (libpari)
function isprincipalfact() is used internally for this, see Libpari's
manual, section "Computing in the class group"

  (21:19) gp > ??"Computing in the class group"@
  [...]

   GEN isprincipalfact(GEN bnf,  GEN C,  GEN L,  GEN f, long flag) is about the
same  as  bnfisprincipal0  applied  to  C prod L[i]^{f[i]},  where the L[i] are
ideals, the f[i] integers and C is either an ideal or NULL (omitted). Make sure
to include nf_GENMAT in flag!

  ? install(isprincipalfact, GDGGGL)
  ? K = bnfinit(y^2+23);
  ? isprincipalfact(K,, K.gen, K.cyc,  4/*nf_GENMAT*/)
  %2 = [[0]~, [[1, 1/2]~, 1; 2, 1]]

The result is [e, t] as in bnfisprincipal(), with the important difference that
't' is given in *factored* form (which is undocumented in GP, but supported by
most libpari number field functions).

> It suffices to do this for the ideals generating the class group,
> but that's already slow enough for the field that I'm using.

In fact, this is often already part of the bnfinit structure (dynamically
added as soon as a function requires it). It can be forced:

  ? install(check_and_build_cycgen, G)
  ? check_and_build_cycgen(K)
  %3 = [Mat([[2, 1]~, 1])]

(this is now part of K, all further calls will be instantaneous)

This is a vector of generators for the g_i^d_i, where the g_i are the class
group generators, and the d_i are their orders.

Cheers,

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