-
Notifications
You must be signed in to change notification settings - Fork 65
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add documentation for elliptic curves over finite fields (#1172)
- Loading branch information
Showing
19 changed files
with
578 additions
and
163 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# Basics | ||
|
||
```@meta | ||
CurrentModule = Hecke | ||
DocTestSetup = quote | ||
using Hecke | ||
end | ||
``` | ||
|
||
## Creation | ||
|
||
```@docs | ||
elliptic_curve | ||
elliptic_curve_from_j_invariant | ||
``` | ||
|
||
## Basic properties | ||
|
||
```@docs | ||
base_field(::EllCrv) | ||
base_change(::Field, ::EllCrv) | ||
base_change(::Any, ::EllCrv) | ||
coefficients(::EllCrv) | ||
a_invars(::EllCrv) | ||
b_invars(::EllCrv) | ||
c_invars(::EllCrv) | ||
discriminant(::EllCrv) | ||
j_invariant(::EllCrv) | ||
equation(::EllCrv) | ||
hyperelliptic_polynomials(::EllCrv) | ||
``` | ||
|
||
## Points | ||
|
||
```julia | ||
(E::EllCrv)(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 | ||
|
||
```jldoctest | ||
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 | ||
``` | ||
|
||
```@docs | ||
infinity(::EllCrv) | ||
parent(::EllCrvPt) | ||
is_on_curve(::EllCrv, ::Vector) | ||
+(P::EllCrvPt{T}, Q::EllCrvPt{T}) where {T} | ||
division_points(::EllCrvPt, ::Int) | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
# Elliptic curves over finite fields | ||
|
||
```@meta | ||
CurrentModule = Hecke | ||
DocTestSetup = quote | ||
using Hecke | ||
end | ||
``` | ||
|
||
## Random points | ||
|
||
``` | ||
rand(E::EllCrv{<: FinFieldElem}) | ||
``` | ||
|
||
Return a random point on the elliptic curve $E$ defined over a finite field. | ||
|
||
```jldoctest; filter = r"Point.*" | ||
julia> E = elliptic_curve(GF(3), [1, 2]); | ||
julia> rand(E) | ||
Point (2 : 0 : 1) of Elliptic curve with equation | ||
y^2 = x^3 + x + 2 | ||
``` | ||
|
||
## Cardinality and orders | ||
|
||
```@docs | ||
order(::EllCrv{<:FinFieldElem}) | ||
order(::EllCrvPt{<:FinFieldElem}) | ||
``` | ||
|
||
## Frobenius | ||
|
||
```@docs | ||
trace_of_frobenius(::EllCrv{<:FinFieldElem}) | ||
trace_of_frobenius(::EllCrv{<:FinFieldElem}, ::Int) | ||
``` | ||
|
||
## Group structure of rational points | ||
|
||
```@docs | ||
gens(::EllCrv{T}) where {T <: FinFieldElem} | ||
abelian_group(::EllCrv{<:FinFieldElem}) | ||
``` | ||
|
||
## Discrete logarithm | ||
|
||
```@docs | ||
disc_log(::EllCrvPt, ::EllCrvPt) | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# Introduction | ||
|
||
```@meta | ||
CurrentModule = Hecke | ||
DocTestSetup = quote | ||
using Hecke | ||
end | ||
``` | ||
|
||
This chapter deals with functionality for elliptic curves, which is available over arbitrary fields, with | ||
specific features available for curvers over the rationals and number fields, and finite fields. | ||
|
||
An elliptic curve $E$ is the projective closure of the curve given by the *Weierstrass equation* | ||
```math | ||
y^2 + a_1 x y + a_3 y = x^3 + a_2 x^2 + a_4 x + a_6 | ||
``` | ||
specified by the list of coefficients `[a1, a2, a3, a4, a6]`. If $a_1 = a_2 = a_3 = 0$, this simplifies | ||
to | ||
```math | ||
y^2 = x^3 + a_4 x + a_6 | ||
``` | ||
which we refer to as a *short Weierstrass equation* and which is specified by the two element list `[a4, a6]`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# Elliptic curves over rationals and number fields |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
84fffb9
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@JuliaRegistrator register()
84fffb9
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Registration pull request created: JuliaRegistries/General/87966
After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.
This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via: