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> elliptic_curve(QQ, [1 , 2 , 3 , 4 , 5 ])
Elliptic curve
over rational field
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
over prime field of characteristic 3
with equation
y^2 = x^3 + x + 1
source elliptic_curve_from_j_invariant(j::FieldElem) -> EllipticCurve
Return an elliptic curve with the given j j j -invariant.
Examples
julia> K = GF(3 )
Prime field of characteristic 3
julia> elliptic_curve_from_j_invariant(K(2 ))
Elliptic curve
over prime field of characteristic 3
with equation
y^2 + x*y = x^3 + 1
source base_field(E::EllipticCurve) -> Field
Return the base field over which E
is defined.
source base_field(C::HypellCrv) -> Field
Return the base field over which C
is defined.
source base_change(K::Field, E::EllipticCurve) -> EllipticCurve
Return the base change of the elliptic curve E E E over K K K if coercion is possible.
source base_change(f, E::EllipticCurve) -> EllipticCurve
Return the base change of the elliptic curve E E E using the map f f f .
source coefficients(E::EllipticCurve{T}) -> Tuple {T, T, T, T, T}
Return the Weierstrass coefficients of E E E as a tuple (a1, a2, a3, a4, a6) such that E E E is given by y^2 + a1xy + a3y = x^3 + a2x^2 + a4x + a6.
source a_invariants(E::EllipticCurve{T}) -> Tuple {T, T, T, T, T}
Return the Weierstrass coefficients of E E E as a tuple ( a 1 , a 2 , a 3 , a 4 , a 6 ) (a_1, a_2, a_3, a_4, a_6) ( a 1 , a 2 , a 3 , a 4 , a 6 ) such that E E E is given by y 2 + a 1 x y + a 3 y = x 3 + a 2 x 2 + a 4 x + a 6 y^2 + a_1xy + a_3y = x^3 + a_2x^2 + a_4x + a_6 y 2 + a 1 x y + a 3 y = x 3 + a 2 x 2 + a 4 x + a 6 .
source b_invariants(E::EllipticCurve{T}) -> Tuple {T, T, T, T}
Return the b-invariants of E E E as a tuple ( b 2 , b 4 , b 6 , b 8 ) (b_2, b_4, b_6, b_8) ( b 2 , b 4 , b 6 , b 8 ) .
source c_invariants(E::EllipticCurve{T}) -> Tuple {T, T}
Return the c-invariants of E a s a t u p l e E as a tuple E a s a t u pl e (c_4, c_6)$ .
source discriminant(E::EllipticCurve) -> FieldElem
Return the discriminant of E E E .
source discriminant(C::HypellCrv{T}) -> T
Compute the discriminant of C C C .
source discriminant(O::AlgssRelOrd)
Returns the discriminant of O O O .
source j_invariant(E::EllipticCurve) -> FieldElem
Compute the j-invariant of E E E .
source equation([R::MPolyRing,] E::EllipticCurve) -> MPolyRingElem
Return the equation defining the elliptic curve E E E as a bivariate polynomial. If the polynomial ring R R R is specified, it must by a bivariate polynomial ring.
Examples
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_polynomials([R::PolyRing,] E::EllipticCurve) -> PolyRingElem, PolyRingElem
Return univariate polynomials f , h f, h f , h such that E E E is given by y 2 + h ∗ y = f y^2 + h*y = f y 2 + h ∗ y = f .
Examples
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 (E::EllipticCurve)(coords::Vector ; check::Bool = true )
Return the point P P P of E E 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 E E . This can be disabled by setting check = false
.
julia> E = elliptic_curve(QQ, [1 , 2 ]);
julia> E([1 , -2 ])
(1 : -2 : 1)
julia> E([2 , -4 , 2 ])
(1 : -2 : 1)
infinity(E::EllipticCurve) -> EllipticCurvePoint
Return the point at infinity with project coordinates [ 0 : 1 : 0 ] [0 : 1 : 0] [ 0 : 1 : 0 ] .
source parent(P::EllipticCurvePoint) -> EllipticCurve
Return the elliptic curve on which P P P lies.
Examples
julia> E = elliptic_curve(QQ, [1 , 2 ]);
julia> P = E([1 , -2 ]);
julia> E == parent(P)
true
source is_on_curve(E::EllipticCurve, coords::Vector ) -> Bool
Return true if coords
defines a point on E E E and false otherwise. The array coords
must have length 2.
Examples
julia> E = elliptic_curve(QQ, [1 , 2 ]);
julia> is_on_curve(E, [1 , -2 ])
true
julia> is_on_curve(E, [1 , -1 ])
false
source +(P::EllipticCurvePoint, Q::EllipticCurvePoint) -> EllipticCurvePoint
Add two points on an elliptic curve.
Examples
julia> E = elliptic_curve(QQ, [1 , 2 ]);
julia> P = E([1 , -2 ]);
julia> P + P
(-1 : 0 : 1)
source division_points(P::EllipticCurvePoint, m::Int ) -> EllipticCurvePoint
Compute the set of points Q Q Q defined over the base field such that m Q = P mQ = P m Q = P . Returns the empty list if no such points exist.
Examples
julia> E = elliptic_curve(QQ, [1 , 2 ]);
julia> division_points(infinity(E), 2 )
2-element Vector{EllipticCurvePoint{QQFieldElem}}:
(0 : 1 : 0)
(-1 : 0 : 1)
source