# Singular

#### D.2.4.12 ConsLevelsToLevels

Procedure from library `grobcov.lib` (see grobcov_lib).

Usage:
ConsLevelsToLevels(list L);
The input list L must be the output of the call to the routine ConsLevels of a constructible set: L=[a1,a2,..,ak], where the a's are the closures of the levels, determined by ConsLevels. ConsLevelsToLevels selects the levels of the constructible set. To be called in a ring Q[a][x] or a ring Q[a]. But the ideals can contain only the parameters in Q[a].

Return:
The levels of the constructible set:
Lc=[ [1,[a1,a2]],[3,[a3,a4]],..,[2l-1,[a_{2l-1},a_{2l}]] ] the list of Levels of S

Example:
 ```LIB "grobcov.lib"; if(defined(R)){kill R;} ring R=0,(x,y,z),lp; short=0; ideal P1=(x^2+y^2+z^2-1); ideal Q1=z,x^2+y^2-1; ideal P2=y,x^2+z^2-1; ideal Q2=z*(z+1),y,x*(x+1); ideal P3=x; ideal Q3=5*z-4,5*y-3,x; list Cr1=Crep(P1,Q1); list Cr2=Crep(P2,Q2); list Cr3=Crep(P3,Q3); list L=list(Cr1,Cr2,Cr3); L; ==> [1]: ==> [1]: ==> _[1]=x^2+y^2+z^2-1 ==> [2]: ==> _[1]=z ==> _[2]=x^2+y^2-1 ==> [2]: ==> [1]: ==> _[1]=y ==> _[2]=x^2+z^2-1 ==> [2]: ==> _[1]=z^2+z ==> _[2]=y ==> _[3]=x+z+1 ==> [3]: ==> [1]: ==> _[1]=x ==> [2]: ==> _[1]=5*z-4 ==> _[2]=5*y-3 ==> _[3]=x def LL=ConsLevels(L); LL; ==> [1]: ==> _[1]=x^3+x*y^2+x*z^2-x ==> [2]: ==> _[1]=z ==> _[2]=x^2+y^2-1 ==> [3]: ==> _[1]=z ==> _[2]=x+y^2-1 ==> _[3]=x*y ==> _[4]=x^2-x ==> [4]: ==> _[1]=1 ConsLevelsToLevels(LL); ==> [1]: ==> [1]: ==> 1 ==> [2]: ==> [1]: ==> _[1]=x^3+x*y^2+x*z^2-x ==> [2]: ==> _[1]=z ==> _[2]=x^2+y^2-1 ==> [2]: ==> [1]: ==> 3 ==> [2]: ==> [1]: ==> _[1]=z ==> _[2]=x+y^2-1 ==> _[3]=x*y ==> _[4]=x^2-x ==> [2]: ==> _[1]=1 ```