| #### D.13.6.1 tropicalLifting Procedure from library `tropical.lib` (see tropical_lib). Usage: tropicalLifting(i,w,ord[,opt]); i ideal, w intvec, ord int, opt string Assume: - i is an ideal in Q[t,x_1,...,x_n], w=(w_0,w_1,...,w_n) and (w_1/w_0,...,w_n/w_0) is in the tropical variety of i, and ord is the order up to which a point in V(i) over Q{{t}} lying over (w_1/w_0,...,w_n/w_0) shall be computed; w_0 may NOT be ZERO - the basering should not have any parameters on its own and it should have a global monomial ordering, e.g. ring r=0,(t,x(1..n)),dp; - the first variable of the basering will be treated as the parameter t in the Puiseux series field - the optional parameter opt should be one or more strings among the following: 'isZeroDimensional' : the dimension i is zero (not to be checked); 'isPrime' : the ideal is prime over Q(t)[x_1,...,x_n] (not to be checked); 'isInTrop' : (w_1/w_0,...,w_n/w_0) is in the tropical variety (not to be checked); 'oldGfan' : uses gfan version 0.2.1 or less 'findAll' : find all solutions of a zero-dimensional ideal over (w_1/w_0,...,w_n/w_0) 'noAbs' : do NOT use absolute primary decomposition 'puiseux' : n=1 and i is generated by one equation 'noResubst' : avoids the computation of the resubstitution Return: IF THE OPTION 'findAll' WAS NOT SET THEN: list, containing one lifting of the given point (w_1/w_0,...,w_n/w_0) in the tropical variety of i to a point in V(i) over Puiseux series field up to the first ord terms; more precisely: IF THE OPTION 'noAbs' WAS NOT SET, THEN: l[1] = ring Q[a]/m[[t]] l[2] = int l[3] = intvec l[4] = list IF THE OPTION 'noAbs' WAS SET, THEN: l[1] = ring Q[X(1),...,X(k)]/m[[t]] l[2] = int l[3] = intvec l[4] = list l[5] = string IF THE OPTION 'findAll' WAS SET, THEN: list, containing ALL liftings of the given point ((w_1/w_0,...,w_n/w_0) in the tropical variety of i to a point in V(i) over Puiseux series field up to the first ord terms, if the ideal is zero-dimensional over Q{{t}}; more precisely, each entry of the list is a list l as computed if 'findAll' was NOT set WE NOW DESCRIBE THE LIST ENTRIES IF 'findAll' WAS NOT SET: - the ring l[1] contains an ideal LIFT, which contains a point in V(i) lying over w up to the first ord terms; - and if the integer l[2] is N then t has to be replaced by t^1/N in the lift, or alternatively replace t by t^N in the defining ideal - if the k+1st entry of l[3] is non-zero, then the kth component of LIFT has to be multiplied t^(-l[3][k]/l[3][1]) AFTER substituting t by t^1/N - unless the option 'noResubst' was set, the kth entry of list l[4] is a string which represents the kth generator of the ideal i where the coordinates have been replaced by the result of the lift; the t-order of the kth entry should in principle be larger than the t-degree of LIFT - if the option 'noAbs' was set, then the string in l[5] defines a maximal ideal in the field Q[X(1),...,X(k)], where X(1),...,X(k) are the parameters of the ring in l[1]; the basefield of the ring in l[1] should be considered modulo this ideal Remark: - it is best to use the procedure displayTropicalLifting to display the result - the option 'findAll' cannot be used if 'noAbs' is set - if the parameter 'findAll' is set AND the ideal i is zero-dimensional in Q{{t}}[x_1,...,x_n] then ALL points in V(i) lying over w are computed up to order ord; if the ideal is not-zero dimenisonal, then only the points in the ideal after cutting down to dimension zero will be computed - the procedure requires that the program GFAN is installed on your computer; if you have GFAN version less than 0.3.0 then you must use the optional parameter 'oldGfan' - the procedure requires the Singular procedure absPrimdecGTZ to be present in the package primdec.lib, unless the option 'noAbs' is set; but even if absPrimdecGTZ is present it might be necessary to set the option 'noAbs' in order to avoid the costly absolute primary decomposition; the side effect is that the field extension which is computed throughout the recursion might need more than one parameter to be described - since Q is infinite, the procedure finishes with probability one - you can call the procedure with Z/pZ as base field instead of Q, but there are some problems you should be aware of: + the Puiseux series field over the algebraic closure of Z/pZ is NOT algebraicall closed, and thus there may not exist a point in V(i) over the Puiseux series field with the desired valuation; so there is no chance that the procedure produced a sensible output - e.g. if i=tx^p-tx-1 + if the dimension of i over Z/pZ(t) is not zero the process of reduction to zero might not work if the characteristic is small and you are unlucky + the option 'noAbs' has to be used since absolute primary decomposition in Singular only works in characteristic zero - the basefield should either be Q or Z/pZ for some prime p; field extensions will be computed if necessary; if you need parameters or field extensions from the beginning they should rather be simulated as variables possibly adding their relations to the ideal; the weights for the additional variables should be zero Example:
    LIB "tropical.lib";
    int oldprintlevel=printlevel;
    printlevel=1;
    ////////////////////////////////////////////////////////
    // 1st EXAMPLE:
    ////////////////////////////////////////////////////////
    ring r=0,(t,x),dp;
    ideal i=(1+t2)*x2+t5x+t2;
    intvec w=1,-1;
    list LIST=tropicalLifting(i,w,4);
    ==> // ** name conflict var(1) and var(3): `x(1)`, rename to `@x(1)`in >>    \
         ring EXTENSIONRING = ring(RL);<<
    ==> in tropical.lib::findzerosAndBasictransform:6334
    ==> LP algorithm being used: "cddgmp".
    ==> Groebner basis Engine being used: "gfan".
    ==> LP algorithm being used: "cddgmp".
    ==> Groebner basis Engine being used: "gfan".
    ==> LP algorithm being used: "cddgmp".
    ==> Groebner basis Engine being used: "gfan".
    ==> 0
    ==> 0
    ==> 0
    ==> 0
    ==> The procedure has created a list of lists. The jth entry of this list
    ==> contains a ring, an integer and an intvec.
    ==> In this ring lives an ideal representing the wanted lifting,
    ==> if the integer is N then in the parametrisation t has to be replaced by t\
       ^1/N,
    ==> and if the ith component of the intvec is w[i] then the ith component in \
       LIFT
    ==> should be multiplied by t^-w[i]/N in order to get the parametrisation.
    ==>
    ==> Suppose your list has the name L, then you can access the 1st ring via:
    ==>
    ==> def LIFTRing=L[1]; setring LIFTRing; LIFT;
    ==>
    def LIFTRing=LIST[1];
    setring LIFTRing;
    // LIFT contains the first 4 terms of a point in the variety of i
    // over the Puiseux series field C{{t}} whose order is -w[1]/w[0]=1
    LIFT;
    ==> LIFT[1]=(a)*t+(-a)/2*t3+(3a-4)/8*t5+(-5a+8)/16*t7
    // Since the computations were done over Q a field extension was necessary,
    // and the parameter "a" satisfies the equation given by minpoly
    minpoly;
    ==> 0
    ////////////////////////////////////////////////////////
    // 2nd EXAMPLE
    ////////////////////////////////////////////////////////
    setring r;
    LIST=tropicalLifting(x12-t11,intvec(12,-11),2,"isPrime","isInTrop");
    ==> 0
    ==> The procedure has created a list of lists. The jth entry of this list
    ==> contains a ring, an integer and an intvec.
    ==> In this ring lives an ideal representing the wanted lifting,
    ==> if the integer is N then in the parametrisation t has to be replaced by t\
       ^1/N,
    ==> and if the ith component of the intvec is w[i] then the ith component in \
       LIFT
    ==> should be multiplied by t^-w[i]/N in order to get the parametrisation.
    ==>
    ==> Suppose your list has the name L, then you can access the 1st ring via:
    ==>
    ==> def LIFTRing=L[1]; setring LIFTRing; LIFT;
    ==>
    def LIFTRing2=LIST[1];
    setring LIFTRing2;
    // This time, LIFT contains the lifting of the point -w[1]/w[0]=11/12
    // only after we replace in LIFT the variable t by t^1/N with N=LIST[3]
    LIFT;
    ==> LIFT[1]=t11
    LIST[3];
    ==> 12,0
    ///////////////////////////////////////////////////////
    // 3rd EXAMPLE
    ////////////////////////////////////////////////////////
    ring R=0,(t,x,y,z),dp;
    ideal i=-y2t4+x2,yt3+xz+y;
    w=1,-2,0,2;
    LIST=tropicalLifting(i,w,3);
    ==> LP algorithm being used: "cddgmp".
    ==> Groebner basis Engine being used: "gfan".
    ==> 0
    ==> 0
    ==> The procedure has created a list of lists. The jth entry of this list
    ==> contains a ring, an integer and an intvec.
    ==> In this ring lives an ideal representing the wanted lifting,
    ==> if the integer is N then in the parametrisation t has to be replaced by t\
       ^1/N,
    ==> and if the ith component of the intvec is w[i] then the ith component in \
       LIFT
    ==> should be multiplied by t^-w[i]/N in order to get the parametrisation.
    ==>
    ==> Suppose your list has the name L, then you can access the 1st ring via:
    ==>
    ==> def LIFTRing=L[1]; setring LIFTRing; LIFT;
    ==>
    // This time, LIFT contains the lifting of the point v=(-2,0,2)
    // only after we multiply LIFT[3] by t^k with k=-LIST[4][3];
    // NOTE: since the last component of v is positive, the lifting
    //       must start with a negative power of t, which in Singular
    //       is not allowed for a variable.
    def LIFTRing3=LIST[1];
    setring LIFTRing3;
    LIFT;
    ==> LIFT[1]=t2
    ==> LIFT[2]=1
    ==> LIFT[3]=-1-t3
    LIST[4];
    ==> [1]:
    ==>    0
    ==> [2]:
    ==>    0
    // An easier way to display this is via displayTropicalLifting.
    setring R;
    displayTropicalLifting(LIST,"subst");
    ==> The lifting of the point in the tropical variety lives in the ring
    ==> Q[[t]]
    ==>
    ==> The lifting has the form:
    ==> x=(1)*t^2
    ==> y=(1)
    ==> z=(-1)*1/t^2 + (-1)*t
    ==>
    ==> Substituting the solution into the ideal gives:
    ==> i[1]=0
    ==> i[2]=0
    printlevel=oldprintlevel;

User manual for Singular version 4.4.0, 2024, generated by texi2html.