Skip to content

Commit

Permalink
Add residue ring of local fields (thofma#1529)
Browse files Browse the repository at this point in the history
  • Loading branch information
joschmitt authored May 29, 2024
1 parent 6d9b2ee commit b8b8e29
Show file tree
Hide file tree
Showing 12 changed files with 593 additions and 96 deletions.
2 changes: 1 addition & 1 deletion examples/NFDB.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1195,7 +1195,7 @@ function _p_adic_regulator_coates(K::AbsSimpleNumField, p::IntegerUnion)
# working_prec.
while true
(prec > 2^12 || working_prec > 2^12) && error("Something wrong")
imK =[QadicRingElem{PadicField, PadicFieldElem}[] for i in 1:degK]
imK =[LocalFieldValuationRingElem{PadicField, PadicFieldElem}[] for i in 1:degK]
Qp = PadicField(p, prec, cached = false)
Zp = ring_of_integers(Qp)
dK = discriminant(OK)
Expand Down
1 change: 1 addition & 0 deletions src/LocalField.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ include("LocalField/Conjugates.jl")
include("LocalField/Poly.jl")
include("LocalField/Completions.jl")
include("LocalField/neq.jl")
include("LocalField/ResidueRing.jl")
25 changes: 14 additions & 11 deletions src/LocalField/Elem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ function Base.deepcopy_internal(x::LocalFieldElem{S, T}, dict::IdDict) where {S,
return LocalFieldElem{S, T}(parent(x), Base.deepcopy_internal(x.data, dict), precision(x))
end

function Base.hash(a::LocalFieldElem, h::UInt)
return hash(a.data, h)
end

################################################################################
#
# Precision
Expand Down Expand Up @@ -235,22 +239,21 @@ function O(K::LocalField, prec::T) where T <: IntegerUnion
return K(O(base_field(K), d))
end

function zero(K::LocalField)
function zero(K::LocalField; precision=precision(K))
a = zero(parent(defining_polynomial(K)))
return setprecision(K(a), precision(K))
return setprecision(K(a), precision)
end

(K::LocalField)() = zero(K)

function one(K::LocalField)
function one(K::LocalField; precision=precision(K))
a = one(parent(defining_polynomial(K)))
return setprecision(K(a), precision(K))
return setprecision(K(a), precision)
end

function zero!(a::LocalFieldElem)
K = parent(a)
function zero!(a::LocalFieldElem; precision=precision(parent(a)))
zero!(a.data)
a.data = setprecision(a.data, precision(K))
a.data = setprecision(a.data, precision)
return a
end

Expand Down Expand Up @@ -283,14 +286,14 @@ end
#
################################################################################

function (K::LocalField{S, T})(a::Integer) where {S <: FieldElem, T <: LocalFieldParameter}
function (K::LocalField{S, T})(a::Integer; precision=precision(K)) where {S <: FieldElem, T <: LocalFieldParameter}
el = K(parent(defining_polynomial(K))(a))
return setprecision!(el, precision(K))
return setprecision!(el, precision)
end

function (K::LocalField{S, T})(a::Union{ZZRingElem, QQFieldElem}) where {S <: FieldElem, T <: LocalFieldParameter}
function (K::LocalField{S, T})(a::Union{ZZRingElem, QQFieldElem}; precision=precision(K)) where {S <: FieldElem, T <: LocalFieldParameter}
el = K(parent(defining_polynomial(K))(a))
return setprecision!(el, precision(K))
return setprecision!(el, precision)
end

function (K::LocalField{S, T})(a::U) where {U <: Union{PadicFieldElem, QadicFieldElem}, S <: FieldElem, T <: LocalFieldParameter}
Expand Down
Loading

0 comments on commit b8b8e29

Please sign in to comment.