# Singular

#### D.7.4.2 stratify

Procedure from library `stratify.lib` (see stratify_lib).

Usage:
stratify(M,wr,ws,step);
where M is a matrix, wr is an intvec of size ncols(M), ws an intvec of size nrows(M) and step is an integer

Return:
list of lists, each entry of the big list corresponds to one locally closed set and has the following entries:
1) intvec giving the corresponding rs-vector
2) ideal determining the closed set
3) list d of polynomials determining the open set D(d[1]) empty list if there is more than one open set
4-n) lists of polynomials determining open sets which all lead to the same rs-vector

Note:
* ring ordering should be global, i.e. the ring should be a polynomial ring
* the entries of the matrix M are M_ij=delta_i(x_j),
* wr is used to determine what subset of the set of all dx_i is generating AdF^l(A):
if (k-1)*step < wr[i] <= k*step, then dx_i is in the set of generators of AdF^l(A) for all l>=k
* ws is used to determine what subset of the set of all delta_i is generating Z_l(L):
if (k-1)*step <= ws[i] < k*step, then delta_i is in the set of generators of Z_l(A) for l < k
* the entries of wr and ws as well as step should be positive integers
* the filtrations have to be known, no sanity checks concerning the filtrations are performed !!!

Example:
 ```LIB "stratify.lib"; ring r=0,(t(1..3)),dp; matrix M[2][3]=0,t(1),3*t(2),0,0,t(1); intvec wr=1,3,5; intvec ws=2,4; int step=2; stratify(M,wr,ws,step); ==> [1]: ==> [1]: ==> 0,0,0,0 ==> [2]: ==> _[1]=t(2) ==> _[2]=t(1) ==> [3]: ==> [1]: ==> 1 ==> [2]: ==> [1]: ==> 0,1,0,1 ==> [2]: ==> _[1]=t(1) ==> [3]: ==> [1]: ==> t(2) ==> [2]: ==> t(2) ==> [3]: ==> [1]: ==> 1,2,1,2 ==> [2]: ==> _[1]=0 ==> [3]: ==> [1]: ==> t(1) ==> [2]: ==> t(1) ```