Changeset 3754ca in git
- Timestamp:
- Apr 15, 2009, 1:28:08 PM (14 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- a6606e6cba9689ecbcc4e27ac00fb8c1deabd128
- Parents:
- 40c648539a84cb2dc36e46b6b6c84deeb21e393b
- Location:
- Singular/LIB
- Files:
-
- 51 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/ainvar.lib
r40c648 r3754ca 1 // $Id: ainvar.lib,v 1. 9 2008-10-01 15:29:23 SingularExp $1 // $Id: ainvar.lib,v 1.10 2009-04-15 11:05:22 seelisch Exp $ 2 2 ///////////////////////////////////////////////////////////////////////////// 3 version="$Id: ainvar.lib,v 1. 9 2008-10-01 15:29:23 SingularExp $";3 version="$Id: ainvar.lib,v 1.10 2009-04-15 11:05:22 seelisch Exp $"; 4 4 category="Invariant theory"; 5 5 info=" … … 190 190 { 191 191 // the ring L[2] = char(bsr),(x(1..nvars(bsr)),y(1..z)),(dp(n),dp(m)), 192 // contains poly check s.t. LT(p) is of the form check(LT(f1),...,LT(fr))192 // contains polynomial check s.t. LT(p) is of the form check(LT(f1),...,LT(fr)) 193 193 def s1 = L[2]; 194 194 map psi = s1,maxideal(1),dom; … … 230 230 231 231 //--------- test wether @(0)-h(@(1),...,@(z)) is in ker --------------- 232 // for some poly h and divide by maximal power of q=#[1]232 // for some polynomial h and divide by maximal power of q=#[1] 233 233 poly h; 234 234 z=size(kern); -
Singular/LIB/aksaka.lib
r40c648 r3754ca 1 1 //CM, last modified 10.12.06 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: aksaka.lib,v 1. 4 2009-04-06 12:39:02seelisch Exp $";3 version="$Id: aksaka.lib,v 1.5 2009-04-15 11:05:47 seelisch Exp $"; 4 4 category="Teaching"; 5 5 info=" … … 18 18 wurzel(r) square root of number r 19 19 euler(r) phi-function of euler 20 coeffmod(f,n) poly f modulo number n (coefficients mod n)21 powerpolyX(q,n,a,r) (poly a)^q modulo (poly r,number n)20 coeffmod(f,n) polynomial f modulo number n (coefficients mod n) 21 powerpolyX(q,n,a,r) (polynomial a)^q modulo (poly r,number n) 22 22 ask(n) ASK-Algorithm; deterministic Primality test 23 23 "; … … 71 71 ASSUME: poly f depends on at most var(1) of the basering 72 72 RETURN: poly f modulo number n 73 NOTE: at first the coefficients of the monomials of the poly f are73 NOTE: at first the coefficients of the monomials of the polynomial f are 74 74 determined, then their remainder modulo n is calculated, 75 after that the poly 'is put together' again75 after that the polynomial 'is put together' again 76 76 EXAMPLE:example coeffmod; shows an example 77 77 " … … 87 87 // umwandeln der Koeffizienten in numbers, 88 88 // Berechnung der Reste dieser numbers modulo n, 89 // polymit neuen Koeffizienten wieder zusammensetzen89 // Polynom mit neuen Koeffizienten wieder zusammensetzen 90 90 i++; 91 91 } -
Singular/LIB/alexpoly.lib
r40c648 r3754ca 1 version="$Id: alexpoly.lib,v 1.1 7 2008-12-12 17:22:35 SingularExp $";1 version="$Id: alexpoly.lib,v 1.18 2009-04-15 11:06:40 seelisch Exp $"; 2 2 category="Singularities"; 3 3 info=" … … 198 198 } 199 199 /////////////////////////////////////////////////////////////////////////////////////////////////// 200 // If the input was a poly or a HN-Expansion, then calculate the contact matrix and char.exponents.200 // If the input was a polynomial or a HN-Expansion, then calculate the contact matrix and char.exponents. 201 201 /////////////////////////////////////////////////////////////////////////////////////////////////// 202 202 if (defined(I@N@V)) -
Singular/LIB/algebra.lib
r40c648 r3754ca 3 3 //new proc nonZeroEntry(id), used to fix a bug in proc finitenessTest 4 4 /////////////////////////////////////////////////////////////////////////////// 5 version="$Id: algebra.lib,v 1.2 2 2009-04-14 12:00:13 SingularExp $";5 version="$Id: algebra.lib,v 1.23 2009-04-15 11:07:30 seelisch Exp $"; 6 6 category="Commutative Algebra"; 7 7 info=" … … 14 14 algebra_containment(); query of algebra containment 15 15 module_containment(); query of module containment over a subalgebra 16 inSubring(p,I); test whether poly p is in subring generated by I16 inSubring(p,I); test whether polynomial p is in subring generated by I 17 17 algDependent(I); computes algebraic relations between generators of I 18 18 alg_kernel(phi); computes the kernel of the ringmap phi … … 51 51 x = x(1),...,x(n) denote the variables of the basering 52 52 @end format 53 DISPLAY: if k=0 and printlevel >= voice+1 (default) display the poly check53 DISPLAY: if k=0 and printlevel >= voice+1 (default) display the polynomial check 54 54 NOTE: The proc inSubring uses a different algorithm which is sometimes 55 55 faster. … … 113 113 dbprint(printlevel-voice+3," 114 114 // 'algebra_containment' created a ring as 2nd element of the list. 115 // The ring contains the poly check which defines the algebraic relation.115 // The ring contains the polynomial check which defines the algebraic relation. 116 116 // To access to the ring and see check you must give the ring a name, 117 117 // e.g.: … … 211 211 dbprint(printlevel-voice+3," 212 212 // 'module_containment' created a ring as 2nd element of the list. The 213 // ring contains the poly check which defines the algebraic relation213 // ring contains the polynomial check which defines the algebraic relation 214 214 // for p. To access to the ring and see check you must give the ring 215 215 // a name, e.g.: … … 246 246 @format 247 247 a list l of size 2, l[1] integer, l[2] string 248 l[1]=1 if f p is in the subring generated by i=i[1],...,i[k],248 l[1]=1 if and only if p is in the subring generated by i=i[1],...,i[k], 249 249 and then l[2] = y(0)-h(y(1),...,y(k)) if p = h(i[1],...,i[k]) 250 l[1]=0 if f p is in not the subring generated by i,250 l[1]=0 if and only if p is in not the subring generated by i, 251 251 and then l[2] = h(y(0),y(1),...,y(k)) where p satisfies the 252 252 nonlinear relation h(p,i[1],...,i[k])=0. … … 254 254 NOTE: the proc algebra_containment tests the same using a different 255 255 algorithm, which is often faster 256 if l[1] == 0 then l[2] may contain more than one relation h(y(0),y(1),...,y(k)), 256 if l[1] == 0 then l[2] may contain more than one relation h(y(0),y(1),...,y(k)), 257 257 separated by comma 258 258 EXAMPLE: example inSubring; shows an example … … 620 620 "USAGE: is_surjective(phi); phi map to basering, or ideal defining it 621 621 RETURN: an integer, 1 if phi is surjective, 0 if not 622 NOTE: The algorithm returns 1 if f all the variables of the basering are622 NOTE: The algorithm returns 1 if and only if all the variables of the basering are 623 623 contained in the polynomial subalgebra generated by the polynomials 624 624 defining phi. Hence, it tests surjectivity in the case of a global odering. … … 995 995 RETURN: 1 if R ---> basering/J is finite and 0 else 996 996 NOTE: R may be a quotient ring (this will be ignored since a map R/I-->S/J 997 is finite if f the induced map R-->S/J is finite).997 is finite if and only if the induced map R-->S/J is finite). 998 998 SEE ALSO: finitenessTest 999 999 EXAMPLE: example mapIsFinite; shows an example -
Singular/LIB/bfun.lib
r40c648 r3754ca 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: bfun.lib,v 1. 8 2009-04-14 12:00:13 SingularExp $";2 version="$Id: bfun.lib,v 1.9 2009-04-15 11:09:27 seelisch Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 10 10 @* one is interested in the global b-function (also known as Bernstein-Sato 11 11 @* polynomial) b(s) in K[s], defined to be the non-zero monic polynomial of minimal 12 @* degree, satisfying a functional identity L * F^{s+1} = b(s) F^s, 12 @* degree, satisfying a functional identity L * F^{s+1} = b(s) F^s, 13 13 @* for some operator L in D[s] (* stands for the action of differential operator) 14 14 @* By D one denotes the n-th Weyl algebra … … 21 21 @* There is a constructive definition of a b-function of a holonomic ideal I in D 22 22 @* (that is, an ideal I in a Weyl algebra D, such that D/I is holonomic module) 23 @* with respect to the given weight vector w: For a poly p in D, its initial24 @* form w.r.t. (-w,w) is defined as the sum of all terms of p which have 23 @* with respect to the given weight vector w: For a polynomial p in D, its initial 24 @* form w.r.t. (-w,w) is defined as the sum of all terms of p which have 25 25 @* maximal weighted total degree where the weight of x_i is -w_i and the weight 26 @* of d_i is w_i. Let J be the initial ideal of I w.r.t. (-w,w), i.e. the 26 @* of d_i is w_i. Let J be the initial ideal of I w.r.t. (-w,w), i.e. the 27 27 @* K-vector space generated by all initial forms w.r.t (-w,w) of elements of I. 28 28 @* Put s = w_1 x_1 d_1 + ... + w_n x_n d_n. Then the monic generator b_w(s) of 29 @* the intersection of J with the PID K[s] is called the b-function of I w.r.t. w. 29 @* the intersection of J with the PID K[s] is called the b-function of I w.r.t. w. 30 30 @* Unlike Bernstein-Sato polynomial, general b-function with respect to 31 31 @* arbitrary weights need not have rational roots at all. However, b-function 32 32 @* of a holonomic ideal is known to be non-zero as well. 33 @* 34 @* References: [SST] Saito, Sturmfels, Takayama: Groebner Deformations of 33 @* 34 @* References: [SST] Saito, Sturmfels, Takayama: Groebner Deformations of 35 35 @* Hypergeometric Differential Equations (2000), 36 36 @* Noro: An Efficient Modular Algorithm for Computing the Global b-function, … … 44 44 bfctAnn(f[,s]); compute the BS polynomial of f via Ann f^s + f 45 45 bfctOneGB(f[,s,t]); compute the BS polynomial of f by just one GB computation 46 bfctIdeal(I,w[,s,t]); compute the b-function of ideal w rtweight47 pIntersect(f,I[,s]); intersection of ideal with subalgebra K[f] for a poly f46 bfctIdeal(I,w[,s,t]); compute the b-function of ideal w.r.t. weight 47 pIntersect(f,I[,s]); intersection of ideal with subalgebra K[f] for a polynomial f 48 48 pIntersectSyz(f,I[,p,s,t]); intersection of ideal with subalgebra K[f] with syz-solver 49 linReduce(f,I[,s]); reduce a poly by linear reductions wrtideal49 linReduce(f,I[,s]); reduce a polynomial by linear reductions w.r.t. ideal 50 50 linReduceIdeal(I,[s,t]); interreduce generators of ideal by linear reductions 51 51 linSyzSolve(I[,s]); compute a linear dependency of elements of ideal I … … 53 53 AUXILIARY PROCEDURES: 54 54 55 allPositive(v); checks whether all entries of an intvec are positive 55 allPositive(v); checks whether all entries of an intvec are positive 56 56 scalarProd(v,w); computes the standard scalar product of two intvecs 57 vec2poly(v[,i]); constructs an univariate poly with given coefficients57 vec2poly(v[,i]); constructs an univariate polynomial with given coefficients 58 58 59 59 SEE ALSO: dmod_lib, dmodapp_lib, gmssing_lib … … 358 358 for (i=1; i<=ncols(I); i++) { M[i] = gen(i); } 359 359 } 360 } 360 } 361 361 dbprint(ppl-1,"// initially sorted ideal:", I); 362 362 if (remembercoeffs <> 0) { dbprint(ppl-1,"// used permutations:", M); } … … 468 468 "USAGE: linReduce(f, I [,s,t,u]); f a poly, I an ideal, s,t,u optional ints 469 469 RETURN: poly or list, linear reductum (over field) of f by elements from I 470 PURPOSE: reduce a poly only by linear reductions (no monomial multiplications)471 NOTE: If s<>0, a list consisting of the reduced poly and the coefficient470 PURPOSE: reduce a polynomial only by linear reductions (no monomial multiplications) 471 NOTE: If s<>0, a list consisting of the reduced polynomial and the coefficient 472 472 @* vector of the used reductions is returned, otherwise (and by default) 473 @* only reduced poly is returned.473 @* only reduced polynomial is returned. 474 474 @* If t<>0 (and by default) all monomials are reduced (if possible), 475 475 @* otherwise, only leading monomials are reduced. 476 @* If u<>0 (and by default), the ideal is linearly pre-reduced, i.e. 476 @* If u<>0 (and by default), the ideal is linearly pre-reduced, i.e. 477 477 @* instead of the given ideal, the output of @code{linReduceIdeal} is used. 478 478 @* If u is set to 0 and the given ideal does not equal the output of … … 918 918 NOTE: If the intersection is zero, this procedure might not terminate. 919 919 @* If p>0 is given, this proc computes the generator of the intersection in 920 @* char p first and then only searches for a generator of the obtained 921 @* degree in the basering. Otherwise, it searches for all degrees by 920 @* char p first and then only searches for a generator of the obtained 921 @* degree in the basering. Otherwise, it searches for all degrees by 922 922 @* computing syzygies. 923 923 @* If s<>0, @code{std} is used for Groebner basis computations in char 0, 924 924 @* otherwise, and by default, @code{slimgb} is used. 925 @* If t<>0 and by default, @code{std} is used for Groebner basis 925 @* If t<>0 and by default, @code{std} is used for Groebner basis 926 926 @* computations in char >0, otherwise, @code{slimgb} is used. 927 927 DISPLAY: If printlevel=1, progress debug messages will be printed, … … 1131 1131 } 1132 1132 dbprint(ppl,"// pIntersectSyz finished"); 1133 if (solveincharp) { short = shortSave; } 1133 if (solveincharp) { short = shortSave; } 1134 1134 return(v); 1135 1135 } … … 1150 1150 proc vec2poly (list #) 1151 1151 "USAGE: vec2poly(v [,i]); v a vector or an intvec, i an optional int 1152 RETURN: poly, an univariate poly in i-th variable with coefficients given by v1153 PURPOSE: constructs an univariate poly in K[var(i)] with given coefficients,1152 RETURN: poly, an univariate polynomial in i-th variable with coefficients given by v 1153 PURPOSE: constructs an univariate polynomial in K[var(i)] with given coefficients, 1154 1154 @* such that the coefficient at var(i)^{j-1} is v[j]. 1155 1155 NOTE: The optional argument i must be positive, by default i is 1. … … 1235 1235 // the rest of this proc is nicked from bernsteinBM from dmod.lib 1236 1236 list P = factorize(p);//with constants and multiplicities 1237 ideal bs; intvec m; //the BS poly is monic, so we are not interested in constants1237 ideal bs; intvec m; //the BS polynomial is monic, so we are not interested in constants 1238 1238 for (i=2; i<= size(P[1]); i++) //we delete P[1][1] and P[2][1] 1239 1239 { … … 1272 1272 { 1273 1273 return(list(ideal(0),intvec(0))); 1274 } 1274 } 1275 1275 if (inorann == 0) // bfct using initial ideal 1276 1276 { … … 1364 1364 RETURN: list of ideal and intvec 1365 1365 PURPOSE: computes the roots of the Bernstein-Sato polynomial b(s) 1366 @* for the hypersurface defined by f. 1366 @* for the hypersurface defined by f. 1367 1367 ASSUME: The basering is commutative and of characteristic 0. 1368 1368 BACKGROUND: In this proc, the initial Malgrange ideal is computed according to 1369 1369 @* the algorithm by Masayuki Noro and then a system of linear equations is 1370 1370 @* solved by linear reductions. 1371 NOTE: In the output list, the ideal contains all the roots 1371 NOTE: In the output list, the ideal contains all the roots 1372 1372 @* and the intvec their multiplicities. 1373 1373 @* If s<>0, @code{std} is used for GB computations, 1374 @* otherwise, and by default, @code{slimgb} is used. 1374 @* otherwise, and by default, @code{slimgb} is used. 1375 1375 @* If t<>0, a matrix ordering is used for Groebner basis computations, 1376 1376 @* otherwise, and by default, a block ordering is used. … … 1435 1435 @* the algorithm by Masayuki Noro and then a system of linear equations is 1436 1436 @* solved by computing syzygies. 1437 NOTE: In the output list, the ideal contains all the roots and the intvec 1437 NOTE: In the output list, the ideal contains all the roots and the intvec 1438 1438 @* their multiplicities. 1439 1439 @* If r<>0, @code{std} is used for GB computations in characteristic 0, … … 1517 1517 "USAGE: bfctIdeal(I,w[,s,t]); I an ideal, w an intvec, s,t optional ints 1518 1518 RETURN: list of ideal and intvec 1519 PURPOSE: computes the roots of the global b-function of I w rtthe weight (-w,w).1519 PURPOSE: computes the roots of the global b-function of I w.r.t. the weight (-w,w). 1520 1520 ASSUME: The basering is the n-th Weyl algebra in characteristic 0 and for all 1521 1521 @* 1<=i<=n the identity var(i+n)*var(i)=var(i)*var(i+1)+1 holds, i.e. the 1522 @* sequence of variables is given by x(1),...,x(n),D(1),...,D(n), 1522 @* sequence of variables is given by x(1),...,x(n),D(1),...,D(n), 1523 1523 @* where D(i) is the differential operator belonging to x(i). 1524 1524 @* Further we assume that I is holonomic. … … 1533 1533 @* L[3] is 1 (for nonzero constant) or 0 (for zero b-function). 1534 1534 @* If s<>0, @code{std} is used for GB computations in characteristic 0, 1535 @* otherwise, and by default, @code{slimgb} is used. 1535 @* otherwise, and by default, @code{slimgb} is used. 1536 1536 @* If t<>0, a matrix ordering is used for GB computations, otherwise, 1537 1537 @* and by default, a block ordering is used. … … 1622 1622 @* their multiplicities. 1623 1623 @* If s<>0, @code{std} is used for the GB computation, otherwise, 1624 @* and by default, @code{slimgb} is used. 1624 @* and by default, @code{slimgb} is used. 1625 1625 @* If t<>0, a matrix ordering is used for GB computations, 1626 1626 @* otherwise, and by default, a block ordering is used. … … 1634 1634 def save = basering; 1635 1635 int n = nvars(save); 1636 if (char(save) <> 0) 1636 if (char(save) <> 0) 1637 1637 { 1638 1638 ERROR("characteristic of basering has to be 0"); … … 1671 1671 // create names for vars 1672 1672 list Lvar; 1673 Lvar[1] = safeVarName("t"); 1673 Lvar[1] = safeVarName("t"); 1674 1674 Lvar[2] = safeVarName("s"); 1675 1675 Lvar[n+3] = safeVarName("D"+Lvar[1]); … … 1684 1684 intvec @a = 1:N; @a[2] = 2; 1685 1685 intvec @a2 = @a; @a2[2] = 0; @a2[2*n+4] = 0; 1686 list Lord; 1686 list Lord; 1687 1687 Lord[1] = list("a",@a); Lord[2] = list("a",@a2); 1688 1688 if (methodord == 0) // default: block ordering … … 1782 1782 @* their multiplicities. 1783 1783 @* If r<>0, @code{std} is used for GB computations, 1784 @* otherwise, and by default, @code{slimgb} is used. 1784 @* otherwise, and by default, @code{slimgb} is used. 1785 1785 DISPLAY: If printlevel=1, progress debug messages will be printed, 1786 1786 @* if printlevel>=2, all the debug messages will be printed. -
Singular/LIB/brnoeth.lib
r40c648 r3754ca 1 version="$Id: brnoeth.lib,v 1.2 1 2009-04-07 09:30:44seelisch Exp $";1 version="$Id: brnoeth.lib,v 1.22 2009-04-15 11:10:53 seelisch Exp $"; 2 2 category="Coding theory"; 3 3 info=" … … 456 456 { 457 457 // computes : the degree of a given point 458 // remark(1) : if the input is (irreducible homogeneous) poly => the point458 // remark(1) : if the input is (irreducible homogeneous) polynomial => the point 459 459 // is at infinity 460 460 // remark(2) : it the input is (std. resp. lp. prime) ideal => the point is … … 483 483 else 484 484 { 485 ERROR("parameter must have a poly or ideal in the first component");485 ERROR("parameter must have a polynomial or ideal in the first component"); 486 486 } 487 487 } … … 1144 1144 else 1145 1145 { 1146 ERROR("a point must have a poly or ideal in the first component");1146 ERROR("a point must have a polynomial or ideal in the first component"); 1147 1147 } 1148 1148 } … … 3259 3259 static proc local_eq (poly H,SS,int m) 3260 3260 { 3261 // computes a local equation of poly H in the ring SS related to the place3261 // computes a local equation of polynomial H in the ring SS related to the place 3262 3262 // "m" 3263 3263 // list POINT/POINTS is searched depending on wether m=0 or m>0 respectively … … 3461 3461 static proc polytoRF (F) 3462 3462 { 3463 // converts a poly (or number) into a "rational function" of type "ideal"3464 // warning : it must be called inside "R" and poly shouldbe affine3463 // converts a polynomial (or number) into a "rational function" of type "ideal" 3464 // warning : it must be called inside "R" and the polynomial is expected to be affine 3465 3465 ideal RF; 3466 3466 RF[1]=homog(F,z); … … 3535 3535 { 3536 3536 // computes l*F as rational function 3537 // l should be either a number or a poly of degree zero3537 // l should be either a number or a polynomial of degree zero 3538 3538 if (typeof(F)=="ideal") 3539 3539 { -
Singular/LIB/central.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: central.lib,v 1. 9 2009-03-30 18:11:39 motsakExp $"2 version="$Id: central.lib,v 1.10 2009-04-15 11:11:04 seelisch Exp $" 3 3 category="Noncommutative" 4 4 info=" … … 1439 1439 static proc SANF( poly p, list FOUND_LEADING_MONOMIALS ) 1440 1440 " 1441 reduce p w rtfound multiples without ANY polynomial multiplications!1441 reduce p w.r.t. found multiples without ANY polynomial multiplications! 1442 1442 " 1443 1443 { … … 1666 1666 " 1667 1667 USAGE: sa_poly_reduce(p, V); p poly, V ideal 1668 RETURN: polynomial, a reduction of p w rtV1669 PURPOSE: computes a reduction of the polynomial p w rtthe subalgebra generated by elements of V1668 RETURN: polynomial, a reduction of p w.r.t. V 1669 PURPOSE: computes a reduction of the polynomial p w.r.t. the subalgebra generated by elements of V 1670 1670 NOTE: At the moment the usage of this procedure is limited to G-algebras 1671 1671 SEE ALSO: sa_reduce … … 1796 1796 { 1797 1797 DBPrint( 1, "POLY: " + string (p) + 1798 " is NOT in the centralizer of poly {" + string(f) + "}" );1798 " is NOT in the centralizer of polynomial {" + string(f) + "}" ); 1799 1799 return (0); 1800 1800 } … … 1946 1946 RETURN: integer, 1 if f is a Cartan element and 0 otherwise. 1947 1947 NOTE: f is a Cartan element of the algebra A 1948 @* if f for all g in A there exists C in K such that [f, g] = C * g1949 @* if f for all variables v_i there exist C in K such that [f, v_i] = C * v_i.1948 @* if and only if for all g in A there exists C in K such that [f, g] = C * g 1949 @* if and only if for all variables v_i there exist C in K such that [f, v_i] = C * v_i. 1950 1950 " 1951 1951 { -
Singular/LIB/classify.lib
r40c648 r3754ca 1 1 // KK,GMG last modified: 17.12.00 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version = "$Id: classify.lib,v 1.5 5 2009-01-14 16:07:03 SingularExp $";3 version = "$Id: classify.lib,v 1.56 2009-04-15 11:11:11 seelisch Exp $"; 4 4 category="Singularities"; 5 5 info=" … … 13 13 PROCEDURES: 14 14 basicinvariants(f); computes Milnor number, determinacy-bound and corank of 15 classify(f); normal form of poly f determined with Arnold's method15 classify(f); normal form of polynomial f determined with Arnold's method 16 16 corank(f); computes the corank of f (i.e. of the Hessian of f) 17 17 Hcode(v); coding of intvec v acoording to the number repetitions 18 18 init_debug([n]); print trace and debugging information depending on int n 19 19 internalfunctions();display names of internal procedures of this library 20 milnorcode(f[,e]); Hilbert poly of [e-th] Milnor algebra coded with Hcode20 milnorcode(f[,e]); Hilbert polynomial of [e-th] Milnor algebra coded with Hcode 21 21 morsesplit(f); residual part of f after applying the splitting lemma 22 22 quickclass(f) normal form of f determined by invariants (milnorcode) … … 62 62 REMARK: This version of classify is only beta. Please send bugs and 63 63 comments to: \"Kai Krueger\" <krueger@mathematik.uni-kl.de> @* 64 Be sure to have at least Singularversion 1.0.1. Updates can be64 Be sure to have at least @sc{Singular} version 1.0.1. Updates can be 65 65 found at: @* 66 66 URL=http://www.mathematik.uni-kl.de/~krueger/Singular/ -
Singular/LIB/crypto.lib
r40c648 r3754ca 1 1 //GP, last modified 28.6.06 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: crypto.lib,v 1. 8 2009-04-14 12:00:14 SingularExp $";3 version="$Id: crypto.lib,v 1.9 2009-04-15 11:11:20 seelisch Exp $"; 4 4 category="Teaching"; 5 5 info=" … … 1575 1575 "USAGE: generateG(a,b,m); 1576 1576 RETURN: m-th division polynomial 1577 NOTE: generate the so-called division polynomials, i.e., the recursively defined 1577 NOTE: generate the so-called division polynomials, i.e., the recursively defined 1578 1578 polynomials p_m=generateG(a,b,m) in Z[x, y] such that, for a point (x:y:1) on the 1579 1579 elliptic curve defined by y^2=x^3+a*x+b over Z/N the point@* 1580 1580 m*P=(x-(p_(m-1)*p_(m+1))/p_m^2 :(p_(m+2)*p_(m-1)^2-p_(m-2)*p_(m+1)^2)/4y*p_m^3 :1) 1581 and m*P=0 iff p_m(P)=01581 and m*P=0 if and only if p_m(P)=0 1582 1582 EXAMPLE:example generateG; shows an example 1583 1583 " -
Singular/LIB/curvepar.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////////////////// 2 version="$Id: curvepar.lib,v 1. 3 2007-05-24 13:37:19 SingularExp $";2 version="$Id: curvepar.lib,v 1.4 2009-04-15 11:11:20 seelisch Exp $"; 3 3 category="Singularities"; 4 4 info=" … … 37 37 Each chart C[i] is a list of size 5 38 38 C[i][1] is an integer j. It shows, which standard chart do we consider. 39 C[i][2] is an irreducible poly g in k[a]. It is a minimal polynomial for the new parameter.39 C[i][2] is an irreducible polynomial g in k[a]. It is a minimal polynomial for the new parameter. 40 40 C[i][3] is an ideal H in k[a]. 41 41 c_i=F_i(a_new) for i=1..n, … … 365 365 teta:k[x(1)..x(n),a]-->k[x(1)..x(n),a] from the 366 366 new curve to the old one. 367 Resolve[i][3] is an irreducible poly g in k[a]. It is a minimal polynomial for the new parameter a.367 Resolve[i][3] is an irreducible polynomial g in k[a]. It is a minimal polynomial for the new parameter a. 368 368 Resolve[i][4] sequence of multiplicities 369 369 Resolve[i][5] is a list of integers l. It shows, which standard charts we considered. -
Singular/LIB/dmod.lib
r40c648 r3754ca 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: dmod.lib,v 1.4 1 2009-04-14 17:11:50 SingularExp $";2 version="$Id: dmod.lib,v 1.42 2009-04-15 11:11:34 seelisch Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 7 7 @* Jorge Martin Morales, jorge@unizar.es 8 8 9 THEORY: Let K be a field of characteristic 0. Given a polynomial ring 9 THEORY: Let K be a field of characteristic 0. Given a polynomial ring 10 10 @* R = K[x_1,...,x_n] and a polynomial F in R, 11 @* one is interested in the R[1/F]-module of rank one, generated by 11 @* one is interested in the R[1/F]-module of rank one, generated by 12 12 @* the symbol F^s for a symbolic discrete variable s. 13 13 @* In fact, the module R[1/F]*F^s has a structure of a D(R)[s]-module, where D(R) … … 19 19 @* One is interested in the following data: 20 20 @* - Ann F^s = I = I(F^s) in D(R)[s], denoted by LD in the output 21 @* - global Bernstein polynomial in K[s], denoted by bs, 21 @* - global Bernstein polynomial in K[s], denoted by bs, 22 22 @* - its minimal integer root s0, the list of all roots of bs, which are known 23 23 @* to be rational, with their multiplicities, which is denoted by BS 24 @* - Ann F^s0 = I(F^s0) in D(R), denoted by LD0 in the output 24 @* - Ann F^s0 = I(F^s0) in D(R), denoted by LD0 in the output 25 25 @* (LD0 is a holonomic ideal in D(R)) 26 26 @* - Ann^(1) F^s in D(R)[s], denoted by LD1 (logarithmic derivations) … … 28 28 @* PS*F^(s+1) = bs*F^s holds in K[x_1,...,x_n,1/F]*F^s. 29 29 30 REFERENCES: 30 REFERENCES: 31 31 @* We provide the following implementations of algorithms: 32 @* (OT) the classical Ann F^s algorithm from Oaku and Takayama (Journal of 32 @* (OT) the classical Ann F^s algorithm from Oaku and Takayama (Journal of 33 33 @* Pure and Applied Math., 1999), 34 34 @* (LOT) Levandovskyy's modification of the Oaku-Takayama algorithm (ISSAC 2007) … … 36 36 @* l'ideal de Bernstein associe a des polynomes, preprint, 2002) 37 37 @* (LM08) V. Levandovskyy and J. Martin-Morales, ISSAC 2008 38 @* (C) Countinho, A Primer of Algebraic D-Modules, 39 @* (SST) Saito, Sturmfels, Takayama 'Groebner Deformations of Hypergeometric 38 @* (C) Countinho, A Primer of Algebraic D-Modules, 39 @* (SST) Saito, Sturmfels, Takayama 'Groebner Deformations of Hypergeometric 40 40 @* Differential Equations', Springer, 2000 41 41 … … 59 59 MAIN PROCEDURES: 60 60 61 annfs(F[,S,eng]); compute Ann F^s0 in D and Bernstein poly for a poly F62 annfspecial(I, F, m, n); compute Ann F^n from Ann F^s for a poly F and a number n63 Sannfs(F[,S,eng]); compute Ann F^s in D[s] for a poly F64 Sannfslog(F[,eng]); compute Ann^(1) F^s in D[s] for a poly F65 bernsteinBM(F[,eng]); compute global Bernstein poly for a polyF (algorithm of Briancon-Maisonobe)66 operatorBM(F[,eng]); compute Ann F^s, Ann F^s0, BS and PS for a poly F (algorithm of Briancon-Maisonobe)67 annfsParamBM(F[,eng]); compute the generic Ann F^s (algorithm by Briancon and Maisonobe) and exceptional parametric constellations for a poly F with parametric coefficients68 annfsBMI(F[,eng]); compute Ann F^s and Bernstein ideal for a poly F=f1*..*fP (multivariate algorithm of Briancon-Maisonobe)61 annfs(F[,S,eng]); compute Ann F^s0 in D and Bernstein polynomial for a poly F 62 annfspecial(I, F, m, n); compute Ann F^n from Ann F^s for a polynomial F and a number n 63 Sannfs(F[,S,eng]); compute Ann F^s in D[s] for a polynomial F 64 Sannfslog(F[,eng]); compute Ann^(1) F^s in D[s] for a polynomial F 65 bernsteinBM(F[,eng]); compute global Bernstein polynomial for a polynomial F (algorithm of Briancon-Maisonobe) 66 operatorBM(F[,eng]); compute Ann F^s, Ann F^s0, BS and PS for a polynomial F (algorithm of Briancon-Maisonobe) 67 annfsParamBM(F[,eng]); compute the generic Ann F^s (algorithm by Briancon and Maisonobe) and exceptional parametric constellations for a polynomial F with parametric coefficients 68 annfsBMI(F[,eng]); compute Ann F^s and Bernstein ideal for a polynomial F=f1*..*fP (multivariate algorithm of Briancon-Maisonobe) 69 69 checkRoot(F,a[,S,eng]); check if a given rational is a root of the global Bernstein polynomial of F and compute its multiplicity 70 annfsBM(F[,eng]); compute Ann F^s0 in D and Bernstein poly for a polyF (algorithm of Briancon-Maisonobe)71 annfsLOT(F[,eng]); compute Ann F^s0 in D and Bernstein poly for a polyF (Levandovskyy modification of the Oaku-Takayama algorithm)72 annfsOT(F[,eng]); compute Ann F^s0 in D and Bernstein poly for a polyF (algorithm of Oaku-Takayama)73 SannfsBM(F[,eng]); compute Ann F^s in D[s] for a poly F (algorithm of Briancon-Maisonobe)74 SannfsBFCT(F[,eng]); compute Ann F^s in D[s] for a poly F (algorithm of Briancon-Maisonobe, other output ordering)75 SannfsLOT(F[,eng]); compute Ann F^s in D[s] for a poly F (Levandovskyy modification of the Oaku-Takayama algorithm)76 SannfsOT(F[,eng]); compute Ann F^s in D[s] for a poly F (algorithm of Oaku-Takayama)77 annfs0(I,F [,eng]); compute Ann F^s0 in D and Bernstein poly from the known Ann F^s in D[s]78 annfs2(I,F [,eng]); compute Ann F^s0 in D and Bernstein poly from the known Ann F^s in D[s] by using a trick of Noro79 annfsRB(I,F [,eng]); compute Ann F^s0 in D and Bernstein poly from the known Ann F^s in D[s] by reduceB strategy of Macaulay70 annfsBM(F[,eng]); compute Ann F^s0 in D and Bernstein polynomial for a polynomial F (algorithm of Briancon-Maisonobe) 71 annfsLOT(F[,eng]); compute Ann F^s0 in D and Bernstein polynomial for a polynomial F (Levandovskyy modification of the Oaku-Takayama algorithm) 72 annfsOT(F[,eng]); compute Ann F^s0 in D and Bernstein polynomial for a polynomial F (algorithm of Oaku-Takayama) 73 SannfsBM(F[,eng]); compute Ann F^s in D[s] for a polynomial F (algorithm of Briancon-Maisonobe) 74 SannfsBFCT(F[,eng]); compute Ann F^s in D[s] for a polynomial F (algorithm of Briancon-Maisonobe, other output ordering) 75 SannfsLOT(F[,eng]); compute Ann F^s in D[s] for a polynomial F (Levandovskyy modification of the Oaku-Takayama algorithm) 76 SannfsOT(F[,eng]); compute Ann F^s in D[s] for a polynomial F (algorithm of Oaku-Takayama) 77 annfs0(I,F [,eng]); compute Ann F^s0 in D and Bernstein polynomial from the known Ann F^s in D[s] 78 annfs2(I,F [,eng]); compute Ann F^s0 in D and Bernstein polynomial from the known Ann F^s in D[s] by using a trick of Noro 79 annfsRB(I,F [,eng]); compute Ann F^s0 in D and Bernstein polynomial from the known Ann F^s in D[s] by reduceB strategy of Macaulay 80 80 checkRoot1(I,F,a[,eng]); check whether a rational is a root of the global Bernstein polynomial of F from the known Ann F^s in D[s] 81 81 checkRoot2(I,F,a[,eng]); check whether a rational is a root of the global Bernstein polynomial of F and compute its multiplicity from the known Ann F^s in D[s] … … 105 105 LIB "poly.lib"; 106 106 107 proc testdmodlib() 108 { 109 /* tests all procs for consistency */ 110 /* adding the new proc, add it here */ 111 112 "MAIN PROCEDURES:"; 113 example annfs; 114 example Sannfs; 115 example Sannfslog; 116 example bernsteinBM; 117 example operatorBM; 118 example annfspecial; 119 example annfsParamBM; 120 example annfsBMI; 121 example checkRoot; 122 example annfs0; 123 example annfs2; 124 example annfsRB; 125 example annfs2; 126 "SECONDARY D-MOD PROCEDURES:"; 127 example annfsBM; 128 example annfsLOT; 129 example annfsOT; 130 example SannfsBM; 131 example SannfsLOT; 132 example SannfsOT; 133 example SannfsBFCT; 134 example checkRoot1; 135 example checkRoot2; 136 example checkFactor; 137 } 138 139 140 107 141 // new top-level procedures 108 142 proc annfs(poly F, list #) 109 143 "USAGE: annfs(f [,S,eng]); f a poly, S a string, eng an optional int 110 144 RETURN: ring 111 PURPOSE: compute the D-module structure of basering[1/f]*f^s with the algorithm 145 PURPOSE: compute the D-module structure of basering[1/f]*f^s with the algorithm 112 146 @* given in S and with the Groebner basis engine given in ''eng'' 113 147 NOTE: activate the output ring with the @code{setring} command. … … 233 267 "USAGE: Sannfs(f [,S,eng]); f a poly, S a string, eng an optional int 234 268 RETURN: ring 235 PURPOSE: compute the D-module structure of basering[f^s] with the algorithm 269 PURPOSE: compute the D-module structure of basering[f^s] with the algorithm 236 270 @* given in S and with the Groebner basis engine given in eng 237 271 NOTE: activate the output ring with the @code{setring} command. … … 354 388 PURPOSE: compute the D-module structure of basering[1/f]*f^s 355 389 NOTE: activate the output ring with the @code{setring} command. 356 @* In the output ring D[s], the ideal LD1 is generated by the elements 390 @* In the output ring D[s], the ideal LD1 is generated by the elements 357 391 @* in Ann F^s in D[s], coming from logarithmic derivations. 358 392 @* If eng <>0, @code{std} is used for Groebner basis computations, … … 502 536 "USAGE: ALTannfsBM(f [,eng]); f a poly, eng an optional int 503 537 RETURN: ring 504 PURPOSE: compute the annihilator ideal of f^s in D[s], where D is the Weyl 538 PURPOSE: compute the annihilator ideal of f^s in D[s], where D is the Weyl 505 539 @* algebra, according to the algorithm by Briancon and Maisonobe 506 540 NOTE: activate the output ring with the @code{setring} command. In this ring, … … 694 728 "USAGE: bernsteinBM(f [,eng]); f a poly, eng an optional int 695 729 RETURN: list (of roots of the Bernstein polynomial b and their multiplicies) 696 PURPOSE: compute the global Bernstein-Sato polynomial for a hypersurface, 730 PURPOSE: compute the global Bernstein-Sato polynomial for a hypersurface, 697 731 @* defined by f, according to the algorithm by Briancon and Maisonobe 698 732 NOTE: If eng <>0, @code{std} is used for Groebner basis computations, … … 1217 1251 "USAGE: annfs2(I, F [,eng]); I an ideal, F a poly, eng an optional int 1218 1252 RETURN: ring 1219 PURPOSE: compute the annihilator ideal of f^s in the Weyl Algebra, 1253 PURPOSE: compute the annihilator ideal of f^s in the Weyl Algebra, 1220 1254 @* based on the output of Sannfs-like procedure 1221 1255 @* annfs2 uses shorter expressions in the variable s (the idea of Noro). … … 1378 1412 "USAGE: annfsRB(I, F [,eng]); I an ideal, F a poly, eng an optional int 1379 1413 RETURN: ring 1380 PURPOSE: compute the annihilator ideal of f^s in the Weyl Algebra, 1414 PURPOSE: compute the annihilator ideal of f^s in the Weyl Algebra, 1381 1415 @* based on the output of Sannfs like procedure 1382 1416 NOTE: activate the output ring with the @code{setring} command. In this ring, … … 1435 1469 attrib(JF,"isSB",1); // embedded comm ring is used 1436 1470 ideal J = NF(I,JF); 1437 dbprint(ppl,"// -1-2- finished computing the NF of I w rtTjurina ideal");1471 dbprint(ppl,"// -1-2- finished computing the NF of I w.r.t. Tjurina ideal"); 1438 1472 dbprint(ppl-1, J2); 1439 1473 // make leadcoeffs positive … … 1567 1601 "USAGE: operatorBM(f [,eng]); f a poly, eng an optional int 1568 1602 RETURN: ring 1569 PURPOSE: compute the B-operator and other relevant data for Ann F^s, 1603 PURPOSE: compute the B-operator and other relevant data for Ann F^s, 1570 1604 @* using e.g. algorithm by Briancon and Maisonobe for Ann F^s and BS. 1571 1605 NOTE: activate the output ring with the @code{setring} command. In the output ring D[s] … … 1890 1924 "USAGE: operatorModulo(f,I,b); f a poly, I an ideal, b a poly 1891 1925 RETURN: poly 1892 PURPOSE: compute the B-operator from the poly f, ideal I = Ann f^s and Bernstein-Sato1926 PURPOSE: compute the B-operator from the polynomial f, ideal I = Ann f^s and Bernstein-Sato 1893 1927 polynomial b using modulo i.e. kernel of module homomorphism 1894 1928 NOTE: The computations take place in the ring, similar to the one returned by Sannfs procedure. … … 2204 2238 "USAGE: annfsBMI(F [,eng]); F an ideal, eng an optional int 2205 2239 RETURN: ring 2206 PURPOSE: compute the D-module structure of basering[1/f]*f^s where 2240 PURPOSE: compute the D-module structure of basering[1/f]*f^s where 2207 2241 @* f = F[1]*..*F[P], according to the algorithm by Briancon and Maisonobe. 2208 2242 NOTE: activate the output ring with the @code{setring} command. In this ring, … … 2533 2567 "USAGE: annfsOT(f [,eng]); f a poly, eng an optional int 2534 2568 RETURN: ring 2535 PURPOSE: compute the D-module structure of basering[1/f]*f^s, 2569 PURPOSE: compute the D-module structure of basering[1/f]*f^s, 2536 2570 @* according to the algorithm by Oaku and Takayama 2537 2571 NOTE: activate the output ring with the @code{setring} command. In this ring, … … 2915 2949 "USAGE: SannfsOT(f [,eng]); f a poly, eng an optional int 2916 2950 RETURN: ring 2917 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to the 2951 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to the 2918 2952 @* 1st step of the algorithm by Oaku and Takayama in the ring D[s] 2919 2953 NOTE: activate the output ring with the @code{setring} command. 2920 @* In the output ring D[s], the ideal LD (which is NOT a Groebner basis) 2954 @* In the output ring D[s], the ideal LD (which is NOT a Groebner basis) 2921 2955 @* is the needed D-module structure. 2922 2956 @* If eng <>0, @code{std} is used for Groebner basis computations, … … 3199 3233 "USAGE: SannfsBM(f [,eng]); f a poly, eng an optional int 3200 3234 RETURN: ring 3201 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to the 3235 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to the 3202 3236 @* 1st step of the algorithm by Briancon and Maisonobe in the ring D[s]. 3203 3237 NOTE: activate the output ring with the @code{setring} command. 3204 @* In the output ring D[s], the ideal LD (which is NOT a Groebner basis) is 3238 @* In the output ring D[s], the ideal LD (which is NOT a Groebner basis) is 3205 3239 @* the needed D-module structure. 3206 3240 @* If eng <>0, @code{std} is used for Groebner basis computations, … … 3408 3442 PURPOSE: compute Ann f^s and Groebner basis of Ann f^s+f in D[s] 3409 3443 NOTE: activate the output ring with the @code{setring} command. 3410 @* This procedure, unlike SannfsBM, returns a ring with the degrevlex 3444 @* This procedure, unlike SannfsBM, returns a ring with the degrevlex 3411 3445 @* ordering in all variables. 3412 3446 @* In the ring D[s], the ideal LD is the ideal needed (which is returned as a Groebner basis). … … 3614 3648 PURPOSE: compute Ann f^s and Groebner basis of Ann f^s+f in D[s] 3615 3649 NOTE: activate the output ring with the @code{setring} command. 3616 @* This procedure, unlike SannfsBM, returns a ring with the degrevlex 3650 @* This procedure, unlike SannfsBM, returns a ring with the degrevlex 3617 3651 @* ordering in all variables. 3618 3652 @* In the ring D[s], the ideal LD (which IS a Groebner basis) is the needed ideal. … … 3623 3657 " 3624 3658 { 3625 // DEBUG INFO: ordering on the output ring = dp, 3659 // DEBUG INFO: ordering on the output ring = dp, 3626 3660 // use std(K,F); for reusing the std property of K 3627 3661 … … 3835 3869 "USAGE: SannfsLOT(f [,eng]); f a poly, eng an optional int 3836 3870 RETURN: ring 3837 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to the 3871 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to the 3838 3872 @* Levandovskyy's modification of the algorithm by Oaku and Takayama in D[s] 3839 3873 NOTE: activate the output ring with the @code{setring} command. 3840 @* In the ring D[s], the ideal LD (which is NOT a Groebner basis) is 3874 @* In the ring D[s], the ideal LD (which is NOT a Groebner basis) is 3841 3875 @* the needed D-module structure. 3842 3876 @* If eng <>0, @code{std} is used for Groebner basis computations, … … 4292 4326 "USAGE: annfsLOT(F [,eng]); F a poly, eng an optional int 4293 4327 RETURN: ring 4294 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to 4328 PURPOSE: compute the D-module structure of basering[1/f]*f^s, according to 4295 4329 @* the Levandovskyy's modification of the algorithm by Oaku and Takayama 4296 4330 NOTE: activate the output ring with the @code{setring} command. In this ring, … … 4337 4371 "USAGE: annfs0(I, F [,eng]); I an ideal, F a poly, eng an optional int 4338 4372 RETURN: ring 4339 PURPOSE: compute the annihilator ideal of f^s in the Weyl Algebra, based 4373 PURPOSE: compute the annihilator ideal of f^s in the Weyl Algebra, based 4340 4374 @* on the output of Sannfs-like procedure 4341 4375 NOTE: activate the output ring with the @code{setring} command. In this ring, … … 4515 4549 // // returns a ring with the ideal LD in it 4516 4550 // def save = basering; 4517 // // compute the Bernstein poly from gmssing.lib4551 // // compute the Bernstein polynomial from gmssing.lib 4518 4552 // list RL = ringlist(basering); 4519 4553 // // in the descr. of the ordering, replace "p" by "s" … … 4826 4860 "USAGE: annfspecial(I,F,mir,n); I an ideal, F a poly, int mir, number n 4827 4861 RETURN: ideal 4828 PURPOSE: compute the annihilator ideal of F^n in the Weyl Algebra 4862 PURPOSE: compute the annihilator ideal of F^n in the Weyl Algebra 4829 4863 @* for the given rational number n 4830 4864 ASSUME: The basering is D[s] and contains 's' explicitly as a variable, … … 4832 4866 @* the integer 'mir' is the minimal integer root of the BS polynomial of F, 4833 4867 @* and the number n is rational. 4834 NOTE: We compute the real annihilator for any rational value of n (both 4835 @* generic and exceptional). The implementation goes along the lines of 4836 @* the Algorithm 5.3.15 from Saito-Sturmfels-Takayama. 4868 NOTE: We compute the real annihilator for any rational value of n (both 4869 @* generic and exceptional). The implementation goes along the lines of 4870 @* the Algorithm 5.3.15 from Saito-Sturmfels-Takayama. 4837 4871 DISPLAY: If printlevel=1, progress debug messages will be printed, 4838 4872 @* if printlevel>=2, all the debug messages will be printed. … … 4992 5026 // together with a global ordering 4993 5027 ring r2 = 0,x,dp; 4994 poly f3 = 9*(x+2/3)*(x+1)*(x+4/3); //global b-poly of f1=x*y*(x+y)5028 poly f3 = 9*(x+2/3)*(x+1)*(x+4/3); //global b-polynomial of f1=x*y*(x+y) 4995 5029 ideal I3 = factorize(f3,1); 4996 5030 I3; … … 5158 5192 RETURN: int 5159 5193 ASSUME: Basering is a commutative ring, alpha is a rational number. 5160 PURPOSE: check whether a rational number alpha is a root of the global 5194 PURPOSE: check whether a rational number alpha is a root of the global 5161 5195 @* Bernstein-Sato polynomial of f and compute its multiplicity, 5162 5196 @* with the algorithm given by S and with the Groebner basis engine given by eng. 5163 NOTE: The annihilator of f^s in D[s] is needed and hence it is computed with the 5197 NOTE: The annihilator of f^s in D[s] is needed and hence it is computed with the 5164 5198 @* algorithm by Briancon and Maisonobe. The value of a string S can be 5165 5199 @* 'alg1' (default) - for the algorithm 1 of [LM08] … … 5408 5442 proc checkRoot2 (ideal I, poly F, number a, list #) 5409 5443 "USAGE: checkRoot2(I,f,a [,eng]); I an ideal, f a poly, alpha a number, eng an optional int 5410 ASSUME: I is the annihilator of f^s in D[s], basering is D[s], 5444 ASSUME: I is the annihilator of f^s in D[s], basering is D[s], 5411 5445 @* that is basering and I are the output os Sannfs-like procedure, 5412 5446 @* f is a polynomial in K[_x] and alpha is a rational number. 5413 RETURN: int, the multiplicity of -alpha as a root of the BS polynomial of f. 5447 RETURN: int, the multiplicity of -alpha as a root of the BS polynomial of f. 5414 5448 PURPOSE: check whether a rational number alpha is a root of the global Bernstein- 5415 5449 @* Sato polynomial of f and compute its multiplicity from the known Ann F^s in D[s] … … 5423 5457 { 5424 5458 5425 5459 5426 5460 // to check: alpha is rational (has char 0 check inside) 5427 5461 if (!isRational(a)) … … 5558 5592 ASSUME: checkFactor is called from the basering, created by Sannfs-like proc, 5559 5593 @* that is, from the Weyl algebra in x1,..,xN,d1,..,dN tensored with K[s]. 5560 @* The ideal I is the annihilator of f^s in D[s], that is the ideal, computed 5594 @* The ideal I is the annihilator of f^s in D[s], that is the ideal, computed 5561 5595 @* by Sannfs-like procedure (usually called LD there). 5562 5596 @* Moreover, f is a polynomial in K[x1,..,xN] and qs is a polynomial in K[s]. 5563 5597 RETURN: int, 1 if qs is a factor of the global Bernstein polynomial of f and 0 otherwise 5564 PURPOSE: check whether a univariate polynomial qs is a factor of the 5598 PURPOSE: check whether a univariate polynomial qs is a factor of the 5565 5599 @* Bernstein-Sato polynomial of f without explicit knowledge of the latter. 5566 5600 NOTE: If eng <>0, @code{std} is used for Groebner basis computations, … … 5609 5643 dbprint(ppl,"// -1-3- _x,_Dx are eliminated"); 5610 5644 dbprint(ppl-1, K); 5611 //q is a factor of bs if f K = < q >5645 //q is a factor of bs if and only if K = < q > 5612 5646 //K = normalize(K); 5613 5647 //q = normalize(q); … … 5659 5693 "USAGE: indAR(L,n); list L, int n 5660 5694 RETURN: list 5661 PURPOSE: computes arrangement inductively, using L and 5695 PURPOSE: computes arrangement inductively, using L and 5662 5696 @* var(n) as the next variable 5663 5697 ASSUME: L has a structure of an arrangement … … 5707 5741 5708 5742 proc isRational(number n) 5709 "USAGE: isRational(n); n number 5743 "USAGE: isRational(n); n number 5710 5744 RETURN: int 5711 5745 PURPOSE: determine whether n is a rational number, -
Singular/LIB/dmodapp.lib
r40c648 r3754ca 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: dmodapp.lib,v 1.2 8 2009-04-14 11:52:54 SingularExp $";2 version="$Id: dmodapp.lib,v 1.29 2009-04-15 11:11:34 seelisch Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 7 7 @* Daniel Andres, daniel.andres@math.rwth-aachen.de 8 8 9 GUIDE: Let K be a field of characteristic 0, R = K[x1,..xN] and 9 GUIDE: Let K be a field of characteristic 0, R = K[x1,..xN] and 10 10 @* D be the Weyl algebra in variables x1,..xN,d1,..dN. 11 11 @* In this library there are the following procedures for algebraic D-modules: 12 12 @* - localization of a holonomic module D/I with respect to a mult. closed set 13 @* of all powers of a given polynomial F from R. Our aim is to compute an 14 @* ideal L in D, such that D/L is a presentation of a localized module. Such L 15 @* always exists, since such localizations are known to be holonomic and thus 13 @* of all powers of a given polynomial F from R. Our aim is to compute an 14 @* ideal L in D, such that D/L is a presentation of a localized module. Such L 15 @* always exists, since such localizations are known to be holonomic and thus 16 16 @* cyclic modules. The procedures for the localization are DLoc,SDLoc and DLoc0. 17 17 @* 18 18 @* - annihilator in D of a given polynomial F from R as well as 19 @* of a given rational function G/F from Quot(R). These can be computed via 19 @* of a given rational function G/F from Quot(R). These can be computed via 20 20 @* procedures annPoly resp. annRat. 21 21 @* 22 @* - initial form and initial ideals in Weyl algebras with respect to a given 22 @* - initial form and initial ideals in Weyl algebras with respect to a given 23 23 @* weight vector can be computed with inForm, initialMalgrange, initialIdealW. 24 24 @* 25 @* - appelF1, appelF2 and appelF4 return ideals in parametric Weyl algebras, 25 @* - appelF1, appelF2 and appelF4 return ideals in parametric Weyl algebras, 26 26 @* which annihilate corresponding Appel hypergeometric functions. 27 27 28 REFERENCES: 29 @* (SST) Saito, Sturmfels, Takayama 'Groebner Deformations of Hypergeometric 28 REFERENCES: 29 @* (SST) Saito, Sturmfels, Takayama 'Groebner Deformations of Hypergeometric 30 30 @* Differential Equations', Springer, 2000 31 31 @* (ONW) Oaku, Takayama, Walther 'A Localization Algorithm for D-modules', 2000 … … 51 51 appelF4(); create an ideal annihilating Appel F4 function 52 52 engine(I,i); computes a Groebner basis with the algorithm given by i 53 poly2list(f); decompose a poly 53 poly2list(f); decompose a polynomial into a list of terms and exponents 54 54 fl2poly(L,s); reconstruct a monic univariate polynomial from its factorization 55 55 insertGenerator(id,p[,k]); insert an element into an ideal/module … … 68 68 LIB "gkdim.lib"; 69 69 70 // todo: complete and include into above list 71 // charVariety(I); compute the characteristic variety of the ideal I 72 // charInfo(); ??? 73 74 75 /////////////////////////////////////////////////////////////////////////////// 76 // testing for consistency of the library: 77 proc testdmodapp() 78 { 79 example initialIdealW; 80 example initialMalgrange; 81 example DLoc; 82 example DLoc0; 83 example SDLoc; 84 example inForm; 85 example isFsat; 86 example annRat; 87 example annPoly; 88 example appelF1; 89 example appelF2; 90 example appelF4; 91 example poly2list; 92 example fl2poly; 93 example insertGenerator; 94 example deleteGenerator; 95 example bFactor; 96 } 97 70 98 proc inForm (ideal I, intvec w) 71 99 "USAGE: inForm(I,w); I ideal, w intvec 72 RETURN: the initial form of I w rtthe weight vector w73 PURPOSE: computes the initial form of an ideal w rta given weight vector100 RETURN: the initial form of I w.r.t. the weight vector w 101 PURPOSE: computes the initial form of an ideal w.r.t. a given weight vector 74 102 NOTE: the size of the weight vector must be equal to the number of variables 75 103 @* of the basering. … … 251 279 "USAGE: appelF1(); 252 280 RETURN: ring (and exports an ideal into it) 253 PURPOSE: define the ideal in a parametric Weyl algebra, 281 PURPOSE: define the ideal in a parametric Weyl algebra, 254 282 @* which annihilates Appel F1 hypergeometric function 255 283 NOTE: the ideal called IAppel1 is exported to the output ring … … 282 310 "USAGE: appelF2(); 283 311 RETURN: ring (and exports an ideal into it) 284 PURPOSE: define the ideal in a parametric Weyl algebra, 312 PURPOSE: define the ideal in a parametric Weyl algebra, 285 313 @* which annihilates Appel F2 hypergeometric function 286 314 NOTE: the ideal called IAppel2 is exported to the output ring … … 312 340 "USAGE: appelF4(); 313 341 RETURN: ring (and exports an ideal into it) 314 PURPOSE: define the ideal in a parametric Weyl algebra, 342 PURPOSE: define the ideal in a parametric Weyl algebra, 315 343 @* which annihilates Appel F4 hypergeometric function 316 344 NOTE: the ideal called IAppel4 is exported to the output ring … … 416 444 NOTE: In the basering, the following objects are exported: 417 445 @* the ideal LD0 (in Groebner basis) is the presentation of the localization 418 @* the list BS contains roots with multiplicities of Bernstein poly of (D/I)_f.446 @* the list BS contains roots with multiplicities of Bernstein polynomial of (D/I)_f. 419 447 DISPLAY: If printlevel=1, progress debug messages will be printed, 420 448 @* if printlevel>=2, all the debug messages will be printed. … … 432 460 ERROR("Basering is not a Weyl algebra"); 433 461 } 434 if (defined(LD0) || defined(BS)) 462 if (defined(LD0) || defined(BS)) 435 463 { 436 464 ERROR("Reserved names LD0 and/or BS are used. Please rename the objects."); … … 472 500 "USAGE: DLoc0(I, F); I an ideal, F a poly 473 501 RETURN: ring 474 PURPOSE: compute the presentation of the localization of D/I w.r.t. f^s, 502 PURPOSE: compute the presentation of the localization of D/I w.r.t. f^s, 475 503 @* where D is a Weyl Algebra, based on the output of procedure SDLoc 476 504 ASSUME: the basering is similar to the output ring of SDLoc procedure 477 505 NOTE: activate this ring with the @code{setring} command. In this ring, 478 506 @* the ideal LD0 (in Groebner basis) is the presentation of the localization 479 @* the list BS contains roots and multiplicities of Bernstein poly of (D/I)_f.507 @* the list BS contains roots and multiplicities of Bernstein polynomial of (D/I)_f. 480 508 DISPLAY: If printlevel=1, progress debug messages will be printed, 481 509 @* if printlevel>=2, all the debug messages will be printed. … … 706 734 gkdim(I); // 3 707 735 def W = SDLoc(I,F); setring W; // creates ideal LD in W = R[s] 708 def U = DLoc0(LD, x2-y3); setring U; // compute in R 736 def U = DLoc0(LD, x2-y3); setring U; // compute in R 709 737 LD0; // Groebner basis of the presentation of localization 710 738 BS; // description of b-function for localization … … 921 949 setring R; 922 950 poly F = x2-y3; 923 ideal I = Dx*F, Dy*F; 951 ideal I = Dx*F, Dy*F; 924 952 // note, that I is not holonomic, since it's dimension is not 2 925 953 gkdim(I); // 3, while dim R = 4 … … 1277 1305 if (inp1 == "ideal") 1278 1306 { 1279 ERROR("second argument has to be a poly if first argument is an ideal");1307 ERROR("second argument has to be a polynomial if first argument is an ideal"); 1280 1308 } 1281 1309 else { vector f = #[2]; } … … 1377 1405 RETURN: poly 1378 1406 PURPOSE: reconstruct a monic polynomial in one variable from its factorization 1379 ASSUME: s is a string with the name of some variable and 1407 ASSUME: s is a string with the name of some variable and 1380 1408 @* L is supposed to consist of two entries: 1381 1409 @* L[1] of the type ideal with the roots of a polynomial … … 1436 1464 proc initialIdealW (ideal I, intvec u, intvec v, list #) 1437 1465 "USAGE: initialIdealW(I,u,v [,s,t]); I ideal, u,v intvecs, s,t optional ints 1438 RETURN: ideal, GB of initial ideal of the input ideal w rtthe weights u and v1466 RETURN: ideal, GB of initial ideal of the input ideal w.r.t. the weights u and v 1439 1467 ASSUME: The basering is the n-th Weyl algebra in characteristic 0 and for all 1440 1468 @* 1<=i<=n the identity var(i+n)*var(i)=var(i)*var(i+1)+1 holds, i.e. the 1441 @* sequence of variables is given by x(1),...,x(n),D(1),...,D(n), 1469 @* sequence of variables is given by x(1),...,x(n),D(1),...,D(n), 1442 1470 @* where D(i) is the differential operator belonging to x(i). 1443 1471 PURPOSE: computes the initial ideal with respect to given weights. … … 1495 1523 } 1496 1524 } 1497 1525 1498 1526 // 1. create homogenized Weyl algebra 1499 1527 // 1.1 create ordering … … 1565 1593 "USAGE: initialMalgrange(f,[,s,t,v]); f poly, s,t optional ints, v opt. intvec 1566 1594 RETURN: ring, the Weyl algebra induced by basering, extended by two new vars 1567 PURPOSE: computes the initial Malgrange ideal of a given poly wrtthe weight1595 PURPOSE: computes the initial Malgrange ideal of a given polynomial w.r.t. the weight 1568 1596 @* vector (-1,0...,0,1,0,...,0) such that the weight of t is -1 and the 1569 1597 @* weight of Dt is 1. … … 1825 1853 { 1826 1854 dbprint(ppl,"// found no roots"); 1827 } 1855 } 1828 1856 L = list(II,mm); 1829 1857 if (ir <> 1) … … 1834 1862 L = L + list(string(ir)); 1835 1863 } 1836 else 1864 else 1837 1865 { 1838 1866 dbprint(ppl,"// no irreducible factors found"); 1839 } 1867 } 1840 1868 setring save; 1841 1869 L = imap(@S,L); … … 1847 1875 ring r = 0,(x,y),dp; 1848 1876 bFactor((x^2-1)^2); 1849 bFactor((x^2+1)^2); 1877 bFactor((x^2+1)^2); 1850 1878 bFactor((y^2+1/2)*(y+9)*(y-7)); 1851 1879 } -
Singular/LIB/elim.lib
r40c648 r3754ca 1 // $Id: elim.lib,v 1.3 0 2009-04-14 12:00:14 SingularExp $1 // $Id: elim.lib,v 1.31 2009-04-15 11:11:34 seelisch Exp $ 2 2 // (GMG, modified 22.06.96) 3 3 // GMG, last modified 30.10.08: new procedure elimRing; … … 10 10 // and can now choose as method slimgb or std. 11 11 /////////////////////////////////////////////////////////////////////////////// 12 version="$Id: elim.lib,v 1.3 0 2009-04-14 12:00:14 SingularExp $";12 version="$Id: elim.lib,v 1.31 2009-04-15 11:11:34 seelisch Exp $"; 13 13 category="Commutative Algebra"; 14 14 info=" … … 223 223 //------------------ set resp. compute ring weights ---------------------- 224 224 int ii; 225 intvec @w=1:nvarBR; //to store weights of all variables 225 intvec @w; //to store weights of all variables 226 @w[nvarBR] = 0; 227 @w = @w + 1; //initialize @w as 1..1 226 228 string str = "a"; //default for specifying elimination ordering 227 229 if (size(#) == 0) //default values … … 248 250 @w = #[1]; //take the given weights 249 251 str = #[2]; //string for specifying elimination ordering 252 250 253 } 251 254 if ( typeof(#[1]) == "string" and typeof(#[2]) == "intvec" ) … … 277 280 { 278 281 int local = (var(ii) < 1); 279 }282 } 280 283 } 281 284 else … … 373 376 374 377 //define now the first a-block of the form a(w1,0..0) 375 intvec @v=0:nvarBR; 378 intvec @v; 379 @v[nvarBR] = 0; 376 380 @v = @v+w1; 377 381 B3[1] = list("a", @v); … … 416 420 @* If the variables in the basering have weights these weights are used 417 421 in elimRing. If a string \"withWeigts\" as (optional) argument is given 418 Singularcomputes weights for the variables to make the input as422 @sc{Singular} computes weights for the variables to make the input as 419 423 homogeneous as possible. 420 424 @* The method is different from that used by eliminate and elim1; -
Singular/LIB/equising.lib
r40c648 r3754ca 1 version="$Id: equising.lib,v 1. 19 2008-10-06 17:34:18 SingularExp $";1 version="$Id: equising.lib,v 1.20 2009-04-15 11:11:35 seelisch Exp $"; 2 2 category="Singularities"; 3 3 info=" … … 1921 1921 l[1]=ESSring is a ring extension of basering containing the ideal ES 1922 1922 (describing the ES-stratum), the ideal ES_all_triv (describing the 1923 part with trival equimultiple sections) and the poly p_F=F,1923 part with trival equimultiple sections) and the polynomial p_F=F, 1924 1924 l[2]=1 if some error has occured, l[2]=0 otherwise. 1925 1925 @end format -
Singular/LIB/findifs.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: findifs.lib,v 1. 6 2009-04-06 17:43:33 motsakExp $";2 version="$Id: findifs.lib,v 1.7 2009-04-15 11:11:35 seelisch Exp $"; 3 3 category="Applications"; 4 4 info=" … … 12 12 13 13 PROCEDURES: 14 decoef(P,n); decompose poly P into summands with respect to the number n14 decoef(P,n); decompose polynomial P into summands with respect to the number n 15 15 difpoly2tex(S,P[,Q]); present the difference scheme in the nodal form 16 16 … … 333 333 "USAGE: decoef(P,n); P a poly, n a number 334 334 RETURN: ideal 335 PURPOSE: decompose poly P into summands with respect335 PURPOSE: decompose polynomial P into summands with respect 336 336 to the presence of a number n in the coefficients 337 337 NOTE: n is usually a parameter with no power 338 338 EXAMPLE: example decoef; shows examples 339 339 "{ 340 // decomposes poly into summands341 // w rtthe presence of a number n in coeffs340 // decomposes polynomial into summands 341 // w.r.t. the presence of a number n in coeffs 342 342 // returns ideal 343 343 def br = basering; … … 718 718 poly p = S[4,1]; // by elimination of module components 719 719 list L; L[1]=A;L[2] = B; 720 ideal I = decoef(p,dt); // make splitting w rtthe appearance of dt720 ideal I = decoef(p,dt); // make splitting w.r.t. the appearance of dt 721 721 "* Create the nodal of the scheme in TeX format: "; 722 722 " ideal I = decoef(p,dt);"; -
Singular/LIB/freegb.lib
r40c648 r3754ca 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: freegb.lib,v 1.2 3 2009-04-14 12:08:36 SingularExp $";2 version="$Id: freegb.lib,v 1.24 2009-04-15 11:13:09 seelisch Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 6 6 AUTHOR: Viktor Levandovskyy, levandov@math.rwth-aachen.de 7 7 8 THEORY: See chapter 'LETTERPLACE' in the SingularManual.8 THEORY: See chapter 'LETTERPLACE' in the @sc{Singular} Manual. 9 9 10 10 PROCEDURES: … … 42 42 PURPOSE: sets attributes for a letterplace ring: 43 43 @* 'isLetterplaceRing' = true, 'uptodeg' = d, 'lV' = b, where 44 @* 'uptodeg' stands for the degree bound, 44 @* 'uptodeg' stands for the degree bound, 45 45 @* 'lV' for the number of variables in the block 0. 46 46 NOTE: Activate the resulting ring by using @code{setring} … … 54 54 // Set letterplace-specific attributes for the output ring! 55 55 attrib(R, "uptodeg", uptodeg); 56 attrib(R, "lV", lV); 57 attrib(R, "isLetterplaceRing", 1); 58 return (R); 56 attrib(R, "lV", lV); 57 attrib(R, "isLetterplaceRing", 1); 58 return (R); 59 59 } 60 60 example … … 73 73 { 74 74 // FINALLY IMPLEMENTED AS A PART OT THE CODE 75 // shifts a poly from the ring @R to s positions75 // shifts a polynomial from the ring R to s positions 76 76 // M lives in varing, the result in lpring 77 77 // to be run from varing … … 347 347 "USAGE: isVar(p); poly p 348 348 RETURN: int 349 PURPOSE: check, whether leading monomial of p is a power of a single variable 349 PURPOSE: check, whether leading monomial of p is a power of a single variable 350 350 @* from the basering. Returns the exponent or 0 if p is multivariate. 351 351 EXAMPLE: example isVar; shows examples … … 2130 2130 def R = makeLetterplaceRing(d); 2131 2131 setring R; 2132 int uptodeg = d; 2133 int lV = 2; 2132 int uptodeg = d; 2133 int lV = 2; 2134 2134 def R = setLetterplaceAttributes(r,uptodeg,2); // supply R with letterplace structure 2135 2135 setring R; … … 2326 2326 static proc strList2poly(list L) 2327 2327 { 2328 // list L comes from sent2lplace (which takes a poly on theinput)2328 // list L comes from sent2lplace (which takes a polynomial as input) 2329 2329 // each entry of L is a sublist with the coef on the last place 2330 2330 int s = size(L); int t; -
Singular/LIB/general.lib
r40c648 r3754ca 3 3 //eric, added absValue 11.04.2002 4 4 /////////////////////////////////////////////////////////////////////////////// 5 version="$Id: general.lib,v 1.6 0 2009-04-07 09:30:44seelisch Exp $";5 version="$Id: general.lib,v 1.61 2009-04-15 11:14:16 seelisch Exp $"; 6 6 category="General purpose"; 7 7 info=" … … 1038 1038 polynomials have to be put into eval(...) in order to be 1039 1039 interpreted correctly 1040 * a second Singularprocess is started by this procedure1040 * a second @sc{Singular} process is started by this procedure 1041 1041 EXAMPLE: example watchdog; shows an example 1042 1042 " -
Singular/LIB/hnoether.lib
r40c648 r3754ca 1 version="$Id: hnoether.lib,v 1.5 8 2008-09-24 07:54:59 SingularExp $";1 version="$Id: hnoether.lib,v 1.59 2009-04-15 11:14:36 seelisch Exp $"; 2 2 // (GMG, last modified 08.06.08: comments to Newton non-degenerate added) 3 3 /////////////////////////////////////////////////////////////////////////////// … … 38 38 puiseux2generators(m,n); convert Puiseux pairs to generators of semigroup 39 39 separateHNE(hne1,hne2); number of quadratic transf. needed for separation 40 squarefree(f); a squarefree divisor of the poly f41 allsquarefree(f,l); the maximal squarefree divisor of the poly f40 squarefree(f); a squarefree divisor of the polynomial f 41 allsquarefree(f,l); the maximal squarefree divisor of the polynomial f 42 42 further_hn_proc(); show further procedures useful for interactive use 43 43 … … 73 73 T1_Transform(f,d,M); returns f(x,y+d*x^M) (f: poly,d:number,M:int) 74 74 T2_Transform(f,d,M,N,ref); a composition of T1 & T 75 koeff(f,I,J); gets coefficient of indicated monomial of poly f75 koeff(f,I,J); gets coefficient of indicated monomial of polynomial f 76 76 redleit(f,S,E); restriction of monomials of f to line (S-E) 77 77 leit(f,n,m); special case of redleit (for irred. polynomials) … … 85 85 86 86 // static procedures not useful for interactive use: 87 // polytest(f); tests coefficients and exponents of poly f87 // polytest(f); tests coefficients and exponents of polynomial f 88 88 // extractHNEs(H,t); extracts output H of HN to output of hnexpansion 89 89 // HN(f,grenze); recursive subroutine for hnexpansion … … 691 691 kill zweitring; 692 692 nm = getnm(f); // N,M haben sich evtl. veraendert 693 N = nm[1]; M = nm[2]; // Berechne Schnittpunkte Newtonpoly mit Achsen693 N = nm[1]; M = nm[2]; // Berechne Schnittpunkte Newtonpolynom mit Achsen 694 694 if (defined(HNDebugOn)) {"I continue with the polynomial",f; } 695 695 } … … 716 716 f=test_sqr; 717 717 nm = getnm(f); // N,M haben sich veraendert 718 N = nm[1]; M = nm[2]; // Berechne Schnittpunkte Newtonpoly mit Achsen718 N = nm[1]; M = nm[2]; // Berechne Schnittpunkte Newtonpolynom mit Achsen 719 719 if (defined(HNDebugOn)) {"I continue with the polynomial",f; } 720 720 } … … 733 733 } 734 734 if (defined(HNDebugOn)) { 735 if (getauscht) {"x<->y were exchanged; poly is now ",f;}735 if (getauscht) {"x<->y were exchanged; polynomial is now ",f;} 736 736 else {"x , y were not exchanged";} 737 737 "M resp. N are now",M,N; … … 1299 1299 " 1300 1300 { 1301 // INPUT = poly or ring1301 // INPUT = polynomial or ring 1302 1302 if (typeof(#[1])=="poly") { 1303 1303 list L=hnexpansion(#[1]); … … 2390 2390 NOTE: The main purpose is that if the line defined by S and E is part of the 2391 2391 Newton polygon, the result is the quasihomogeneous leading form of f 2392 w rt. that line.2392 w.r.t. that line. 2393 2393 SEE ALSO: newtonpoly 2394 2394 EXAMPLE: example redleit; shows an example … … 2714 2714 If the computation of the HNE required a field extension, the first 2715 2715 entry @code{L[1]} of the list is a ring, in which a list @code{hne} 2716 of lists (the HN data, as above) and a poly @code{f} (image of2716 of lists (the HN data, as above) and a polynomial @code{f} (image of 2717 2717 @code{f} over the new field) are stored. 2718 2718 @* … … 4026 4026 } 4027 4027 else { 4028 HNEs[1]=list(hqs)+azeilen+list(fneu); // fneu ist transform. Poly oder Null4028 HNEs[1]=list(hqs)+azeilen+list(fneu); // fneu ist transform. Polynom oder Null 4029 4029 conj1[1]=conj_factor; 4030 4030 } -
Singular/LIB/inout.lib
r40c648 r3754ca 1 1 // (GMG/BM, last modified 22.06.96) 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: inout.lib,v 1.3 3 2009-04-07 09:30:44seelisch Exp $";3 version="$Id: inout.lib,v 1.34 2009-04-15 11:14:36 seelisch Exp $"; 4 4 category="General purpose"; 5 5 info=" … … 10 10 lprint(poly/...[,n]); display poly/... fitting to pagewidth [size n] 11 11 pmat(matrix[,n]); print form-matrix [first n chars of each colum] 12 rMacaulay(string); read Macaulay_1 output and return its Singularformat12 rMacaulay(string); read Macaulay_1 output and return its @sc{Singular} format 13 13 show(any); display any object in a compact format 14 14 showrecursive(id,p); display id recursively with respect to variables in p … … 672 672 RETURN: no return value 673 673 NOTE: The syntax of writelist is similar to the syntax of the 674 write command of Singularwhich does not manage lists properly.674 write command of @sc{Singular} which does not manage lists properly. 675 675 If (file,name) = (\"listfile\",\"L1\"), writelist creates (resp. 676 676 appends if listfile exists) a file with name listfile and stores 677 there the list L under the name L1. The Singularcommand678 execute(read(\"listfile\")); assigns the content of L (stored in677 there the list L under the name L1. The @sc{Singular} command 678 @code{execute(read(\"listfile\"))}; assigns the content of L (stored in 679 679 listfile) to a list L1. 680 680 @* On a UNIX system, write(\">file\",...) overwrites an existing file -
Singular/LIB/involut.lib
r40c648 r3754ca 1 version="$Id: involut.lib,v 1.1 7 2009-04-14 08:26:08 SingularExp $";1 version="$Id: involut.lib,v 1.18 2009-04-15 11:14:36 seelisch Exp $"; 2 2 category="Noncommutative"; 3 3 info=" … … 182 182 183 183 static proc In_Poly(poly mm, list l, int NVars) 184 // applies the involution to the poly mm184 // applies the involution to the polynomial mm 185 185 // entries of a list l are images of variables under invo 186 186 // more general than invo_poly; used in many rings setting … … 210 210 211 211 static proc Hom_Poly(poly mm, list l, int NVars) 212 // applies the endomorphism to the poly mm212 // applies the endomorphism to the polynomial mm 213 213 // entries of a list l are images of variables under endo 214 214 // should not be replaced by map-based stuff! used in -
Singular/LIB/kskernel.lib
r40c648 r3754ca 1 1 //////////////////////////////////////////////////////////////// 2 version="$Id: kskernel.lib,v 1. 3 2007-06-20 15:30:11 SingularExp $";2 version="$Id: kskernel.lib,v 1.4 2009-04-15 11:14:36 seelisch Exp $"; 3 3 category="General purpose"; 4 4 info=" … … 73 73 // M is a sorted matrix of triples {i,j,k(i,j)} 74 74 // returns a list of coefficients of p 75 // w rt. the base {x^i y^j,(i,j) in (M[i,j,k])}=B_u75 // w.r.t. the base {x^i y^j,(i,j) in (M[i,j,k])}=B_u 76 76 proc MonoDec(poly p, matrix M) 77 77 { … … 295 295 RETURN: nothing; but replaces elements of the matrix KSkernel 296 296 in the ring Ksring with their leading monomials 297 w rt. the local ordering (ls)297 w.r.t. the local ordering (ls) 298 298 EXAMPLE: example KSlinear; shows an example 299 299 " -
Singular/LIB/latex.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: latex.lib,v 1.3 4 2009-04-14 17:23:25 SingularExp $";2 version="$Id: latex.lib,v 1.35 2009-04-15 11:14:36 seelisch Exp $"; 3 3 category="Visualization"; 4 4 info=" … … 11 11 tex(fnm) calls LaTeX2e for LaTeX-file fnm 12 12 texdemo([n]) produces a file explaining the features of this lib 13 texfactorize(fnm,f) creates string in LaTeX-format for factors of poly f13 texfactorize(fnm,f) creates string in LaTeX-format for factors of polynomial f 14 14 texmap(fnm,m,r1,r2) creates string in LaTeX-format for map m:r1->r2 15 15 texname(fnm,s) creates string in LaTeX-format for identifier … … 590 590 \"(\" + int + \",\" + s' + \")\" --> \"_@{\"+ int +\"@}\" + \"^@{\" + s'+\"@}\" 591 591 @end example 592 Furthermore, strings which begin with a left braceare modified592 Furthermore, strings which begin with a @code{\"@{\"} are modified 593 593 by deleting the first and the last character (which is then assumed to 594 be a right brace).594 be a @code{\"@}\"}}. 595 595 596 596 if @code{fname!=\"\"}: append the transformed string s to the file … … 1341 1341 proc texpoly(string fname,def p,list #) 1342 1342 "USAGE: texpoly(fname,p); fname string, p poly 1343 RETURN: if @code{fname=\"\"}: string, the poly p in LaTeX-typesetting;@*1343 RETURN: if @code{fname=\"\"}: string, the polynomial p in LaTeX-typesetting;@* 1344 1344 otherwise: append this string to the file @code{<fname>}, and 1345 1345 return nothing. … … 1372 1372 { " -- Call texmap instead "; return();} 1373 1373 if (typeof(p) == "link" or typeof(p) == "list" or typeof(p) == "resolution") 1374 { " -- Object can 1374 { " -- Object cannot translated into tex "; return();} 1375 1375 1376 1376 if (!(defined(TeXdisplay))){ lnbreak = "\\\\[2mm]" + newline;} … … 1867 1867 "\\\\" + nl + 1868 1868 "{\\tt texfactorize(fnm,f);} & creates string in \\LaTeX-format for 1869 factors of poly f"+ "\\\\" + nl +1869 factors of polynomial f"+ "\\\\" + nl + 1870 1870 "{\\tt texmap(fnm,m,r1,r2);} & creates string in \\LaTeX-format for 1871 1871 map m:r1$\\rightarrow$r2"+ "\\\\" + nl + … … 1984 1984 // write(fname,"\\Line"); 1985 1985 1986 // -1b------ still in the same ring, a poly with rational coefs --------1986 // -1b------ still in the same ring, a polynomial with rational coefs -------- 1987 1987 write(fname, 1988 1988 " A polynomial with rational coefficients. -
Singular/LIB/linalg.lib
r40c648 r3754ca 1 1 //GMG last modified: 04/25/2000 2 2 ////////////////////////////////////////////////////////////////////////////// 3 version="$Id: linalg.lib,v 1.4 0 2009-04-07 16:18:05seelisch Exp $";3 version="$Id: linalg.lib,v 1.41 2009-04-15 11:27:06 seelisch Exp $"; 4 4 category="Linear Algebra"; 5 5 info=" … … 565 565 } 566 566 567 //var can 567 //var cannot be in A 568 568 s="Wp("; 569 569 for( i=1; i<=nvars(BR); i++ ){ -
Singular/LIB/modstd.lib
r40c648 r3754ca 1 1 //GP, last modified 23.10.06 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: modstd.lib,v 1.1 4 2007-07-20 10:02:38 SingularExp $";3 version="$Id: modstd.lib,v 1.15 2009-04-15 11:14:36 seelisch Exp $"; 4 4 category="Commutative Algebra"; 5 5 info=" … … 95 95 } 96 96 //================= delete unlucky primes ==================== 97 // unlucky if f the leading ideal is wrong97 // unlucky if and only if the leading ideal is wrong 98 98 list LL=deleteUnluckyPrimes(T,L); 99 99 T=LL[1]; … … 240 240 } 241 241 //================= delete unlucky primes ==================== 242 // unlucky if f the leading ideal is wrong242 // unlucky if and only if the leading ideal is wrong 243 243 list LL=deleteUnluckyPrimes(T,L); 244 244 T=LL[1]; -
Singular/LIB/ncalg.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: ncalg.lib,v 1.3 3 2009-04-15 08:17:58 SingularExp $";2 version="$Id: ncalg.lib,v 1.34 2009-04-15 11:28:08 seelisch Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 588 588 ASSUME: This procedure uses toric_lib and therefore inherits its input requirements: 589 589 @* possible values for input variable @code{alg} are: \"ect\",\"pt\",\"blr\", \"hs\", \"du\". 590 @* As for the term ordering, it should be a string @code{sord} in Singularformat like \"lp\",\"dp\", etc.590 @* As for the term ordering, it should be a string @code{sord} in @sc{Singular} format like \"lp\",\"dp\", etc. 591 591 @* Please consult the toric_lib for allowed orderings and more details. 592 592 SEE ALSO: toric_lib -
Singular/LIB/nctools.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: nctools.lib,v 1.5 1 2009-04-14 13:31:39 SingularExp $";2 version="$Id: nctools.lib,v 1.52 2009-04-15 11:18:07 seelisch Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 551 551 // internal documentation, for tests etc 552 552 // 1st arg: v an optional integer (if v!=0, will be verbose) 553 // if the second argument is given, produces ndc w rtpowers x^N553 // if the second argument is given, produces ndc w.r.t. powers x^N 554 554 int N = 1; 555 555 int Verbose = 0; … … 727 727 } 728 728 729 729 730 730 731 731 /////////////////////////////////////////////////////////////////////////////// … … 903 903 { 904 904 print("Warning: Since the current ordering is not global there might be problems computing twostd(Q)!"); 905 "Q:"; 905 "Q:"; 906 906 @Q; 907 907 } -
Singular/LIB/normal.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: normal.lib,v 1.5 2 2009-04-10 13:34:00 SingularExp $";2 version="$Id: normal.lib,v 1.53 2009-04-15 11:15:56 seelisch Exp $"; 3 3 category="Commutative Algebra"; 4 4 info=" … … 16 16 genus(I); computes the geometric genus of a projective curve 17 17 primeClosure(L); integral closure of R/p, p a prime ideal 18 closureFrac(L); write a poly in integral closure as element of Quot(R/p)18 closureFrac(L); write a polynomial in integral closure as element of Quot(R/p) 19 19 iMult(L); intersection multiplicity of the ideals of the list L 20 20 … … 1378 1378 ideal Ann = quotient(SM[2],SL[1]); 1379 1379 ideal qAnn = simplify(reduce(Ann,SM[1]),2); 1380 //NOTE: qAnn=0 if f first var (=SL[1]) not in SM is a nzd of R/SM1380 //NOTE: qAnn=0 if and only if first var (=SL[1]) not in SM is a nzd of R/SM 1381 1381 1382 1382 //------------- We found a non-zerodivisor of R/SM ----------------------- … … 2943 2943 proc closureFrac(list L) 2944 2944 "USAGE: closureFrac (L); L a list of size n+1 as in the result of 2945 primeClosure, L[n] contains an additional poly f2945 primeClosure, L[n] contains an additional polynomial f 2946 2946 CREATE: a list fraction of two elements of L[1], such that 2947 2947 f=fraction[1]/fraction[2] via the injections phi L[i]-->L[i+1]. … … 4122 4122 J = fetch(R, J); 4123 4123 J = interred(J); 4124 poly D = getSmallest(J); // Chooses the poly of smallest degree as4124 poly D = getSmallest(J); // Chooses the polynomial of smallest degree as 4125 4125 // non-zerodivisor. 4126 4126 if(dbg >= 1){ … … 4664 4664 // and the others as parameters. 4665 4665 4666 // The degree is taken w rtthe variables indicated in v.4666 // The degree is taken w.r.t. the variables indicated in v. 4667 4667 int i; // Counter 4668 4668 int d = 0; // The degree … … 5848 5848 THEORY: The procedure can be used to test whether the computation of the 5849 5849 normalization was correct: basering/i --> nor[1][1]/norid is the 5850 normalization of basering/i if f v=1,1,0.5850 normalization of basering/i if and only if v=1,1,0. 5851 5851 NOTE: For big examples it can be hard to fully test correctness; the 5852 5852 partial test norTest(i,nor,2) is usually fast … … 5866 5866 5867 5867 //### make a copy of nor to have a cpoy of nor[1][1] (not a reference to) 5868 // in order not to over write norid and normap.5868 // in order not to override norid and normap. 5869 5869 // delete nor[2] (if it contains the module generators, which are not used) 5870 5870 // s.t. newnor does not belong to a ring. -
Singular/LIB/poly.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: poly.lib,v 1.5 2 2009-04-07 09:30:44seelisch Exp $";2 version="$Id: poly.lib,v 1.53 2009-04-15 11:19:50 seelisch Exp $"; 3 3 category="General purpose"; 4 4 info=" … … 18 18 mindeg1(poly/...); int = [weighted] minimal degree of input 19 19 normalize(poly/...); normalize poly/... such that leading coefficient is 1 20 rad_con(p,I); check radical containment of poly p in ideal I20 rad_con(p,I); check radical containment of polynomial p in ideal I 21 21 content(f); content of polynomial/vector f 22 22 numerator(n); numerator of number n -
Singular/LIB/polymake.lib
r40c648 r3754ca 1 version="$Id: polymake.lib,v 1.1 6 2009-04-15 08:08:58 SingularExp $";1 version="$Id: polymake.lib,v 1.17 2009-04-15 11:26:29 seelisch Exp $"; 2 2 category="Tropical Geometry"; 3 3 info=" 4 LIBRARY: polymake.lib Computations with polytopes and fans, 4 LIBRARY: polymake.lib Computations with polytopes and fans, 5 5 interface to polymake and TOPCOM 6 6 AUTHOR: Thomas Markwig, email: keilen@mathematik.uni-kl.de … … 8 8 WARNING: 9 9 Most procedures will not work unless polymake or topcom is installed and 10 if so, they will only work with the operating system LINUX! 10 if so, they will only work with the operating system LINUX! 11 11 For more detailed information see the following note or consult the 12 12 help string of the procedures. 13 13 14 14 NOTE: 15 Even though this is a Singularlibrary for computing polytopes and fans16 such as the Newton polytope or the Groebner fan of a polynomial, most of 17 the hard computations are NOT done by Singularbut by the program15 Even though this is a @sc{Singular} library for computing polytopes and fans 16 such as the Newton polytope or the Groebner fan of a polynomial, most of 17 the hard computations are NOT done by @sc{Singular} but by the program 18 18 @* - polymake by Ewgenij Gawrilow, TU Berlin and Michael Joswig, TU Darmstadt 19 @* (see http://www.math.tu-berlin.de/polymake/), 19 @* (see http://www.math.tu-berlin.de/polymake/), 20 20 @* respectively (only in the procedure triangularions) by the program 21 21 @* - topcom by Joerg Rambau, Universitaet Bayreuth (see http://www.uni-bayreuth.de/ 22 22 departments/wirtschaftsmathematik/rambau/TOPCOM); 23 23 @* This library should rather be seen as an interface which allows to use a 24 (very limited) number of options which polymake respectively topcom offers 25 to compute with polytopes and fans and to make the results available in 26 Singularfor further computations;27 moreover, the user familiar with Singulardoes not have to learn the syntax28 of polymake or topcom, if the options offered here are sufficient for his 24 (very limited) number of options which polymake respectively topcom offers 25 to compute with polytopes and fans and to make the results available in 26 @sc{Singular} for further computations; 27 moreover, the user familiar with @sc{Singular} does not have to learn the syntax 28 of polymake or topcom, if the options offered here are sufficient for his 29 29 purposes. 30 @* Note, though, that the procedures concerned with planar polygons are 30 @* Note, though, that the procedures concerned with planar polygons are 31 31 independent of both, polymake and topcom. 32 32 … … 95 95 proc polymakePolytope (intmat polytope,list #) 96 96 "USAGE: polymakePolytope(polytope[,#]); polytope list, # string 97 ASSUME: each row of polytope gives the coordinates of a lattice point of a 98 polytope with their affine coordinates as given by the output of 97 ASSUME: each row of polytope gives the coordinates of a lattice point of a 98 polytope with their affine coordinates as given by the output of 99 99 secondaryPolytope 100 PURPOSE: the procedure calls polymake to compute the vertices of the polytope 100 PURPOSE: the procedure calls polymake to compute the vertices of the polytope 101 101 as well as its dimension and information on its facets 102 102 RETURN: list L with four entries 103 103 @* L[1] : an integer matrix whose rows are the coordinates of vertices 104 of the polytope 104 of the polytope 105 105 @* L[2] : the dimension of the polytope 106 106 @* L[3] : a list whose i-th entry explains to which vertices the 107 ith vertex of the Newton polytope is connected 108 -- i.e. L[3][i] is an integer vector and an entry k in 109 there means that the vertex L[1][i] is connected to the 107 ith vertex of the Newton polytope is connected 108 -- i.e. L[3][i] is an integer vector and an entry k in 109 there means that the vertex L[1][i] is connected to the 110 110 vertex L[1][k] 111 @* L[4] : an integer matrix whose rows mulitplied by 112 (1,var(1),...,var(nvar)) give a linear system of equations 111 @* L[4] : an integer matrix whose rows mulitplied by 112 (1,var(1),...,var(nvar)) give a linear system of equations 113 113 describing the affine hull of the polytope, 114 114 i.e. the smallest affine space containing the polytope 115 NOTE: - for its computations the procedure calls the program polymake by 116 Ewgenij Gawrilow, TU Berlin and Michael Joswig, TU Darmstadt; 117 it therefore is necessary that this program is installed in order 115 NOTE: - for its computations the procedure calls the program polymake by 116 Ewgenij Gawrilow, TU Berlin and Michael Joswig, TU Darmstadt; 117 it therefore is necessary that this program is installed in order 118 118 to use this procedure; 119 119 see http://www.math.tu-berlin.de/polymake/ 120 @* - note that in the vertex edge graph we have changed the polymake 121 convention which starts indexing its vertices by zero while we start 120 @* - note that in the vertex edge graph we have changed the polymake 121 convention which starts indexing its vertices by zero while we start 122 122 with one ! 123 @* - the procedure creates the file /tmp/polytope.polymake which contains 124 the polytope in polymake format; if you wish to use this for further 125 computations with polymake, you have to use the procedure 123 @* - the procedure creates the file /tmp/polytope.polymake which contains 124 the polytope in polymake format; if you wish to use this for further 125 computations with polymake, you have to use the procedure 126 126 polymakeKeepTmpFiles in before 127 127 @* - moreover, the procedure creates the file /tmp/polytope.output which 128 128 it deletes again before ending 129 129 @* - it is possible to provide an optional second argument a string 130 which then will be used instead of 'polytope' in the name of the 130 which then will be used instead of 'polytope' in the name of the 131 131 polymake output file 132 132 EXAMPLE: example polymakePolytope; shows an example" … … 200 200 } 201 201 } 202 } 202 } 203 203 newveg=newveg[1,size(newveg)-1]; 204 204 execute("list nveg="+newveg+";"); … … 235 235 "EXAMPLE:"; 236 236 echo=2; 237 // the lattice points of the unit square in the plane 237 // the lattice points of the unit square in the plane 238 238 list points=intvec(0,0),intvec(0,1),intvec(1,0),intvec(1,1); 239 239 // the secondary polytope of this lattice point configuration is computed … … 261 261 of the Newton polytope of f 262 262 @* L[2] : the dimension of the Newton polytope of f 263 @* L[3] : a list whose ith entry explains to which vertices the 264 ith vertex of the Newton polytope is connected 265 -- i.e. L[3][i] is an integer vector and an entry k in 263 @* L[3] : a list whose ith entry explains to which vertices the 264 ith vertex of the Newton polytope is connected 265 -- i.e. L[3][i] is an integer vector and an entry k in 266 266 there means that the vertex L[1][i] is 267 267 connected to the vertex L[1][k] 268 @* L[4] : an integer matrix whose rows mulitplied by 269 (1,var(1),...,var(nvar)) give a linear system of equations 268 @* L[4] : an integer matrix whose rows mulitplied by 269 (1,var(1),...,var(nvar)) give a linear system of equations 270 270 describing the affine hull of the Newton polytope, i.e. the 271 271 smallest affine space containing the Newton polytope 272 NOTE: - if we replace the first column of L[4] by zeros, i.e. if we move 273 the affine hull to the origin, then we get the equations for the 274 orthogonal comploment of the linearity space of the normal fan dual 272 NOTE: - if we replace the first column of L[4] by zeros, i.e. if we move 273 the affine hull to the origin, then we get the equations for the 274 orthogonal comploment of the linearity space of the normal fan dual 275 275 to the Newton polytope, i.e. we get the EQUATIONS that 276 276 we need as input for polymake when computing the normal fan … … 278 278 TU Berlin and Michael Joswig, so it only works if polymake is installed; 279 279 see http://www.math.tu-berlin.de/polymake/ 280 @* - the procedure creates the file /tmp/newtonPolytope.polymake which 281 contains the polytope in polymake format and which can be used for 280 @* - the procedure creates the file /tmp/newtonPolytope.polymake which 281 contains the polytope in polymake format and which can be used for 282 282 further computations with polymake 283 @* - moreover, the procedure creates the file /tmp/newtonPolytope.output 283 @* - moreover, the procedure creates the file /tmp/newtonPolytope.output 284 284 and deletes it again before ending 285 @* - it is possible to give as an optional second argument a string 286 which then will be used instead of 'newtonPolytope' in the name of 285 @* - it is possible to give as an optional second argument a string 286 which then will be used instead of 'newtonPolytope' in the name of 287 287 the polymake output file 288 288 EXAMPLE: example newtonPolytope; shows an example" 289 289 { 290 290 int i,j; 291 // compute the list of exponent vectors of the polynomial, 291 // compute the list of exponent vectors of the polynomial, 292 292 // which are the lattice points 293 293 // whose convex hull is the Newton polytope of f … … 320 320 np[2]; 321 321 // np[3] contains information how the vertices are connected to each other, 322 // e.g. the first vertex (number 0) is connected to the second, third and 322 // e.g. the first vertex (number 0) is connected to the second, third and 323 323 // fourth vertex 324 324 np[3][1]; … … 330 330 np[1]; 331 331 // its dimension is 332 np[2]; 333 // the Newton polytope is contained in the affine space given 332 np[2]; 333 // the Newton polytope is contained in the affine space given 334 334 // by the equations 335 335 np[4]*M; … … 340 340 proc newtonPolytopeLP (poly f) 341 341 "USAGE: newtonPolytopeLP(f); f poly 342 RETURN: list, the exponent vectors of the monomials occuring in f, 342 RETURN: list, the exponent vectors of the monomials occuring in f, 343 343 i.e. the lattice points of the Newton polytope of f 344 344 EXAMPLE: example normalFan; shows an example" … … 368 368 proc normalFan (intmat vertices,intmat affinehull,list graph,int er,list #) 369 369 "USAGE: normalFan (vert,aff,graph,rays,[,#]); vert,aff intmat, graph list, rays int, # string 370 ASSUME: - vert is an integer matrix whose rows are the coordinate of 371 the vertices of a convex lattice polytope; 370 ASSUME: - vert is an integer matrix whose rows are the coordinate of 371 the vertices of a convex lattice polytope; 372 372 @* - aff describes the affine hull of this polytope, i.e. 373 the smallest affine space containing it, in the following sense: 374 denote by n the number of columns of vert, then multiply aff by 375 (1,x(1),...,x(n)) and set the resulting terms to zero in order to 373 the smallest affine space containing it, in the following sense: 374 denote by n the number of columns of vert, then multiply aff by 375 (1,x(1),...,x(n)) and set the resulting terms to zero in order to 376 376 get the equations for the affine hull; 377 @* - the ith entry of graph is an integer vector describing to which 378 vertices the ith vertex is connected, i.e. a k as entry means that 377 @* - the ith entry of graph is an integer vector describing to which 378 vertices the ith vertex is connected, i.e. a k as entry means that 379 379 the vertex vert[i] is connected to vert[k]; 380 @* - the integer rays is either one (if the extreme rays should be 380 @* - the integer rays is either one (if the extreme rays should be 381 381 computed) or zero (otherwise) 382 RETURN: list, the ith entry of L[1] contains information about the cone in the 383 normal fan dual to the ith vertex of the polytope 384 @* L[1][i][1] = integer matrix representing the inequalities which 382 RETURN: list, the ith entry of L[1] contains information about the cone in the 383 normal fan dual to the ith vertex of the polytope 384 @* L[1][i][1] = integer matrix representing the inequalities which 385 385 describe the cone dual to the ith vertex 386 @* L[1][i][2] = a list which contains the inequalities represented 387 by L[i][1] as a list of strings, where we use the 386 @* L[1][i][2] = a list which contains the inequalities represented 387 by L[i][1] as a list of strings, where we use the 388 388 variables x(1),...,x(n) 389 389 @* L[1][i][3] = only present if 'er' is set to 1; in that case it is 390 an interger matrix whose rows are the extreme rays 390 an interger matrix whose rows are the extreme rays 391 391 of the cone 392 @* L[2] = is an integer matrix whose rows span the linearity space 393 of the fan, i.e. the linear space which is contained in 392 @* L[2] = is an integer matrix whose rows span the linearity space 393 of the fan, i.e. the linear space which is contained in 394 394 each cone 395 395 NOTE: - the procedure calls for its computation polymake by Ewgenij Gawrilow, 396 TU Berlin and Michael Joswig, so it only works if polymake is 396 TU Berlin and Michael Joswig, so it only works if polymake is 397 397 installed; 398 398 see http://www.math.tu-berlin.de/polymake/ 399 @* - in the optional argument # it is possible to hand over other names 399 @* - in the optional argument # it is possible to hand over other names 400 400 for the variables to be used -- be careful, the format must be correct 401 401 which is not tested, e.g. if you want the variable names to be … … 405 405 list ineq; // stores the inequalities of the cones 406 406 int i,j,k; 407 // we work over the following ring 407 // we work over the following ring 408 408 execute("ring ineqring=0,x(1.."+string(ncols(vertices))+"),lp;"); 409 409 string greatersign=">"; … … 430 430 for (i=1;i<=nrows(vertices);i++) 431 431 { 432 // first we produce for each vertex in the polytope 432 // first we produce for each vertex in the polytope 433 433 // the inequalities describing the dual cone in the normal fan 434 list pp; // contain strings representing the inequalities 434 list pp; // contain strings representing the inequalities 435 435 // describing the normal cone 436 intmat ie[size(graph[i])][ncols(vertices)]; // contains the inequalities 436 intmat ie[size(graph[i])][ncols(vertices)]; // contains the inequalities 437 437 // as rows 438 // consider all the vertices to which the ith vertex in the 438 // consider all the vertices to which the ith vertex in the 439 439 // polytope is connected by an edge 440 440 for (j=1;j<=size(graph[i]);j++) 441 441 { 442 442 // produce the vector ie_j pointing from the jth vertex to the ith vertex; 443 // this will be the jth inequality for the cone in the normal fan dual to 443 // this will be the jth inequality for the cone in the normal fan dual to 444 444 // the ith vertex 445 445 ie[j,1..ncols(vertices)]=vertices[i,1..ncols(vertices)]-vertices[graph[i][j],1..ncols(vertices)]; … … 448 448 p=(VAR*EXP)[1,1]; 449 449 pl,pr=0,0; 450 // separate the terms with positive coefficients in p from 450 // separate the terms with positive coefficients in p from 451 451 // those with negative coefficients 452 452 for (k=1;k<=size(p);k++) … … 461 461 } 462 462 } 463 // build the string which represents the jth inequality 463 // build the string which represents the jth inequality 464 464 // for the cone dual to the ith vertex 465 // as polynomial inequality of type string, and store this 465 // as polynomial inequality of type string, and store this 466 466 // in the list pp as jth entry 467 467 pp[j]=string(pl)+" "+greatersign+" "+string(pr); … … 496 496 // create the file ineq.output 497 497 write(":w /tmp/ineq.output",""); 498 int dimension; // keeps the dimension of the intersection the 498 int dimension; // keeps the dimension of the intersection the 499 499 // bad cones with the u11tobeseencone 500 500 for (i=1;i<=size(ineq);i++) 501 501 { 502 i,". Cone of ",nrows(vertices); // indicate how many 502 i,". Cone of ",nrows(vertices); // indicate how many 503 503 // vertices have been dealt with 504 504 ungleichungen=intmatToPolymake(ineq[i][1],"rays"); … … 525 525 } 526 526 // get the linearity space 527 return(list(ineq,linearity)); 527 return(list(ineq,linearity)); 528 528 } 529 529 example … … 554 554 proc groebnerFan (poly f,list #) 555 555 "USAGE: groebnerFan(f[,#]); f poly, # string 556 RETURN: list, the ith entry of L[1] contains information about the ith cone 557 in the Groebner fan dual to the ith vertex in the Newton 556 RETURN: list, the ith entry of L[1] contains information about the ith cone 557 in the Groebner fan dual to the ith vertex in the Newton 558 558 polytope of the f 559 @* L[1][i][1] = integer matrix representing the inequalities 560 which describe the cone 561 @* L[1][i][2] = a list which contains the inequalities represented 559 @* L[1][i][1] = integer matrix representing the inequalities 560 which describe the cone 561 @* L[1][i][2] = a list which contains the inequalities represented 562 562 by L[1][i][1] as a list of strings 563 @* L[1][i][3] = an interger matrix whose rows are the extreme rays 563 @* L[1][i][3] = an interger matrix whose rows are the extreme rays 564 564 of the cone 565 @* L[2] = is an integer matrix whose rows span the linearity space 566 of the fan, i.e. the linear space which is contained 567 in each cone 568 @* L[3] = the Newton polytope of f in the format of the procedure 565 @* L[2] = is an integer matrix whose rows span the linearity space 566 of the fan, i.e. the linear space which is contained 567 in each cone 568 @* L[3] = the Newton polytope of f in the format of the procedure 569 569 newtonPolytope 570 @* L[4] = integer matrix where each row represents the exponet 570 @* L[4] = integer matrix where each row represents the exponet 571 571 vector of one monomial occuring in the input polynomial 572 572 NOTE: - if you have already computed the Newton polytope of f then you might want 573 to use the procedure normalFan instead in order to avoid doing costly 573 to use the procedure normalFan instead in order to avoid doing costly 574 574 computation twice 575 575 @* - the procedure calls for its computation polymake by Ewgenij Gawrilow, 576 576 TU Berlin and Michael Joswig, so it only works if polymake is installed; 577 577 see http://www.math.tu-berlin.de/polymake/ 578 @* - the procedure creates the file /tmp/newtonPolytope.polymake which 579 contains the Newton polytope of f in polymake format and which can 578 @* - the procedure creates the file /tmp/newtonPolytope.polymake which 579 contains the Newton polytope of f in polymake format and which can 580 580 be used for further computations with polymake 581 @* - it is possible to give as an optional second argument as string which 582 then will be used instead of 'newtonPolytope' in the name of the 581 @* - it is possible to give as an optional second argument as string which 582 then will be used instead of 'newtonPolytope' in the name of the 583 583 polymake output file 584 584 EXAMPLE: example groebnerFan; shows an example" 585 585 { 586 586 int i,j; 587 // compute the list of exponent vectors of the polynomial, which are 587 // compute the list of exponent vectors of the polynomial, which are 588 588 // the lattice points whose convex hull is the Newton polytope of f 589 589 intmat exponents[size(f)][nvars(basering)]; … … 649 649 proc intmatToPolymake (intmat M,string art) 650 650 "USAGE: intmatToPolymake(M,art); M intmat, art string 651 ASSUME: - M is an integer matrix which should be transformed into polymake 651 ASSUME: - M is an integer matrix which should be transformed into polymake 652 652 format; 653 653 @* - art is one of the following strings: 654 654 @* + 'rays' : indicating that a first column of 0's should be added 655 @* + 'points' : indicating that a first column of 1's should be added 656 RETURN: string, the matrix is transformed in a string and a first column has 655 @* + 'points' : indicating that a first column of 1's should be added 656 RETURN: string, the matrix is transformed in a string and a first column has 657 657 been added 658 658 EXAMPLE: example intmatToPolymake; shows an example" … … 662 662 string anf="0 "; 663 663 } 664 else 664 else 665 665 { 666 666 string anf="1 "; … … 697 697 proc polymakeToIntmat (string pm,string art) 698 698 "USAGE: polymakeToIntmat(pm,art); pm, art string 699 ASSUME: pm is the result of calling polymake with one 'argument' like 700 VERTICES, AFFINE_HULL, etc., so that the first row of the string is 701 the name of the corresponding 'argument' and the further rows contain 699 ASSUME: pm is the result of calling polymake with one 'argument' like 700 VERTICES, AFFINE_HULL, etc., so that the first row of the string is 701 the name of the corresponding 'argument' and the further rows contain 702 702 the result which consists of vectors either over the integers 703 703 or over the rationals … … 705 705 from the second row, where each row has been multiplied with the 706 706 lowest common multiple of the denominators of its entries as if 707 it is an integer matrix; moreover, if art=='affine', then 708 the first column is omitted since we only want affine 707 it is an integer matrix; moreover, if art=='affine', then 708 the first column is omitted since we only want affine 709 709 coordinates 710 710 EXAMPLE: example polymakeToIntmat; shows an example" … … 718 718 pm=stringdelete(pm,1); 719 719 } 720 pm=stringdelete(pm,1); 721 // find out how many entries each vector has, namely one more 720 pm=stringdelete(pm,1); 721 // find out how many entries each vector has, namely one more 722 722 // than 'spaces' in a row 723 723 int i=1; … … 734 734 // if we want to have affine coordinates 735 735 if (art=="affine") 736 { 736 { 737 737 s--; // then there is one column less 738 738 // and the entry of the first column (in the first row) has to be removed … … 743 743 pm=stringdelete(pm,1); 744 744 } 745 // we add two line breaks at the end in order to have this as 745 // we add two line breaks at the end in order to have this as 746 746 // a stopping criterion 747 747 pm=pm+zeilenumbruch+zeilenumbruch; … … 761 761 z++; 762 762 pm[i]=","; 763 // if we want to have affine coordinates, 763 // if we want to have affine coordinates, 764 764 // then we have to delete the first entry in each row 765 765 if (art=="affine") … … 775 775 if (pm[i]==" ") 776 776 { 777 pm[i]=","; 777 pm[i]=","; 778 778 } 779 779 } … … 784 784 pm=stringdelete(pm,size(pm)); 785 785 } 786 // since the matrix could be over the rationals, 786 // since the matrix could be over the rationals, 787 787 // we need a ring with rational coefficients 788 ring zwischering=0,x,lp; 788 ring zwischering=0,x,lp; 789 789 // create the matrix with the elements of pm as entries 790 790 execute("matrix mm["+string(z)+"]["+string(s)+"]="+pm+";"); … … 835 835 proc triangulations (list polygon) 836 836 "USAGE: triangulations(polygon); list polygon 837 ASSUME: polygon is a list of integer vectors of the same size representing 838 the affine coordinates of the lattice points 837 ASSUME: polygon is a list of integer vectors of the same size representing 838 the affine coordinates of the lattice points 839 839 PURPOSE: the procedure considers the marked polytope given as the convex hull of 840 840 the lattice points and with these lattice points as markings; it then 841 computes all possible triangulations of this marked polytope 841 computes all possible triangulations of this marked polytope 842 842 RETURN: list, each entry corresponds to one triangulation and the ith entry is 843 843 itself a list of integer vectors of size three, where each integer … … 846 846 NOTE:- the procedure calls for its computations the program points2triangs 847 847 from the program topcom by Joerg Rambau, Universitaet Bayreuth; it 848 therefore is necessary that this program is installed in order to use 848 therefore is necessary that this program is installed in order to use 849 849 this procedure; see 850 850 @* http://www.uni-bayreuth.de/departments/wirtschaftsmathematik/rambau/TOPCOM 851 @* - the procedure creates the files /tmp/triangulationsinput and 851 @* - the procedure creates the files /tmp/triangulationsinput and 852 852 /tmp/triangulationsoutput; 853 the former is used as input for points2triangs and the latter is its 854 output containing the triangulations of corresponding to points in the 855 format of points2triangs; if you wish to use this for further 856 computations with topcom, you have to use the procedure 853 the former is used as input for points2triangs and the latter is its 854 output containing the triangulations of corresponding to points in the 855 format of points2triangs; if you wish to use this for further 856 computations with topcom, you have to use the procedure 857 857 polymakeKeepTmpFiles in before 858 @* - note that an integer i in an integer vector representing a triangle 859 refers to the ith lattice point, i.e. polygon[i]; this convention is 860 different from TOPCOM's convention, where i would refer to the i-1st 858 @* - note that an integer i in an integer vector representing a triangle 859 refers to the ith lattice point, i.e. polygon[i]; this convention is 860 different from TOPCOM's convention, where i would refer to the i-1st 861 861 lattice point 862 862 EXAMPLE: example triangulations; shows an example" 863 863 { 864 864 int i,j; 865 // prepare the input for points2triangs by writing the input polygon in the 865 // prepare the input for points2triangs by writing the input polygon in the 866 866 // necessary format 867 867 string spi="["; … … 885 885 system("sh","cd /tmp; rm -f triangulationsinput; rm -f triangulationsoutput"); 886 886 } 887 // preprocessing of p2t if points2triangs is version >= 0.15 887 // preprocessing of p2t if points2triangs is version >= 0.15 888 888 // brings p2t to the format of version 0.14 889 889 string np2t; // takes the triangulations in Singular format … … 907 907 } 908 908 else 909 { 909 { 910 910 np2t=np2t+p2t[i]; 911 911 } … … 919 919 { 920 920 if (np2t[size(np2t)]!=";") 921 { 921 { 922 922 np2t=np2t+p2t[size(p2t)-1]+p2t[size(p2t)]; 923 923 } … … 941 941 np2t=np2t+"))"; 942 942 i++; 943 } 943 } 944 944 else 945 945 { … … 979 979 "EXAMPLE:"; 980 980 echo=2; 981 // the lattice points of the unit square in the plane 981 // the lattice points of the unit square in the plane 982 982 list polygon=intvec(0,0),intvec(0,1),intvec(1,0),intvec(1,1); 983 983 // the triangulations of this lattice point configuration are computed … … 1025 1025 int i,j,k,l; 1026 1026 intmat N[2][2]; // is used to compute areas of triangles 1027 intvec vertex; // stores a point in the secondary polytope as 1027 intvec vertex; // stores a point in the secondary polytope as 1028 1028 // intermediate result 1029 1029 int eintrag; 1030 1030 int halt; 1031 intmat secpoly[size(triangs)][size(polygon)]; // stores all lattice points 1031 intmat secpoly[size(triangs)][size(polygon)]; // stores all lattice points 1032 1032 // of the secondary polytope 1033 // consider each triangulation and compute the corresponding point 1033 // consider each triangulation and compute the corresponding point 1034 1034 // in the secondary polytope 1035 1035 for (i=1;i<=size(triangs);i++) 1036 1036 { 1037 // for each triangulation we have to compute the coordinates 1037 // for each triangulation we have to compute the coordinates 1038 1038 // corresponding to each marked point 1039 1039 for (j=1;j<=size(polygon);j++) 1040 1040 { 1041 1041 eintrag=0; 1042 // for each marked point we have to consider all triangles in the 1042 // for each marked point we have to consider all triangles in the 1043 1043 // triangulation which involve this particular point 1044 1044 for (k=1;k<=size(triangs[i]);k++) … … 1062 1062 secpoly[i,1..size(polygon)]=vertex; 1063 1063 } 1064 return(list(secpoly,triangs)); 1064 return(list(secpoly,triangs)); 1065 1065 } 1066 1066 example … … 1084 1084 proc secondaryFan (list polygon,list #) 1085 1085 "USAGE: secondaryFan(polygon[,#]); list polygon, list # 1086 ASSUME: - polygon is a list of integer vectors of the same size representing 1086 ASSUME: - polygon is a list of integer vectors of the same size representing 1087 1087 the affine coordinates of lattice points 1088 @* - if the triangulations of the corresponding polygon have already been 1089 computed with the procedure triangulations then these can be given 1090 as a second (optional) argument in order to avoid doing this 1088 @* - if the triangulations of the corresponding polygon have already been 1089 computed with the procedure triangulations then these can be given 1090 as a second (optional) argument in order to avoid doing this 1091 1091 computation again 1092 1092 PURPOSE: the procedure considers the marked polytope given as the convex hull of 1093 1093 the lattice points and with these lattice points as markings; it then 1094 computes the lattice points of the secondary polytope given by this 1094 computes the lattice points of the secondary polytope given by this 1095 1095 marked polytope which correspond to the triangulations computed by 1096 1096 the procedure triangulations 1097 RETURN: list, the ith entry of L[1] contains information about the ith cone in 1098 the secondary fan of the polygon, i.e. the cone dual to the 1097 RETURN: list, the ith entry of L[1] contains information about the ith cone in 1098 the secondary fan of the polygon, i.e. the cone dual to the 1099 1099 ith vertex of the secondary polytope 1100 @* L[1][i][1] = integer matrix representing the inequalities which 1100 @* L[1][i][1] = integer matrix representing the inequalities which 1101 1101 describe the cone dual to the ith vertex 1102 @* L[1][i][2] = a list which contains the inequalities represented 1102 @* L[1][i][2] = a list which contains the inequalities represented 1103 1103 by L[1][i][1] as a list of strings, where we use the 1104 1104 variables x(1),...,x(n) 1105 1105 @* L[1][i][3] = only present if 'er' is set to 1; in that case it is 1106 an interger matrix whose rows are the extreme rays 1106 an interger matrix whose rows are the extreme rays 1107 1107 of the cone 1108 @* L[2] = is an integer matrix whose rows span the linearity space 1109 of the fan, i.e. the linear space which is contained in 1108 @* L[2] = is an integer matrix whose rows span the linearity space 1109 of the fan, i.e. the linear space which is contained in 1110 1110 each cone 1111 @* L[3] = the secondary polytope in the format of the procedure 1111 @* L[3] = the secondary polytope in the format of the procedure 1112 1112 polymakePolytope 1113 @* L[4] = the list of triangulations corresponding to the vertices 1113 @* L[4] = the list of triangulations corresponding to the vertices 1114 1114 of the secondary polytope 1115 1115 NOTE:- the procedure calls for its computation polymake by Ewgenij Gawrilow, 1116 1116 TU Berlin and Michael Joswig, so it only works if polymake is installed; 1117 1117 see http://www.math.tu-berlin.de/polymake/ 1118 @* - in the optional argument # it is possible to hand over other names for 1118 @* - in the optional argument # it is possible to hand over other names for 1119 1119 the variables to be used -- be careful, the format must be correct 1120 1120 which is not tested, e.g. if you want the variable names to be 1121 1121 u00,u10,u01,u11 then you must hand over the string 'u11,u10,u01,u11' 1122 @* - if the triangluations are not handed over as optional argument the 1123 procedure calls for its computation of these triangulations the program 1124 points2triangs from the program topcom by Joerg Rambau, Universitaet 1125 Bayreuth; it therefore is necessary that this program is installed in 1122 @* - if the triangluations are not handed over as optional argument the 1123 procedure calls for its computation of these triangulations the program 1124 points2triangs from the program topcom by Joerg Rambau, Universitaet 1125 Bayreuth; it therefore is necessary that this program is installed in 1126 1126 order to use this procedure; see 1127 1127 @* http://www.uni-bayreuth.de/departments/wirtschaftsmathematik/rambau/TOPCOM … … 1172 1172 proc cycleLength (list boundary,intvec interior) 1173 1173 "USAGE: cycleLength(boundary,interior); list boundary, intvec interior 1174 ASSUME: boundary is a list of integer vectors describing a cycle in some 1175 convex lattice polygon around the lattice point interior ordered 1174 ASSUME: boundary is a list of integer vectors describing a cycle in some 1175 convex lattice polygon around the lattice point interior ordered 1176 1176 clock wise 1177 1177 RETURN: string, the cycle length of the corresponding cycle in the dual … … 1180 1180 { 1181 1181 int j; 1182 // create a ring whose variables are indexed by the points in 1182 // create a ring whose variables are indexed by the points in 1183 1183 // boundary resp. by interior 1184 1184 string rst="ring cyclering=0,(u"+string(interior[1])+string(interior[2]); … … 1218 1218 // interior is a lattice point in the interior of this lattice polygon 1219 1219 intvec interior=1,1; 1220 // compute the general cycle length of a cycle of the corresponding cycle 1220 // compute the general cycle length of a cycle of the corresponding cycle 1221 1221 // in the dual tropical curve, note that (0,1) and (2,1) do not contribute 1222 1222 cycleLength(boundary,interior); … … 1227 1227 proc splitPolygon (list markings) 1228 1228 "USAGE: splitPolygon (markings); markings list 1229 ASSUME: markings is a list of integer vectors representing lattice points in 1230 the plane which we consider as the marked points of the convex lattice 1229 ASSUME: markings is a list of integer vectors representing lattice points in 1230 the plane which we consider as the marked points of the convex lattice 1231 1231 polytope spanned by them 1232 PURPOSE: split the marked points in the vertices, the points on the facets 1232 PURPOSE: split the marked points in the vertices, the points on the facets 1233 1233 which are not vertices, and the interior points 1234 1234 RETURN: list, L consisting of three lists … … 1236 1236 @* L[1][i][1] = intvec, the coordinates of the ith vertex 1237 1237 @* L[1][i][2] = int, the position of L[1][i][1] in markings 1238 @* L[2][i] : represents the lattice points on the facet of the 1239 polygon with endpoints L[1][i] and L[1][i+1] 1238 @* L[2][i] : represents the lattice points on the facet of the 1239 polygon with endpoints L[1][i] and L[1][i+1] 1240 1240 (i considered modulo size(L[1])) 1241 @* L[2][i][j][1] = intvec, the coordinates of the jth 1241 @* L[2][i][j][1] = intvec, the coordinates of the jth 1242 1242 lattice point on that facet 1243 @* L[2][i][j][2] = int, the position of L[2][i][j][1] 1243 @* L[2][i][j][2] = int, the position of L[2][i][j][1] 1244 1244 in markings 1245 @* L[3] : represents the interior lattice points of the polygon 1245 @* L[3] : represents the interior lattice points of the polygon 1246 1246 @* L[3][i][1] = intvec, coordinates of ith interior point 1247 1247 @* L[3][i][2] = int, the position of L[3][i][1] in markings … … 1254 1254 vert[1]=pb[2]; 1255 1255 int i,j,k; // indices 1256 list boundary; // stores the points on the facets of the 1256 list boundary; // stores the points on the facets of the 1257 1257 // polygon which are not vertices 1258 // append to the boundary points as well as to the vertices 1258 // append to the boundary points as well as to the vertices 1259 1259 // the first vertex a second time 1260 1260 pb[1]=pb[1]+list(pb[1][1]); … … 1281 1281 // store the information on the boundary in vert[2] 1282 1282 vert[2]=boundary; 1283 // find the remaining points in the input which are not on 1283 // find the remaining points in the input which are not on 1284 1284 // the boundary by checking 1285 1285 // for each point in markings if it is contained in pb[1] … … 1298 1298 // store the interior points in vert[3] 1299 1299 vert[3]=interior; 1300 // add to each point in vert the index which it gets from 1300 // add to each point in vert the index which it gets from 1301 1301 // its position in the input markings; 1302 1302 // do so for ver[1] … … 1332 1332 } 1333 1333 vert[3][i]=list(vert[3][i],j); 1334 } 1334 } 1335 1335 return(vert); 1336 1336 } … … 1339 1339 "EXAMPLE:"; 1340 1340 echo=2; 1341 // the lattice polygon spanned by the points (0,0), (3,0) and (0,3) 1341 // the lattice polygon spanned by the points (0,0), (3,0) and (0,3) 1342 1342 // with all integer points as markings 1343 1343 list polygon=intvec(1,1),intvec(3,0),intvec(2,0),intvec(1,0), … … 1359 1359 proc eta (list triang,list polygon) 1360 1360 "USAGE: eta(triang,polygon); triang, polygon list 1361 ASSUME: polygon has the format of the output of splitPolygon, i.e. it is a 1362 list with three entries describing a convex lattice polygon in the 1361 ASSUME: polygon has the format of the output of splitPolygon, i.e. it is a 1362 list with three entries describing a convex lattice polygon in the 1363 1363 following way: 1364 @* polygon[1] : is a list of lists; for each i the entry polygon[1][i][1] 1365 is a lattice point which is a vertex of the lattice 1364 @* polygon[1] : is a list of lists; for each i the entry polygon[1][i][1] 1365 is a lattice point which is a vertex of the lattice 1366 1366 polygon, and polygon[1][i][2] is an integer assigned to 1367 1367 this lattice point as identifying index 1368 @* polygon[2] : is a list of lists; for each vertex of the polygon, 1369 i.e. for each entry in polygon[1], it contains a list 1370 polygon[2][i], which contains the lattice points on the 1371 facet with endpoints polygon[1][i] and polygon[1][i+1] 1368 @* polygon[2] : is a list of lists; for each vertex of the polygon, 1369 i.e. for each entry in polygon[1], it contains a list 1370 polygon[2][i], which contains the lattice points on the 1371 facet with endpoints polygon[1][i] and polygon[1][i+1] 1372 1372 - i considered mod size(polygon[1]); 1373 each such lattice point contributes an entry 1373 each such lattice point contributes an entry 1374 1374 polygon[2][i][j][1] which is an integer 1375 vector giving the coordinate of the lattice point and an 1375 vector giving the coordinate of the lattice point and an 1376 1376 entry polygon[2][i][j][2] which is the identifying index 1377 @* polygon[3] : is a list of lists, where each entry corresponds to a 1378 lattice point in the interior of the polygon, with 1377 @* polygon[3] : is a list of lists, where each entry corresponds to a 1378 lattice point in the interior of the polygon, with 1379 1379 polygon[3][j][1] being the coordinates of the point 1380 1380 and polygon[3][j][2] being the identifying index; 1381 @* triang is a list of integer vectors all of size three describing a 1382 triangulation of the polygon described by polygon; if an entry of 1381 @* triang is a list of integer vectors all of size three describing a 1382 triangulation of the polygon described by polygon; if an entry of 1383 1383 triang is the vector (i,j,k) then the triangle is built from the vertices 1384 1384 with indices i, j and k 1385 RETURN: intvec, the integer vector eta describing that vertex of the Newton 1386 polytope discriminant of the polygone whose dual cone in the 1387 Groebner fan contains the cone of the secondary fan of the 1385 RETURN: intvec, the integer vector eta describing that vertex of the Newton 1386 polytope discriminant of the polygone whose dual cone in the 1387 Groebner fan contains the cone of the secondary fan of the 1388 1388 polygon corresponding to the given triangulation 1389 NOTE: for a better description of eta see Gelfand, Kapranov, 1389 NOTE: for a better description of eta see Gelfand, Kapranov, 1390 1390 Zelevinski: Discriminants, Resultants and multidimensional Determinants. 1391 1391 Chapter 10. … … 1393 1393 { 1394 1394 int i,j,k,l,m,n; // index variables 1395 list ordpolygon; // stores the lattice points in the order 1395 list ordpolygon; // stores the lattice points in the order 1396 1396 // used in the triangulation 1397 1397 list triangarea; // stores the areas of the triangulations … … 1419 1419 for (i=1;i<=size(triang);i++) 1420 1420 { 1421 // Note that the ith lattice point in orderedpolygon has the 1421 // Note that the ith lattice point in orderedpolygon has the 1422 1422 // number i-1 in the triangulation! 1423 1423 N=ordpolygon[triang[i][1]]-ordpolygon[triang[i][2]],ordpolygon[triang[i][1]]-ordpolygon[triang[i][3]]; … … 1425 1425 } 1426 1426 intvec ETA; // stores the eta_ij 1427 int etaij; // stores the part of eta_ij during computations 1427 int etaij; // stores the part of eta_ij during computations 1428 1428 // which comes from triangle areas 1429 int seitenlaenge; // stores the part of eta_ij during computations 1429 int seitenlaenge; // stores the part of eta_ij during computations 1430 1430 // which comes from boundary facets 1431 1431 list seiten; // stores the lattice points on facets of the polygon 1432 1432 intvec v; // used to compute a facet length 1433 // 3) store first in seiten[i] all lattice points on the facet 1433 // 3) store first in seiten[i] all lattice points on the facet 1434 1434 // connecting the ith vertex, 1435 // i.e. polygon[1][i], with the i+1st vertex, i.e. polygon[1][i+1], 1435 // i.e. polygon[1][i], with the i+1st vertex, i.e. polygon[1][i+1], 1436 1436 // where we replace i+1 1437 1437 // 1 if i=size(polygon[1]); 1438 // then append the last entry of seiten once more at the very 1438 // then append the last entry of seiten once more at the very 1439 1439 // beginning of seiten, so 1440 1440 // that the index is shifted by one … … 1462 1462 if ((polygon[1][j][2]==triang[k][1]) or (polygon[1][j][2]==triang[k][2]) or (polygon[1][j][2]==triang[k][3])) 1463 1463 { 1464 // ... if so, add the area of the triangle to etaij 1464 // ... if so, add the area of the triangle to etaij 1465 1465 etaij=etaij+triangarea[k]; 1466 // then check if that triangle has a facet which is contained 1467 // in one of the 1466 // then check if that triangle has a facet which is contained 1467 // in one of the 1468 1468 // two facets of the polygon which are adjecent to the given vertex ... 1469 1469 // these two facets are seiten[j] and seiten[j+1] … … 1479 1479 if ((seiten[n][l][2]==triang[k][m]) and (seiten[n][l][2]!=polygon[1][j][2])) 1480 1480 { 1481 // if so, then compute the vector pointing from this 1481 // if so, then compute the vector pointing from this 1482 1482 // lattice point to the vertex 1483 1483 v=polygon[1][j][1]-seiten[n][l][1]; 1484 // and the lattice length of this vector has to be 1484 // and the lattice length of this vector has to be 1485 1485 // subtracted from etaij 1486 1486 etaij=etaij-abs(gcd(v[1],v[2])); … … 1494 1494 ETA[polygon[1][j][2]]=etaij; 1495 1495 } 1496 // 5) compute the eta_ij for all lattice points on the facets 1496 // 5) compute the eta_ij for all lattice points on the facets 1497 1497 // of the polygon which are not vertices, these are the 1498 1498 // lattice points in polygon[2][1] to polygon[2][size(polygon[1])] … … 1500 1500 { 1501 1501 for (j=1;j<=size(polygon[2][i]);j++) 1502 { 1502 { 1503 1503 // initialise etaij 1504 1504 etaij=0; … … 1511 1511 if ((polygon[2][i][j][2]==triang[k][1]) or (polygon[2][i][j][2]==triang[k][2]) or (polygon[2][i][j][2]==triang[k][3])) 1512 1512 { 1513 // ... if so, add the area of the triangle to etaij 1513 // ... if so, add the area of the triangle to etaij 1514 1514 etaij=etaij+triangarea[k]; 1515 // then check if that triangle has a facet which is contained in the 1515 // then check if that triangle has a facet which is contained in the 1516 1516 // facet of the polygon which contains the lattice point in question, 1517 1517 // this is the facet seiten[i+1]; … … 1521 1521 // ... and for each lattice point in the triangle ... 1522 1522 for (m=1;m<=size(triang[k]);m++) 1523 { 1523 { 1524 1524 // ... if they coincide and are not the vertex itself ... 1525 1525 if ((seiten[i+1][l][2]==triang[k][m]) and (seiten[i+1][l][2]!=polygon[2][i][j][2])) 1526 1526 { 1527 // if so, then compute the vector pointing from 1527 // if so, then compute the vector pointing from 1528 1528 // this lattice point to the vertex 1529 1529 v=polygon[2][i][j][1]-seiten[i+1][l][1]; 1530 // and the lattice length of this vector contributes 1530 // and the lattice length of this vector contributes 1531 1531 // to seitenlaenge 1532 1532 seitenlaenge=seitenlaenge+abs(gcd(v[1],v[2])); … … 1536 1536 } 1537 1537 } 1538 // if the lattice point was a vertex of any triangle 1538 // if the lattice point was a vertex of any triangle 1539 1539 // in the triangulation ... 1540 1540 if (etaij!=0) … … 1561 1561 if ((polygon[3][j][2]==triang[k][1]) or (polygon[3][j][2]==triang[k][2]) or (polygon[3][j][2]==triang[k][3])) 1562 1562 { 1563 // ... if so, add the area of the triangle to etaij 1563 // ... if so, add the area of the triangle to etaij 1564 1564 etaij=etaij+triangarea[k]; 1565 1565 } … … 1574 1574 "EXAMPLE:"; 1575 1575 echo=2; 1576 // the lattice polygon spanned by the points (0,0), (3,0) and (0,3) 1576 // the lattice polygon spanned by the points (0,0), (3,0) and (0,3) 1577 1577 // with all integer points as markings 1578 1578 list polygon=intvec(1,1),intvec(3,0),intvec(2,0),intvec(1,0), … … 1581 1581 // split the polygon in its vertices, its facets and its interior points 1582 1582 list sp=splitPolygon(polygon); 1583 // define a triangulation by connecting the only interior point 1583 // define a triangulation by connecting the only interior point 1584 1584 // with the vertices 1585 1585 list triang=intvec(1,2,5),intvec(1,5,10),intvec(1,5,10); … … 1587 1587 eta(triang,sp); 1588 1588 } 1589 1589 1590 1590 ///////////////////////////////////////////////////////////////////////////// 1591 1591 … … 1614 1614 } 1615 1615 // check is the polygon is only a line segment given by more than two points; 1616 // for this first compute sum of the absolute values of the determinants 1616 // for this first compute sum of the absolute values of the determinants 1617 1617 // of the matrices whose 1618 // rows are the vectors pointing from the first to the second point 1618 // rows are the vectors pointing from the first to the second point 1619 1619 // and from the 1620 // the first point to the ith point for i=3,...,size(polygon); 1620 // the first point to the ith point for i=3,...,size(polygon); 1621 1621 // if this sum is zero 1622 1622 // then the polygon is a line segment and we have to find its end points … … 1631 1631 intmat laenge[size(polygon)][size(polygon)]; 1632 1632 intvec mp; 1633 // for this collect first all vectors pointing from one lattice 1633 // for this collect first all vectors pointing from one lattice 1634 1634 // point to the next, 1635 1635 // compute their pairwise angles and their lengths 1636 1636 for (i=1;i<=size(polygon)-1;i++) 1637 { 1637 { 1638 1638 for (j=i+1;j<=size(polygon);j++) 1639 1639 { … … 1659 1659 polygon=sortlistbyintvec(polygon,abstand); 1660 1660 return(list(polygon,endpoints)); 1661 } 1661 } 1662 1662 /////////////////////////////////////////////////////////////// 1663 1663 list orderedvertices; // stores the vertices in an ordered way 1664 list minimisedorderedvertices; // stores the vertices in an ordered way; 1664 list minimisedorderedvertices; // stores the vertices in an ordered way; 1665 1665 // redundant ones removed 1666 list comparevertices; // stores vertices which should be compared to 1666 list comparevertices; // stores vertices which should be compared to 1667 1667 // the testvertex 1668 1668 orderedvertices[1]=polygon[1]; // set the starting vertex 1669 1669 minimisedorderedvertices[1]=polygon[1]; // set the starting vertex 1670 1670 intvec testvertex=polygon[1]; //vertex to which the others have to be compared 1671 intvec startvertex=polygon[1]; // keep the starting vertex to test, 1671 intvec startvertex=polygon[1]; // keep the starting vertex to test, 1672 1672 // when the end is reached 1673 1673 int endtest; // is set to one, when the end is reached 1674 int startvertexfound;// is 1, once for some testvertex a candidate 1675 // for the next vertex has been found 1674 int startvertexfound;// is 1, once for some testvertex a candidate 1675 // for the next vertex has been found 1676 1676 polygon=delete(polygon,1); // delete the testvertex 1677 1677 intvec v,w; 1678 1678 int l=1; // counts the vertices 1679 // the basic idea is that a vertex can be 1679 // the basic idea is that a vertex can be 1680 1680 // the next one on the boundary if all other vertices 1681 // lie to the right of the vector v pointing 1681 // lie to the right of the vector v pointing 1682 1682 // from the testvertex to this one; this can be tested 1683 // by checking if the determinant of the 2x2-matrix 1683 // by checking if the determinant of the 2x2-matrix 1684 1684 // with first column v and second column the vector w, 1685 // pointing from the testvertex to the new vertex, 1685 // pointing from the testvertex to the new vertex, 1686 1686 // is non-positive; if this is the case for all 1687 // new vertices, then the one in consideration is 1687 // new vertices, then the one in consideration is 1688 1688 // a possible choice for the next vertex on the boundary 1689 // and it is stored in naechste; we can then order 1689 // and it is stored in naechste; we can then order 1690 1690 // the candidates according to their distance from 1691 1691 // the testvertex; then they occur on the boundary in that order! … … 1699 1699 v=polygon[i]-testvertex; // points from the testvertex to the ith vertex 1700 1700 comparevertices=delete(polygon,i); // we needn't compare v to itself 1701 // we should compare v to the startvertex-testvertex; 1701 // we should compare v to the startvertex-testvertex; 1702 1702 // in the first calling of the loop 1703 // this is irrelevant since the difference will be zero; 1703 // this is irrelevant since the difference will be zero; 1704 1704 // however, later on it will 1705 // be vital, since we delete the vertices 1705 // be vital, since we delete the vertices 1706 1706 // which we have already tested from the list 1707 // of all vertices, and when all vertices 1707 // of all vertices, and when all vertices 1708 1708 // on the boundary have been found we would 1709 // therefore find a vertex in the interior 1709 // therefore find a vertex in the interior 1710 1710 // as candidate; but always testing against 1711 // the starting vertex, this can 1712 comparevertices[size(comparevertices)+1]=startvertex; 1711 // the starting vertex, this cannot happen 1712 comparevertices[size(comparevertices)+1]=startvertex; 1713 1713 for (j=1;(j<=size(comparevertices)) and (d<=0);j++) 1714 1714 { … … 1718 1718 d=det(D); 1719 1719 } 1720 if (d<=0) // if all determinants are non-positive, 1720 if (d<=0) // if all determinants are non-positive, 1721 1721 { // then the ith vertex is a candidate 1722 1722 naechste[k]=list(polygon[i],i,scalarproduct(v,v));// we store the vertex, … … 1726 1726 } 1727 1727 if (size(naechste)>0) // then a candidate for the next vertex has been found 1728 { 1728 { 1729 1729 startvertexfound=1; // at least once a candidate has been found 1730 naechste=sortlist(naechste,3); // we order the candidates according 1730 naechste=sortlist(naechste,3); // we order the candidates according 1731 1731 // to their distance from testvertex; 1732 for (j=1;j<=size(naechste);j++) // then we store them in this 1732 for (j=1;j<=size(naechste);j++) // then we store them in this 1733 1733 { // order in orderedvertices 1734 1734 l++; 1735 1735 orderedvertices[l]=naechste[j][1]; 1736 1736 } 1737 testvertex=naechste[size(naechste)][1]; // we store the last one as 1737 testvertex=naechste[size(naechste)][1]; // we store the last one as 1738 1738 // next testvertex; 1739 1739 // store the next corner of NSD 1740 minimisedorderedvertices[size(minimisedorderedvertices)+1]=testvertex; 1741 naechste=sortlist(naechste,2); // then we reorder the vertices 1740 minimisedorderedvertices[size(minimisedorderedvertices)+1]=testvertex; 1741 naechste=sortlist(naechste,2); // then we reorder the vertices 1742 1742 // according to their position 1743 1743 for (j=size(naechste);j>=1;j--) // and we delete them from the vertices … … 1746 1746 } 1747 1747 } 1748 else // that means either that the vertex was inside the polygon, 1749 { // or that we have reached the last vertex on the boundary 1748 else // that means either that the vertex was inside the polygon, 1749 { // or that we have reached the last vertex on the boundary 1750 1750 // of the polytope 1751 if (startvertexfound==0) // the vertex was in the interior; 1751 if (startvertexfound==0) // the vertex was in the interior; 1752 1752 { // we delete it and start all over again 1753 orderedvertices[1]=polygon[1]; 1754 minimisedorderedvertices[1]=polygon[1]; 1753 orderedvertices[1]=polygon[1]; 1754 minimisedorderedvertices[1]=polygon[1]; 1755 1755 testvertex=polygon[1]; 1756 1756 startvertex=polygon[1]; 1757 1757 polygon=delete(polygon,1); 1758 1758 } 1759 else // we have reached the last vertex on the boundary of 1759 else // we have reached the last vertex on the boundary of 1760 1760 { // the polytope and can stop 1761 1761 endtest=1; … … 1764 1764 kill naechste; 1765 1765 } 1766 // test if the first vertex in minimisedorderedvertices 1766 // test if the first vertex in minimisedorderedvertices 1767 1767 // is on the same line with the second and 1768 // the last, i.e. if we started our search in the 1768 // the last, i.e. if we started our search in the 1769 1769 // middle of a face; if so, delete it 1770 1770 v=minimisedorderedvertices[2]-minimisedorderedvertices[1]; … … 1775 1775 minimisedorderedvertices=delete(minimisedorderedvertices,1); 1776 1776 } 1777 // test if the first vertex in minimisedorderedvertices 1777 // test if the first vertex in minimisedorderedvertices 1778 1778 // is on the same line with the two 1779 // last ones, i.e. if we started our search at the end of a face; 1779 // last ones, i.e. if we started our search at the end of a face; 1780 1780 // if so, delete it 1781 1781 v=minimisedorderedvertices[size(minimisedorderedvertices)-1]-minimisedorderedvertices[1]; … … 1809 1809 proc cyclePoints (list triang,list points,int pt) 1810 1810 "USAGE: cyclePoints(triang,points,pt) triang,points list, pt int 1811 ASSUME: - points is a list of integer vectors describing the lattice 1811 ASSUME: - points is a list of integer vectors describing the lattice 1812 1812 points of a marked polygon; 1813 @* - triang is a list of integer vectors describing a triangulation 1814 of the marked polygon in the sense that an integer vector of 1815 the form (i,j,k) describes the triangle formed by polygon[i], 1813 @* - triang is a list of integer vectors describing a triangulation 1814 of the marked polygon in the sense that an integer vector of 1815 the form (i,j,k) describes the triangle formed by polygon[i], 1816 1816 polygon[j] and polygon[k]; 1817 @* - pt is an integer between 1 and size(points), singling out a 1817 @* - pt is an integer between 1 and size(points), singling out a 1818 1818 lattice point among the marked points 1819 PURPOSE: consider the convex lattice polygon, say P, spanned by all lattice 1820 points in points which in the triangulation triang are connected 1821 to the point points[pt]; the procedure computes all marked points 1819 PURPOSE: consider the convex lattice polygon, say P, spanned by all lattice 1820 points in points which in the triangulation triang are connected 1821 to the point points[pt]; the procedure computes all marked points 1822 1822 in points which lie on the boundary of that polygon, ordered 1823 1823 clockwise 1824 RETURN: list, of integer vectors which are the coordinates of the lattice 1825 points on the boundary of the above mentioned polygon P, if 1826 this polygon is not the empty set (that would be the case if 1827 points[pt] is not a vertex of any triangle in the 1824 RETURN: list, of integer vectors which are the coordinates of the lattice 1825 points on the boundary of the above mentioned polygon P, if 1826 this polygon is not the empty set (that would be the case if 1827 points[pt] is not a vertex of any triangle in the 1828 1828 triangulation); otherwise return the empty list 1829 1829 EXAMPLE: example cyclePoints; shows an example" 1830 1830 { 1831 1831 int i,j; // indices 1832 list v; // saves the indices of lattice points connected to the 1832 list v; // saves the indices of lattice points connected to the 1833 1833 // interior point in the triangulation 1834 1834 // save all points in triangulations containing pt in v … … 1866 1866 pts[i]=points[v[i]]; 1867 1867 } 1868 // consider the convex polytope spanned by the points in pts, 1868 // consider the convex polytope spanned by the points in pts, 1869 1869 // find the points on the 1870 1870 // boundary and order them clockwise … … 1875 1875 "EXAMPLE:"; 1876 1876 echo=2; 1877 // the lattice polygon spanned by the points (0,0), (3,0) and (0,3) 1877 // the lattice polygon spanned by the points (0,0), (3,0) and (0,3) 1878 1878 // with all integer points as markings 1879 1879 list points=intvec(1,1),intvec(3,0),intvec(2,0),intvec(1,0), 1880 1880 intvec(0,0),intvec(2,1),intvec(0,1),intvec(1,2), 1881 1881 intvec(0,2),intvec(0,3); 1882 // define a triangulation 1882 // define a triangulation 1883 1883 list triang=intvec(1,2,5),intvec(1,5,7),intvec(1,7,9),intvec(8,9,10), 1884 1884 intvec(1,8,9),intvec(1,2,8); … … 1892 1892 "USAGE: latticeArea(polygon); polygon list 1893 1893 ASSUME: polygon is a list of integer vectors in the plane 1894 RETURN: int, the lattice area of the convex hull of the lattice points in 1894 RETURN: int, the lattice area of the convex hull of the lattice points in 1895 1895 polygon, i.e. twice the Euclidean area 1896 1896 EXAMPLE: example polygonlatticeArea; shows an example" … … 1921 1921 proc picksFormula (list polygon) 1922 1922 "USAGE: picksFormula(polygon); polygon list 1923 ASSUME: polygon is a list of integer vectors in the plane and consider their 1924 convex hull C 1925 RETURN: list, L of three integersthe 1923 ASSUME: polygon is a list of integer vectors in the plane and consider their 1924 convex hull C 1925 RETURN: list, L of three integersthe 1926 1926 @* L[1] : the lattice area of C, i.e. twice the Euclidean area 1927 1927 @* L[2] : the number of lattice points on the boundary of C … … 1948 1948 bdpts=bdpts+abs(gcd(edge[1],edge[2])); 1949 1949 } 1950 // Pick's formula says that the lattice area A, the number g of interior 1950 // Pick's formula says that the lattice area A, the number g of interior 1951 1951 // points and 1952 1952 // the number b of boundary points are connected by the formula: A=b+2g-2 … … 1976 1976 "USAGE: ellipticNF(polygon); polygon list 1977 1977 ASSUME: polygon is a list of integer vectors in the plane such that their 1978 convex hull C has precisely one interior lattice point, i.e. C is the 1978 convex hull C has precisely one interior lattice point, i.e. C is the 1979 1979 Newton polygon of an elliptic curve 1980 PURPOSE: compute the normal form of the polygon with respect to the unimodular 1980 PURPOSE: compute the normal form of the polygon with respect to the unimodular 1981 1981 affine transformations T=A*x+v; there are sixteen different normal forms 1982 (see e.g. Bjorn Poonen, Fernando Rodriguez-Villegas: Lattice Polygons 1983 and the number 12. Amer. Math. Monthly 107 (2000), no. 3, 1982 (see e.g. Bjorn Poonen, Fernando Rodriguez-Villegas: Lattice Polygons 1983 and the number 12. Amer. Math. Monthly 107 (2000), no. 3, 1984 1984 238--250.) 1985 1985 RETURN: list, L such that 1986 @* L[1] : list whose entries are the vertices of the normal form of 1986 @* L[1] : list whose entries are the vertices of the normal form of 1987 1987 the polygon 1988 1988 @* L[2] : the matrix A of the unimodular transformation 1989 1989 @* L[3] : the translation vector v of the unimodular transformation 1990 @* L[4] : list such that the ith entry is the image of polygon[i] 1990 @* L[4] : list such that the ith entry is the image of polygon[i] 1991 1991 under the unimodular transformation T 1992 1992 EXAMPLE: example ellipticNF; shows an example" … … 2020 2020 intvec trans; // stores the vector by which we have to translate the polygon 2021 2021 intmat A[2][2]; // stores the matrix by which we have to transform the polygon 2022 matrix M[3][3]; // stores the projective coordinates of the points 2022 matrix M[3][3]; // stores the projective coordinates of the points 2023 2023 // which are to be transformed 2024 matrix N[3][3]; // stores the projective coordinates of the points to 2024 matrix N[3][3]; // stores the projective coordinates of the points to 2025 2025 // which M is to be transformed 2026 intmat T[3][3]; // stores the unimodular affine transformation in 2026 intmat T[3][3]; // stores the unimodular affine transformation in 2027 2027 // projective form 2028 2028 // add the second point of pg once again at the end 2029 2029 pg=insert(pg,pg[2],size(pg)); 2030 // if there is only one edge which has the maximal number of lattice points, 2030 // if there is only one edge which has the maximal number of lattice points, 2031 2031 // then M should be: 2032 2032 M=pg[max],1,pg[max+1],1,pg[max+2],1; … … 2118 2118 M=pg[max],1,pg[max+1],1,pg[max+2],1; 2119 2119 // the orientation of the polygon matters 2120 A=pg[max-1]-pg[max],pg[max+1]-pg[max]; 2120 A=pg[max-1]-pg[max],pg[max+1]-pg[max]; 2121 2121 if (det(A)==4) 2122 2122 { … … 2167 2167 { 2168 2168 max++; 2169 } 2169 } 2170 2170 M=pg[max],1,pg[max+1],1,pg[max+2],1; 2171 2171 N=0,1,1,1,2,1,2,1,1; … … 2230 2230 // the vertices of the normal form are 2231 2231 nf[1]; 2232 // it has been transformed by the unimodular affine transformation A*x+v 2232 // it has been transformed by the unimodular affine transformation A*x+v 2233 2233 // with matrix A 2234 2234 nf[2]; … … 2247 2247 "USAGE: ellipticNFDB(n[,#]); n int, # list 2248 2248 ASSUME: n is an integer between 1 and 16 2249 PURPOSE: this is a database storing the 16 normal forms of planar polygons with 2249 PURPOSE: this is a database storing the 16 normal forms of planar polygons with 2250 2250 precisely one interior point up to unimodular affine transformations 2251 @* (see e.g. Bjorn Poonen, Fernando Rodriguez-Villegas: Lattice Polygons 2251 @* (see e.g. Bjorn Poonen, Fernando Rodriguez-Villegas: Lattice Polygons 2252 2252 and the number 12. Amer. Math. Monthly 107 (2000), no. 3, 2253 2253 238--250.) 2254 2254 RETURN: list, L such that 2255 @* L[1] : list whose entries are the vertices of the nth normal form 2256 @* L[2] : list whose entries are all the lattice points of the 2257 nth normal form 2258 @* L[3] : only present if the optional parameter # is present, and 2259 then it is a polynomial in the variables (x,y) whose 2255 @* L[1] : list whose entries are the vertices of the nth normal form 2256 @* L[2] : list whose entries are all the lattice points of the 2257 nth normal form 2258 @* L[3] : only present if the optional parameter # is present, and 2259 then it is a polynomial in the variables (x,y) whose 2260 2260 Newton polygon is the nth normal form 2261 NOTE: the optional parameter is only allowed if the basering has the 2261 NOTE: the optional parameter is only allowed if the basering has the 2262 2262 variables x and y 2263 2263 EXAMPLE: example ellipticNFDB; shows an example" … … 2310 2310 proc polymakeKeepTmpFiles (int i) 2311 2311 "USAGE: polymakeKeepTmpFiles(int i); i int 2312 PURPOSE: some procedures create files in the directory /tmp which are used for 2312 PURPOSE: some procedures create files in the directory /tmp which are used for 2313 2313 computations with polymake respectively topcom; these will be removed 2314 when the corresponding procedure is left; however, it might be 2314 when the corresponding procedure is left; however, it might be 2315 2315 desireable to keep them for further computations with either polymake or 2316 2316 topcom; this can be achieved by this procedure; call the procedure as: … … 2355 2355 static proc scalarproduct (intvec w,intvec v) 2356 2356 "USAGE: scalarproduct(w,v); w,v intvec 2357 ASSUME: w and v are integer vectors of the same length 2357 ASSUME: w and v are integer vectors of the same length 2358 2358 RETURN: int, the scalarproduct of v and w 2359 2359 NOTE: the procedure is called by findOrientedBoundary" … … 2402 2402 { 2403 2403 int m=nrows(M); 2404 2404 2405 2405 } 2406 2406 else … … 2460 2460 { 2461 2461 return(""); 2462 2462 2463 2463 } 2464 2464 if (i==1) … … 2570 2570 k++; 2571 2571 } 2572 else 2572 else 2573 2573 { 2574 2574 stop=1; … … 2613 2613 k++; 2614 2614 } 2615 else 2615 else 2616 2616 { 2617 2617 stop=1; … … 2662 2662 static proc polygonToCoordinates (list points) 2663 2663 "USAGE: polygonToCoordinates(points); points list 2664 ASSUME: points is a list of integer vectors each of size two describing the 2665 marked points of a convex lattice polygon like the output of 2664 ASSUME: points is a list of integer vectors each of size two describing the 2665 marked points of a convex lattice polygon like the output of 2666 2666 polygonDB 2667 RETURN: list, the first entry is a string representing the coordinates 2667 RETURN: list, the first entry is a string representing the coordinates 2668 2668 corresponding to the latticpoints seperated by commata 2669 the second entry is a list where the ith entry is a string 2670 representing the coordinate of corresponding to the ith 2671 lattice point the third entry is the latex format of the 2669 the second entry is a list where the ith entry is a string 2670 representing the coordinate of corresponding to the ith 2671 lattice point the third entry is the latex format of the 2672 2672 first entry 2673 2673 NOTE: the procedure is called by fan" -
Singular/LIB/presolve.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: presolve.lib,v 1.3 0 2009-04-14 12:00:14 SingularExp $";2 version="$Id: presolve.lib,v 1.31 2009-04-15 11:18:27 seelisch Exp $"; 3 3 category="Symbolic-numerical solving"; 4 4 info=" … … 190 190 if ( size(#)!=0 ) { n=#[1]; } 191 191 ideal maxi,rest = maxideal(1),0; 192 if ( n < nvars(BAS) ) 193 { 194 rest = maxi[n+1..nvars(BAS)]; 192 if ( n < nvars(BAS) ) 193 { 194 rest = maxi[n+1..nvars(BAS)]; 195 195 } 196 196 attrib(rest,"isSB",1); … … 200 200 // which do not contain elements not to be eliminated 201 201 202 //ideal id = interred(i); 203 //## gmg, gendert 9/2008: interred sehr lange z.B. bei Leonard1 in normal, 202 //ideal id = interred(i); 203 //## gmg, gendert 9/2008: interred sehr lange z.B. bei Leonard1 in normal, 204 204 //daher interred ersetzt durch: std nur auf linearpart angewendet 205 205 //Ordnung muss global sein, sonst egal (da Lin affin linear) … … 207 207 //--------------- replace ordering by dp if it is not global ----------------- 208 208 if ( ord_test(BAS) <= 0 ) 209 { 210 intvec V; 209 { 210 intvec V; 211 211 V[n]=0; V=V+1; //weights for dp ordering 212 212 gnirlist[3] = list("dp",V), g32; … … 215 215 ideal i = imap(BAS,i); 216 216 } 217 217 218 218 list Lin = linearpart(i); 219 219 ideal lin = std(Lin[1]); //SB of ideal generated by polys of i … … 231 231 //------------- check for special case of unit ideal and return --------------- 232 232 int check; 233 if( lin[1] == 1 ) 234 { 235 check = 1; 236 } 237 else 233 if( lin[1] == 1 ) 234 { 235 check = 1; 236 } 237 else 238 238 { 239 239 for (ii=1; ii<=size(id); ii++ ) 240 240 { 241 241 if ( id[ii] == 1 ) 242 { 242 { 243 243 check = 1; break; 244 244 } … … 349 349 } 350 350 //-------- direct substitution of variables if possible and if e!=0 ----------- 351 // first find terms lin1 in lin of pure degree 1 in each poly of lin351 // first find terms lin1 in lin of pure degree 1 in each polynomial of lin 352 352 // k1 = pure degree 1 part, i.e. nonzero elts of lin1, renumbered 353 353 // k2 = lin2 (=matrix(lin) - matrix(lin2)), renumbered … … 356 356 /* 357 357 Alte Version mit interred: 358 // Then go to ring newBAS with ordering c,dp(n) and create a matrix with 359 // size(k1) colums and 2 rows, such that if [f1,f2] is a column of M then f1+f2 360 // is one of the polys of lin containing a pure degree 1 part and f1 is this 361 // part interreduce this matrix (i.e. Gauss elimination on linear part, with 358 // Then go to ring newBAS with ordering c,dp(n) and create a matrix with 359 // size(k1) colums and 2 rows, such that if [f1,f2] is a column of M then f1+f2 360 // is one of the polys of lin containing a pure degree 1 part and f1 is this 361 // part interreduce this matrix (i.e. Gauss elimination on linear part, with 362 362 // rest transformed accordingly). 363 363 //Ist jetzt durch direkte Substitution gemacht (schneller!) … … 365 365 //ideal k12 = k1,k2; 366 366 //matrix M = matrix(k12,2,kk); //degree 1 part is now in row 1 367 //M = interred(M); 368 //### interred zu teuer, muss nicht sein. Wenn interred angewendet 367 //M = interred(M); 368 //### interred zu teuer, muss nicht sein. Wenn interred angewendet 369 369 //werden soll, vorher in Ring mit Ordnung (c,dp) wechseln! 370 370 //Abfrage: if( ordstr(BAS) != "c,dp("+string(n)+")" ) … … 378 378 -z ergibt ich auch i[2]-z*i[3] mit option(redThrough) 379 379 statt interred kann man hier auch NF(i,i[3])+i[3] verwenden 380 hier lifert elimpart(i) 2 Substitutionen (x,y) elimpart(interred(i)) 380 hier lifert elimpart(i) 2 Substitutionen (x,y) elimpart(interred(i)) 381 381 aber 3 (x,y,z) 382 382 Da interred oder NF aber die Laenge der polys vergroessern kann, nicht gemacht … … 397 397 //since lin1 != 0 there are candidates for substituting variables 398 398 399 lin2 = lin - lin1; //difference as matrix 399 lin2 = lin - lin1; //difference as matrix 400 400 // rest of lin, part of pure degree 1 substracted from each generator of lin 401 401 … … 410 410 } 411 411 } 412 //Now each !=0 generator of lin2 contains only constant terms or terms of 412 //Now each !=0 generator of lin2 contains only constant terms or terms of 413 413 //degree >= 2, hence lin 2 can never be used for further substitutions 414 414 //We have: lin = ideal(matrix(k1)+matrix(k2)), lin2 415 415 416 ideal kin = matrix(k1)+matrix(k2); 416 ideal kin = matrix(k1)+matrix(k2); 417 417 //kin = polys of lin which contained a pure degree 1 part. 418 418 kin = simplify(kin,2); … … 421 421 int count=1; 422 422 while ( count != 0 ) 423 { 423 { 424 424 count = 0; 425 425 for ( ii=1; ii<=n; ii++ ) //start direct substitution of var(ii) … … 432 432 { 433 433 //we look for the shortest candidate to substitute var(ii) 434 if ( cand == 0 ) 435 { 434 if ( cand == 0 ) 435 { 436 436 cand = kin[kk]; //candidate for substituting var(ii) 437 } 437 } 438 438 else 439 439 { 440 if ( size(kin[kk]) < size(cand) ) 441 { 442 cand = kin[kk]; 440 if ( size(kin[kk]) < size(cand) ) 441 { 442 cand = kin[kk]; 443 443 } 444 444 } 445 445 } 446 } 446 } 447 447 if ( cand != 0 ) 448 448 { 449 449 p = cand/var(ii); 450 kip = cand/p; //normalized poly of kin w.r.t var(ii)450 kip = cand/p; //normalized polynomial of kin w.r.t var(ii) 451 451 eva = eva+var(ii); //var(ii) added to list of elimin. vars 452 452 neva[ii] = 0; 453 sub = sub+kip; //poly defining substituion454 //## gmg: gendert 08/2008, map durch subst ersetzt 453 sub = sub+kip; //polynomial defining substituion 454 //## gmg: gendert 08/2008, map durch subst ersetzt 455 455 //(viel schneller) 456 vip = var(ii) - kip; //poly to be substituted456 vip = var(ii) - kip; //polynomial to be substituted 457 457 lin = subst(lin, var(ii), vip); //subst in rest 458 458 lin = simplify(lin,2); … … 465 465 } 466 466 } 467 467 468 468 lin = kin+lin; 469 469 470 470 for( ii=1; ii<=size(lin); ii++ ) 471 471 { … … 473 473 } 474 474 475 for( ii=1; ii<=n; ii++ ) 475 for( ii=1; ii<=n; ii++ ) 476 476 { 477 477 for( kk=1; kk<=size(eva); kk++ ) -
Singular/LIB/primitiv.lib
r40c648 r3754ca 3 3 // This library is for Singular 1.2 or newer 4 4 5 version="$Id: primitiv.lib,v 1.2 2 2005-05-06 14:39:03 hannesExp $";5 version="$Id: primitiv.lib,v 1.23 2009-04-15 11:18:27 seelisch Exp $"; 6 6 category="Commutative Algebra"; 7 7 info=" … … 67 67 option(redSB); 68 68 69 //-------- Mache so lange Random-Koord.wechsel, bis letztes Poly -------------69 //-------- Mache so lange Random-Koord.wechsel, bis letztes Polynom ------------- 70 70 //--------------- das Minpoly eines primitiven Elements ist : ---------------- 71 71 for (Fehlversuche=0; Fehlversuche<maxtry; Fehlversuche++) { -
Singular/LIB/qhmoduli.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: qhmoduli.lib,v 1.1 7 2009-04-14 12:08:36 SingularExp $";2 version="$Id: qhmoduli.lib,v 1.18 2009-04-15 11:17:11 seelisch Exp $"; 3 3 category="Singularities"; 4 4 info=" … … 472 472 PURPOSE: compute the equations of the isometry group of the ideal I, 473 473 each generator of I is fixed by the stabilizer. 474 ASSUME: I semiquasihomogeneous ideal w rt'w' with an isolated singularity at 0474 ASSUME: I semiquasihomogeneous ideal w.r.t. 'w' with an isolated singularity at 0 475 475 RETURN: list of two rings 'S1', 'S2' 476 476 - 'S1' contians the equations of the stabilizer (ideal 'stabid') @* -
Singular/LIB/random.lib
r40c648 r3754ca 1 1 //(GMG/BM, last modified 22.06.96) 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: random.lib,v 1. 19 2009-04-14 12:00:14 SingularExp $";3 version="$Id: random.lib,v 1.20 2009-04-15 11:18:27 seelisch Exp $"; 4 4 category="General purpose"; 5 5 info=" … … 154 154 proc sparseHomogIdeal (int k, int u, list #) 155 155 "USAGE: sparseid(k,u[,o,p,b]); k,u,o,p,b integers 156 RETURN: ideal having k homogeneous generators, each of random degree in the 157 interval [u,o], p percent of terms in degree d are 0, the remaining 158 have random coefficients in the interval [1,b], (default: o=u, p=75, 156 RETURN: ideal having k homogeneous generators, each of random degree in the 157 interval [u,o], p percent of terms in degree d are 0, the remaining 158 have random coefficients in the interval [1,b], (default: o=u, p=75, 159 159 b=30000) 160 160 EXAMPLE: example sparseid; shows an example … … 172 172 { 173 173 id = maxideal(random(u, o)); // monomial basis of some degree 174 m = sparsemat(size(id),1,p,b); // random coefficients 174 m = sparsemat(size(id),1,p,b); // random coefficients 175 175 i[ii] = (matrix(id)*m)[1,1]; 176 176 } … … 278 278 proc sparsepoly (int u, list #) 279 279 "USAGE: sparsepoly(u[,o,p,b]); u,o,p,b integers 280 RETURN: poly having only terms in degree d, u<=d<=o, p percent of the terms280 RETURN: poly having only terms in degree d, u<=d<=o, p percentage of the terms 281 281 in degree d are 0, the remaining have random coefficients in [1,b), 282 282 (defaults: o=u, p=75, b=30000) -
Singular/LIB/ratgb.lib
r40c648 r3754ca 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: ratgb.lib,v 1.1 5 2009-04-14 12:00:15 SingularExp $";2 version="$Id: ratgb.lib,v 1.16 2009-04-15 11:15:40 seelisch Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 15 15 16 16 PROCEDURES: 17 ratstd(ideal I, int n); compute Groebner basis in Ore localization of the basering w rtfirst n variables17 ratstd(ideal I, int n); compute Groebner basis in Ore localization of the basering w.r.t. first n variables 18 18 19 19 SUPPORT: SpezialForschungsBereich F1301 of the Austrian FWF … … 174 174 va = L3[w][2]; 175 175 for(z=1;z<=nvars(save)-is;z++) 176 { 177 vb[z] = va[is+z]; 176 { 177 vb[z] = va[is+z]; 178 178 } 179 179 tmp3[1] = "a"; … … 223 223 224 224 dbprint(ppl,"// -3- running groebner"); 225 // 3. compute G = GB(I) w rt. the elim. ord. for D225 // 3. compute G = GB(I) w.r.t. the elim. ord. for D 226 226 setring save; 227 227 // ideal CI = imap(@RAT,CI); … … 372 372 setring A; 373 373 IAppel1; 374 def F1 = ratstd(IAppel1,2); 375 lead(pGBid); 374 def F1 = ratstd(IAppel1,2); 375 lead(pGBid); 376 376 setring F1; rGBid; 377 377 } … … 385 385 setring A; 386 386 IAppel2; 387 def F1 = ratstd(IAppel2,2); 388 lead(pGBid); 387 def F1 = ratstd(IAppel2,2); 388 lead(pGBid); 389 389 setring F1; rGBid; 390 390 } … … 398 398 setring A; 399 399 IAppel4; 400 def F1 = ratstd(IAppel4,2); 401 lead(pGBid); 400 def F1 = ratstd(IAppel4,2); 401 lead(pGBid); 402 402 setring F1; rGBid; 403 403 } -
Singular/LIB/realrad.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: realrad.lib,v 1. 7 2008-12-12 11:26:34 SingularExp $";2 version="$Id: realrad.lib,v 1.8 2009-04-15 11:15:06 seelisch Exp $"; 3 3 category="real algebra"; 4 4 info=" … … 180 180 list prim,prepared,nonshape,realu; 181 181 int r;//counter 182 int l;//number of first poly with degree >1 or even182 int l;//number of first polynomial with degree >1 or even 183 183 l=size(j); 184 184 for (r=1;r<=l;r++) … … 436 436 ////////////////////////////////////////////////////////////////////////////// 437 437 proc realpoly(poly f) 438 "USAGE: realpoly(f); a univariate poly f;438 "USAGE: realpoly(f); a univariate polynomial f; 439 439 RETURN: poly f, where f is the real part of the input f 440 440 EXAMPLE: example realpoly; shows an example" … … 542 542 } 543 543 //search for a p in Q[x_n] such that f is pos. sem. definite 544 //if f for every isolating setting S={a_1,...,a_r} holds that544 //if and only if for every isolating setting S={a_1,...,a_r} holds that 545 545 //every f(x_1,..,x_n-1, a_i) is positiv semidefinite 546 546 //recursion of variables … … 795 795 in the Bernstein basis pf lr=(l,r) an a number m in Q 796 796 RETURN:a list erg=erg1,erg2 s.th. erg1=erg1[1],erg[2] and erg1[1] are 797 the bernstein coefficients of P w rtto erg1[2]=(l,m) and erg2[1]797 the bernstein coefficients of P w.r.t. to erg1[2]=(l,m) and erg2[1] 798 798 is one for erg2[2]=(m,r) 799 799 EXAMPLE: Bernsteincoefficients shows no example … … 1046 1046 static proc search_first(ideal j,int start, int i) 1047 1047 "USAGE: searchfirst(j, start, i); 1048 id a reduced groebner basis w rtlex1048 id a reduced groebner basis w.r.t. lex 1049 1049 RETURN: if i=1 then turns the number of the first non univariate entry 1050 1050 with order >1 in its leading term after start -
Singular/LIB/redcgs.lib
r40c648 r3754ca 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: redcgs.lib,v 1. 5 2009-04-07 09:30:44seelisch Exp $";2 version="$Id: redcgs.lib,v 1.6 2009-04-15 11:15:06 seelisch Exp $"; 3 3 category="General purpose"; 4 4 info=" … … 125 125 subset(F,G); If all elements of F belong to the ideal G it returns 1, 126 126 and 0 otherwise. 127 pdivi(f,F); Pseudodivision of a poly f by an ideal F in @R. Returns a127 pdivi(f,F); Pseudodivision of a polynomial f by an ideal F in @R. Returns a 128 128 list (r,q,m) such that m*f=r+sum(q.G). 129 129 facvar(ideal J) Returns all the free-square factors of the elements … … 134 134 redspec(N,W); Given null and non-null conditions depending only on the 135 135 parameters it returns a red-specification. 136 pnormalform(f,N,W); Reduces the poly f wrtto the null condition ideal N and the136 pnormalform(f,N,W); Reduces the polynomial f w.r.t. to the null condition ideal N and the 137 137 non-null condition ideal W (both depending on the parameters). 138 138 buildtree(F); Returns a list T describing a first reduced CGS of the ideal … … 428 428 429 429 430 // pdivi : pseudodivision of a poly f by an ideal F in @R430 // pdivi : pseudodivision of a polynomial f by an ideal F in @R 431 431 // in the ring @R 432 432 // input: … … 442 442 pseudodivision, q is the ideal of quotients, and m is the 443 443 factor by which f is to be multiplied. 444 NOTE: Pseudodivision of a poly f by an ideal F in @R. Returns a444 NOTE: Pseudodivision of a polynomial f by an ideal F in @R. Returns a 445 445 list (r,q,m) such that m*f=r+sum(q.G). 446 446 KEYWORDS: division, reduce … … 609 609 }; 610 610 611 // pnormalform: reduces a polynomial w rta red-spec dividing by N and eliminating factors in W.611 // pnormalform: reduces a polynomial w.r.t. a red-spec dividing by N and eliminating factors in W. 612 612 // called in the ring @R 613 613 // operates in the ring @RP … … 617 617 // ideal W (depends only on the parameters) 618 618 // (N,W) must be a red-spec (depends only on the parameters) 619 // output: poly f2 reduced w rtto the red-spec (N,W)619 // output: poly f2 reduced w.r.t. to the red-spec (N,W) 620 620 // note: for security a lot of work is done. If (N,W) is already a red-spec it should be simplified 621 621 proc pnormalform(poly f, ideal N, ideal W) … … 705 705 N1 is uniquely determined and no prime component of N1 contains none of 706 706 the polynomials in W1. The polynomials in W1 are prime and reduced 707 w rtN1, and are considered non-null on the segment.707 w.r.t. N1, and are considered non-null on the segment. 708 708 L1 contains the list of prime components of N1. 709 709 NOTE: can be called from ring @R but it works in ring @P. … … 921 921 922 922 // redgb: given a minimal bases (gb reducing) it 923 // reduces each polynomial w rtto the others923 // reduces each polynomial w.r.t. to the others 924 924 proc redgb(ideal F, ideal N, ideal W) 925 925 { … … 2485 2485 ideal N; // the summarized N 2486 2486 ideal W; // the summarized W 2487 ideal F; // the summarized poly j (can contain a sheaf instead of2487 ideal F; // the summarized polynomial j (can contain a sheaf instead of 2488 2488 // a single poly) 2489 2489 ideal FF; // the same as F but it can be ideal(0) … … 2989 2989 2990 2990 // reduceR 2991 // reduces the polynomial f w rtN, in the ring @P2991 // reduces the polynomial f w.r.t. N, in the ring @P 2992 2992 proc reduceR(poly f, ideal N) 2993 2993 { … … 3748 3748 3749 3749 // redgb: given a minimal bases (gb reducing) it 3750 // reduces each polynomial w rtto the others3750 // reduces each polynomial w.r.t. to the others 3751 3751 proc postredgb(ideal F) 3752 3752 { -
Singular/LIB/reesclos.lib
r40c648 r3754ca 288 288 289 289 // compute the preimage of [p mod ker(k)] under phi in R(k-1): 290 // as p is an element of im(phi), there is a poly h such that290 // as p is an element of im(phi), there is a polynomial h such that 291 291 // h(vars(R(k-1)) is mapped to [p mod ker (k)], and h can be com- 292 292 // puted as the normal form of a w.r.t <ker(k),Z(n)-phi(k)(n)> in R(k)[Z] -
Singular/LIB/reszeta.lib
r40c648 r3754ca 1 1 ////////////////////////////////////////////////////////////////////////////// 2 version="$Id: reszeta.lib,v 1.1 3 2009-03-30 11:56:03 dreyerExp $";2 version="$Id: reszeta.lib,v 1.14 2009-04-15 11:15:06 seelisch Exp $"; 3 3 category="Commutative Algebra"; 4 4 info=" … … 2394 2394 } 2395 2395 2396 //---the poly is constant2396 //---the polynomial is constant 2397 2397 if(size(v)==1){return(re);} 2398 2398 2399 //---the poly depends only on one variable or is homogeneous2399 //---the polynomial depends only on one variable or is homogeneous 2400 2400 //---in 2 variables 2401 2401 if((size(v)==2)||((size(v)==3)&&(homog(p)))) … … 2421 2421 if(size(v)>2){ERROR("getMinpoly:input depends on more then 2 variables");} 2422 2422 2423 //---the general case, the poly is considered as polyin x an y now2423 //---the general case, the polynomial is considered as polynomial in x an y now 2424 2424 ring T=0,(x,y),lp; 2425 2425 ideal M,N; … … 2459 2459 } 2460 2460 poly L=f*(diff(g,y)-diff(h,x))+h*diff(f,x)-g*diff(f,y); 2461 //---according to the theory f is absolutely irreducible if f2461 //---according to the theory f is absolutely irreducible if and only if 2462 2462 //---L(g,h)=0 has no non-trivial solution g,h 2463 2463 //---(g=diff(f,x),h=diff(f,y) is always a solution) … … 4565 4565 //---Auxilliary procedure for fetchInTree! 4566 4566 //---Assume E prime ideal, Z+E eqidimensional, 4567 //---ht(E)+r=ht(Z+E). Compute P=<p[1],...,p[r]> in Z+E, and poly f,4567 //---ht(E)+r=ht(Z+E). Compute P=<p[1],...,p[r]> in Z+E, and polynomial f, 4568 4568 //---such that radical(Z+E)=radical((E+P):f) 4569 4569 int i,j,d,e; -
Singular/LIB/ring.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: ring.lib,v 1.3 3 2009-04-06 09:17:01seelisch Exp $";2 version="$Id: ring.lib,v 1.34 2009-04-15 11:18:27 seelisch Exp $"; 3 3 category="General purpose"; 4 4 info=" … … 419 419 into the basering. 420 420 If no 2nd argument is present, the names are the same as in R. If, 421 say, f is a poly in R and the 2nd argument is the string \"R\", then f421 say, f is a polynomial in R and the 2nd argument is the string \"R\", then f 422 422 is mapped to f_R etc. 423 423 RETURN: no return value … … 465 465 into the basering by applying imap to all objects of R. 466 466 If no 2nd argument is present, the names are the same as in R. If, 467 say, f is a poly in R and the 3rd argument is the string \"R\", then f467 say, f is a polynomial in R and the 3rd argument is the string \"R\", then f 468 468 is mapped to f_R etc. 469 469 RETURN: no return value … … 511 511 matrix, map) into the basering by mapping the j-th variable of R to 512 512 the j-th generator of the ideal i. If no 3rd argument is present, the 513 names are the same as in R. If, say, f is a poly in R and the 3rd513 names are the same as in R. If, say, f is a polynomial in R and the 3rd 514 514 argument is the string \"R\", then f is mapped to f_R etc. 515 515 RETURN: no return value. -
Singular/LIB/rootsmr.lib
r40c648 r3754ca 1 // $Id: rootsmr.lib,v 1. 5 2009-04-06 12:39:02seelisch Exp $1 // $Id: rootsmr.lib,v 1.6 2009-04-15 11:15:06 seelisch Exp $ 2 2 // E. Tobis 12.Nov.2004, April 2004 3 3 // last change 7. May 2005 (G.-M. Greuel) … … 60 60 //Note on complexity: Let n = no of complex roots of I (= vdim(std(I)). 61 61 //Then the algorithm needs: 62 //1 std(I) and ~n NF computations (of randcharpoly w rtI)62 //1 std(I) and ~n NF computations (of randcharpoly w.r.t. I) 63 63 64 64 if (isparam(I)) { … … 119 119 //Note on complexity: Let n = no of complex roots of I (= vdim(std(I)). 120 120 //Then the algotithm needs: 121 //1 std(I) and (1/2)n*(n+1)^2 ~ 1/2n^3 NF computations (of monomials w rtI)121 //1 std(I) and (1/2)n*(n+1)^2 ~ 1/2n^3 NF computations (of monomials w.r.t. I) 122 122 123 123 if (isparam(I)) { … … 399 399 int N = size(B); 400 400 401 // We first compute the normal form of f w rtI401 // We first compute the normal form of f w.r.t. I 402 402 g = reduce(f,I); 403 403 int n = size(g); //allways n <= N … … 428 428 429 429 static proc isSquare(matrix m) 430 // returns 1 if f m is a square matrix430 // returns 1 if and only if m is a square matrix 431 431 { 432 432 return (nrows(m)==ncols(m)); … … 497 497 proc verify(poly p,ideal B,ideal I) 498 498 "USAGE: verify(p,B,I); p poly, B,I,ideal 499 RETURN: integer: 1 if f the polynomial p splits the points of V(I).499 RETURN: integer: 1 if and only if the polynomial p splits the points of V(I). 500 500 It's used to check the result of randcharpoly 501 501 ASSUME: I is given by a Groebner basis and B is an ordered monomial basis of r/I, -
Singular/LIB/rootsur.lib
r40c648 r3754ca 1 // $Id: rootsur.lib,v 1. 7 2009-04-06 12:39:02seelisch Exp $1 // $Id: rootsur.lib,v 1.8 2009-04-15 11:15:06 seelisch Exp $ 2 2 // E. Tobis 12.Nov.2004, April 2004 3 3 // last change 5. May 2005 (G.-M. Greuel) … … 24 24 whichvariable(p) The only variable of a univariate monomial (or 0) 25 25 varsigns(p) Number of sign changes in a list 26 boundBuFou(p,a,b) Bound for number of real roots of poly p in interval (a,b)27 boundposDes(p) Bound for the number of positive real roots of poly p28 boundDes(p) Bound for the number of real roots of poly p29 allrealst(p) Checks whether all the roots of a poly are real (via Sturm)26 boundBuFou(p,a,b) Bound for number of real roots of polynomial p in interval (a,b) 27 boundposDes(p) Bound for the number of positive real roots of polynomial p 28 boundDes(p) Bound for the number of real roots of polynomial p 29 allrealst(p) Checks whether all the roots of a polynomial are real (via Sturm) 30 30 maxabs(p) A bound for the maximum absolute value of a root of a poly 31 allreal(p) Checks whether all the roots of a poly are real (via St-Ha)32 sturm(p,a,b) Number of real roots of a poly on an interval (via Sturm)31 allreal(p) Checks whether all the roots of a polynomial are real (via St-Ha) 32 sturm(p,a,b) Number of real roots of a polynomial on an interval (via Sturm) 33 33 sturmseq(p) Sturm sequence of a polynomial 34 sturmha(p,a,b) Number of real roots of a poly in (a,b) (via Sturm-Habicht)34 sturmha(p,a,b) Number of real roots of a polynomial in (a,b) (via Sturm-Habicht) 35 35 sturmhaseq(p) A Sturm-Habicht Sequence of a polynomial 36 36 reverse(l) Reverses a list 37 37 nrroots(p) The number of real roots of p 38 isparam(p) Returns 0 if f the polynomial has non-parametric coefficients38 isparam(p) Returns 0 if and only if the polynomial has non-parametric coefficients 39 39 40 40 KEYWORDS: real roots, univariate polynomial … … 384 384 proc allrealst(poly p) 385 385 "USAGE: allrealst(p); poly p 386 RETURN: int: 1 if f all the roots of p are real, 0 otherwise.386 RETURN: int: 1 if and only if all the roots of p are real, 0 otherwise. 387 387 Checks by using Sturm's Theorem whether all the roots of p are real 388 388 ASSUME: p is a univariate polynomial with rational coefficients … … 580 580 proc allreal(poly p) 581 581 "USAGE: allreal(p); 582 RETURN: int: 1 if f all the roots of p are real, 0 otherwise582 RETURN: int: 1 if and only if all the roots of p are real, 0 otherwise 583 583 SEE ALSO: allrealst 584 584 EXAMPLE: example allreal; shows an example" -
Singular/LIB/sing.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: sing.lib,v 1.3 3 2009-02-23 15:12:44 SingularExp $";2 version="$Id: sing.lib,v 1.34 2009-04-15 11:15:56 seelisch Exp $"; 3 3 category="Singularities"; 4 4 info=" … … 11 11 deform(i); infinitesimal deformations of ideal i 12 12 dim_slocus(i); dimension of singular locus of ideal i 13 is_active(f,id); is poly f an active element mod id? (id ideal/module)13 is_active(f,id); is polynomial f an active element mod id? (id ideal/module) 14 14 is_ci(i); is ideal i a complete intersection? 15 15 is_is(i); is ideal i an isolated singularity? 16 is_reg(f,id); is poly f a regular element mod id? (id ideal/module)16 is_reg(f,id); is polynomial f a regular element mod id? (id ideal/module) 17 17 is_regs(i[,id]); are gen's of ideal i regular sequence modulo id? 18 18 locstd(i); SB for local degree ordering without cancelling units … … 977 977 RETURN: a standard basis for a local degree ordering 978 978 NOTE: the procedure homogenizes id w.r.t. a new 1st variable @t@, computes 979 a SB w rt(dp(1),dp) and substitutes @t@ by 1.979 a SB w.r.t. (dp(1),dp) and substitutes @t@ by 1. 980 980 Hence the result is a SB with respect to an ordering which sorts 981 981 first w.r.t. the order and then refines it with dp. This is a -
Singular/LIB/solve.lib
r40c648 r3754ca 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: solve.lib,v 1.3 8 2009-04-06 09:17:01seelisch Exp $";2 version="$Id: solve.lib,v 1.39 2009-04-15 11:24:12 seelisch Exp $"; 3 3 category="Symbolic-numerical solving"; 4 4 info=" … … 12 12 ures_solve(i,[..]); find all roots of 0-dimensional ideal i with resultants 13 13 mp_res_mat(i,[..]); multipolynomial resultant matrix of ideal i 14 interpolate(p,v,d); interpolate poly from evaluation points i and results j14 interpolate(p,v,d); interpolate polynomial from evaluation points i and results j 15 15 fglm_solve(i,[..]); find roots of 0-dim. ideal using FGLM and lex_solve 16 16 lex_solve(i,p,[..]); find roots of reduced lexicographic standard basis … … 274 274 list l = laguerre_solve(f); 275 275 l; 276 // check result, value of substituted poly should be near to zero276 // check result, value of substituted polynomial should be near to zero 277 277 // remember that l contains a list of strings 278 278 // in the case of a different ring … … 479 479 } 480 480 /* 481 * returns a poly without zeroroots481 * returns a polynomial without zeroroots 482 482 */ 483 483 static proc divzero(poly f,int iv) … … 1602 1602 dd++; 1603 1603 // hier Leading-Exponent pruefen??? 1604 // oder ist das Poly immer als letztes in der Liste?!?1604 // oder ist das Polynom immer als letztes in der Liste?!? 1605 1605 // leadexp(ps) 1606 1606 } -
Singular/LIB/standard.lib
r40c648 r3754ca 5 5 //### Todo: im lokalen Fall die Hilbert-Samuel Funktion verwenden 6 6 ////////////////////////////////////////////////////////////////////////////// 7 version="$Id: standard.lib,v 1.10 8 2009-04-14 09:54:52seelisch Exp $";7 version="$Id: standard.lib,v 1.109 2009-04-15 11:15:56 seelisch Exp $"; 8 8 category="Miscellaneous"; 9 9 info=" … … 18 18 fprintf(link,fmt,..) writes formatted string to link 19 19 printf(fmt,...) displays formatted string 20 weightKB(stc,dd,vl) degree dd part of a kbase w rt. some weigths20 weightKB(stc,dd,vl) degree dd part of a kbase w.r.t. some weigths 21 21 qslimgb(i) computes a standard basis with slimgb in a qring 22 22 par2varRing([i]) create a ring making pars to vars, together with i -
Singular/LIB/stratify.lib
r40c648 r3754ca 1 1 // (anne, last modified 23.5.00) last modified: 12.12.2000 2 2 ///////////////////////////////////////////////////////////////////////////// 3 version="$Id: stratify.lib,v 1. 8 2006-07-18 15:22:16 SingularExp $";3 version="$Id: stratify.lib,v 1.9 2009-04-15 11:15:56 seelisch Exp $"; 4 4 category="Invariant theory"; 5 5 info=" … … 706 706 retlist[i][3]=leer; 707 707 i=j-1; 708 // retlist[..][3] is empty if f there was more than one entry to this intvec708 // retlist[..][3] is empty if and only if there was more than one entry to this intvec 709 709 } 710 710 if(j>size(stratlist)) break; -
Singular/LIB/surf.lib
r40c648 r3754ca 1 1 // last modified 21.07.2005, Oliver Wienand 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: surf.lib,v 1.3 3 2009-04-06 12:39:02seelisch Exp $";3 version="$Id: surf.lib,v 1.34 2009-04-15 11:15:56 seelisch Exp $"; 4 4 category="Visualization"; 5 5 info=" … … 32 32 each contains the sums of all degrees in this variable of all monomials 33 33 occuring in the ideal. 34 An entry is zero if f the corresponding variable does not occur in the ideal.34 An entry is zero if and only if the corresponding variable does not occur in the ideal. 35 35 " 36 36 { -
Singular/LIB/teachstd.lib
r40c648 r3754ca 2 2 //GMG, last modified 28.9.01 3 3 /////////////////////////////////////////////////////////////////////////////// 4 version="$Id: teachstd.lib,v 1.1 2 2009-04-14 12:00:15 SingularExp $";4 version="$Id: teachstd.lib,v 1.13 2009-04-15 11:23:27 seelisch Exp $"; 5 5 category="Teaching"; 6 6 info=" … … 19 19 tail(f); tail of f 20 20 sameComponent(f,g); test for same module component of lead(f) and lead(g) 21 leadmonomial(f); leading monomial as poly (also for vectors)22 monomialLcm(m,n); lcm of monomials m and n as poly (also for vectors)21 leadmonomial(f); leading monomial as polynomial (also for vectors) 22 monomialLcm(m,n); lcm of monomials m and n as polynomial (also for vectors) 23 23 spoly(f[,1]); s-polynomial of f [symmetric form] 24 24 minEcart(T,h); element g from T of minimal ecart s.t. LM(g)|LM(h) -
Singular/LIB/tropical.lib
r40c648 r3754ca 1 version="$Id: tropical.lib,v 1.1 5 2009-04-14 12:00:15 SingularExp $";1 version="$Id: tropical.lib,v 1.16 2009-04-15 11:22:37 seelisch Exp $"; 2 2 category="Tropical Geometry"; 3 3 info=" … … 8 8 @* Thomas Markwig, email: keilen@mathematik.uni-kl.de 9 9 10 WARNING: 10 WARNING: 11 11 - tropicalLifting will only work with LINUX and if in addition gfan is installed. 12 @*- drawTropicalCurve and drawTropicalNewtonSubdivision will only display the 13 @* tropical curve with LINUX and if in addition latex and kghostview 12 @*- drawTropicalCurve and drawTropicalNewtonSubdivision will only display the 13 @* tropical curve with LINUX and if in addition latex and kghostview 14 14 @* are installed. 15 @*- For tropicalLifting in the definition of the basering the parameter t 15 @*- For tropicalLifting in the definition of the basering the parameter t 16 16 @* from the Puiseux series field C{{t}} must be defined as a variable, 17 17 @* while for all other procedures it must be defined as a parameter. 18 18 19 19 THEORY: 20 Fix some base field K and a bunch of lattice points v0,...,vm in the integer 21 lattice Z^n, then this defines a toric variety as the closure of (K*)^n in 22 the projective space P^m, where the torus is embedded via the map sending a 20 Fix some base field K and a bunch of lattice points v0,...,vm in the integer 21 lattice Z^n, then this defines a toric variety as the closure of (K*)^n in 22 the projective space P^m, where the torus is embedded via the map sending a 23 23 point x in (K*)^n to the point (x^v0,...,x^vm). 24 The generic hyperplane sections are just the images of the hypersurfaces 24 The generic hyperplane sections are just the images of the hypersurfaces 25 25 in (K*)^n defined by the polynomials f=a0*x^v0+...+am*x^vm=0. Some properties 26 of these hypersurfaces can be studied via tropicalisation. 27 28 For this we suppose that K=C{{t}} is the field of Puiseux series over the 26 of these hypersurfaces can be studied via tropicalisation. 27 28 For this we suppose that K=C{{t}} is the field of Puiseux series over the 29 29 field of complex numbers (or any other field with a valuation into the real 30 numbers). One associates to the hypersurface given by f=a0*x^v0+...+am*x^vm 30 numbers). One associates to the hypersurface given by f=a0*x^v0+...+am*x^vm 31 31 the tropical hypersurface defined by the tropicalisation 32 trop(f)=min{val(a0)+<v0,x>,...,val(am)+<vm,x>}. 32 trop(f)=min{val(a0)+<v0,x>,...,val(am)+<vm,x>}. 33 33 Here, <v,x> denotes the standard scalar product of the integer vector v in Z^n 34 34 with the vector x=(x1,...,xn) of variables, so that trop(f) is a piecewise 35 linear function on R^n. The corner locus of this function (i.e. the points 36 at which the minimum is attained a least twice) is the tropical hypersurface 37 defined by trop(f). 38 The theorem of Newton-Kapranov states that this tropical hypersurface is 39 the same as if one computes pointwise the valuation of the hypersurface 40 given by f. The analogue holds true if one replaces one equation f by an 41 ideal I. A constructive proof of the theorem is given by an adapted 42 version of the Newton-Puiseux algorithm. The hard part is to find a point 43 in the variety over C{{t}} which corresponds to a given point in the 35 linear function on R^n. The corner locus of this function (i.e. the points 36 at which the minimum is attained a least twice) is the tropical hypersurface 37 defined by trop(f). 38 The theorem of Newton-Kapranov states that this tropical hypersurface is 39 the same as if one computes pointwise the valuation of the hypersurface 40 given by f. The analogue holds true if one replaces one equation f by an 41 ideal I. A constructive proof of the theorem is given by an adapted 42 version of the Newton-Puiseux algorithm. The hard part is to find a point 43 in the variety over C{{t}} which corresponds to a given point in the 44 44 tropical variety. 45 45 46 It is the purpose of this library to provide basic means to deal with 47 tropical varieties. Of course we cannot represent the field of Puiseux 48 series over C in its full strength, however, in order to compute interesting 49 examples it will be sufficient to replace the complex numbers C by the 50 rational numbers Q and to replace Puiseux series in t by rational functions 51 in t, i.e. we replace C{{t}} by Q(t), or sometimes even by Q[t]. 46 It is the purpose of this library to provide basic means to deal with 47 tropical varieties. Of course we cannot represent the field of Puiseux 48 series over C in its full strength, however, in order to compute interesting 49 examples it will be sufficient to replace the complex numbers C by the 50 rational numbers Q and to replace Puiseux series in t by rational functions 51 in t, i.e. we replace C{{t}} by Q(t), or sometimes even by Q[t]. 52 52 Note, that this in particular forbids rational exponents for the t's. 53 53 54 Moreover, in Singularno negative exponents of monomials are allowed, so55 that the integer vectors vi will have to have non-negative entries. 56 Shifting all exponents by a fixed integer vector does not change the 57 tropicalisation nor does it change the toric variety. Thus this does not 54 Moreover, in @sc{Singular} no negative exponents of monomials are allowed, so 55 that the integer vectors vi will have to have non-negative entries. 56 Shifting all exponents by a fixed integer vector does not change the 57 tropicalisation nor does it change the toric variety. Thus this does not 58 58 cause any restriction. 59 If, however, for some reason you prefer to work with general vi, then you 60 have to pass right away to the tropicalisation of the equations, whereever 59 If, however, for some reason you prefer to work with general vi, then you 60 have to pass right away to the tropicalisation of the equations, whereever 61 61 this is allowed -- these are linear polynomials where the constant coefficient 62 corresponds to the valuation of the original coefficient and where 63 the non-constant coefficient correspond to the exponents of the monomials, 64 thus they may be rational numbers respectively negative numbers: 62 corresponds to the valuation of the original coefficient and where 63 the non-constant coefficient correspond to the exponents of the monomials, 64 thus they may be rational numbers respectively negative numbers: 65 65 e.g. if f=t^{1/2}*x^{-2}*y^3+2t*x*y+4 then trop(f)=min{1/2-2x+3y,1+x+y,0}. 66 66 67 67 The main tools provided in this library are as follows: 68 @* - tropicalLifting implements the constructive proof of the Theorem of 69 Newton-Kapranov and constructs a point in the variety 70 over C{{t}} corresponding to a given point in the 71 corresponding tropical variety associated to an 72 ideal I; the generators of I have to be in the 73 polynomial ring Q[t,x1,...,xn] considered as a 74 subring of C{{t}}[x1,...,xn]; a solution will be 75 constructed up to given order; note that several 68 @* - tropicalLifting implements the constructive proof of the Theorem of 69 Newton-Kapranov and constructs a point in the variety 70 over C{{t}} corresponding to a given point in the 71 corresponding tropical variety associated to an 72 ideal I; the generators of I have to be in the 73 polynomial ring Q[t,x1,...,xn] considered as a 74 subring of C{{t}}[x1,...,xn]; a solution will be 75 constructed up to given order; note that several 76 76 field extensions of Q might be necessary throughout 77 77 the intermediate computations; the procedures use 78 78 the external program gfan 79 @* - drawTropicalCurve visualises a tropical plane curve either given by a 80 polynomial in Q(t)[x,y] or by a list of linear 81 polynomials of the form ax+by+c with a,b in Z and c 79 @* - drawTropicalCurve visualises a tropical plane curve either given by a 80 polynomial in Q(t)[x,y] or by a list of linear 81 polynomials of the form ax+by+c with a,b in Z and c 82 82 in Q; latex must be installed on your computer 83 @* - tropicalJInvariant computes the tropical j-invaiant of a tropical 83 @* - tropicalJInvariant computes the tropical j-invaiant of a tropical 84 84 elliptic curve 85 85 @* - jInvariant computes the j-invariant of an elliptic curve 86 @* - weierstrassForm computes the Weierstrass form of an elliptic curve 86 @* - weierstrassForm computes the Weierstrass form of an elliptic curve 87 87 88 88 PROCEDURES FOR TROPICAL LIFTING: 89 tropicalLifting computes a point in the tropical variety90 displayTropicalLifting displays the output of tropicalLifting89 tropicalLifting() computes a point in the tropical variety 90 displayTropicalLifting() displays the output of tropicalLifting 91 91 92 92 PROCEDURES FOR DRAWING TROPICAL CURVES: 93 tropicalCurve computes a tropical curve and its Newton subdivision94 drawTropicalCurve produces a post script image of a tropical curve95 drawNewtonSubdivision produces a post script image of a Newton subdivision93 tropicalCurve() computes a tropical curve and its Newton subdivision 94 drawTropicalCurve() produces a post script image of a tropical curve 95 drawNewtonSubdivision() produces a post script image of a Newton subdivision 96 96 97 97 PROCEDURES FOR J-INVARIANTS: 98 tropicalJInvariant computes the tropical j-invariant of a tropical curve99 weierstrassForm computes the Weierstrass form of a cubic polynomial100 jInvariant computes the j-invariant of a cubic polynomial98 tropicalJInvariant() computes the tropical j-invariant of a tropical curve 99 weierstrassForm() computes the Weierstrass form of a cubic polynomial 100 jInvariant() computes the j-invariant of a cubic polynomial 101 101 102 102 GENERAL PROCEDURES: 103 conicWithTangents computes a conic through five points with tangents104 tropicalise computes the tropicalisation of a polynomial105 tropicaliseSet computes the tropicalisation several polynomials106 tInitialForm computes the tInitial form of a polyin Q[t,x_1,...,x_n]107 tInitialIdeal computes the tInitial ideal of an ideal in Q[t,x_1,...,x_n]108 initialForm computes the initial form of poly in Q[x_1,...,x_n]109 initialIdeal computes the initial ideal of an ideal in Q[x_1,...,x_n]103 conicWithTangents() computes a conic through five points with tangents 104 tropicalise() computes the tropicalisation of a polynomial 105 tropicaliseSet() computes the tropicalisation several polynomials 106 tInitialForm() computes the tInitial form of a polynomial in Q[t,x_1,...,x_n] 107 tInitialIdeal() computes the tInitial ideal of an ideal in Q[t,x_1,...,x_n] 108 initialForm() computes the initial form of poly in Q[x_1,...,x_n] 109 initialIdeal() computes the initial ideal of an ideal in Q[x_1,...,x_n] 110 110 111 111 PROCEDURES FOR LATEX CONVERSION: 112 texNumber outputs the texcommand for the leading coefficient of poly113 texPolynomial outputs the texcommand for the polynomial poly114 texMatrix outputs the texcommand for the matrix115 texDrawBasic embeds output of texDrawTropical in a texdraw environment116 texDrawTropical computes the texdraw commands for a tropical curve117 texDrawNewtonSubdivision computes texdraw commands for a Newton subdivision118 texDrawTriangulation computes texdraw commands for a triangulation112 texNumber() outputs the texcommand for the leading coefficient of poly 113 texPolynomial() outputs the texcommand for the polynomial poly 114 texMatrix() outputs the texcommand for the matrix 115 texDrawBasic() embeds output of texDrawTropical in a texdraw environment 116 texDrawTropical() computes the texdraw commands for a tropical curve 117 texDrawNewtonSubdivision() computes texdraw commands for a Newton subdivision 118 texDrawTriangulation() computes texdraw commands for a triangulation 119 119 120 120 AUXILARY PROCEDURES: 121 radicalMemberShip checks radical membership122 tInitialFormPar computes the t-initial form of poly in Q(t)[x_1,...,x_n]123 tInitialFormParMax same as tInitialFormPar, but uses maximum124 solveTInitialFormPar displays approximated solution of a 0-dim ideal125 detropicalise computes the detropicalisation of a linear form126 dualConic computes the dual of an affine plane conic127 parameterSubstitute substitutes in the polythe parameter t by t^N128 tropicalSubst makes certain substitutions in a tropical polynomial129 randomPoly computes a polynomial with random coefficients130 cleanTmp clears /tmp from files created by other procedures121 radicalMemberShip() checks radical membership 122 tInitialFormPar() computes the t-initial form of poly in Q(t)[x_1,...,x_n] 123 tInitialFormParMax() same as tInitialFormPar, but uses maximum 124 solveTInitialFormPar() displays approximated solution of a 0-dim ideal 125 detropicalise() computes the detropicalisation of a linear form 126 dualConic() computes the dual of an affine plane conic 127 parameterSubstitute() substitutes in the polynomial the parameter t by t^N 128 tropicalSubst() makes certain substitutions in a tropical polynomial 129 randomPoly() computes a polynomial with random coefficients 130 cleanTmp() clears /tmp from files created by other procedures 131 131 132 132 KEYWORDS: tropical curves; tropical polynomials … … 155 155 /// - eliminatecomponents 156 156 /// - findzerosAndBasictransform 157 /// - ordermaximalideals 157 /// - ordermaximalideals 158 158 /// - verticesTropicalCurve 159 159 /// - bunchOfLines … … 204 204 205 205 /////////////////////////////////////////////////////////////////////////////// 206 /// Procedures concerned with tropical parametrisation 206 /// Procedures concerned with tropical parametrisation 207 207 /////////////////////////////////////////////////////////////////////////////// 208 208 209 209 proc tropicalLifting (ideal i,intvec w,int ordnung,list #) 210 210 "USAGE: tropicalLifting(i,w,ord[,opt]); i ideal, w intvec, ord int, opt string 211 ASSUME: - i is an ideal in Q[t,x_1,...,x_n], w=(w_0,w_1,...,w_n) 212 and (w_1/w_0,...,w_n/w_0) is in the tropical variety of i, 213 and ord is the order up to which a point in V(i) over Q{{t}} 214 lying over (w_1/w_0,...,w_n/w_0) shall be computed; 211 ASSUME: - i is an ideal in Q[t,x_1,...,x_n], w=(w_0,w_1,...,w_n) 212 and (w_1/w_0,...,w_n/w_0) is in the tropical variety of i, 213 and ord is the order up to which a point in V(i) over Q{{t}} 214 lying over (w_1/w_0,...,w_n/w_0) shall be computed; 215 215 w_0 may NOT be ZERO 216 @* - the basering should not have any parameters on its own 217 and it should have a global monomial ordering, 216 @* - the basering should not have any parameters on its own 217 and it should have a global monomial ordering, 218 218 e.g. ring r=0,(t,x(1..n)),dp; 219 @* - the first variable of the basering will be treated as the 219 @* - the first variable of the basering will be treated as the 220 220 parameter t in the Puiseux series field 221 @* - the optional parameter opt should be one or more strings among 221 @* - the optional parameter opt should be one or more strings among 222 222 the following: 223 223 @* 'isZeroDimensional' : the dimension i is zero (not to be checked); 224 @* 'isPrime' : the ideal is prime over Q(t)[x_1,...,x_n] 224 @* 'isPrime' : the ideal is prime over Q(t)[x_1,...,x_n] 225 225 (not to be checked); 226 @* 'isInTrop' : (w_1/w_0,...,w_n/w_0) is in the tropical 226 @* 'isInTrop' : (w_1/w_0,...,w_n/w_0) is in the tropical 227 227 variety (not to be checked); 228 @* 'oldGfan' : uses gfan version 0.2.1 or less 229 @* 'findAll' : find all solutions of a zero-dimensional 228 @* 'oldGfan' : uses gfan version 0.2.1 or less 229 @* 'findAll' : find all solutions of a zero-dimensional 230 230 ideal over (w_1/w_0,...,w_n/w_0) 231 231 @* 'noAbs' : do NOT use absolute primary decomposition … … 233 233 RETURN: IF THE OPTION 'findAll' WAS NOT SET THEN: 234 234 @* list, containing one lifting of the given point (w_1/w_0,...,w_n/w_0) 235 in the tropical variety of i to a point in V(i) over Puiseux 235 in the tropical variety of i to a point in V(i) over Puiseux 236 236 series field up to the first ord terms; more precisely: 237 237 @* IF THE OPTION 'noAbs' WAS NOT SET, THEN: … … 248 248 @* IF THE OPITON 'findAll' WAS SET, THEN: 249 249 @* list, containing ALL liftings of the given point ((w_1/w_0,...,w_n/w_0) 250 in the tropical variety of i to a point in V(i) over Puiseux 251 series field up to the first ord terms, if the ideal is 250 in the tropical variety of i to a point in V(i) over Puiseux 251 series field up to the first ord terms, if the ideal is 252 252 zero-dimensional over Q{{t}}; 253 more precisely, each entry of the list is a list l as computed 253 more precisely, each entry of the list is a list l as computed 254 254 if 'findAll' was NOT set 255 255 @* WE NOW DESCRIBE THE LIST ENTRIES IF 'findAll' WAS NOT SET: 256 @* - the ring l[1] contains an ideal LIFT, which contains 256 @* - the ring l[1] contains an ideal LIFT, which contains 257 257 a point in V(i) lying over w up to the first ord terms; 258 @* - and if the integer l[2] is N then t has to be replaced by t^1/N 258 @* - and if the integer l[2] is N then t has to be replaced by t^1/N 259 259 in the lift, or alternatively replace t by t^N in the defining ideal 260 @* - if the k+1st entry of l[3] is non-zero, then the kth component of 261 LIFT has to be multiplied t^(-l[3][k]/l[3][1]) AFTER substituting t 260 @* - if the k+1st entry of l[3] is non-zero, then the kth component of 261 LIFT has to be multiplied t^(-l[3][k]/l[3][1]) AFTER substituting t 262 262 by t^1/N 263 @* - unless the option 'noResubst' was set, the kth entry of list l[4] 263 @* - unless the option 'noResubst' was set, the kth entry of list l[4] 264 264 is a string which represents the kth generator of 265 the ideal i where the coordinates have been replaced by the result 265 the ideal i where the coordinates have been replaced by the result 266 266 of the lift; 267 the t-order of the kth entry should in principle be larger than the 267 the t-order of the kth entry should in principle be larger than the 268 268 t-degree of LIFT 269 @* - if the option 'noAbs' was set, then the string in l[5] defines 270 a maximal ideal in the field Q[X(1),...,X(k)], where X(1),...,X(k) 269 @* - if the option 'noAbs' was set, then the string in l[5] defines 270 a maximal ideal in the field Q[X(1),...,X(k)], where X(1),...,X(k) 271 271 are the parameters of the ring in l[1]; 272 the basefield of the ring in l[1] should be considered modulo this 272 the basefield of the ring in l[1] should be considered modulo this 273 273 ideal 274 REMARK: - it is best to use the procedure displayTropicalLifting to 274 REMARK: - it is best to use the procedure displayTropicalLifting to 275 275 display the result 276 276 @* - the option 'findAll' cannot be used if 'noAbs' is set 277 277 @* - if the parameter 'findAll' is set AND the ideal i is zero-dimensional 278 in Q{{t}}[x_1,...,x_n] then ALL points in V(i) lying over w are 278 in Q{{t}}[x_1,...,x_n] then ALL points in V(i) lying over w are 279 279 computed up to order ord; if the ideal is not-zero dimenisonal, then 280 280 only the points in the ideal after cutting down to dimension zero 281 281 will be computed 282 282 @* - the procedure requires that the program GFAN is installed on your 283 computer; if you have GFAN version less than 0.3.0 then you must 283 computer; if you have GFAN version less than 0.3.0 then you must 284 284 use the optional parameter 'oldGfan' 285 @* - the procedure requires the Singularprocedure absPrimdecGTZ to be285 @* - the procedure requires the @sc{Singular} procedure absPrimdecGTZ to be 286 286 present in the package primdec.lib, unless the option 'noAbs' is set; 287 but even if absPrimdecGTZ is present it might be necessary to set 288 the option 'noAbs' in order to avoid the costly absolute primary 289 decomposition; the side effect is that the field extension which is 287 but even if absPrimdecGTZ is present it might be necessary to set 288 the option 'noAbs' in order to avoid the costly absolute primary 289 decomposition; the side effect is that the field extension which is 290 290 computed throughout the recursion might need more than one 291 291 parameter to be described 292 292 @* - since Q is infinite, the procedure finishes with probability one 293 @* - you can call the procedure with Z/pZ as base field instead of Q, 293 @* - you can call the procedure with Z/pZ as base field instead of Q, 294 294 but there are some problems you should be aware of: 295 @* + the Puiseux series field over the algebraic closure of Z/pZ is 296 NOT algebraicall closed, and thus there may not exist a point in 297 V(i) over the Puiseux series field with the desired valuation; 295 @* + the Puiseux series field over the algebraic closure of Z/pZ is 296 NOT algebraicall closed, and thus there may not exist a point in 297 V(i) over the Puiseux series field with the desired valuation; 298 298 so there is no chance that the procedure produced a sensible output 299 - e.g. if i=tx^p-tx-1 300 @* + if the dimension of i over Z/pZ(t) is not zero the process of 301 reduction to zero might not work if the characteristic is small 299 - e.g. if i=tx^p-tx-1 300 @* + if the dimension of i over Z/pZ(t) is not zero the process of 301 reduction to zero might not work if the characteristic is small 302 302 and you are unlucky 303 @* + the option 'noAbs' has to be used since absolute primary 304 decomposition in Singularonly works in characteristic zero305 @* - the basefield should either be Q or Z/pZ for some prime p; 306 field extensions will be computed if necessary; if you need 307 parameters or field extensions from the beginning they should 308 rather be simulated as variables possibly adding their relations to 303 @* + the option 'noAbs' has to be used since absolute primary 304 decomposition in @sc{Singular} only works in characteristic zero 305 @* - the basefield should either be Q or Z/pZ for some prime p; 306 field extensions will be computed if necessary; if you need 307 parameters or field extensions from the beginning they should 308 rather be simulated as variables possibly adding their relations to 309 309 the ideal; the weights for the additional variables should be zero 310 310 EXAMPLE: example tropicalLifting; shows an example" … … 357 357 noabs=1; 358 358 } 359 // this option is not documented -- it prevents the execution of gfan and 360 // just asks for wneu to be inserted -- it can be used to check problems 361 // with the precedure without calling gfan, if wneu is know from previous 359 // this option is not documented -- it prevents the execution of gfan and 360 // just asks for wneu to be inserted -- it can be used to check problems 361 // with the precedure without calling gfan, if wneu is know from previous 362 362 // computations 363 363 if (#[j]=="noGfan") … … 370 370 } 371 371 } 372 // if the basering has characteristic not equal to zero, 372 // if the basering has characteristic not equal to zero, 373 373 // then absolute factorisation 374 374 // is not available, and thus we need the option noAbs … … 384 384 { 385 385 Error("The first coordinate of your input w must be NON-ZERO, since it is a DENOMINATOR!"); 386 } 386 } 387 387 // if w_0<0, then replace w by -w, so that the "denominator" w_0 is positive 388 388 if (w[1]<0) … … 391 391 } 392 392 intvec prew=w; // stores w for later reference 393 // for our computations, w[1] represents the weight of t and this 393 // for our computations, w[1] represents the weight of t and this 394 394 // should be -w_0 !!! 395 395 w[1]=-w[1]; … … 401 401 w[1]=-1; 402 402 } 403 // if some entry of w is positive, we have to make a transformation, 403 // if some entry of w is positive, we have to make a transformation, 404 404 // which moves it to something non-positive 405 405 for (j=2;j<=nvars(basering);j++) … … 427 427 { 428 428 variablen=variablen+var(j); 429 } 429 } 430 430 map GRUNDPHI=BASERING,t,variablen; 431 431 ideal i=GRUNDPHI(i); 432 // compute the initial ideal of i and test if w is in the tropical 433 // variety of i 432 // compute the initial ideal of i and test if w is in the tropical 433 // variety of i 434 434 // - the last entry 1 only means that t is the last variable in the ring 435 435 ideal ini=tInitialIdeal(i,w,1); 436 436 if (isintrop==0) // test if w is in trop(i) only if isInTrop has not been set 437 { 437 { 438 438 poly product=1; 439 439 for (j=1;j<=nvars(basering)-1;j++) … … 453 453 int dd=dim(i); 454 454 setring GRUNDRING; 455 // if the dimension is not zero, we cut the ideal down to dimension zero 455 // if the dimension is not zero, we cut the ideal down to dimension zero 456 456 // and compute the 457 457 // t-initial ideal of the new ideal at the same time 458 458 if(dd!=0) 459 459 { 460 // the procedurce cutdown computes a new ring, in which there lives a 460 // the procedurce cutdown computes a new ring, in which there lives a 461 461 // zero-dimensional 462 // ideal which has been computed by cutting down the input with 462 // ideal which has been computed by cutting down the input with 463 463 // generic linear forms 464 // of the type x_i1-p_1,...,x_id-p_d for some polynomials 465 // p_1,...,p_d not depending 466 // on the variables x_i1,...,x_id; that way we have reduced 464 // of the type x_i1-p_1,...,x_id-p_d for some polynomials 465 // p_1,...,p_d not depending 466 // on the variables x_i1,...,x_id; that way we have reduced 467 467 // the number of variables by dd !!! 468 // the new zero-dimensional ideal is called i, its t-initial 468 // the new zero-dimensional ideal is called i, its t-initial 469 469 // ideal (with respect to 470 // the new w=CUTDOWN[2]) is ini, and finally there is a list 471 // repl in the ring 470 // the new w=CUTDOWN[2]) is ini, and finally there is a list 471 // repl in the ring 472 472 // which contains at the polynomial p_j at position i_j and 473 473 //a zero otherwise; … … 492 492 list liftrings; // will contain the final result 493 493 // if the procedure is called without 'findAll' then it may happen, that no 494 // proper solution is found when dd>0; in that case we have 494 // proper solution is found when dd>0; in that case we have 495 495 // to start all over again; 496 496 // this is controlled by the while-loop … … 508 508 // compute the liftrings by resubstitution 509 509 kk=1; // counts the liftrings 510 int isgood; // test in the non-zerodimensional case 510 int isgood; // test in the non-zerodimensional case 511 511 // if the result has the correct valuation 512 512 for (jj=1;jj<=size(TP);jj++) 513 513 { 514 // the list TP contains as a first entry the ring over which the 515 // tropical parametrisation 514 // the list TP contains as a first entry the ring over which the 515 // tropical parametrisation 516 516 // of the (possibly cutdown ideal) i lives 517 517 def LIFTRING=TP[jj][1]; 518 // if the dimension of i originally was not zero, 518 // if the dimension of i originally was not zero, 519 519 // then we have to fill in the missing 520 520 // parts of the parametrisation 521 521 if (dd!=0) 522 522 { 523 // we need a ring where the parameters X_1,...,X_k 523 // we need a ring where the parameters X_1,...,X_k 524 524 // from LIFTRING are present, 525 525 // and where also the variables of CUTDOWNRING live 526 526 execute("ring REPLACEMENTRING=("+charstr(LIFTRING)+"),("+varstr(CUTDOWNRING)+"),dp;"); 527 list repl=imap(CUTDOWNRING,repl); // get the replacement rules 527 list repl=imap(CUTDOWNRING,repl); // get the replacement rules 528 528 // from CUTDOWNRING 529 ideal PARA=imap(LIFTRING,PARA); // get the zero-dim. parametrisatio 529 ideal PARA=imap(LIFTRING,PARA); // get the zero-dim. parametrisatio 530 530 // from LIFTRING 531 531 // compute the lift of the solution of the original ideal i … … 533 533 k=1; 534 534 // the lift has as many components as GRUNDRING has variables!=t 535 for (j=1;j<=nvars(GRUNDRING)-1;j++) 535 for (j=1;j<=nvars(GRUNDRING)-1;j++) 536 536 { 537 537 // if repl[j]=0, then the corresponding variable was not eliminated 538 if (repl[j]==0) 538 if (repl[j]==0) 539 539 { 540 LIFT[j]=PARA[k]; // thus the lift has been 540 LIFT[j]=PARA[k]; // thus the lift has been 541 541 // computed by tropicalparametrise 542 542 k++; // k checks how many entries of PARA have already been used … … 544 544 else // if repl[j]!=0, repl[j] contains replacement rule for the lift 545 545 { 546 LIFT[j]=repl[j]; // we still have to replace the vars 546 LIFT[j]=repl[j]; // we still have to replace the vars 547 547 // in repl[j] by the corresp. entries of PARA 548 548 // replace all variables!=t (from CUTDOWNRING) 549 for (l=1;l<=nvars(CUTDOWNRING)-1;l++) 549 for (l=1;l<=nvars(CUTDOWNRING)-1;l++) 550 550 { 551 551 // substitute the kth variable by PARA[k] 552 LIFT[j]=subst(LIFT[j],var(l),PARA[l]); 552 LIFT[j]=subst(LIFT[j],var(l),PARA[l]); 553 553 } 554 554 } 555 555 } 556 556 setring LIFTRING; 557 ideal LIFT=imap(REPLACEMENTRING,LIFT); 558 // test now if the LIFT has the correct valuation !!! 559 // note: it may happen, that when resubstituting PARA into 557 ideal LIFT=imap(REPLACEMENTRING,LIFT); 558 // test now if the LIFT has the correct valuation !!! 559 // note: it may happen, that when resubstituting PARA into 560 560 // the replacement rules 561 // there occured some unexpected cancellation; 561 // there occured some unexpected cancellation;