Utility functions for p-adic polynomials¶
Utility functions for p-adic roots
- dual_pairs.padic_roots.integral_basis_generator(f)¶
TODO
- dual_pairs.padic_roots.kummer_dedekind(f)¶
TODO
- dual_pairs.padic_roots.lift_root(f, a, K)¶
TODO
- dual_pairs.padic_roots.padic_aut(K, r)¶
Return a map that sends an element of K to its image under the automorphism that maps K.gen() to r.
TESTS:
sage: from dual_pairs.padic_roots import padic_aut sage: R.<x> = QQ[] sage: K.<a> = Qp(23).extension(x^2 + 23) sage: padic_aut(K, -a)(a) 22*a + a^3 + O(a^41) sage: padic_aut(K, -a)(a^2 + 4*a - 5) == a^2 - 4*a - 5 True
- dual_pairs.padic_roots.padic_roots(f, K)¶
Return the roots of f in the p-adic field K.
TESTS:
sage: from dual_pairs.padic_roots import padic_roots sage: R.<x> = PolynomialRing(QQ) sage: K.<a> = Qp(23, 20).extension(x^2 + 23) sage: padic_roots(x, K) [0] sage: padic_roots(x^3 - x - 1, K) [3 + 8*a^2 + 18*a^4 + 21*a^8 + 2*a^10 + 21*a^12 + 2*a^16 + 17*a^18 + 10*a^20 + 10*a^22 + 20*a^24 + 18*a^26 + 22*a^28 + 18*a^30 + 18*a^32 + 16*a^34 + 21*a^36 + 8*a^38 + O(a^40), 10 + 19*a + 8*a^2 + 19*a^3 + 3*a^4 + 18*a^5 + 12*a^6 + a^7 + 13*a^8 + 7*a^9 + 6*a^11 + a^12 + 5*a^13 + 12*a^14 + 7*a^15 + 11*a^16 + 15*a^17 + 15*a^18 + 12*a^19 + 19*a^20 + 16*a^21 + 19*a^22 + 18*a^23 + 14*a^24 + 19*a^25 + 15*a^26 + 4*a^27 + 13*a^28 + a^29 + 15*a^30 + 20*a^31 + 15*a^32 + 7*a^33 + 16*a^34 + 12*a^35 + 2*a^36 + 8*a^38 + O(a^39), 10 + 4*a + 8*a^2 + 5*a^3 + 3*a^4 + 6*a^5 + 12*a^6 + 13*a^8 + 16*a^9 + 18*a^11 + a^12 + 19*a^13 + 12*a^14 + 17*a^15 + 11*a^16 + 9*a^17 + 15*a^18 + 12*a^19 + 19*a^20 + 8*a^21 + 19*a^22 + 6*a^23 + 14*a^24 + 5*a^25 + 15*a^26 + 20*a^27 + 13*a^28 + 15*a^30 + 3*a^31 + 15*a^32 + 17*a^33 + 16*a^34 + 12*a^35 + 2*a^36 + a^37 + 8*a^38 + O(a^39)] sage: padic_roots(x^6 - 6*x^4 + 9*x^2 + 23, K) [15*a + 14*a^3 + 12*a^5 + a^7 + 14*a^9 + 12*a^11 + 10*a^13 + 14*a^15 + 7*a^17 + 8*a^21 + 12*a^23 + 14*a^25 + 7*a^27 + 2*a^29 + 17*a^31 + 13*a^33 + a^35 + 22*a^37 + 16*a^39 + O(a^41), 8*a + 10*a^3 + 12*a^5 + 9*a^9 + 12*a^11 + 14*a^13 + 10*a^15 + 17*a^17 + a^19 + 15*a^21 + 12*a^23 + 10*a^25 + 17*a^27 + 22*a^29 + 7*a^31 + 11*a^33 + a^37 + 8*a^39 + O(a^41), 16 + 19*a + a^2 + 19*a^3 + 15*a^4 + 18*a^5 + 11*a^6 + a^7 + 9*a^8 + 7*a^9 + 2*a^10 + 6*a^11 + 20*a^12 + 5*a^13 + 11*a^14 + 7*a^15 + 15*a^16 + 15*a^17 + 3*a^18 + 12*a^19 + 14*a^20 + 16*a^21 + 15*a^22 + 18*a^23 + 7*a^24 + 19*a^25 + 3*a^26 + 4*a^27 + 9*a^28 + a^29 + 3*a^30 + 20*a^31 + 3*a^32 + 7*a^33 + 12*a^35 + 19*a^36 + O(a^39), 16 + 4*a + a^2 + 5*a^3 + 15*a^4 + 6*a^5 + 11*a^6 + 9*a^8 + 16*a^9 + 2*a^10 + 18*a^11 + 20*a^12 + 19*a^13 + 11*a^14 + 17*a^15 + 15*a^16 + 9*a^17 + 3*a^18 + 12*a^19 + 14*a^20 + 8*a^21 + 15*a^22 + 6*a^23 + 7*a^24 + 5*a^25 + 3*a^26 + 20*a^27 + 9*a^28 + 3*a^30 + 3*a^31 + 3*a^32 + 17*a^33 + 12*a^35 + 19*a^36 + a^37 + O(a^39), 7 + 19*a + 19*a^3 + 8*a^4 + 18*a^5 + 13*a^6 + a^7 + 15*a^8 + 7*a^9 + 22*a^10 + 6*a^11 + 4*a^12 + 5*a^13 + 13*a^14 + 7*a^15 + 9*a^16 + 15*a^17 + 21*a^18 + 12*a^19 + 10*a^20 + 16*a^21 + 9*a^22 + 18*a^23 + 17*a^24 + 19*a^25 + 21*a^26 + 4*a^27 + 15*a^28 + a^29 + 21*a^30 + 20*a^31 + 21*a^32 + 7*a^33 + a^34 + 12*a^35 + 4*a^36 + a^38 + O(a^39), 7 + 4*a + 5*a^3 + 8*a^4 + 6*a^5 + 13*a^6 + 15*a^8 + 16*a^9 + 22*a^10 + 18*a^11 + 4*a^12 + 19*a^13 + 13*a^14 + 17*a^15 + 9*a^16 + 9*a^17 + 21*a^18 + 12*a^19 + 10*a^20 + 8*a^21 + 9*a^22 + 6*a^23 + 17*a^24 + 5*a^25 + 21*a^26 + 20*a^27 + 15*a^28 + 21*a^30 + 3*a^31 + 21*a^32 + 17*a^33 + a^34 + 12*a^35 + 4*a^36 + a^37 + a^38 + O(a^39)]
- dual_pairs.padic_roots.reduce_element(a, K)¶
TODO
- dual_pairs.padic_roots.reduce_poly(f, K)¶
TODO
- dual_pairs.padic_roots.rootpadic(f, a, K)¶
Return the roots of f in K that are congruent to a modulo the maximal ideal.
- dual_pairs.padic_roots.roots_mod_m(f, K)¶
TODO