[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix C Mathematical background

This chapter introduces some of the mathematical notions and definitions used throughout the manual. It is mostly a collection of the most prominent definitions and properties. For details, please, refer to some articles or text books (see References).


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.1 Standard bases

Definition

Properties

normal form:
ideal membership:
Hilbert function:

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.2 Hilbert function




[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.3 Syzygies and resolutions

Syzygies

The k-th syzygy module is defined inductively to be the module of syzygies of the syzygy module.

Example:
  ring R= 0,(u,v,x,y,z),dp;
  ideal i=ux, vx, uy, vy;
  print(syz(i));
→ -y,0, -v,0, 
→ 0, -y,u, 0, 
→ x, 0, 0, -v,
→ 0, x, 0, u  

Free resolutions


where the columns of the matrix generate . Note, that resolutions need not to be finite (i.e., of finite length). The Hilbert Syzygy Theorem states, that for there exists a ("minimal") resolution of length not exceeding the number of variables.

Example:
  ring R= 0,(u,v,x,y,z),dp;
  ideal I = ux, vx, uy, vy;
  resolution resI = mres(I,0); resI;
→  1      4      4      1      
→ R <--  R <--  R <--  R
→ 
→ 0      1      2      3      
→ 
  // The matrix A_1 is given by
  print(matrix(resI[1]));
→ vy,uy,vx,ux
  // We see that the columns of A_1 generate I.
  // The matrix A_2 is given by
  print(matrix(resI[3]));
→ u, 
→ -v,
→ -x,
→ y  

Betti numbers and regularity

The regularity of is the smallest integer

such that

Example:
  ring R= 0,(u,v,x,y,z),dp;
  ideal I = ux, vx, uy, vy;
  resolution resI = mres(I,0); resI;
→  1      4      4      1      
→ R <--  R <--  R <--  R
→ 
→ 0      1      2      3      
→ 
  // the betti number:
  print(betti(resI), "betti");
→            0     1     2     3
→ ------------------------------
→     0:     1     -     -     -
→     1:     -     4     4     1
→ ------------------------------
→ total:     1     4     4     1
  // the regularity:
  regularity(resI);
→ 2

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.4 Characteristic sets

Example:
  ring R= 0,(x,y,z,u),dp;
  ideal i=-3zu+y2-2x+2,
          -3x2u-4yz-6xz+2y2+3xy,
          -3z2u-xu+y2z+y;
  print(char_series(i));
→ _[1,1],3x2z-y2+2yz,3x2u-3xy-2y2+2yu,
→ x,     -y+2z,      -2y2+3yu-4       

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.5 Gauss-Manin connection

Let us consider as an example . First, we compute a matrix such that is a monodromy matrix of and the Jordan normal form of :

  LIB "gaussman.lib";
  ring R=0,(x,y),ds;
  poly f=x5+x2y2+y5;
  list l=monodromy(f);
  matrix M=jordanmatrix(l[1],l[2],l[3]);
  print(M);
→ 1/2,0,  0,   0,   0,   0,   0,0,    0,    0,    0,   
→ 1,  1/2,0,   0,   0,   0,   0,0,    0,    0,    0,   
→ 0,  0,  7/10,0,   0,   0,   0,0,    0,    0,    0,   
→ 0,  0,  0,   7/10,0,   0,   0,0,    0,    0,    0,   
→ 0,  0,  0,   0,   9/10,0,   0,0,    0,    0,    0,   
→ 0,  0,  0,   0,   0,   9/10,0,0,    0,    0,    0,   
→ 0,  0,  0,   0,   0,   0,   1,0,    0,    0,    0,   
→ 0,  0,  0,   0,   0,   0,   0,11/10,0,    0,    0,   
→ 0,  0,  0,   0,   0,   0,   0,0,    11/10,0,    0,   
→ 0,  0,  0,   0,   0,   0,   0,0,    0,    13/10,0,   
→ 0,  0,  0,   0,   0,   0,   0,0,    0,    0,    13/10

Now, we compute the V-filtration on and the spectrum:

  LIB "gaussman.lib";
  ring R=0,(x,y),ds;
  poly f=x5+x2y2+y5;
  list l=vfilt(f);
  print(l[1]);
→ -1/2,
→ -3/10,
→ -1/10,
→ 0,
→ 1/10,
→ 3/10,
→ 1/2
  print(l[2]);
→ 1,2,2,1,2,2,1
  print(l[3]);
→ [1]:
→    _[1]=gen(11)
→ [2]:
→    _[1]=gen(10)
→    _[2]=gen(6)
→ [3]:
→    _[1]=gen(9)
→    _[2]=gen(4)
→ [4]:
→    _[1]=gen(5)
→ [5]:
→    _[1]=gen(3)
→    _[2]=gen(8)
→ [6]:
→    _[1]=gen(2)
→    _[2]=gen(7)
→ [7]:
→    _[1]=gen(1)
  print(l[4]);
→ y5,
→ y4,
→ y3,
→ y2,
→ xy,
→ y,
→ x4,
→ x3,
→ x2,
→ x,
→ 1

Here l[1] contains the spectral numbers, l[2] the corresponding multiplicities, l[3] a -basis of the V-filtration on in terms of the monomial basis of in l[4].

Let us calculate one specific example, the maximal number of triple points of type of degree seven. This calculation can be done over the rationals. So choose a local ordering on . Here we take the negative degree lexicographical ordering which is denoted ds in SINGULAR:

ring r=0,(x,y,z),ds;
LIB "spectrum.lib";
poly f=x^7+y^7+z^7;
list s1=spectrumnd( f );
s1;
→ [1]:
→    _[1]=-4/7
→    _[2]=-3/7
→    _[3]=-2/7
→    _[4]=-1/7
→    _[5]=0
→    _[6]=1/7
→    _[7]=2/7
→    _[8]=3/7
→    _[9]=4/7
→    _[10]=5/7
→    _[11]=6/7
→    _[12]=1
→    _[13]=8/7
→    _[14]=9/7
→    _[15]=10/7
→    _[16]=11/7
→ [2]:
→    1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1

The command spectrumnd(f) computes the spectrum of and returns a list with six entries: The Milnor number and the number of different spectrum numbers. The other three entries are of type intvec. They contain the numerators, denominators and multiplicities of the spectrum numbers. So has Milnor number 216 and geometrical genus 35. Its spectrum consists of the 16 different rationals

appearing with multiplicities
1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1.

Therefore they have all the same spectrum, which we compute for

poly g=x^3+y^3+z^3;
list s2=spectrumnd(g);
s2;
→ [1]:
→    8
→ [2]:
→    1
→ [3]:
→    4
→ [4]:
→    1,4,5,2
→ [5]:
→    1,3,3,1
→ [6]:
→    1,3,3,1

Evaluating semicontinuity is very easy:

semicont(s1,s2);
→ 18

This tells us that there are at most 18 singularities of type is semiquasihomogeneous (sqh), so we can also apply the stronger form of semicontinuity:

semicontsqh(s1,s2);
→ 17

So in fact a septic has at most 17 triple points of type

Note that spectrumnd(f) works only if has nondegenerate principal part. In fact spectrumnd will detect a degenerate principal part in many cases and print out an error message. However if it is known in advance that has nondegenerate principal part, then the spectrum may be computed much faster using spectrumnd(f,1).


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6 Toric ideals and integer programming


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.1 Toric ideals

The required lattice basis can be computed using the LLL-algorithm (see [Coh93]). For the computation of the saturation, there are various possibilities described in the


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.2 Algorithms

The following algorithms are implemented in toric_lib.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.2.1 The algorithm of Conti and Traverso

The algorithm of Conti and Traverso (see [CoTr91])

Because of the big number of auxiliary variables needed to compute a toric ideal, this algorithm is rather slow in practice. However, it has a special importance in the application to integer programming (see section Integer programming).


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.2.2 The algorithm of Pottier

The algorithm of Pottier (see [Pot94]) starts by computing a lattice


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.2.3 The algorithm of Hosten and Sturmfels

The algorithm of Hosten and Sturmfels (see [HoSt95]) allows to (see [HoSh98]), and the single computations – except from the first one – show to be easy and fast in practice.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.2.4 The algorithm of Di Biase and Urbanke

Like the algorithm of Hosten and Sturmfels, the algorithm of Di Biase and Urbanke (see [DBUr95]) performs up


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.2.5 The algorithm of Bigatti, La Scala and Robbiano

The algorithm of Bigatti, La Scala and Robbiano (see [BLR98]) combines the ideas of the algorithms of Pottier and of Hosten and Sturmfels. The computations are performed on a graded ideal with one auxiliary

There is another algorithm of the authors which tries to parallelize the computations (but which is not implemented in this library).


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.3 The Buchberger algorithm for toric ideals

Toric ideals have a very special structure that allows us to improve the Buchberger algorithm in many respects: They are prime ideals and generated by binomials. Pottier used this fact to describe all operations of the Buchberger algorithm on the ideal generators in terms of vector additions and subtractions. Some other strategies like multiple reduction (see [CoTr91]) or the use of bit vectors to represent the support of a monomial (see [Big97]) may be applied to more general ideals, but show to be especially useful in the toric case.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.4 Integer programming

If no initial solution is known, we are nevertheless able to solve the problem with similar techniques. For this purpose we replace our instance by an extended instance with the matrix used in the Conti-Traverso algorithm. Indeed, the Conti-Traverso algorithm offers the possibility to verify solvability of a given instance and to find an initial solution in the case of existence (but none of the other algorithms does!). Details can be found in [CoTr91] and [The99].

An implementation of the above algorithm and some examples can be found in intprog_lib.

Classical methods for solving IP instances like Branch-and-Bound methods seem to be faster in general than the methods using toric ideals. But the latter have one great advantage: If one wants to solve various instances that differ only by the vector , one has to perform steps (1) and (2) above only once. As the running time of step (3) is very short, solving all the instances is not much harder than solving one single instance.

For a detailed discussion see [The99].


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6.5 Relevant References


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.7 References

The Centre for Computer Algebra Kaiserslautern publishes a series of preprints which are electronically available at http://www.mathematik.uni-kl.de/~zca/Reports_on_ca. Other sources to check are http://symbolicnet.mcs.kent.edu/, http://www.can.nl/,... and the following list of books:

Text books on computational algebraic geometry

Descriptions of algorithms


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated on a sunny day using texi2html.