Singular

A.3.9 Primary decomposition

There are two algorithms implemented in SINGULAR which provide primary decomposition: `primdecGTZ`, based on Gianni/Trager/Zacharias (written by Gerhard Pfister) and `primdecSY`, based on Shimoyama/Yokoyama (written by Wolfram Decker and Hans Schoenemann).

The result of `primdecGTZ` and `primdecSY` is returned as a list of pairs of ideals, where the second ideal is the prime ideal and the first ideal the corresponding primary ideal.

 ``` LIB "primdec.lib"; ring r = 0,(a,b,c,d,e,f),dp; ideal i= f3, ef2, e2f, bcf-adf, de+cf, be+af, e3; primdecGTZ(i); ==> [1]: ==> [1]: ==> _[1]=f ==> _[2]=e ==> [2]: ==> _[1]=f ==> _[2]=e ==> [2]: ==> [1]: ==> _[1]=f3 ==> _[2]=ef2 ==> _[3]=e2f ==> _[4]=e3 ==> _[5]=de+cf ==> _[6]=be+af ==> _[7]=-bc+ad ==> [2]: ==> _[1]=f ==> _[2]=e ==> _[3]=-bc+ad // We consider now the ideal J of the base space of the // miniversal deformation of the cone over the rational // normal curve computed in section *8* and compute // its primary decomposition. ring R = 0,(A,B,C,D),dp; ideal J = CD, BD+D2, AD; primdecGTZ(J); ==> [1]: ==> [1]: ==> _[1]=D ==> [2]: ==> _[1]=D ==> [2]: ==> [1]: ==> _[1]=C ==> _[2]=B+D ==> _[3]=A ==> [2]: ==> _[1]=C ==> _[2]=B+D ==> _[3]=A // We see that there are two components which are both // prime, even linear subspaces, one 3-dimensional, // the other 1-dimensional. // (This is Pinkhams example and was the first known // surface singularity with two components of // different dimensions) // // Let us now produce an embedded component in the last // example, compute the minimal associated primes and // the radical. We use the Characteristic set methods // from primdec.lib. J = intersect(J,maxideal(3)); // The following shows that the maximal ideal defines an embedded // (prime) component. primdecSY(J); ==> [1]: ==> [1]: ==> _[1]=D ==> [2]: ==> _[1]=D ==> [2]: ==> [1]: ==> _[1]=C ==> _[2]=B+D ==> _[3]=A ==> [2]: ==> _[1]=C ==> _[2]=B+D ==> _[3]=A ==> [3]: ==> [1]: ==> _[1]=D2 ==> _[2]=C2 ==> _[3]=B2 ==> _[4]=AB ==> _[5]=A2 ==> _[6]=BCD ==> _[7]=ACD ==> [2]: ==> _[1]=D ==> _[2]=C ==> _[3]=B ==> _[4]=A minAssChar(J); ==> [1]: ==> _[1]=C ==> _[2]=B+D ==> _[3]=A ==> [2]: ==> _[1]=D radical(J); ==> _[1]=CD ==> _[2]=BD+D2 ==> _[3]=AD ```