A2<t,u,v>:=AffineSpace(Rationals(),3);

 

//Surface S1 defined by Equation (2.3)

f:=-16*t^4*u*v + 96*t^2*u*v + t*u^4*v^4 - 6*t*u^4*v^2 + 8*t*u^4*v - 3*t*u^4 -

    6*t*u^2*v^4 + 36*t*u^2*v^2 - 48*t*u^2*v + 18*t*u^2 + 8*t*u*v^4 - 48*t*u*v^2

    - 64*t*u*v - 24*t*u - 3*t*v^4 + 18*t*v^2 - 24*t*v + 9*t + 48*u*v;

 

 

S1:=Scheme(A2,f);

 

//Surface S2 defined by biquadratic polynomial in u and v in proof of Theorem 2.3

f2:=(16*t^4 - t)*u^2*v^2 + (-16*t^4 - 2*t)*u^2*v + 3*t*u^2 + (-16*t^4 - 2*t)*u*v^2 +

    (16*t^4 + 64*t^3 - 4*t - 1)*u*v + (6*t - 3)*u + 3*t*v^2 + (6*t - 3)*v - 9*t

    - 9;

 

S2:=Scheme(A2,f2);

 

//Construct birational map between S1 and S2

G:=[(u-1)*(v-1)*t+1,u,v];

 

 

 

m1:=map<S1->S2|[(t-1)/((u-1)*(v-1)),u,v]>;

 

m1inv:=map<S2->S1|G>;

//View f2 as a quadratic in u and use quadratic equation to get another birational surface S3

 

f3:=(256*t^8 - 128*t^5 + 16*t^2)*v^4 + (-512*t^8 - 2048*t^7 - 128*t^5 - 32*t^4 +

    64*t^2 - 8*t)*v^3 + (256*t^8 + 2048*t^7 + 4096*t^6 + 640*t^5 - 64*t^4 -

    128*t^3 - 32*t^2 - 40*t + 1)*v^2 + (-384*t^5 + 96*t^4 - 384*t^3 - 192*t^2 -

    24*t + 6)*v + 144*t^2 + 72*t + 9-256*u^2;

 

S3:=Scheme(A2,f3);

 

//Coefficients of u

a0:=(t^4 - 1/16*t)*v^2 + (-t^4 - 1/8*t)*v + 3/16*t;

b0:=(-t^4 - 1/8*t)*v^2 + (t^4 + 4*t^3 - 1/4*t - 1/16)*v + 3/8*t - 3/16;

c0:=3/16*t*v^2 + (3/8*t - 3/16)*v - 9/16*t - 9/16;

 

H:=[t,(-b0+u)/(2*a0),v];

 

m2inv:=map<S3->S2|H>;

 

_,m2:=IsInvertible(m2inv);

 

//Use standard equations to get from y^2=quartic (and a point) to y^2=cubic

 

m3pols:= [

    2*t,

    (128*t^8*v^2 - 128*t^8*v - 512*t^7*v - 64*t^5*v^2 - 32*t^5*v + 96*t^5 + 128*t^4*u -

        8*t^4*v + 168*t^4 + 8*t^2*v^2 + 16*t^2*v - 24*t^2 - 32*t*u - 2*t*v - 6*t)/(t^2 + t

        + 1/4),

    (2048*t^12*v^3 - 3072*t^12*v^2 + 1024*t^12*v - 12288*t^11*v^2 + 8192*t^11*v + 16384*t^10*v -

        1536*t^9*v^3 + 2304*t^9*v - 768*t^9 + 2048*t^8*u*v - 1024*t^8*u + 2880*t^8*v^2 -

        2304*t^8*v + 192*t^8 - 4096*t^7*u - 4608*t^7*v - 768*t^7 + 384*t^6*v^3 + 576*t^6*v^2 -

        768*t^6*v - 192*t^6 - 1024*t^5*u*v - 256*t^5*u - 96*t^5*v - 96*t^5 - 64*t^4*u +

        132*t^4*v + 204*t^4 - 32*t^3*v^3 - 96*t^3*v^2 + 32*t^3*v + 96*t^3 + 128*t^2*u*v +

        128*t^2*u + 12*t^2*v^2 + 40*t^2*v + 12*t^2 - 16*t*u - t*v - 3*t)/(t^3 + 3/2*t^2 +

        3/4*t + 1/8)

];

 

