# basic initialization # Gets the expressions in the a[i],b[i] whose reductions # are the c[0],c[1],c[2],c[3] for the Kummer variety embedding. interface(prettyprint,prettyprint=false); read `gpolyutil.txt`; read `symmvar.txt`; delta := (x[1]-x[2])*(x[2]-x[3])*(x[3]-x[1]): a[0] := 1: a[1] := x[1]+x[2]+x[3]: a[2] := x[1]*x[2]+x[2]*x[3]+x[3]*x[1]: a[3] := x[1]*x[2]*x[3]: b[0] := (x[1]*y[2]-x[2]*y[1]-x[3]*y[2]+x[3]*y[1]-x[1]*y[3]+x[2]*y[3])/delta: b[1] := (x[3]^2*y[2]-x[3]^2*y[1]+x[2]^2*y[1]+y[3]*x[1]^2-y[2]*x[1]^2-y[3]*x[2]^2)/delta:b[2] := (-x[2]^2*x[3]*y[1]+x[2]^2*x[1]*y[3]+x[3]^2*x[2]*y[1]-y[3]*x[2]*x[1]^2+y[2]*x[3]*x[1]^2-x[3]^2*x[1]*y[2])/delta: F:=x->sum('f[i]*x^i','i'=0..8): f[8]:=0: subst := [y[1]^2=F(x[1]),y[2]^2=F(x[2]),y[3]^2=F(x[3])]: # set up a matrix of the a_i b_j b_k get_over_deltasq:=proc(p::ratpoly) numer(p)*simplify(delta^2/denom(p)) end: bibj:=[seq(seq( subs(y[1]^2=F(x[1]),y[2]^2=F(x[2]),y[3]^2=F(x[3]),expand(b[i]*b[j])), j=i..2),i=0..2)]: aibjbk:=linalg[matrix]([seq([seq(get_over_deltasq(expand(a[i]*bibj[j])),j=1..nops(bibj))],i=0..3)]): # set up a matrix of the y_1 y_2 coefficients of the above yrysaibjbk:=linalg[matrix](4,6,(i,j)->y[1]*y[2]*factor(simplify(coeff(coeff(expand(aibjbk[i,j]),y[1]),y[2])))): # set up a matrix of the "too heavy" parts of the above tooheavy := linalg[matrix](4,6,(i,j)->get_weight_greaterthan(10,yrysaibjbk[i,j],3)): # now actually solve the thing NS:=get_null_space([seq(seq(tooheavy[i,j],j=1..6),i=1..4)],[x[1],x[2],x[3],y[1],y[2],y[3]]): # a routine that can interpret our results print_results:=proc(res::vector,numa::integer,numb::integer) local a,b,bibj,aibjbk,i,j; a[0]:=1; bibj:=[seq(seq( subs(y[1]^2=F(x[1]),y[2]^2=F(x[2]),y[3]^2=F(x[3]),expand(b[i]*b[j])), j=i..numb),i=0..numb)]: aibjbk:=[seq(seq(a[i]*bibj[j],j=1..nops(bibj)),i=0..numa)]: sum('res[i]*aibjbk[i]','i'=1..nops(aibjbk)); end: # The following compute the initial parts of # what turn out to be c_0, ... ,c_3. print_results(NS[1],3,2); print_results(NS[2],3,2); print_results(NS[3],3,2); print_results(NS[4],3,2); # The above gave (in some order): init[0] := b[0]^2: init[1] := 2*b[0]*b[1]+a[1]*b[0]^2: init[2] := b[1]^2-a[2]*b[0]^2: init[3] := a[1]*b[1]^2+2*a[2]*b[0]*b[1]+a[3]*b[0]^2: # The corresponding "add-on" regular parts are then: for i from 0 to 3 do reg[i] := simplify( naive_reduce_g3(subs(subst,normal(init[i],expanded))) - subs(subst,normal(init[i],expanded))); od; unassign('a[0]'): unassign('a[1]'): unassign('a[2]'): unassign('a[3]'): unassign('b[0]'): unassign('b[1]'): unassign('b[2]'): unassign('b[3]'): for i from 0 to 3 do reg[i] := onesymvar(reg[i],[x[1],x[2],x[3]]) od;