Function Field BSD

1126 days ago by pub

F = GF(5) R.<t> = F['t'] 
       
seen = set() for f in F^3: for g in F^3: if g != 0: x = R(list(f))/R(list(g)) if x not in seen: seen.add(x) y = x * (x+t) * (x+t^2) / (t+1) if y.numerator() == 0: print((x,y)) elif y.numerator().is_square() and y.denominator().is_square(): print((x,y)) 
       
(0, 0)
(4, 4*t^2 + 2*t + 4)
(4*t, 0)
(t/(4*t + 4), (t^6 + t^5 + 4*t^4)/(4*t^4 + t^3 + 4*t^2 + t + 4))
(4*t + 4, t^2 + 4*t + 4)
(4*t/(t + 1), (4*t^6 + 4*t^5 + t^4)/(t^4 + 4*t^3 + t^2 + 4*t + 1))
(4*t^2, 0)
(t^2/(4*t + 4), t^6/(4*t^4 + t^3 + 4*t^2 + t + 4))
(t^2/(t^2 + 4*t + 4), (t^8 + 3*t^7 + t^6)/(t^6 + 2*t^5 + 2*t + 4))
(4*t^2 + 4*t, 4*t^4)
(4*t^2 + 4*t + 1, 4*t^4 + t^3 + 2*t^2 + 2*t + 1)
(4*t^2/(t + 1), 4*t^6/(t^4 + 4*t^3 + t^2 + 4*t + 1))
(4*t^2/(4*t^2 + t + 1), (4*t^8 + 2*t^7 + 4*t^6)/(4*t^6 + 3*t^5 + 3*t +
1))
(0, 0)
(4, 4*t^2 + 2*t + 4)
(4*t, 0)
(t/(4*t + 4), (t^6 + t^5 + 4*t^4)/(4*t^4 + t^3 + 4*t^2 + t + 4))
(4*t + 4, t^2 + 4*t + 4)
(4*t/(t + 1), (4*t^6 + 4*t^5 + t^4)/(t^4 + 4*t^3 + t^2 + 4*t + 1))
(4*t^2, 0)
(t^2/(4*t + 4), t^6/(4*t^4 + t^3 + 4*t^2 + t + 4))
(t^2/(t^2 + 4*t + 4), (t^8 + 3*t^7 + t^6)/(t^6 + 2*t^5 + 2*t + 4))
(4*t^2 + 4*t, 4*t^4)
(4*t^2 + 4*t + 1, 4*t^4 + t^3 + 2*t^2 + 2*t + 1)
(4*t^2/(t + 1), 4*t^6/(t^4 + 4*t^3 + t^2 + 4*t + 1))
(4*t^2/(4*t^2 + t + 1), (4*t^8 + 2*t^7 + 4*t^6)/(4*t^6 + 3*t^5 + 3*t + 1))
K = Frac(R) E = EllipticCurve(K, [0, K(t^2+t), 0, K(t^3), 0]); E 
       
Elliptic Curve defined by y^2 = x^3 + (t^2+t)*x^2 + t^3*x over Fraction
Field of Univariate Polynomial Ring in t over Finite Field of size 5
Elliptic Curve defined by y^2 = x^3 + (t^2+t)*x^2 + t^3*x over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 5
type(E) 
       
<class
'sage.schemes.elliptic_curves.ell_field.EllipticCurve_field'>
<class 'sage.schemes.elliptic_curves.ell_field.EllipticCurve_field'>
E2 = E.quadratic_twist(t+1); E2 
       
