Example use of EDSTools
system:sage


<p>Load the script.</p>

{{{id=1|
attach('edstools.sage')
///
}}}

<p>Create an elliptic divisibility sequence from the initial four terms.</p>

{{{id=2|
eds = EDS([1,2,5,6]); eds
///
An elliptic divisibility sequence with first terms 1, 2, 5, 6
}}}

<p>Display terms or a given term. &nbsp;The computation of term <span style="font-family: 'andale mono', times;">m</span> takes <span style="font-family: 'andale mono', times;">log m</span> time, using a double-and-add approach (Shipsey).</p>

{{{id=4|
eds.terms(5)
///
[0, 1, 2, 5, 6, -77]
}}}

{{{id=5|
eds.term(5)
///
-77
}}}

{{{id=35|
eds.term(70)
///
9212476084388777940709179716866846893955491828739398292404377201633365614173377701697764470238874055698174684706930575009451462096495396153584650888982056259450083068674547322961835865250628619791687547445532135460932758649421909370265839820696975998889899355827114833433659407598324079467556232328691611705857480612168387037463098136534229399787255794486639259189232928801545945623731314344607835320798
}}}

<p>Check for the rank (i.e. the first zero) up to a given bound. &nbsp;This sequence has infinite rank (no zeroes).</p>

{{{id=6|
eds.rank(100)
///
'Rank not found'
}}}

<p>Find a curve and point that correspond to the sequence. &nbsp;You can ask just for given coefficients using functions <span style="font-family: 'andale mono', times;">a, b, c</span> (usual Weierstrass coefficients).</p>

{{{id=7|
curve = eds.curve(); curve
///
[9/10, 39/20, 2, 1, 0]
}}}

{{{id=25|
eds.a(2)
///
39/20
}}}

{{{id=8|
point = eds.point(); point
///
[0, 0]
}}}

<p>You can also create a sequence from a curve and point. &nbsp;If we use the curve and point we got above, we get back the original sequence.</p>

{{{id=20|
eds
///
An elliptic divisibility sequence with first terms 1, 2, 5, 6
}}}

{{{id=9|
edstwo = EDS(curve, point); edstwo
///
An elliptic divisibility sequence with first terms 1, 2, 5, 6
}}}

<p>You can ask for j-invariant and discriminant.</p>

{{{id=22|
eds.j_invariant()
///
4972104743956839/63788500000000
}}}

{{{id=15|
E = EllipticCurve(curve); E.j_invariant()
///
4972104743956839/63788500000000
}}}

<p>You can create a sequence from twice the point, directly or using the function <span style="font-family: 'andale mono', times;">subsequence</span>.</p>

{{{id=16|
P = E(point); 2*P
///
(-5/4 : -1/4 : 1)
}}}

{{{id=17|
edsthree = EDS(E, 2*P); edsthree
///
An elliptic divisibility sequence with first terms 1, 3/8, -215/128, -50037/32768
}}}

{{{id=19|
edssub = eds.subsequence(2); edssub
///
An elliptic divisibility sequence with first terms 1, 3/8, -215/128, -50037/32768
}}}

<p>You can take an equivalent sequence (i.e. scale by a^(n^2-1)).</p>

{{{id=21|
eds
///
An elliptic divisibility sequence with first terms 1, 2, 5, 6
}}}

{{{id=13|
eds.equivalent(2)
///
An elliptic divisibility sequence with first terms 1, 16, 1280, 196608
}}}