using Nemo
function lift(x::FinFieldElem)
Fl = parent(x)
@Assert Nemo.isprime(order(Fl))
i = 0
while i != x
i += 1
end
return i
end
function order(x::FinFieldElem)
K = parent(x)
if x == Nemo.zero(K)
throw(ArgumentError(“Argument must be non-zero”))
else
k = 1
z = x
while z != Nemo.one(K)
z *= x
k += 1
end
return k
end
end
function roots(f::PolyElem{T}) where {T <: FinFieldElem}
fac = Nemo.factor(f)
res = Dict{T, Int}()
for index in fac
P, exp = index
if degree(P) == 1
res[- coeff(P, 0)] = exp
end
end
res = collect(res)
return res
end
p = ZZ(2)^128 + 51
F, _ = FiniteField(p, 1, “u”)
FX, X = PolynomialRing(F, “X”)
E0 = EllipticCurve(F(1), F(9))
ZZY, Y = PolynomialRing(ZZ, “Y”)
frob_poly = Y^2 + ZZ(13815554068038022463)*Y + ZZ(340282366920938463463374607431768211507)
Card = ZZ(340282366920938463477190161499806233971)
primes_use_step =
eigenvalues = Dict()
primes_use_step_torsion =
orders = Dict()
for ell in primes(2, 100)
Fl, _ = FiniteField(ell, 1, “u”)
FlZ, Z = PolynomialRing(Fl, “Z”)
frob_poly_mod_ell = FlZ(frob_poly)
rts = roots(frob_poly_mod_ell)
if length(rts)==2
rts = (rts[1][1], rts[2][1])
order1 = order(rts[1])
order2 = order(rts[2])
if ((order1 != order2) & (min(order1, order2) < 10))
append!(primes_use_step_torsion, [ell])
orders[ell] = min(order1, order2)
else
append!(primes_use_step, ell)
eigenvalues[ell] = (lift(rts[1]), lift(rts[2]))
end
end
end
When I run this I get the error message as follows:
LoadError: MethodError: no method matching order(::FqNmodFiniteField)
Closest candidates are:
order(::FinFieldElem) at /home/cssc/exp.jl:13
Stacktrace:
[1] lift(::fq_nmod) at /home/cssc/exp.jl:4
[2] top-level scope at /home/cssc/exp.jl:65
[3] include at ./boot.jl:317 [inlined]
[4] include_relative(::Module, ::String) at ./loading.jl:1038
[5] include(::Module, ::String) at ./sysimg.jl:29
[6] include(::String) at ./client.jl:388
[7] top-level scope at none:0
in expression starting at /home/cssc/exp.jl:51
I don’t understand the problem. can any one help with this?