next | previous | forward | backward | up | top | index | toc | Macaulay2 web site
NumericalGodeaux :: computeParametrizationOfHypLocus

computeParametrizationOfHypLocus -- print commands which compute the parametrization

Synopsis

Description

The hyperelliptic locus Vhyp in Q ⊂ℙ11 is is birational to a product of a Hirzebruch surface F with 3 copies of 1. This function prints the commands which compute the parametrization following the recipy outlined in Section 2.1 of [F.-O. Schreyer and I. Stenger, Marked Godeaux surfaces with special bicanonical fibers. https://arxiv.org/pdf/2201.12065.pdf].

i1 : Jhyp = computeParametrizationOfHypLocus(QQ);

      Sa =ring Jhyp
      kk=coefficientRing Sa
      Lom=adjointPresentation Jhyp;
      betti Lom
      P19= ring Lom
      betti Lom
      J1=ann coker Lom;
      dim J1, degree J1, betti J1
      -- J1 contains components which are supported on coordinate hyperplanes in P19.
      -- We remove these now.
      betti(J1s=J1:P19_0)
      degree J1s
      scan(20,i->(J1s=J1s:ideal P19_i))
      degree J1s, betti J1s
      -* the residual part is irrelevant:
      betti(Jrest=J1:J1s)
      dim Jrest, degree Jrest, betti Jrest
      elapsedTime cJrest=decompose Jrest;
      tally apply(cJrest,c->(codim c, degree c, dim c, betti c))
      -- => none of these components lie in the image of V(Jhyp) --> P19
      *-
      betti (fJ1s=res(ideal (gens J1s)_{0..36},DegreeLimit=>1))
      vertex=trim ideal fJ1s.dd_5
      varsP11= reverse (entries gens vertex)_0
      P11=kk[varsP11]
      scroll=trim sub(ann coker transpose fJ1s.dd_5,P11)
      fscroll=res scroll
      fscroll.dd_5
      -- We compute the 2x6 matrix of the scroll using a scrollar syzygy
      koszulComplex=res trim ideal (fscroll.dd_5_{0})
      dfscroll=dual fscroll[-5]**P11^{-6}
      extended=extend(koszulComplex,dfscroll,matrix{{1,0,0,0,0}});
      m2x6=map(P11^2,P11^{6:-1},transpose (koszulComplex.dd_6|extended_5))
      assert(minors(2,m2x6)==scroll)
      -- We compute the elimnation ideal J2
      elimVars=(entries mingens ideal(vars P19%vertex))_0
      J2=sub(eliminate(J1s,elimVars),P11)
      betti res J2
      -- We compute a change of coordinates which identifies the scroll with P5xP1
      -- in its Segre embedding
      jacobian flatten m2x6
      aut=vars P11 * inverse jacobian flatten m2x6
      J2normal=sub(sub(J2,P11),aut)
      m2x6normal=sub(m2x6,aut)
      -- We introduce the Cox ring of P5xP1
      w=symbol w
      P5xP1=kk[c_0..c_5,w_0,w_1,Degrees=>{6:{1,0},2:{0,1}}]
      cs=basis({1,1},P5xP1)
      bs=flatten m2x6normal
      subCox=apply(12,i->bs_(0,i)=>cs_(0,i))
      phiCox=map(P5xP1,P11,subCox)
      -- We saturate the image of J2 in the Cox ring
      V4=gens (ideal mingens phiCox J2normal:ideal basis({0,1},P5xP1))
      ideal V4
      use ring V4
      m1=matrix{{c_0,c_2},{-c_4*w_1,c_5*(w_0-w_1)}}
      assert(det m1==V4_(0,0))
      m2=matrix{{c_1,c_2},{-c_4*w_1,c_3*w_0}}
      assert(det m2== V4_(0,1))
      -- We discovered two relative rank 4 quadrics
      P5xP1xP1xP1=kk[c_0..c_5,w_0,w_1,y_0..z_1,Degrees=>{6:{1,0,0,0},2:{0,1,0,0},2:{0,0,1,0},2:{0,0,0,1}}]
      J2sc=ideal (sub(m1,P5xP1xP1xP1)*transpose basis({0,0,0,1},P5xP1xP1xP1))+
           ideal (sub(m2,P5xP1xP1xP1)*transpose basis({0,0,1,0},P5xP1xP1xP1))
      sJ2sc=syz(m12=diff(basis({1,0,0,0},P5xP1xP1xP1),transpose gens J2sc))
      isHomogeneous sJ2sc
      degrees source sJ2sc
      autinv=vars P11 *jacobian flatten m2x6
      sub(aut,autinv)
      P1bundleOver3xP1=kk[v_0,v_1,w_0,w_1,y_0..z_1,Degrees=>{{1,2,0,0},{1,0,0,0},2:{0,1,0,0},2:{0,0,1,0},2:{0,0,0,1}}]
      paraV4=map(P1bundleOver3xP1^1,,transpose (sub(sJ2sc,P1bundleOver3xP1)*matrix{{v_0},{v_1}}))
      isHomogeneous paraV4
      betti paraV4
      paraV4'=flatten (paraV4**transpose matrix{{w_0,w_1}})*inverse sub(jacobian flatten m2x6,kk)
      -- paraV4' gives a parametrization of V(J2)
      sub(J2,paraV4')
      degrees map(P1bundleOver3xP1^1,,paraV4')
      u=symbol u
      Pu=kk[toList(u_0..u_8)|gens P1bundleOver3xP1,Degrees=>{{1,0,0,0,0},8:{1,1,3,1,1},{0,1,2,0,0},{0,1,0,0,0},2:{0,0,1,0,0},2:{0,0,0,1,0},2:{0,0,0,0,1}}]
      uparaV4=map(Pu^1,,u_0*sub(paraV4',Pu))
      isHomogeneous uparaV4, degrees source uparaV4
      apply(8,i->(reverse elimVars)_i=>Pu_(i+1))
      -- to use the elimVars in reversed order gives slightly better equations in the final parametrization
      psi=map(Pu,P19,apply(8,i->(reverse elimVars)_i=>Pu_(i+1))|apply(12,i->sub(P11_i,P19)=> uparaV4_(0,i)))
      betti(J3=psi J1s)
      -- J3 defines in P8-bundle over V4 the fibers of V(J1s)-->V4
      isHomogeneous J3
      -- we saturate with respect to u_0 to get some equations which are linear in the u's
      betti(J3u=saturate(J3,ideal u_0))
      isHomogeneous J3u
      L1=select(rank source gens J3u, i->first (degrees source (gens J3u)_{i})_0==1)
      tally degrees source (gens J3u)_L1
      isHomogeneous (gens J3u)_L1
      -- we solve this linear system of equations for u's
      s0=diff((vars Pu)_{0..8},transpose (gens J3u)_L1)
      isHomogeneous s0
      s1=syz s0
      betti s0, betti s1
      degrees source s1
      P4bundle=kk[toList(t_0..t_4)|gens P1bundleOver3xP1,Degrees=>-degrees source s1|apply(degrees source vars P1bundleOver3xP1,c->prepend(0,c))]
      subToP4bundle=(vars P4bundle)_{0..4}*transpose sub(s1,P4bundle)
      rho=map(P4bundle,Pu,apply(9,i->Pu_i=>subToP4bundle_(0,i))|apply(numgens P1bundleOver3xP1,i->Pu_(i+9)=>P4bundle_(i+5)))
      isHomogeneous rho
      J4=(rho J3u);
      isHomogeneous J4
      -- cJ4=decompose J4
      -- J4 defines the rational normal curve fibration in the P4-bundle generically.
      -- We have to remove some primary components of J4. 
      betti(J4t=saturate(J4,ideal (w_0-w_1)))
      betti(J4t=saturate(J4t,ideal (w_0)))
      betti(J4t=saturate(J4t,ideal (w_1)))
      fJ4t=res J4t
      -- the resolution of a relative rational normal curve fibration over the P1bundleOver3xP1
      apply(4,i->tally degrees fJ4t_i)
      -- Macaulay discovers a relative scrollar syzygy. We compute the corresponding 4x2 matrix:
      row0=mingens ideal fJ4t.dd_3_{0}
      frow=res image row0
      dualfJ = dual fJ4t[-3]
      frow0=(chainComplex(   prepend(row0,apply(3,i->frow.dd_(i+1)))))**P4bundle^(-degrees target (dualfJ.dd_1)^{0})
      extended=extend(frow0,dualfJ,map(frow0_0,dualfJ_0,matrix{{1_P4bundle,0,0}}))
      betti(mat4x2=extended_3|frow0.dd_4) -- the matrix whose minorsdefine the syzygy scheme
      assert(minors(2,mat4x2)==J4t)
      isHomogeneous mat4x2
      -- We compute the relative adjoint tensor of mat6x4
      P1xP4bundle=kk[x_0,x_1]**P4bundle
      adj=diff (sub(transpose (vars P4bundle)_{0..4},P1xP4bundle), matrix{{x_1,x_0}}*sub(transpose mat4x2,P1xP4bundle))
      m5x4=map(source (vars P1xP4bundle)_{2..6},,adj)
      tally degrees source m5x4 ,tally degrees target m5x4
      betti(sadj=syz transpose m5x4) 
      P1bundleOver4xP1=kk[x_0,x_1]**P1bundleOver3xP1
      toP1xP4bundle=sub(sadj,P1bundleOver4xP1)
      alpha=map(P1bundleOver4xP1,P1xP4bundle,
            apply(5,i->P1xP4bundle_(i+2)=>toP1xP4bundle_(i,0))|
            apply(8,i->P1xP4bundle_(7+i)=>P1bundleOver4xP1_(2+i))|
            apply(2,i->P1xP4bundle_(i)=>P1bundleOver4xP1_i)
      )   
      alpha
      rho
      psi
      sub(rho psi vars P19,P1xP4bundle)
      paraJ1s=map(P1bundleOver4xP1^1,,alpha sub(rho psi vars P19,P1xP4bundle))
      isHomogeneous paraJ1s
      -- paraJs give the parametrization of V(J1s) in P^19
      sub(J1s,paraJ1s)
      betti (paraJPrelim=transpose syz transpose map(P1bundleOver4xP1^12,,sub(Lom,paraJ1s)))
      -- paraJPrelim is a parmatrization of the hyperelliptic loci V(Jhyp)
      sub(Jhyp,paraJPrelim)
      netList apply(12,i->factor paraJPrelim_(0,i))
      vars P1bundleOver4xP1
      -- sort variables and simplify factors
      finalCox=kk[(gens P1bundleOver4xP1)_{2..5,0,1,6..9},Degrees=>apply((gens P1bundleOver4xP1)_{2..5,0,1,6..9},m->degree m)]
      vars finalCox
      paraJPrelim1=sub(paraJPrelim,finalCox)
      paraJ=sub(paraJPrelim1,{w_0=>w_0+w_1})
      netList apply(12,i->factor paraJ_(0,i))
      paraHyp=map(finalCox,Sa,paraJ)
      paraHyp1=precomputedHyperellipticPoint(Sa)
      matrix paraHyp== sub(matrix paraHyp1,vars finalCox)
      

o1 : Ideal of QQ[a     , a     , a     , a     , a     , a     , a     , a     , a     , a     , a     , a     ]
                  3,2,3   3,1,3   3,0,3   2,2,3   2,1,2   2,0,2   1,1,3   1,1,2   1,0,1   0,0,3   0,0,2   0,0,1

Ways to use computeParametrizationOfHypLocus :