Karim Belabas on Tue, 16 Aug 2016 10:59:49 +0200


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

Re: Making idealmoddivisor_aux public


* Robert Harron [2016-08-16 05:30]:
> I'm writing code for computing ray class groups and Hecke characters in Sage
> mostly by wrapping the functions in the pari c library. One particular
> function I've had to write myself is the one that takes an ideal I and
> returns a 'small' ideal equivalent I modulo the given modulus (Algorithm
> 4.3.4 of Henri Cohen's Advanced topics book). I did however find that there
> is a function in the pari source code that does this: idealmoddivisor_aux in
> the file buch3.c. I was wondering if it would be possible to make a public
> version of this function in the pari library, perhaps just adding a modulus
> argument to idealred. It's pretty essential for making efficient
> computations in the ray class group and I'm sure the pari library version
> would be quicker than what I've written!

This function is certainly not essential; in fact, it was implemented as
a proof of concept then discarded for uselessness: it's a red herring.
The documentation of idealmoddivisor(), the public function doing what
you require, comments as follows: "a proof-of-concept implementation,
useless in practice".

The proper way to reduce modulo divisors is to use "extended ideals"
(see ??ideal), i.e. pairs [I,t] representing the ideal (t) I, where I is
an ordinary ideal in any form and t is an element in the number field
(in any form as well, but usually given by a factorization matrix, i.e.
as a formal product of many small elements).

These can be fed to idealmul(), idealred(), etc. And there is no need to
actually find representatives (LARGE when the situation is non-trivial)
for divisors satisfying coprimality and sign conditions, etc.

There are functions (whose names currently escape me, this has been 
written 15 years ago; *those* should be made public) to make ideal and
element coprime to the modulus at the very end of computations, by
correcting them using local uniformizers, i.e. adding elements to the
formal product defining t. Then the resulting t can be mapped to (Z_K/ f)^*
and logs computed.

I agree that all this should be better documented :-)

Cheers,

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