Elliptic Curve defined by y^2 = x^3 + (4*t^3+3*t^2+4*t)*x^2 +
(t^5+2*t^4+t^3)*x over Fraction Field of Univariate Polynomial Ring in t
over Finite Field of size 5
Elliptic Curve defined by y^2 = x^3 + (4*t^3+3*t^2+4*t)*x^2 + (t^5+2*t^4+t^3)*x over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 5
def my_sqrt(y2): if y2 == 0: return y2 y = 1 for p,e in y2.factor(): y *= p**(e//2) return y seen = set() assert E2.a1() == E2.a3() == 0 for f in F^3: for g in F^3: if g != 0: x = R(list(f))/R(list(g)) if x not in seen: seen.add(x) y2 = x^3 + E2.a2() * x^2 + E2.a4() * x + E2.a6() if y2.numerator() == 0 or y2.numerator().is_square() and y2.denominator().is_square(): y = my_sqrt(y2.numerator()) / my_sqrt(y2.denominator()) print((x,y)) 
       
(0, 0)
(t, t^3 + 3*t^2)
(t + 1, t^3 + t^2 + 4*t + 4)
(t^2, t^3)
(t^2 + t, 0)
(t^2 + 2*t + 1, t^3 + 4*t^2 + 2)
(0, 0)
(t, t^3 + 3*t^2)
(t + 1, t^3 + t^2 + 4*t + 4)
(t^2, t^3)
(t^2 + t, 0)
(t^2 + 2*t + 1, t^3 + 4*t^2 + 2)
P = E2((t, t^3 + 3*t^2)); P 
       
(t : t^3 + 3*t^2 : 1)
(t : t^3 + 3*t^2 : 1)
Q = E2((t^2, t^3)); Q 
       
(t^2 : t^3 : 1)
(t^2 : t^3 : 1)
nP = set([k*P for k in [-20..20]]) 
       
nQ = set([k*Q for k in [-20..20]]) 
       
nP.intersection(nQ) 
       
set([(0 : 1 : 0)])
set([(0 : 1 : 0)])
R = E2((t+1, t^3 + t^2 + 4*t + 4)); R 
       
(t + 1 : t^3 + t^2 + 4*t + 4 : 1)
(t + 1 : t^3 + t^2 + 4*t + 4 : 1)
nR = set([k*R for k in [-20..20]]) 
       
len(nR.intersection(nQ)) 
       
21
21
E2 
       
Elliptic Curve defined by y^2 = x^3 + (4*t^3+3*t^2+4*t)*x^2 +
(t^5+2*t^4+t^3)*x over Fraction Field of Univariate Polynomial Ring in t
over Finite Field of size 5
Elliptic Curve defined by y^2 = x^3 + (4*t^3+3*t^2+4*t)*x^2 + (t^5+2*t^4+t^3)*x over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 5
Ered = EllipticCurve(GF(5), [0, 4*2^3 + 3*2^2 + 4*2, 0, 2^5 + 2*16 + 8, 0]); Ered 
       
Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2*x over Finite Field of
size 5
Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2*x over Finite Field of size 5
Ered.order() 
       
8
8
Ered.points() 
       
[(0 : 0 : 1), (0 : 1 : 0), (1 : 0 : 1), (2 : 0 : 1), (3 : 1 : 1), (3 : 4
: 1), (4 : 2 : 1), (4 : 3 : 1)]
[(0 : 0 : 1), (0 : 1 : 0), (1 : 0 : 1), (2 : 0 : 1), (3 : 1 : 1), (3 : 4 : 1), (4 : 2 : 1), (4 : 3 : 1)]
Ered.gens() 
       
((3 : 1 : 1), (0 : 0 : 1))
((3 : 1 : 1), (0 : 0 : 1))
P, Q 
       
((t : t^3 + 3*t^2 : 1), (t^2 : t^3 : 1))
((t : t^3 + 3*t^2 : 1), (t^2 : t^3 : 1))
Pred = Ered([2, 8+12, 1]); Pred 
       
(2 : 0 : 1)
(2 : 0 : 1)
Qred = Ered([4, 8]); Qred 
       
(4 : 3 : 1)
(4 : 3 : 1)
Ered.abelian_group() 
       
(Multiplicative Abelian Group isomorphic to C4 x C2, ((3 : 1 : 1), (0 :
0 : 1)))
(Multiplicative Abelian Group isomorphic to C4 x C2, ((3 : 1 : 1), (0 : 0 : 1)))
[k*Ered.gen(0) for k in range(4)] 
       
[(0 : 1 : 0), (3 : 1 : 1), (1 : 0 : 1), (3 : 4 : 1)]
[(0 : 1 : 0), (3 : 1 : 1), (1 : 0 : 1), (3 : 4 : 1)]
for k in range(4): for j in range(2): if k*Ered.gens()[0] + j*Ered.gens()[1] == Pred: print "P", k,j if k*Ered.gens()[0] + j*Ered.gens()[1] == Qred: print "Q", k,j 
       
P 2 1
Q 3 1
P 2 1
Q 3 1