m3invpols:=[

    1/2*t,

    (1/64*t^21 + 1/4*t^20 - 1/4608*t^19*u - 1/32*t^19 - 1/288*t^18*u - 47/64*t^18 +

        1/1327104*t^17*u^2 - 7/512*t^17*u - 41/64*t^17 + 1/82944*t^16*u^2 + 23/3072*t^16*u +

        23/32*t^16 + 1/20736*t^15*u^2 + 13/256*t^15*u - 1/576*t^15*v + 57/32*t^15 -

        11/663552*t^14*u^2 + 35/1024*t^14*u - 1/576*t^14*v + 3/32*t^14 - 329/663552*t^13*u^2 -

        275/4608*t^13*u + 7/9216*t^13*v - 51/32*t^13 - 79/82944*t^12*u^2 - 533/4608*t^12*u +

        13/9216*t^12*v - 25/32*t^12 + 1/663552*t^11*u^3 + 43/331776*t^11*u^2 - 1/1327104*t^11*v^2 +

        5/3072*t^11*v + 7/16*t^11 + 1/331776*t^10*u^3 + 733/331776*t^10*u^2 + 533/4608*t^10*u -

        1/663552*t^10*v^2 + 7/3072*t^10*v + 37/64*t^10 + 1/663552*t^9*u^3 + 3457/1327104*t^9*u^2 +

        275/4608*t^9*u - 1/1327104*t^9*v^2 + 1/1024*t^9*v + 1/16*t^9 - 1/110592*t^8*u^3 -

        73/165888*t^8*u^2 - 35/1024*t^8*u + 1/221184*t^8*v^2 - 7/3072*t^8*v - 1/8*t^8 -

        1/55296*t^7*u^3 - 547/165888*t^7*u^2 - 13/256*t^7*u + 1/110592*t^7*v^2 - 5/3072*t^7*v -

        1/32*t^7 - 1/110592*t^6*u^3 - 1327/663552*t^6*u^2 - 23/3072*t^6*u + 1/221184*t^6*v^2 +

        5/9216*t^6*v + 1/55296*t^5*u^3 + 7/10368*t^5*u^2 + 7/512*t^5*u - 1/110592*t^5*v^2 +

        1/4608*t^5*v + 1/27648*t^4*u^3 + 131/82944*t^4*u^2 + 1/288*t^4*u - 1/55296*t^4*v^2 -

        1/4608*t^4*v + 1/55296*t^3*u^3 + 143/331776*t^3*u^2 + 1/4608*t^3*u - 1/110592*t^3*v^2 -

        1/4608*t^3*v - 1/82944*t^2*u^3 - 1/2592*t^2*u^2 + 1/165888*t^2*v^2 - 1/41472*t*u^3 -

        1/10368*t*u^2 + 1/82944*t*v^2 - 1/82944*u^3 - 1/165888*u^2 + 1/165888*v^2)/(t^17 -

        1/72*t^15*u - 2*t^15 - t^14 + 1/20736*t^13*u^2 + 1/72*t^13*u + t^13 + 1/16*t^12*u +

        2*t^12 + 1/4*t^11 - 1/2592*t^10*u^2 - 1/16*t^10*u - t^10 - 1/12*t^9*u - 1/2*t^9 +

        1/864*t^7*u^2 + 1/12*t^7*u + 1/4*t^7 + 1/36*t^6*u - 1/648*t^4*u^2 - 1/36*t^4*u +

        1/1296*t*u^2),

    (1/2*t^9 - 1/288*t^7*u - 1/2*t^7 - 1/36*t^6*u + 1/2*t^6 - 1/144*t^4*u - 1/288*t^4*v -

        1/2*t^4 - 1/288*t^3*u - 1/288*t^3*v + 1/36*t*u + 1/144*t*v - 1/144*u + 1/144*v)/(t^9 -

        1/144*t^7*u - t^7 - 1/2*t^6 + 1/36*t^4*u + 1/2*t^4 - 1/36*t*u)

];

 

 

f4:=u^3+(t-1)^2*(((t)^2+8*(t)+1)*u-144*(t)^4)^2-v^2;

 

S4:=Scheme(A2,f4);

 

m3:=map<S3->S4|m3pols>;

 

m3inv:=map<S4->S3|m3invpols>;

 

 

m:=m1*m2*m3;

DP:=DefiningPolynomials(m);

 

K:=FunctionField(A2);

PP<z>:=PolynomialRing(K);

E:=EllipticCurve(z^3+(t-1)^2*(((t)^2+8*(t)+1)*z-144*(t)^4)^2);

//Sections coming from points with u=-3, v=0, and u=0, v=-3

Q1:=E![Evaluate(DP[2],[2*t+1,-3,0]), Evaluate(DP[3],[2*t+1,-3,0])];

Q2:=E![Evaluate(DP[2],[2*t+1,0,-3]), Evaluate(DP[3],[2*t+1,0,-3])];

//3-torsion point

T:=E![0,144*t^4*(t-1)];

//P1 and P2 as in Theorem 2.3

P1:=-Q1-T;

P2:=-Q2+T;

“P_1,  P_2, T as in Theorem 2.3”;

P1;P2;

T;

 

//Construct the solution of (2.3) mentioned before Theorem 2.4

minv:=m3inv*m2inv*m1inv;

DPinv:=DefiningPolynomials(minv);

P3:=T-2*P2;

“Equation for t/u before Theorem 2.4”;

Evaluate(DPinv[1],[t,P3[1],P3[2]])/Evaluate(DPinv[2],[t,P3[1],P3[2]]);

“Equation for u and v before Theorem 2.4”;

Evaluate(DPinv[2],[t,P3[1],P3[2]]);

Evaluate(DPinv[3],[t,P3[1],P3[2]]);