> f:=4*y^4-4*y^3*x-4*y^2*x^2+3*y*x^3+4*x^4+4*y^3-y^2*x-y*x^2-2*x^3+6*y^2-11*y*x-x^2-9*y+9*x+3; > genus1(f,x,y,x0,y0); 3 2593323 2503753389 2 [x0 - ------- x0 + ---------- + y0 , 256 2048 3 2 2 2 3 3/16 (287 x - 696 y x - 841 x - 288 y x - 144 y x - 1007 x + 384 y 2 / 2 3 + 1320 y + 672 y + 313) / (x + x - x - 1), / 2 2 2 2 2 - 27/8 (- 1829 x + 1465 y + 1144 y + 457 y x - 1409 x + 272 y x - 392 x y 3 3 4 3 3 2 + 117 x + 608 y + 71 x - 9 y x + 416 y x - 633 y x - 278) / 3 4 / (2 x + x - 2 x - 1), / 4 3 2 65536 x0 + 11255808 x0 + 15441408 x0 - 210099680064 x0 - 14902863697575 - -------------------------------------------------------------------------- %1 2 (- 2025009 + 12672 x0 + 256 x0 ) y0 + 2304 -----------------------------------, %1 4 3 2 65536 x0 + 26812416 x0 - 47305728 x0 - 345691510560 x0 - 19802990704077 1/2 -------------------------------------------------------------------------- %1 2 (- 60648147 - 195744 x0 + 3328 x0 ) y0 + 192 -------------------------------------- %1 ] %1 := 3 4 2 - 3194880 x0 + 39602267712 x0 + 65536 x0 + 10723646432457 - 1591681536 x0 # # These examples are chosen in such a way that no algebraic numbers are needed, # but still the output becomes quite large. If algebraic numbers are used then # the size of the output can become even worse. # > f:=-x^2*y^2+x*y^3+y^4+x^3-4*x^2*y+4*x*y^2-y^3-x^2+3*x*y-4*y^2+x-y+1; > v:=genus1(f,x,y,x0,y0); 3 241 1225 2 v := [x0 - --- x0 - ---- + y0 , 48 864 2 2 2 3 3 13 x + 11 - 12 x - 36 y x + 36 y + 12 y - 24 y x - 12 y + 12 x - 1/12 -------------------------------------------------------------------, 2 - 1 + x 2 3 2 3 2 2 2 3 - 1/2 (3 - 3 y - x + 7 y x + y + 4 y x + 2 y x - 10 y x - 2 x y - 2 y x 2 3 / 2 + y - 5 x + 5 x ) / (- 1 + x ), / 2 3 - 8316 x0 - 4163 + 2160 x0 + 1728 x0 y0 - 1/12 -------------------------------------- + 288 ----, %1 %1 2 144 x0 - 72 x0 - 391 (12 x0 + 1) y0 - 3/2 --------------------- + 12 --------------] %1 %1 2 %1 := - 551 + 312 x0 + 144 x0 Now test if the result is right: f0:=v[1]; x0_image:=v[2]; y0_image:=v[3]; x_image:=v[4]; y_image:=v[5]; zero:=subs({x=x_image,y=y_image} ,f): # This should be zero in Q(x0)[y0]/(f), test this as follows: evala(Normal(subs(y0=RootOf(f0,y0), zero))); 0 # OK. zero:=subs({x0=x0_image,y0=y0_image} ,f0): # This should be zero in Q(x)[y]/(f) evala(Normal(subs(y=RootOf(f,y), zero))); 0 # OK. # # Here is an example of a curve where genus1 does use algebraic extensions. # As you see the output is large, even though the input is very small. # > f:=y^4+y*x+y*x^2-x^2; 4 2 2 y + y x + y x - x > genus1(f,x,y,x0,y0); 3 35 3 35 2 2 [x0 + (2/3 %1 - 1/3) x0 + ---- %1 - --- %1 + y0 , 54 108 3 2 2 2 3 2 3 3 2 3 - 1/3 (3 x %1 + 10 %1 x + 3 x + x %1 + x %1 + 3 %1 x + 6 x + 3 x 3 2 2 2 2 2 3 3 + 3 y + 6 %1 y x - 9 %1 y x - 9 %1 y x - 18 y %1 x + 6 y x %1 3 2 3 3 / 2 + 6 y x %1 + 3 y x + 12 x y + 6 %1 y ) / (x (x - 2 x + 1)), / 3 2 2 2 2 2 1/2 (2 y + 4 y x - 68 %1 y x + 12 %1 y x + 48 %1 y x + 36 y %1 x + 2 x 2 3 2 2 3 2 2 2 2 2 2 + 16 %1 x + 4 y x %1 + 16 %1 y x + 36 y %1 x + 24 y x + 6 x 3 4 2 2 3 3 2 4 3 3 2 + 6 x + 2 x - 16 y x + 4 y x + 2 y x + x %1 + 24 y x %1 2 3 3 2 2 3 2 3 3 + 16 x y %1 + 4 y %1 - 16 x y + x %1 + 2 x %1 - 2 %1 y 2 2 3 2 3 3 3 2 3 3 3 2 - 18 %1 x - 2 y x %1 + 3 %1 x + 12 %1 y x + 4 y x - 18 x %1 2 3 4 2 3 3 3 3 + 3 x %1 + 2 x %1 - 28 y x %1 - 14 y x %1 - 14 y x %1 + 16 x %1) / 3 2 / (x (x - 3 x + 3 x - 1)), / 2 2 3 2 3 2 2 1/2 (810 x0 %1 - 486 %1 x0 + 98 - 1248 %1 + 2015 %1 + 108 x0 2 3 2 3 3 4 - 540 %1 x0 - 1080 x0 %1 - 162 x0 - 1128 %1 x0 + 162 x0 - 2484 %1 x0 2 3 3 / 2 - 878 %1 + 294 x0 %1 + 972 %1 x0 + 1242 x0) / (611 %1 - 161 - 725 %1 / 3 3 3 4 2 2 3 2 + 321 %1 - 162 %1 x0 + 81 x0 + 405 x0 %1 + 135 x0 + 81 x0 + 54 x0 3 2 3 2 3 2 2 + 108 x0 %1 + 84 %1 x0 - 69 x0 %1 - 270 %1 x0 - 243 %1 x0 - 270 %1 x0 ) + 9/2 2 3 2 2 3 3 (26 %1 - 12 %1 - 9 %1 - 10 + 18 x0 - 24 x0 %1 + 18 %1 x0) (2 + 4 %1 ) y0 / 2 3 3 3 4 2 2 / (611 %1 - 161 - 725 %1 + 321 %1 - 162 %1 x0 + 81 x0 + 405 x0 %1 / 3 2 3 2 3 2 + 135 x0 + 81 x0 + 54 x0 + 108 x0 %1 + 84 %1 x0 - 69 x0 %1 - 270 %1 x0 3 2 2 - 243 %1 x0 - 270 %1 x0 ), 2 3 2 2 3 (26 %1 - 12 %1 - 9 %1 - 10 + 18 x0 - 24 x0 %1 + 18 %1 x0) %1 1/2 ----------------------------------------------------------------- 2 3 2 3 2 1 + 6 x0 %1 - 18 %1 x0 + 9 x0 - 18 %1 - 8 %1 + 21 %1 (2 - 3 %1) y0 + 9 --------------------------------------------------------- ] 2 3 2 3 2 1 + 6 x0 %1 - 18 %1 x0 + 9 x0 - 18 %1 - 8 %1 + 21 %1 4 %1 := RootOf(_Z + 2 _Z - 1)