Skip to content

Basics

Creation

# elliptic_curveFunction.
julia
elliptic_curve([K::Field], x::Vector; check::Bool = true) -> EllipticCurve

Construct an elliptic curve with Weierstrass equation specified by the coefficients in x, which must have either length 2 or 5.

Per default, it is checked whether the discriminant is non-zero. This can be disabled by setting check = false.

Examples

julia
julia> elliptic_curve(QQ, [1, 2, 3, 4, 5])
Elliptic curve with equation
y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5

julia> elliptic_curve(GF(3), [1, 1])
Elliptic curve with equation
y^2 = x^3 + x + 1

source


# elliptic_curve_from_j_invariantFunction.
julia
elliptic_curve_from_j_invariant(j::FieldElem) -> EllipticCurve

Return an elliptic curve with the given j-invariant.

Examples

julia
julia> K = GF(3)
Prime field of characteristic 3

julia> elliptic_curve_from_j_invariant(K(2))
Elliptic curve with equation
y^2 + x*y = x^3 + 1

source


Basic properties

# base_fieldMethod.
julia
base_field(E::EllipticCurve) -> Field

Return the base field over which E is defined.

source

julia
base_field(C::HypellCrv) -> Field

Return the base field over which C is defined.

source


# base_changeMethod.
julia
base_change(K::Field, E::EllipticCurve) -> EllipticCurve

Return the base change of the elliptic curve E over K if coercion is possible.

source


# base_changeMethod.
julia
base_change(f, E::EllipticCurve) -> EllipticCurve

Return the base change of the elliptic curve E using the map f.

source


# coefficientsMethod.
julia
coefficients(E::EllipticCurve{T}) -> Tuple{T, T, T, T, T}

Return the Weierstrass coefficients of E as a tuple (a1, a2, a3, a4, a6) such that E is given by y^2 + a1xy + a3y = x^3 + a2x^2 + a4x + a6.

source


# a_invariantsMethod.
julia
a_invariants(E::EllipticCurve{T}) -> Tuple{T, T, T, T, T}

Return the Weierstrass coefficients of E as a tuple (a1,a2,a3,a4,a6) such that E is given by y2+a1xy+a3y=x3+a2x2+a4x+a6.

source


# b_invariantsMethod.
julia
b_invariants(E::EllipticCurve{T}) -> Tuple{T, T, T, T}

Return the b-invariants of E as a tuple (b2,b4,b6,b8).

source


# c_invariantsMethod.
julia
c_invariants(E::EllipticCurve{T}) -> Tuple{T, T}

Return the c-invariants of $E as a tuple (c4,c6).

source


# discriminantMethod.
julia
discriminant(E::EllipticCurve) -> FieldElem

Return the discriminant of E.

source

julia
discriminant(C::HypellCrv{T}) -> T

Compute the discriminant of C.

source

julia
discriminant(O::AlgssRelOrd)

Returns the discriminant of O.

source


# j_invariantMethod.
julia
j_invariant(E::EllipticCurve) -> FieldElem

Compute the j-invariant of E.

source


# equationMethod.
julia
equation([R::MPolyRing,] E::EllipticCurve) -> MPolyRingElem

Return the equation defining the elliptic curve E as a bivariate polynomial. If the polynomial ring R is specified, it must by a bivariate polynomial ring.

Examples

julia
julia> E = elliptic_curve(QQ, [1, 2, 3, 4, 5]);

julia> equation(E)
-x^3 - 2*x^2 + x*y - 4*x + y^2 + 3*y - 5

source


# hyperelliptic_polynomialsMethod.
julia
hyperelliptic_polynomials([R::PolyRing,] E::EllipticCurve) -> PolyRingElem, PolyRingElem

Return univariate polynomials f,h such that E is given by y2+hy=f.

Examples

julia
julia> E = elliptic_curve(QQ, [1, 2, 3, 4, 5]);

julia> hyperelliptic_polynomials(E)
(x^3 + 2*x^2 + 4*x + 5, x + 3)

source


Points

julia
    (E::EllipticCurve)(coords::Vector; check::Bool = true)

Return the point P of E with coordinates specified by coords, which can be either affine coordinates (length(coords) == 2) or projective coordinates (length(coords) == 3).

Per default, it is checked whether the point lies on E. This can be disabled by setting check = false.

Examples
julia
julia> E = elliptic_curve(QQ, [1, 2]);

julia> E([1, -2])
Point  (1 : -2 : 1)  of Elliptic curve with equation
y^2 = x^3 + x + 2

julia> E([2, -4, 2])
Point  (1 : -2 : 1)  of Elliptic curve with equation
y^2 = x^3 + x + 2
# infinityMethod.
julia
infinity(E::EllipticCurve) -> EllipticCurvePoint

Return the point at infinity with project coordinates [0:1:0].

source


# parentMethod.
julia
parent(P::EllipticCurvePoint) -> EllipticCurve

Return the elliptic curve on which P lies.

Examples

julia
julia> E = elliptic_curve(QQ, [1, 2]);

julia> P = E([1, -2]);

julia> E == parent(P)
true

source


# is_on_curveMethod.
julia
is_on_curve(E::EllipticCurve, coords::Vector) -> Bool

Return true if coords defines a point on E and false otherwise. The array coords must have length 2.

Examples

julia
julia> E = elliptic_curve(QQ, [1, 2]);

julia> is_on_curve(E, [1, -2])
true

julia> is_on_curve(E, [1, -1])
false

source


# +Method.
julia
+(P::EllipticCurvePoint, Q::EllipticCurvePoint) -> EllipticCurvePoint

Add two points on an elliptic curve.

Examples

julia
julia> E = elliptic_curve(QQ, [1, 2]);

julia> P = E([1, -2]);

julia> P + P
Point  (-1 : 0 : 1)  of Elliptic curve with equation
y^2 = x^3 + x + 2

source


# division_pointsMethod.
julia
division_points(P::EllipticCurvePoint, m::Int) -> EllipticCurvePoint

Compute the set of points Q defined over the base field such that mQ=P. Returns the empty list if no such points exist.

Examples

julia
julia> E = elliptic_curve(QQ, [1, 2]);

julia> division_points(infinity(E), 2)
2-element Vector{EllipticCurvePoint{QQFieldElem}}:
 Point  (0 : 1 : 0)  of Elliptic curve with equation
y^2 = x^3 + x + 2
 Point  (-1 : 0 : 1)  of Elliptic curve with equation
y^2 = x^3 + x + 2

source