From be9debda1b3201dfad51641a8eb5ebc9bb04b18e Mon Sep 17 00:00:00 2001 From: Johannes Schmitt Date: Thu, 19 Sep 2024 09:28:42 +0200 Subject: [PATCH] Use `padic_field`/`qadic_field` and prepare deprecations (thofma/Hecke.jl#1604) --- examples/NFDB.jl | 2 +- examples/Plesken.jl | 2 +- examples/Tropics.jl | 2 +- src/Deprecations.jl | 7 +++++++ src/HeckeTypes.jl | 4 ++-- src/LocalField/Completions.jl | 14 +++++++------- src/LocalField/Conjugates.jl | 10 +++++----- src/LocalField/Elem.jl | 2 +- src/LocalField/LocalField.jl | 11 +---------- src/LocalField/Poly.jl | 4 ++-- src/LocalField/neq.jl | 14 +++++++------- src/LocalField/pAdic.jl | 6 +++--- src/LocalField/qAdic.jl | 2 +- src/Misc/UnitsModM.jl | 2 +- src/NumField/NfAbs/MPolyAbsFact.jl | 2 +- src/QuadForm/Quad/NormalForm.jl | 2 +- test/LocalField/LocalField.jl | 22 +++++++++++----------- test/LocalField/Poly.jl | 6 +++--- test/LocalField/neq.jl | 6 +++--- 19 files changed, 59 insertions(+), 61 deletions(-) diff --git a/examples/NFDB.jl b/examples/NFDB.jl index 9e79ab90f5..acc604ba3f 100644 --- a/examples/NFDB.jl +++ b/examples/NFDB.jl @@ -1196,7 +1196,7 @@ function _p_adic_regulator_coates(K::AbsSimpleNumField, p::IntegerUnion) while true (prec > 2^12 || working_prec > 2^12) && error("Something wrong") imK =[LocalFieldValuationRingElem{PadicField, PadicFieldElem}[] for i in 1:degK] - Qp = PadicField(p, prec, cached = false) + Qp = padic_field(p, precision = prec, cached = false) Zp = ring_of_integers(Qp) dK = discriminant(OK) r = maximum([ramification_index(P) for P in dp]) diff --git a/examples/Plesken.jl b/examples/Plesken.jl index e2a57049fc..b9c8936cb9 100644 --- a/examples/Plesken.jl +++ b/examples/Plesken.jl @@ -183,7 +183,7 @@ function primitive_root_r_div_qm1(R, r::Int) end function get_f(r::Int, p::ZZRingElem, s::Int) - R = PadicField(r, s) + R = padic_field(r, precision = s) return lift(teichmuller(R(p))) end # plan diff --git a/examples/Tropics.jl b/examples/Tropics.jl index 161774ad88..35c14f291f 100644 --- a/examples/Tropics.jl +++ b/examples/Tropics.jl @@ -84,7 +84,7 @@ lp[1].gen_two*lp[2].gen_two^2 ma = representation_matrix(a) mb = representation_matrix(k(ans)) @assert iszero(ma*mb - mb*ma) -Qp = PadicField(7, 10) +Qp = padic_field(7, precision = 10) Main.TropicalModule.simultaneous_diagonalization([map_entries(Qp, ma), map_entries(Qp, mb)]) =# diff --git a/src/Deprecations.jl b/src/Deprecations.jl index ff874453d1..94b96452d5 100644 --- a/src/Deprecations.jl +++ b/src/Deprecations.jl @@ -273,3 +273,10 @@ end # Deprecated in 0.33.0 @deprecate rres reduced_resultant + +# To be deprecated in 0.34.0 + +#@deprecate lift(a::LocalFieldValuationRingElem) lift(ZZ, a) +lift(a::LocalFieldValuationRingElem) = lift(ZZ, a) +#@deprecate prime_field(L::Union{QadicField, LocalField}) absolute_base_field(L) +prime_field(L::Union{QadicField, LocalField}) = absolute_base_field(L) diff --git a/src/HeckeTypes.jl b/src/HeckeTypes.jl index 8fc72d10a2..c0446ff4c9 100644 --- a/src/HeckeTypes.jl +++ b/src/HeckeTypes.jl @@ -2241,11 +2241,11 @@ mutable struct qAdicRootCtx lf = Hecke.factor_mod_pk(Array, H, 1) if splitting_field d = lcm([degree(y[1]) for y = lf]) - R = QadicField(p, d, 1)[1] + R = qadic_field(p, d, precision = 1)[1] Q = [R] r.is_splitting = true else - Q = [QadicField(p, x, 1)[1] for x = Set(degree(y[1]) for y = lf)] + Q = [qadic_field(p, x, precision = 1)[1] for x = Set(degree(y[1]) for y = lf)] r.is_splitting = false end @assert all(x->isone(x[2]), lf) diff --git a/src/LocalField/Completions.jl b/src/LocalField/Completions.jl index d820bcbe97..801f3015da 100644 --- a/src/LocalField/Completions.jl +++ b/src/LocalField/Completions.jl @@ -189,9 +189,9 @@ function completion(K::AbsSimpleNumField, P::AbsNumFieldOrderIdeal{AbsSimpleNumF f = degree(P) e = ramification_index(P) prec_padics = div(precision+e-1, e) - Qp = PadicField(minimum(P), prec_padics, cached = false) + Qp = padic_field(minimum(P), precision = prec_padics, cached = false) Zp = maximal_order(Qp) - Qq, gQq = QadicField(minimum(P), f, prec_padics, cached = false) + Qq, gQq = qadic_field(minimum(P), f, precision = prec_padics, cached = false) Qqx, gQqx = polynomial_ring(Qq, "x") q, mq = residue_field(Qq) #F, mF = ResidueFieldSmall(OK, P) @@ -336,7 +336,7 @@ function setprecision!(f::CompletionMap{LocalField{QadicFieldElem, EisensteinLoc gq = _increase_precision(gq, pol_gq, div(f.precision+e-1, e), ex, P) f.inv_img = (gq, f.inv_img[2]) - Zp = maximal_order(prime_field(Kp)) + Zp = maximal_order(absolute_base_field(Kp)) Qq = base_field(Kp) setprecision!(Qq, ex) @@ -384,7 +384,7 @@ function totally_ramified_completion(K::AbsSimpleNumField, P::AbsNumFieldOrderId @assert nf(OK) == K @assert isone(degree(P)) e = ramification_index(P) - Qp = PadicField(minimum(P), precision) + Qp = padic_field(minimum(P), precision = precision) Zp = maximal_order(Qp) Zx = FlintZZ["x"][1] Qpx = polynomial_ring(Qp, "x")[1] @@ -443,7 +443,7 @@ function setprecision!(f::CompletionMap{LocalField{PadicFieldElem, EisensteinLoc if r > 0 ex += 1 end - Qp = PadicField(prime(Kp), div(new_prec, e)+1) + Qp = padic_field(prime(Kp), precision = div(new_prec, e) + 1) Zp = maximal_order(Qp) Qpx, _ = polynomial_ring(Qp, "x") pows_u = powers(u, e-1) @@ -495,8 +495,8 @@ function unramified_completion(K::AbsSimpleNumField, P::AbsNumFieldOrderIdeal{Ab @assert isone(ramification_index(P)) f = degree(P) p = minimum(P) - Qq, gQq = QadicField(p, f, precision) - Qp = PadicField(p, precision) + Qq, gQq = qadic_field(p, f, precision = precision) + Qp = padic_field(p, precision = precision) Zp = maximal_order(Qp) q, mq = residue_field(Qq) F, mF = residue_field(OK, P) diff --git a/src/LocalField/Conjugates.jl b/src/LocalField/Conjugates.jl index 8a8e8c1f26..d68b62246f 100644 --- a/src/LocalField/Conjugates.jl +++ b/src/LocalField/Conjugates.jl @@ -1,5 +1,5 @@ #XXX: valuation(Q(0)) == 0 !!!!! -function newton_lift(f::ZZPolyRingElem, r::QadicFieldElem, prec::Int = parent(r).prec_max, starting_prec::Int = 2) +function newton_lift(f::ZZPolyRingElem, r::QadicFieldElem, prec::Int = precision(parent(r)), starting_prec::Int = 2) Q = parent(r) n = prec i = n @@ -19,14 +19,14 @@ function newton_lift(f::ZZPolyRingElem, r::QadicFieldElem, prec::Int = parent(r) for p = reverse(chain) setprecision!(r, p) setprecision!(o, p) - Q.prec_max = r.N + setprecision!(Q, r.N) if r.N > precision(Q) setprecision!(qf, r.N) setprecision!(qfs, r.N) end r = r - qf(r)*o if r.N >= n - Q.prec_max = n + setprecision!(Q, n) return r end o = o*(2-qfs(r)*o) @@ -34,7 +34,7 @@ function newton_lift(f::ZZPolyRingElem, r::QadicFieldElem, prec::Int = parent(r) return r end -function newton_lift(f::ZZPolyRingElem, r::LocalFieldElem, precision::Int = parent(r).prec_max, starting_prec::Int = 2) +function newton_lift(f::ZZPolyRingElem, r::LocalFieldElem, precision::Int = precision(parent(r)), starting_prec::Int = 2) Q = parent(r) n = precision i = n @@ -93,7 +93,7 @@ function roots(C::qAdicRootCtx, n::Int = 10) lf = factor_mod_pk(Array, C.H, n) rt = QadicFieldElem[] for Q = C.Q - Q.prec_max = n + setprecision!(Q, n) for x = lf if is_splitting(C) || degree(x[1]) == degree(Q) append!(rt, roots(Q, x[1], max_roots = 1)) diff --git a/src/LocalField/Elem.jl b/src/LocalField/Elem.jl index 2d71b034fa..57a3554041 100644 --- a/src/LocalField/Elem.jl +++ b/src/LocalField/Elem.jl @@ -849,7 +849,7 @@ function divexact(a::LocalFieldElem, b::Union{Integer, ZZRingElem}; check::Bool= e = absolute_ramification_index(K) v = valuation(b, p) iszero(a) && return setprecision(a, precision(a) - v*e) - Qp = prime_field(K) + Qp = absolute_base_field(K) old = precision(Qp) setprecision!(Qp, e*precision(a)+ Int(_valuation_integral(a)) + v) bb = inv(Qp(b)) diff --git a/src/LocalField/LocalField.jl b/src/LocalField/LocalField.jl index 2ccc498dc4..c38ef7f6a7 100644 --- a/src/LocalField/LocalField.jl +++ b/src/LocalField/LocalField.jl @@ -134,15 +134,6 @@ end # ################################################################################ -function prime_field(L::Union{QadicField, LocalField}) - L = base_ring(defining_polynomial(L)) - while typeof(L) != PadicField - L = base_ring(defining_polynomial(L)) - end - return L -end - - function base_field(L::LocalField) return base_ring(defining_polynomial(L)) end @@ -366,7 +357,7 @@ end function local_field(f::QQPolyRingElem, p::Int, precision::Int, s::VarName, ::Type{T} = GenericLocalField; check::Bool = true, cached::Bool = true) where T <: LocalFieldParameter @assert is_prime(p) - K = PadicField(p, precision) + K = padic_field(p, precision = precision) fK = map_coefficients(K, f, cached = false) return local_field(fK, s, T, cached = cached, check = check) end diff --git a/src/LocalField/Poly.jl b/src/LocalField/Poly.jl index 7c6ec1a026..ae6aab9e3c 100644 --- a/src/LocalField/Poly.jl +++ b/src/LocalField/Poly.jl @@ -47,7 +47,7 @@ function setcoeff!(c::Generic.Poly{T}, n::Int, a::T) where {T <: Union{PadicFiel end #TODO: find better crossover points -# qp = PadicField(3, 10); +# qp = padic_field(3, precision = 10); # qpt, t = qp["t"] # E = eisenstein_extension(cyclotomic(3, gen(Hecke.Globals.Zx))(t+1))[1] # Es, s = E["s"] @@ -747,7 +747,7 @@ function characteristic_polynomial(f::Generic.Poly{T}, g::Generic.Poly{T}) where error("Not yet implemented") end d1 = clog(ZZRingElem(degree(f)+1), p) - L = QadicField(p, d1, min(precision(f), precision(g))) + L = qadic_field(p, d1, precision = min(precision(f), precision(g))) Lt = polynomial_ring(L, "t")[1] fL = map_coefficients(L, f, parent = Lt) gL = map_coefficients(L, g, parent = Lt) diff --git a/src/LocalField/neq.jl b/src/LocalField/neq.jl index 266c1fb253..2f13281b24 100644 --- a/src/LocalField/neq.jl +++ b/src/LocalField/neq.jl @@ -214,7 +214,7 @@ function coordinates(a::Union{QadicFieldElem, LocalFieldElem}, k) return c end coordinates(a::PadicFieldElem, ::PadicField) = [a] -lift(a::Hecke.LocalFieldValuationRingElem{PadicField, PadicFieldElem}) = lift(a.x) +lift(R::Ring, a::Hecke.LocalFieldValuationRingElem{PadicField, PadicFieldElem}) = lift(R, a.x) function setprecision!(A::Generic.MatSpaceElem{Hecke.LocalFieldValuationRingElem{PadicField, PadicFieldElem}}, n::Int) for i=1:nrows(A) @@ -255,7 +255,7 @@ function solve_1_units(a::Vector{T}, b::T) where T cur_a = copy(a) cur_b = b # @assert degree(K) == e - Qp = prime_field(K) + Qp = absolute_base_field(K) Zp = ring_of_integers(Qp) expo_mult = identity_matrix(ZZ, length(cur_a)) #transformation of cur_a to a @@ -565,7 +565,7 @@ struct MapEvalCtx map::Generic.MatSpaceElem{PadicFieldElem} function MapEvalCtx(M::LocalFieldMor) - mat = matrix(prime_field(domain(M)), + mat = matrix(absolute_base_field(domain(M)), absolute_degree(domain(M)), absolute_degree(codomain(M)), reduce(vcat, [absolute_coordinates(M(x)) @@ -778,7 +778,7 @@ function local_fundamental_class_serre(mKL::LocalFieldMor) #thus Gal(E/base_field(L)) = Gal(L/base_field(L)) x unram of base_field bL = base_field(L) E2, _ = unramified_extension(map_coefficients(x->bL(coeff(x, 0)), defining_polynomial(E), cached = false)) - G2 = automorphism_list(E2, prime_field(E2)) + G2 = automorphism_list(E2, absolute_base_field(E2)) GG = morphism_type(E)[] for e = G2 ime = e(gen(E2)) @@ -794,7 +794,7 @@ function local_fundamental_class_serre(mKL::LocalFieldMor) @assert length(GG) == divexact(absolute_degree(E), absolute_degree(K)) # @assert all(x->x in GG, automorphism_list(E, K)) else - GG = automorphism_list(E, prime_field(E)) + GG = automorphism_list(E, absolute_base_field(E)) gK = map(E, gK) GG = [g for g = GG if map(g, gK) == gK] end @@ -828,7 +828,7 @@ function local_fundamental_class_serre(mKL::LocalFieldMor) beta = [] sigma_hat = [] #need to map and compare all generators - gL = gens(L, prime_field(L)) + gL = gens(L, absolute_base_field(L)) imGG = map(x->map(x, map(E, gL)), GG) imG = map(x->map(x, gL), G) @@ -1367,7 +1367,7 @@ function is_local_norm(k::Hecke.AbsSimpleNumField, a::ZZRingElem) end continue end - Qp = PadicField(p, prec) + Qp = padic_field(p, precision = prec) #for each P we need # - a gen (pi) for the valuation # - a gen for the residue field diff --git a/src/LocalField/pAdic.jl b/src/LocalField/pAdic.jl index 7812e7f360..a35ea48d76 100644 --- a/src/LocalField/pAdic.jl +++ b/src/LocalField/pAdic.jl @@ -41,7 +41,7 @@ function my_log_one_minus(x::PadicFieldElem) pp = prime(parent(x), 2) X = 1-x while true - y = lift(1-X) % pp + y = lift(ZZ, 1-X) % pp lg += parent(x)(my_log_one_minus_inner(y, precision(x), le, prime(parent(x)))) X = X*inv(parent(x)(1-y)) pp *= pp @@ -76,10 +76,10 @@ function my_log_one_minus(x::QadicFieldElem) pp = prime(parent(x))^2 X = 1-x R, _ = polynomial_ring(QQ, cached = false) - S, _ = residue_ring(R, map_coefficients(x->QQ(lift(x)), defining_polynomial(parent(x)), parent = R)) + S, _ = residue_ring(R, map_coefficients(x->QQ(lift(ZZ, x)), defining_polynomial(parent(x)), parent = R)) while true Y = 1-X - y = S(R([lift(coeff(Y, i)) % pp for i=0:length(Y)])) + y = S(R([lift(ZZ, coeff(Y, i)) % pp for i=0:length(Y)])) lg += parent(x)(my_log_one_minus_inner(y, precision(x), le, prime(parent(x))).data) X = X*inv(parent(x)(1-y.data)) pp *= pp diff --git a/src/LocalField/qAdic.jl b/src/LocalField/qAdic.jl index 44ac9cfacc..8f09328157 100644 --- a/src/LocalField/qAdic.jl +++ b/src/LocalField/qAdic.jl @@ -76,7 +76,7 @@ function lift_reco(::QQField, a::PadicFieldElem; reco::Bool = false) return x*prime(R, v) end else - return lift(FlintQQ, a) + return lift(QQ, a) end end diff --git a/src/Misc/UnitsModM.jl b/src/Misc/UnitsModM.jl index 71dba4df9d..7e5af4678f 100644 --- a/src/Misc/UnitsModM.jl +++ b/src/Misc/UnitsModM.jl @@ -280,7 +280,7 @@ function disc_log_mod(a::ZZRingElem, b::ZZRingElem, M::ZZRingElem) @assert (b-1) % 8 == 0 @assert (a^2-1) % 8 == 0 if fM[p] > 3 - F = PadicField(p, fM[p], cached = false) + F = padic_field(p, precision = fM[p], cached = false) g += 2*lift(divexact(log(F(b)), log(F(a^2)))) end return g diff --git a/src/NumField/NfAbs/MPolyAbsFact.jl b/src/NumField/NfAbs/MPolyAbsFact.jl index 51a5339d75..b9ffb9569a 100644 --- a/src/NumField/NfAbs/MPolyAbsFact.jl +++ b/src/NumField/NfAbs/MPolyAbsFact.jl @@ -862,7 +862,7 @@ function field(RC::RootCtx, m::MatElem) @vprintln :AbsFact 1 "target field has (local) degree $k" - Qq = QadicField(characteristic(F), k, 1, cached = false)[1] + Qq = qadic_field(characteristic(F), k, precision = 1, cached = false)[1] Qqt = polynomial_ring(Qq, cached = false)[1] k, mk = residue_field(Qq) diff --git a/src/QuadForm/Quad/NormalForm.jl b/src/QuadForm/Quad/NormalForm.jl index f8f38f38ab..19c71b4dfb 100644 --- a/src/QuadForm/Quad/NormalForm.jl +++ b/src/QuadForm/Quad/NormalForm.jl @@ -208,7 +208,7 @@ function _padic_normal_form(G::QQMatrix, p::ZZRingElem; prec::Int = -1, partial: n = ncols(Gmod) - Qp = PadicField(p, prec, cached = false) + Qp = padic_field(p, precision = prec, cached = false) if n == 0 return (zero_matrix(FlintQQ, n, n), zero_matrix(FlintQQ, n, n))::Tuple{QQMatrix, QQMatrix} diff --git a/test/LocalField/LocalField.jl b/test/LocalField/LocalField.jl index fa6ba2b5eb..0bfb88954d 100644 --- a/test/LocalField/LocalField.jl +++ b/test/LocalField/LocalField.jl @@ -17,7 +17,7 @@ @test absolute_degree(L) == 4 @test prime(L) == 2 - Q2 = PadicField(2, 10) + Q2 = padic_field(2, precision = 10) Q2s, s = polynomial_ring(Q2, "s") f = s^2+s+1 Ku, c = local_field(f, "s", Hecke.UnramifiedLocalField, check = false) @@ -39,7 +39,7 @@ end @testset "Norm" begin - K = QadicField(3, 4, 10)[1] + K = qadic_field(3, 4, precision = 10)[1] Kx, x = polynomial_ring(K, "x") L = eisenstein_extension(x^20+3)[1] b = @inferred basis(L) @@ -125,7 +125,7 @@ @testset "Exp and Log" begin - K = PadicField(2, 100) + K = padic_field(2, precision = 100) Kx, x = polynomial_ring(K, "x", cached = false) L, b = eisenstein_extension(x^7+2, :a) pi = uniformizer(L) @@ -140,7 +140,7 @@ @test iszero(logexp - el) || valuation(logexp - el) > 80 #need improving end - KK, a = QadicField(2, 2, 16) + KK, a = qadic_field(2, 2, precision = 16) KKx, x = KK["x"] f = x + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 + 2^8 + 2^9 + 2^10 + 2^11 + 2^12 + 2^13 + 2^14 + 2^15 L, b = eisenstein_extension(f, "b"); @@ -150,7 +150,7 @@ @testset "Maps" begin # QadicField -> QadicField - Qq, a = QadicField(2, 3, 100) + Qq, a = qadic_field(2, 3, precision = 100) rt = roots(map_coefficients(Qq, defining_polynomial(Qq))) i = findfirst(x -> x == a, rt) @@ -200,10 +200,10 @@ @test f(z) == L(-2) # LocalField -> QadicField - Qp = PadicField(2, 100) + Qp = padic_field(2, precision = 100) Qpx, x = polynomial_ring(Qp) K, a = unramified_extension(x^2+x+1) - Qq, gQq = QadicField(2, 2, 100) + Qq, gQq = qadic_field(2, 2, precision = 100) rt = roots(map_coefficients(Qq, defining_polynomial(K))) f = @inferred hom(K, Qq, rt[1]) @@ -216,11 +216,11 @@ end @testset "Automorphisms" begin - K = PadicField(2, 200) + K = padic_field(2, precision = 200) Kt, t = polynomial_ring(K) L, b = eisenstein_extension(t^2+2, "a") @test length(automorphism_list(L)) == 2 - Qq, a = QadicField(2, 2, 100) + Qq, a = qadic_field(2, 2, precision = 100) @test length(automorphism_list(Qq)) == 2 Qqx, x = polynomial_ring(Qq) L, b = eisenstein_extension(x^3+2, "a") @@ -260,7 +260,7 @@ end @testset "extend extend extend" begin - K, = QadicField(5, 2, 10) + K, = qadic_field(5, 2, precision = 10) L, = unramified_extension(K, 3) M, = unramified_extension(L, 3) end @@ -274,7 +274,7 @@ @test length(automorphism_list(k3)) == 3 @testset "image of one units under log" begin - Qp = PadicField(3, 10) + Qp = padic_field(3, precision = 10) Qpt, t = Qp["t"] E, a = eisenstein_extension(t^2 - 3) n, x = Hecke.image_of_logarithm_one_units(E) diff --git a/test/LocalField/Poly.jl b/test/LocalField/Poly.jl index ef0495eae3..a9c7a3b96e 100644 --- a/test/LocalField/Poly.jl +++ b/test/LocalField/Poly.jl @@ -1,6 +1,6 @@ @testset "Poly" begin - K = PadicField(2, 100) + K = padic_field(2, precision = 100) Kx, x = polynomial_ring(K, "x") L, gL = eisenstein_extension(x^2+2, "a") @@ -80,7 +80,7 @@ end @testset "Roots" begin - _, t = PadicField(3, 10)["t"] + _, t = padic_field(3, precision = 10)["t"] f = ((t-1+81)*(t-1+2*81)) rt = roots(f) @test length(rt) == 2 @@ -89,7 +89,7 @@ end @testset "Resultant" begin - R, x = polynomial_ring(PadicField(853, 2), "x") + R, x = polynomial_ring(padic_field(853, precision = 2), "x") a = 4*x^5 + x^4 + 256*x^3 + 192*x^2 + 48*x + 4 b = derivative(a) rab = @inferred resultant(a, b) diff --git a/test/LocalField/neq.jl b/test/LocalField/neq.jl index e97a2ea4f9..369a404054 100644 --- a/test/LocalField/neq.jl +++ b/test/LocalField/neq.jl @@ -36,7 +36,7 @@ end l2 = prime_decomposition(maximal_order(k), 2) k2, _ = Hecke.completion(k, l2[1][1], 120) - G, mG = automorphism_group(k2, prime_field(k2)) + G, mG = automorphism_group(k2, Hecke.absolute_base_field(k2)) @test all([mG(x*y) == mG(x) * mG(y) for x = G for y = G]) end @@ -111,8 +111,8 @@ end end @testset "Misc LocalField" begin - K = QadicField(3, 5, 10)[1] - k = PadicField(3, 10) + K = qadic_field(3, 5, precision = 10)[1] + k = padic_field(3, precision = 10) @test is_norm(K, k(3)) == false @test is_norm(K, k(3)^5) == true