Rational field

Singular.jl provides rational numbers via Singular's n_Q type.

There is a constant parent object representing the field of rationals, called QQ in Singular.jl. It is defined by QQ = Rationals(), which calls the constructor for the unique field of rationals in Singular.

Rational functionality

The rationals in Singular.jl provide all functionality for fields and fraction fields described by AbstractAlgebra.jl.

https://nemocas.github.io/AbstractAlgebra.jl/latest/field

https://nemocas.github.io/AbstractAlgebra.jl/latest/fraction

We describe here only the extra functionality provided by Singular that is not already described in those interfaces.

Constructors

In addition to the standard constructors required for the interfaces listed above, Singular.jl provides the following constructors.

QQ(n::n_Z)
QQ(n::ZZRingElem)

Construct a Singular rational from the given integer $n$.

Examples

julia> f = QQ(-12, 7)
-12//7

julia> h = numerator(f)
-12

julia> k = denominator(f)
7

julia> m = abs(f)
12//7

julia> a = QQ(12, 7)
12//7

julia> b = QQ(-3, 5)
-3//5

julia> a > b
true

julia> a != b
true

julia> a > 1
true

julia> 5 >= b
true

Rational reconstruction

Nemo.reconstructMethod
reconstruct(x::n_Z, y::n_Z)

Given $x$ modulo $y$, find $r/s$ such that $x \equiv r/s \pmod{y}$ for values $r$ and $s$ satisfying the bound $y > 2(|r| + 1)(s + 1)$.

source

The following ad hoc versions of the same function also exist.

reconstruct(::n_Z, ::Integer)
reconstruct(::Integer, ::n_Z)

Examples

julia> q1 = reconstruct(ZZ(7), ZZ(3))
1

julia> q2 = reconstruct(ZZ(7), 5)
-1//2