//SINGULAR Procedure4.6.3 proc prepareQuotientring(ideal i) "USAGE: prepareQuotientring(i); i standard basis RETURN: a list l of two strings: l[1] to define K[x\u,u ], u a maximal independent set for i l[2] to define K(u)[x\u ], u a maximal independent set for i both rings with lexicographical ordering EXAMPLE: example prepareQuotientring; shows an example " { string va,pa; //v describes the independent set u: var(j) is in //u iff v[j]!=0 intvec v=indepSet(i); int k; for(k=1;k<=size(v);k++) { if(v[k]!=0) { pa=pa+"var("+string(k)+"),"; } else { va=va+"var("+string(k)+"),"; } } pa=pa[1..size(pa)-1]; va=va[1..size(va)-1]; string newring=" ring nring=("+charstr(basering)+"),("+va+","+pa+"),lp;"; string quotring=" ring quring=("+charstr(basering)+","+pa+"),("+va+"),lp;"; return(newring,quotring); } ring s=(0,x),(a,b,c,d,e,f,g),dp; ideal i=x*b*c,d^2,f-g; i=std(i); def Q=basering; list l= prepareQuotientring(i); l; execute (l[1]); basering; execute (l[2]); basering; setring Q;