It is hard to understand the question. As far as i understood, we start with an elliptic curve $E$ defined over a finite field of characteristic $q$, a prime power, and consider its quadratic twist $E^d$ relatively to a fixed $d$.
The curve $E$ is given in sage
in the "long form" EllipticCurve( GF(q), [ a1, a2, a3, a4, a6 ] )
but also in the "short form"
EllipticCurve( GF(q), [ 0, 0, 0, a4, a6 ] )
, i.e. EllipticCurve( GF(q), [ a4, a6 ] )
(for some other values).
The characteristic should not be among $2,3$ for this.
We try to see if $|E|+|E^d|$ is indeed $2q+2$ and if the order of $E$ over $\mathbb F_{q^2}$, the curve obtained after a base change to GF(q^2)
is also $2q+2$ as expected.
We are working with the curve $E$ labelled 11a1.
The posted code, slightly rearranged
E = EllipticCurve('11a1')
Et = E.quadratic_twist(2)
Es = E .short_weierstrass_model()
Ets = Et.short_weierstrass_model()
print "E is %s" % E
print "Et is %s" % Et
print "Es is %s" % Es
print "Ets is %s" % Ets
delivers
E is Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field
Et is Elliptic Curve defined by y^2 = x^3 + x^2 - 41*x - 199 over Rational Field
Es is Elliptic Curve defined by y^2 = x^3 - 13392*x - 1080432 over Rational Field
Ets is Elliptic Curve defined by y^2 = x^3 - 53568*x - 8643456 over Rational Field
Let us see, as in the post, that over $\mathbb Q(\sqrt 2)$ the twists are as computed:
We have for instance:
sage: K.<a> = QuadraticField( 2 )
sage: E.base_extend( K ).is_isomorphic( Et.base_extend(K) )
True
sage: Es.base_extend( K ).is_isomorphic( Ets.base_extend(K) )
True
sage: E.is_isomorphic( Es )
True
sage: E.is_isomorphic( Et )
False
sage: Et.is_isomorphic( Ets )
True
(Here, i prefered to change base, instead of using the curve parameters explicitly, after specifying the new field, K
, for instance as in E = EllipticCurve( QQ, [ 0, -1, 1, -10, -20 ] )
with the base change E.base_extend(K)
which is EllipticCurve( K, [ 0, -1, 1, -10, -20 ] )
.
Now we are in position to count points over prime fields for the first relevant $q$ values, up to - say - $49$.
For each such $q$ let us denote by F
the field GF(q)
, and by K
the field GF(q^2)
. We compute the orders of the curves
$$ E(F),\ E_s(F),\ E^d(F), \ E_s^d(F);\qquad E(K),\ E_s(K),\ E^d(K), \ E_s^d(K);\ .$$
We are starting the computations, of course, iff $2$ is not a square in $F$.
The following code computes the relevant orders:
E = EllipticCurve('11a1')
Et = E.quadratic_twist(2)
Es = E .short_weierstrass_model()
Ets = Et.short_weierstrass_model()
print "E is %s" % E
print "Et is %s" % Et
print "Es is %s" % Es
print "Ets is %s" % Ets
print " q : E(F) Es(F) Et(F) Ets(F) : E(K) Es(K) Et(K) Ets(K) : 2q+2..."
for q in prime_powers( 344 ):
if gcd( q, 2*3*11 ) > 1:
continue
if not q.is_prime():
F.<a> = GF(q)
else :
F = GF(q)
if F(2).is_square():
continue
K.<b> = GF( q^2 )
ord_F_E = E .base_extend( F ).order()
ord_F_Es = Es .base_extend( F ).order()
ord_F_Et = Et .base_extend( F ).order()
ord_F_Ets = Ets.base_extend( F ).order()
ord_K_E = E .base_extend( K ).order()
ord_K_Es = Es .base_extend( K ).order()
ord_K_Et = Et .base_extend( K ).order()
ord_K_Ets = Ets.base_extend( K ).order()
print ( "%3s :%4s %5s %5s %6s :%6s %6s %6s %6s : %3s = %3s+%3s %s"
% ( q
, ord_F_E
, ord_F_Es
, ord_F_Et
, ord_F_Ets
, ord_K_E
, ord_K_Es
, ord_K_Et
, ord_K_Ets
, 2*q+2
, ord_F_E, ord_F_Et
, bool( 2*q+2 == ord_F_E + ord_F_Et ) ) )
This gives (hope it comes in one row each print):
q : E(F) Es(F) Et(F) Ets(F) : E(K) Es(K) Et(K) Ets(K) : 2q+2...
5 : 5 5 7 7 : 35 35 35 35 : 12 = 5+ 7 True
13 : 10 10 18 18 : 180 180 180 180 : 28 = 10+ 18 True
19 : 20 20 20 20 : 400 400 400 400 : 40 = 20+ 20 True
29 : 30 30 30 30 : 900 900 900 900 : 60 = 30+ 30 True
37 : 35 35 41 41 : 1435 1435 1435 1435 : 76 = 35+ 41 True
43 : 50 50 38 38 : 1900 1900 1900 1900 : 88 = 50+ 38 True
53 : 60 60 48 48 : 2880 2880 2880 2880 : 108 = 60+ 48 True
59 : 55 55 65 65 : 3575 3575 3575 3575 : 120 = 55+ 65 True
61 : 50 50 74 74 : 3700 3700 3700 3700 : 124 = 50+ 74 True
67 : 75 75 61 61 : 4575 4575 4575 4575 : 136 = 75+ 61 True
83 : 90 90 78 78 : 7020 7020 7020 7020 : 168 = 90+ 78 True
101 : 100 100 104 104 : 10400 10400 10400 10400 : 204 = 100+104 True
107 : 90 90 126 126 : 11340 11340 11340 11340 : 216 = 90+126 True
109 : 100 100 120 120 : 12000 12000 12000 12000 : 220 = 100+120 True
125 : 140 140 112 112 : 15680 15680 15680 15680 : 252 = 140+112 True
131 : 150 150 114 114 : 17100 17100 17100 17100 : 264 = 150+114 True
139 : 130 130 150 150 : 19500 19500 19500 19500 : 280 = 130+150 True
149 : 160 160 140 140 : 22400 22400 22400 22400 : 300 = 160+140 True
157 : 165 165 151 151 : 24915 24915 24915 24915 : 316 = 165+151 True
163 : 160 160 168 168 : 26880 26880 26880 26880 : 328 = 160+168 True
173 : 180 180 168 168 : 30240 30240 30240 30240 : 348 = 180+168 True
179 : 195 195 165 165 : 32175 32175 32175 32175 : 360 = 195+165 True
181 : 175 175 189 189 : 33075 33075 33075 33075 : 364 = 175+189 True
197 : 200 200 196 196 : 39200 39200 39200 39200 : 396 = 200+196 True
211 : 200 200 224 224 : 44800 44800 44800 44800 : 424 = 200+224 True
227 : 210 210 246 246 : 51660 51660 51660 51660 : 456 = 210+246 True
229 : 215 215 245 245 : 52675 52675 52675 52675 : 460 = 215+245 True
251 : 275 275 229 229 : 62975 62975 62975 62975 : 504 = 275+229 True
269 : 260 260 280 280 : 72800 72800 72800 72800 : 540 = 260+280 True
277 : 280 280 276 276 : 77280 77280 77280 77280 : 556 = 280+276 True
283 : 280 280 288 288 : 80640 80640 80640 80640 : 568 = 280+288 True
293 : 270 270 318 318 : 85860 85860 85860 85860 : 588 = 270+318 True
307 : 300 300 316 316 : 94800 94800 94800 94800 : 616 = 300+316 True
317 : 305 305 331 331 :100955 100955 100955 100955 : 636 = 305+331 True
331 : 325 325 339 339 :110175 110175 110175 110175 : 664 = 325+339 True