Karim Belabas on Sat, 15 Feb 2025 13:39:03 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: t_PADIC to t_INTMOD and use of chinese() |
* Karim Belabas [2025-02-14 15:31]: > * Max Alekseyev [2025-02-14 15:09]: > > dueHello, > > > > I have a couple of requests: > > > > 1) An easy way to convert t_PADIC to t_INTMOD, maybe extending Mod() to > > support a single argument of type t_PADIC, e.g. Mod(1 + O(5^2)) would > > produce Mod(1, 25). > > padic2mod(x) = Mod(x, x.p^padicprec(x, x.p)); Not sure about making this one built-in as Mod(x), but easy to do. It could just as easily work recursively for polynomials, series, vectors, matrices as well (we couldn't then extend to the comparatively less useful Mod(x + O(x^2)) -> Mod(x, x^2)) But what would be the use cases ? I would expect that the user would know the p-adic accuracy and just use Mod(x, p^d) for the right d (which would also work recursively, compared to my padic2mod which requires x to be a t_PADIC in order to determine a proper d) > > 2) Extend chinese() to support t_PADIC arguments (still producing t_INTMOD). > > padicchinese(v) = chinese(apply(padic2mod, v)) > > ? padicchinese([1 + O(5^2), 3 + O(3^3)]) > %3 = Mod(651, 675) This one is now built-in in the 'master' branch: t_PADICs and t_INTMODs can be used interchangeably. ? chinese(1 + O(5^2), 3 + O(3^3)) %1 = Mod(651, 675) ? chinese((1+O(7)) * (x+1), Mod(x^2+1, 5)) %2 = Mod(21, 35)*x^2 + Mod(15, 35)*x + Mod(1, 35) ? H = mathilbert(3); chinese(H * (1 + O(7^2)), Mod(H, 11)) %3 = [ Mod(1, 539) Mod(270, 539) Mod(180, 539)] [Mod(270, 539) Mod(180, 539) Mod(135, 539)] [Mod(180, 539) Mod(135, 539) Mod(108, 539)] Cheers, K.B. -- Pr. Karim Belabas, U. Bordeaux, Vice-président en charge du Numérique Institut de Mathématiques de Bordeaux UMR 5251 - (+33) 05 40 00 29 77 http://www.math.u-bordeaux.fr/~kbelabas/